/home/techb158/cosmic-risk.abdallabala.com/src/lib
NameSizeModeActions
api-client.js10120644editdlrm
crypto.js16770644editdlrm
email.js21750644editdlrm
http.js5630644editdlrm
idempotency.js5700644editdlrm
metrics.js10610644editdlrm
oidc.js17300644editdlrm
prisma.js2800644editdlrm
rate-limit.js26620644editdlrm
redis.js35170644editdlrm
request-context.js37250644editdlrm
tenant-guard.js14270644editdlrm
Edit: /home/techb158/cosmic-risk.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 };