diff --git a/server/controllers/diagnosticController.js b/server/controllers/diagnosticController.js index a4ade8f84..585684211 100755 --- a/server/controllers/diagnosticController.js +++ b/server/controllers/diagnosticController.js @@ -1,19 +1,48 @@ import { asyncHandler } from "../utils/errorUtils.js"; const SERVICE_NAME = "diagnosticController"; - -const obs = new PerformanceObserver((items) => { - const entry = items.getEntries()[0]; - performance.clearMarks(); -}); -obs.observe({ entryTypes: ["measure"] }); +/** + * Diagnostic Controller + * + * Handles system diagnostic and monitoring requests including system statistics, + * performance metrics, and health checks. + * + * @class DiagnosticController + * @description Manages system diagnostics and performance monitoring + */ class DiagnosticController { + /** + * Creates an instance of DiagnosticController. + * + * @param {Object} dependencies - The dependencies required by the controller + * @param {Object} dependencies.diagnosticService - Service for system diagnostics and monitoring + */ constructor({ diagnosticService }) { this.diagnosticService = diagnosticService; } + /** + * Retrieves comprehensive system statistics and performance metrics. + * + * @async + * @function getSystemStats + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @returns {Promise} Success response with system diagnostics data + * @description Returns system performance metrics, memory usage, CPU statistics, + * and other diagnostic information useful for monitoring system health. + * @example + * GET /diagnostics/stats + * // Response includes: + * // - Memory usage (heap, external, arrayBuffers) + * // - CPU usage statistics + * // - System uptime + * // - Performance metrics + * // - Database connection status + * // - Active processes/connections + */ getSystemStats = asyncHandler( - async (req, res, next) => { + async (req, res) => { const diagnostics = await this.diagnosticService.getSystemStats(); return res.success({ msg: "OK", @@ -24,4 +53,5 @@ class DiagnosticController { "getSystemStats" ); } + export default DiagnosticController; diff --git a/server/service/business/diagnosticService.js b/server/service/business/diagnosticService.js index 68b6565cd..5c37cba14 100644 --- a/server/service/business/diagnosticService.js +++ b/server/service/business/diagnosticService.js @@ -5,7 +5,18 @@ const SERVICE_NAME = "diagnosticService"; class DiagnosticService { static SERVICE_NAME = SERVICE_NAME; - constructor() {} + constructor() { + /** + * Performance Observer for monitoring system performance metrics. + * Clears performance marks after each measurement to prevent memory leaks. + */ + const obs = new PerformanceObserver((items) => { + // Get the first entry but we don't need to store it + items.getEntries()[0]; + performance.clearMarks(); + }); + obs.observe({ entryTypes: ["measure"] }); + } getCPUUsage = async () => { const startUsage = process.cpuUsage();