import { magenta } from 'colors'; import { Request, Response } from 'express'; import SocketIO from 'socket.io'; import { Client } from './Client'; 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'; const columns = ['USERNAME', 'ACTION', 'TIME']; interface SocketPair { socketId: string; username: string; } interface CSVStore { USERNAME: string; ACTION: string; TIME: string; } export function handleStatsView(res: Response) { const results: CSVStore[] = []; fs.createReadStream(statsCSVFilename) .pipe(csv(columns)) .on('data', (data: any) => results.push(data)) .on('end', () => { console.log(results); }); // let newRow = stringify([{ USERNAME: 'hi', ACTION: 'hi', TIME: 'hi' }], { header: true, columns: columns }); // console.log(newRow); let current = getCurrentConnections(); res.json({ message: 'welcome to stats', currentConnections: current.length, socketMap: current, }); } 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 -> '); } } 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()}`)); } } function getCurrentConnections(): SocketPair[] { let socketPairs: SocketPair[] = []; for (let [key, value] of WebSocket.socketMap) { if (!key.disconnected) { socketPairs.push({ socketId: key.id, username: value.split(' ')[0] }); } } console.log(socketPairs); return socketPairs; } }