diff --git a/src/app.ts b/src/app.ts index f7f4f29a..1cb3746b 100644 --- a/src/app.ts +++ b/src/app.ts @@ -152,18 +152,17 @@ if (Conf.cronEnabled) { app.use('*', rateLimitMiddleware(300, Time.minutes(5))); -app.use('/api/*', logger(debug)); -app.use('/.well-known/*', logger(debug)); -app.use('/users/*', logger(debug)); -app.use('/nodeinfo/*', logger(debug)); -app.use('/oauth/*', logger(debug)); +app.use('/api/*', metricsMiddleware, logger(debug)); +app.use('/.well-known/*', metricsMiddleware, logger(debug)); +app.use('/users/*', metricsMiddleware, logger(debug)); +app.use('/nodeinfo/*', metricsMiddleware, logger(debug)); +app.use('/oauth/*', metricsMiddleware, logger(debug)); -app.get('/api/v1/streaming', streamingController); -app.get('/relay', relayController); +app.get('/api/v1/streaming', metricsMiddleware, streamingController); +app.get('/relay', metricsMiddleware, relayController); app.use( '*', - metricsMiddleware, cspMiddleware(), cors({ origin: '*', exposeHeaders: ['link'] }), signerMiddleware, diff --git a/src/metrics.ts b/src/metrics.ts index 96d91599..67da3f49 100644 --- a/src/metrics.ts +++ b/src/metrics.ts @@ -6,6 +6,12 @@ export const httpRequestCounter = new Counter({ labelNames: ['method'], }); +export const httpResponseCounter = new Counter({ + name: 'http_responses_total', + help: 'Total number of HTTP responses', + labelNames: ['status', 'path'], +}); + export const streamingConnectionsGauge = new Gauge({ name: 'streaming_connections', help: 'Number of active connections to the streaming API', diff --git a/src/middleware/metricsMiddleware.ts b/src/middleware/metricsMiddleware.ts index 1a491186..d7ac43d5 100644 --- a/src/middleware/metricsMiddleware.ts +++ b/src/middleware/metricsMiddleware.ts @@ -1,10 +1,14 @@ import { MiddlewareHandler } from '@hono/hono'; -import { httpRequestCounter } from '@/metrics.ts'; +import { httpRequestCounter, httpResponseCounter } from '@/metrics.ts'; export const metricsMiddleware: MiddlewareHandler = async (c, next) => { const { method } = c.req; httpRequestCounter.inc({ method }); await next(); + + const { status } = c.res; + const path = c.req.matchedRoutes.find((r) => r.method !== 'ALL')?.path ?? c.req.routePath; + httpResponseCounter.inc({ status, path }); };