[grade=B] DC-076: WebSocket server for real-time dashboard updates
New /api/v1/ws endpoint providing bidirectional WebSocket alongside the existing SSE (/api/v1/events/stream). Shares the same event broadcasts (resource alerts, health status, incidents, updates, dependencies, auto-restart, drift, SSL, DNS propagation). Features: - Auth-gated in production (session cookie or token query param) - Subscribe/unsubscribe event filtering - Ping/pong heartbeat + dead connection sweep - Clean shutdown removes all EventEmitter listeners - Exact path matching (no broad includes) - Fixed unsubscribe semantics (empty set = receive nothing) 8 WS tests, 1560 total tests pass.
This commit is contained in:
@@ -68,6 +68,32 @@ process.on('uncaughtException', (error) => {
|
||||
attachExecWS(server, log, authManager);
|
||||
log.info('server', 'WebSocket exec handler attached (auth enforced)');
|
||||
|
||||
// DC-076: Attach dashboard WebSocket for real-time updates
|
||||
try {
|
||||
const createDashboardWS = require('./src/websocket/dashboard-ws');
|
||||
const resourceMonitor = require('./src/managers/resource-monitor');
|
||||
const healthChecker = require('./src/monitoring/health-checker');
|
||||
const updateManager = require('./src/managers/update-manager');
|
||||
const dependencyManager = require('./src/managers/dependency-manager');
|
||||
const autoRestartManager = require('./src/managers/auto-restart-manager');
|
||||
const configDriftDetector = require('./src/managers/config-drift-detector');
|
||||
const sslMonitor = require('./src/monitoring/ssl-monitor');
|
||||
|
||||
createDashboardWS(server, {
|
||||
resourceMonitor,
|
||||
healthChecker,
|
||||
updateManager,
|
||||
dependencyManager,
|
||||
autoRestartManager,
|
||||
driftDetector: configDriftDetector,
|
||||
sslMonitor,
|
||||
log,
|
||||
});
|
||||
log.info('server', 'Dashboard WebSocket attached at /api/v1/ws');
|
||||
} catch (err) {
|
||||
log.error('server', 'Dashboard WebSocket failed to attach', { error: err.message });
|
||||
}
|
||||
|
||||
// Start feature modules
|
||||
const resourceMonitor = require('./src/managers/resource-monitor');
|
||||
const backupManager = require('./src/utilities/backup-manager');
|
||||
|
||||
Reference in New Issue
Block a user