diff --git a/src/api/admin.ts b/src/api/admin.ts index bd201f5..866f992 100644 --- a/src/api/admin.ts +++ b/src/api/admin.ts @@ -16,9 +16,18 @@ */ import { Router } from 'express' +import { WebsocketApi } from '../websocket' -export const createAdminRouter = () => { +export const createAdminRouter = ({ websocket }: { + websocket: WebsocketApi +}) => { const router = Router() + router.get('/status', (_, res) => { + res.json({ + websocketClients: websocket.countConnections() + }) + }) + return router } diff --git a/src/api/index.ts b/src/api/index.ts index ca2d531..7c3fdd2 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -62,7 +62,7 @@ export const createApi = ({ database, websocket, connectedDevicesManager }: { res.sendStatus(401) } }, - createAdminRouter() + createAdminRouter({ websocket }) ) return app diff --git a/src/websocket/index.ts b/src/websocket/index.ts index a851880..df27d69 100644 --- a/src/websocket/index.ts +++ b/src/websocket/index.ts @@ -27,9 +27,13 @@ export const createWebsocketHandler = ({ connectedDevicesManager, database }: { websocketServer: io.Server websocketApi: WebsocketApi } => { + let socketCounter = 0 const server = io() server.on('connection', (socket) => { + socketCounter++ + socket.on('disconnect', () => socketCounter--) + socket.on('devicelogin', (deviceAuthToken: any, ack: any) => { socket.leaveAll() @@ -89,7 +93,8 @@ export const createWebsocketHandler = ({ connectedDevicesManager, database }: { server .to(deviceByAuthTokenRoom(deviceAuthToken)) .emit('sign out') - } + }, + countConnections: () => socketCounter } return { @@ -101,4 +106,5 @@ export const createWebsocketHandler = ({ connectedDevicesManager, database }: { export interface WebsocketApi { triggerSyncByDeviceAuthToken: (params: {deviceAuthToken: string, isImportant: boolean}) => void triggerLogoutByDeviceAuthToken: (params: {deviceAuthToken: string}) => void + countConnections: () => number }