Files
Zumri-Backend/app/services/metrics.service.js
Sathira Sri Sathara 5158c52db5
CI / test (push) Successful in 10m56s
CI / test (pull_request) Successful in 11m1s
feat: Add Phase 11 analytics and production readiness features
- Introduced new endpoints for account overview, analytics, and metrics.
- Implemented authorization matrix and backup/restore documentation.
- Added smoke test script and updated package dependencies.
- Created detailed production checklist and runbook for deployment.
- Established cron operations and notification event matrix documentation.
- Enhanced security and validation audits for analytics and metrics services.
- Added unit tests for analytics and metrics functionalities.
2026-09-16 10:59:19 +05:30

2 lines
1.4 KiB
JavaScript

const started=Date.now(),counts=new Map(),durations=new Map();const observe=(method,status,duration)=>{const key=`${method}:${Math.floor(status/100)}xx`;counts.set(key,(counts.get(key)||0)+1);durations.set(key,(durations.get(key)||0)+duration);};const middleware=(req,res,next)=>{const begin=process.hrtime.bigint();res.on("finish",()=>observe(req.method,res.statusCode,Number(process.hrtime.bigint()-begin)/1e9));next();};const render=()=>{const lines=["# HELP zumri_process_uptime_seconds Process uptime","# TYPE zumri_process_uptime_seconds gauge",`zumri_process_uptime_seconds ${Math.floor((Date.now()-started)/1000)}`,"# HELP zumri_http_requests_total HTTP requests by method and status class","# TYPE zumri_http_requests_total counter"];for(const[k,v]of counts){const[method,status_class]=k.split(":");lines.push(`zumri_http_requests_total{method="${method}",status_class="${status_class}"} ${v}`);}lines.push("# HELP zumri_http_request_duration_seconds_sum HTTP request duration","# TYPE zumri_http_request_duration_seconds_sum counter");for(const[k,v]of durations){const[method,status_class]=k.split(":");lines.push(`zumri_http_request_duration_seconds_sum{method="${method}",status_class="${status_class}"} ${v}`);}lines.push(`# TYPE zumri_process_resident_memory_bytes gauge`,`zumri_process_resident_memory_bytes ${process.memoryUsage().rss}`);return `${lines.join("\n")}\n`;};module.exports={observe,middleware,render};