/home/techb158/balavpn.abdallabala.com/src/lib
Edit: /home/techb158/balavpn.abdallabala.com/src/lib/metrics.js (1061B)
const counters = { requests: 0, errors: 0, methods: {}, routes: {} };
const timings = [];
function trackRequest(method, pathname, statusCode, durationMs) {
counters.requests++;
counters.methods[method] = (counters.methods[method] || 0) + 1;
const route = pathname.replace(/\/[a-z0-9]{20,}/gi, "/:id").replace(/\/[a-z0-9-]{20,}/gi, "/:id");
counters.routes[route] = (counters.routes[route] || 0) + 1;
if (statusCode >= 400) counters.errors++;
timings.push({ method, pathname, statusCode, durationMs, timestamp: Date.now() });
if (timings.length > 1000) timings.splice(0, timings.length - 1000);
}
function getMetrics() {
const avgDuration = timings.length
? Math.round(timings.reduce((s, t) => s + t.durationMs, 0) / timings.length)
: 0;
return {
uptime: process.uptime(),
totalRequests: counters.requests,
totalErrors: counters.errors,
avgDurationMs: avgDuration,
methods: counters.methods,
routes: counters.routes,
recentTimings: timings.slice(-20)
};
}
module.exports = { trackRequest, getMetrics };