restifyx.js
Version:
Advanced API endpoint handler system with automatic documentation
68 lines • 3.37 kB
JavaScript
;
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