API Spec (nhấp để xem)
API BASE: /api/dashboard/errors
1) GET /timeseries?from&to&bucket=day|week&severity=Csv&service=Csv
-> { labels: string[], sev1: number[], sev2: number[], sev3: number[], sev4: number[] }
2) GET /summary?from&to&bucket&severity&service
-> { kpis: { total:number, sev12:number, p95Seconds:number, successPercent:number }, slicho:{ p95Seconds:number, successPercent:number } }
3) GET /top-owners?from&to&severity&service&limit=5
-> { items: [{ owner:string, count:number }] }
4) GET /recent?from&to&severity=Sev1,Sev2&service&limit=50&page=1
-> { total:number, items: [{ id, createdAt, service, severity, className, methodName, message, owner, requestId }] }
5) GET /growth?from&to&interval=day|week|month|quarter&severity=Csv&service=Csv
-> {
total: { labels:string[], counts:number[], ma7:number[], trend:number[] },
sev12: { labels:string[], counts:number[], ma7:number[], trend:number[] },
wow: { labels:string[], pct:number[] },
dod: { labels:string[], pct:number[] },
metrics: { gTotalPct:number, gSev12Pct:number, ma7Slope:number, volatility:number }
}
6) GET /dev-share?from&to&interval=month|week|quarter&severity=Csv&service=Csv&top=8
-> { labels:string[], owners:string[], series:number[][] }
// series[i] là mảng theo labels cho owner i (stacked bar)