UNPKG

restifyx.js

Version:

Advanced API endpoint handler system with automatic documentation

68 lines 3.37 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.performanceMonitor = performanceMonitor; exports.monitorSystemResources = monitorSystemResources; const perf_hooks_1 = require("perf_hooks"); const logger_1 = require("./logger"); const os_1 = __importDefault(require("os")); function performanceMonitor() { return (req, res, next) => { const logger = (0, logger_1.getLogger)(); const startTime = perf_hooks_1.performance.now(); const startMemory = process.memoryUsage(); const startCpuUsage = process.cpuUsage(); const originalEnd = res.end; res.end = function (chunk, encoding, cb) { const endTime = perf_hooks_1.performance.now(); const endMemory = process.memoryUsage(); const endCpuUsage = process.cpuUsage(startCpuUsage); const duration = (endTime - startTime).toFixed(2); const memoryDiff = { rss: formatBytes(endMemory.rss - startMemory.rss), heapTotal: formatBytes(endMemory.heapTotal - startMemory.heapTotal), heapUsed: formatBytes(endMemory.heapUsed - startMemory.heapUsed), external: formatBytes(endMemory.external - startMemory.external), }; const cpuDiff = { user: `${(endCpuUsage.user / 1000).toFixed(2)}ms`, system: `${(endCpuUsage.system / 1000).toFixed(2)}ms`, }; logger.debug(`[Performance] ${req.method} ${req.originalUrl} | ${duration}ms | Memory: ${JSON.stringify(memoryDiff)} | CPU: ${JSON.stringify(cpuDiff)}`); return originalEnd.call(this, chunk, encoding, cb); }; next(); }; } function monitorSystemResources(interval = 300000) { const logger = (0, logger_1.getLogger)(); return setInterval(() => { const memoryUsage = process.memoryUsage(); const cpuUsage = os_1.default.loadavg(); const freeMem = os_1.default.freemem(); const totalMem = os_1.default.totalmem(); const uptime = os_1.default.uptime(); logger.info(`[System] Memory: ${formatBytes(memoryUsage.rss)} (RSS), ${formatBytes(memoryUsage.heapUsed)}/${formatBytes(memoryUsage.heapTotal)} (Heap), ${formatBytes(freeMem)}/${formatBytes(totalMem)} (System)`); logger.info(`[System] CPU Load: ${cpuUsage[0].toFixed(2)} (1m), ${cpuUsage[1].toFixed(2)} (5m), ${cpuUsage[2].toFixed(2)} (15m)`); logger.info(`[System] Uptime: ${formatUptime(uptime)}`); }, interval); } function formatBytes(bytes) { if (bytes === 0) return "0 Bytes"; const k = 1024; const sizes = ["Bytes", "KB", "MB", "GB", "TB"]; const i = Math.floor(Math.log(Math.abs(bytes)) / Math.log(k)); const sign = bytes < 0 ? "-" : ""; return sign + Number.parseFloat((Math.abs(bytes) / Math.pow(k, i)).toFixed(2)) + " " + sizes[i]; } function formatUptime(seconds) { const days = Math.floor(seconds / 86400); const hours = Math.floor((seconds % 86400) / 3600); const minutes = Math.floor((seconds % 3600) / 60); const secs = Math.floor(seconds % 60); return `${days}d ${hours}h ${minutes}m ${secs}s`; } //# sourceMappingURL=performance.js.map