aboutsummaryrefslogtreecommitdiff
path: root/src/server/DashStats.ts
diff options
context:
space:
mode:
authorMohammad Amoush <51237606+jameshu111@users.noreply.github.com>2023-03-18 16:56:13 -0400
committerMohammad Amoush <51237606+jameshu111@users.noreply.github.com>2023-03-18 16:56:13 -0400
commitd51a57e1d0823fc08a90b73d427ab5e35b72422f (patch)
treeef9f03ab6eef595567f800747d280a033dc69980 /src/server/DashStats.ts
parent0f3f5fa7f63dddbfbf095f65b05f89cf27cbc6cf (diff)
Add operations counter
Diffstat (limited to 'src/server/DashStats.ts')
-rw-r--r--src/server/DashStats.ts119
1 files changed, 100 insertions, 19 deletions
diff --git a/src/server/DashStats.ts b/src/server/DashStats.ts
index 13ee61b3a..a10b28608 100644
--- a/src/server/DashStats.ts
+++ b/src/server/DashStats.ts
@@ -1,11 +1,11 @@
-import { magenta } from 'colors';
+import { cyan, magenta } from 'colors';
import { Request, Response } from 'express';
+import { Server } from 'http';
import SocketIO from 'socket.io';
-import { Client } from './Client';
+import { timeMap } from './ApiManagers/UserManager';
import { WebSocket } from './websocket';
const fs = require('fs');
const csv = require('csv-parser');
-import { stringify } from 'csv-stringify/sync';
export namespace DashStats {
const statsCSVFilename = './src/server/stats/userLoginStats.csv';
@@ -14,6 +14,8 @@ export namespace DashStats {
interface SocketPair {
socketId: string;
username: string;
+ time: string;
+ operations: number;
}
interface CSVStore {
@@ -22,49 +24,128 @@ export namespace DashStats {
TIME: string;
}
- export function handleStatsView(res: Response) {
+ enum ServerTraffic {
+ NOT_BUSY,
+ BUSY,
+ VERY_BUSY
+ }
+
+ const BUSY_SERVER_BOUND = 2;
+ const VERY_BUSY_SERVER_BOUND = 3;
+
+ const serverTrafficMessages = [
+ "Not Busy",
+ "Busy",
+ "Very Busy"
+ ]
+
+ export function handleStats(res: Response) {
+ let current = getCurrentConnections();
const results: CSVStore[] = [];
- fs.createReadStream(statsCSVFilename)
- .pipe(csv(columns))
- .on('data', (data: any) => results.push(data))
- .on('end', () => {
- console.log(results);
+ res.json({
+ message: 'welcome to stats',
+ currentConnections: current.length,
+ socketMap: current,
});
- // let newRow = stringify([{ USERNAME: 'hi', ACTION: 'hi', TIME: 'hi' }], { header: true, columns: columns });
- // console.log(newRow);
+ // fs.createReadStream(statsCSVFilename)
+ // .pipe(csv())
+ // .on('data', (data: any) => results.push(data))
+ // .on('end', () => {
+ // console.log(results);
+ // res.json({
+ // message: 'welcome to stats',
+ // currentConnections: current.length,
+ // socketMap: current,
+ // results: results,
+ // });
+ // });
+ }
+ export function handleStatsView(res: Response) {
let current = getCurrentConnections();
- res.json({
- message: 'welcome to stats',
- currentConnections: current.length,
- socketMap: current,
+
+ let connectedUsers = current.map((socketPair) => {
+ return socketPair.time + " - " + socketPair.username + " Operations: " + socketPair.operations;
+ })
+
+ let serverTraffic = ServerTraffic.NOT_BUSY;
+ if(current.length < BUSY_SERVER_BOUND) {
+ serverTraffic = ServerTraffic.NOT_BUSY;
+ } else if(current.length >= BUSY_SERVER_BOUND && current.length < VERY_BUSY_SERVER_BOUND) {
+ serverTraffic = ServerTraffic.BUSY;
+ } else {
+ serverTraffic = ServerTraffic.VERY_BUSY;
+ }
+
+ res.render("stats.pug", {
+ title: "Dash Stats",
+ numConnections: current.length,
+ serverTraffic: serverTraffic,
+ serverTrafficMessage : serverTrafficMessages[serverTraffic],
+ connectedUsers: connectedUsers
});
}
export function logUserLogin(username: string | undefined, socket: SocketIO.Socket) {
if (!(username === undefined)) {
let currentDate = new Date();
- console.log(magenta(`User ${username.split(' ')[0]} logged in at: ${currentDate.toISOString()}`));
- console.log('stringify -> ');
+ // console.log(magenta(`User ${username.split(' ')[0]} logged in at: ${currentDate.toISOString()}`));
+
+ let toWrite: CSVStore = {
+ USERNAME : username,
+ ACTION : "loggedIn",
+ TIME : currentDate.toISOString()
+ }
+
+ let statsFile = fs.createWriteStream(statsCSVFilename, { flags: "a"});
+ statsFile.write(convertToCSV(toWrite));
+ statsFile.end();
+ console.log(cyan(convertToCSV(toWrite)));
}
}
export function logUserLogout(username: string | undefined, socket: SocketIO.Socket) {
if (!(username === undefined)) {
let currentDate = new Date();
- console.log(magenta(`User ${username.split(' ')[0]} logged out at: ${currentDate.toISOString()}`));
+ // console.log(magenta(`User ${username.split(' ')[0]} logged out at: ${currentDate.toISOString()}`));
+
+ let statsFile = fs.createWriteStream(statsCSVFilename, { flags: "a"});
+ let toWrite: CSVStore = {
+ USERNAME : username,
+ ACTION : "loggedOut",
+ TIME : currentDate.toISOString()
+ }
+ statsFile.write(convertToCSV(toWrite));
+ statsFile.end();
}
}
function getCurrentConnections(): SocketPair[] {
+ console.log("timeMap: " + timeMap);
+ console.log("clients:" + WebSocket.clients);
let socketPairs: SocketPair[] = [];
for (let [key, value] of WebSocket.socketMap) {
+ let username = value.split(' ')[0];
+ let connectionTime = new Date(timeMap[username]);
+
+ let connectionTimeString = connectionTime.toLocaleDateString() + " " + connectionTime.toLocaleTimeString();
+
if (!key.disconnected) {
- socketPairs.push({ socketId: key.id, username: value.split(' ')[0] });
+ socketPairs.push({
+ socketId: key.id,
+ username: username,
+ time: connectionTimeString.includes("Invalid Date") ? "" : connectionTimeString,
+ operations : WebSocket.userOperations.get(username) ? WebSocket.userOperations.get(username)! : 0,
+ });
}
}
console.log(socketPairs);
+ // console.log([...WebSocket.clients.entries()]);
return socketPairs;
}
+
+ function convertToCSV(dataObject: CSVStore): string {
+ return `${dataObject.USERNAME},${dataObject.ACTION},${dataObject.TIME}\n`;
+ }
}