feat(api): add Prometheus metrics and OpenTelemetry instrumentation for HTTP, auth, classifications, and diagnoses
This commit is contained in:
@@ -9,6 +9,9 @@ import { diagnosisRoutes } from './routes/diagnoses';
|
||||
import { dashboardRoutes } from './routes/dashboard';
|
||||
import { authRoutes } from './routes/auth';
|
||||
import { expertRoutes } from './routes/expert';
|
||||
import { metricsRoutes } from './routes/metrics';
|
||||
import { httpRequestCounter, httpRequestDuration, httpRequestsActive } from './lib/telemetry';
|
||||
import './types';
|
||||
|
||||
assertRequiredEnv();
|
||||
|
||||
@@ -17,6 +20,24 @@ const app = new Elysia()
|
||||
origin: env.webAppUrl,
|
||||
credentials: true,
|
||||
}))
|
||||
.use(metricsRoutes)
|
||||
.onBeforeHandle(({ request, path }) => {
|
||||
httpRequestsActive.inc();
|
||||
request.metricsStart = performance.now();
|
||||
request.metricsPath = path;
|
||||
})
|
||||
.onAfterHandle(({ request, set }) => {
|
||||
const start = (request as any).metricsStart as number | undefined;
|
||||
const path = (request as any).metricsPath as string | undefined;
|
||||
if (start && path) {
|
||||
const duration = (performance.now() - start) / 1000;
|
||||
const method = request.method;
|
||||
const status = set.status ?? 200;
|
||||
httpRequestCounter.labels(method, path, String(status)).inc();
|
||||
httpRequestDuration.labels(method, path).observe(duration);
|
||||
}
|
||||
httpRequestsActive.dec();
|
||||
})
|
||||
.use(healthRoutes)
|
||||
.use(statusRoutes)
|
||||
.use(authRoutes)
|
||||
|
||||
Reference in New Issue
Block a user