Files
timmy-tower/artifacts/api-server/src/lib/request-counters.ts

38 lines
992 B
TypeScript

/** In-memory HTTP request counters for the /api/metrics endpoint. */
export interface RequestCountsSnapshot {
total: number;
by_status: Record<string, number>;
errors_4xx: number;
errors_5xx: number;
}
class RequestCounters {
private total = 0;
private byStatus: Record<number, number> = {};
private errors4xx = 0;
private errors5xx = 0;
record(statusCode: number): void {
this.total++;
this.byStatus[statusCode] = (this.byStatus[statusCode] ?? 0) + 1;
if (statusCode >= 400 && statusCode < 500) this.errors4xx++;
else if (statusCode >= 500) this.errors5xx++;
}
snapshot(): RequestCountsSnapshot {
const byStatus: Record<string, number> = {};
for (const [code, count] of Object.entries(this.byStatus)) {
byStatus[code] = count;
}
return {
total: this.total,
by_status: byStatus,
errors_4xx: this.errors4xx,
errors_5xx: this.errors5xx,
};
}
}
export const requestCounters = new RequestCounters();