Add requestId middleware

This commit is contained in:
Alex Gleason 2025-02-27 17:57:22 -06:00
parent f683642478
commit 0cdb7b8cd5
No known key found for this signature in database
GPG key ID: 7211D1F99744FBB7
5 changed files with 12 additions and 5 deletions

View file

@ -1,11 +1,13 @@
import { MiddlewareHandler } from '@hono/hono';
import { logi } from '@soapbox/logi';
export const logiMiddleware: MiddlewareHandler = async (c, next) => {
import type { DittoMiddleware } from '@ditto/mastoapi/router';
export const logiMiddleware: DittoMiddleware = async (c, next) => {
const { requestId } = c.var;
const { method } = c.req;
const { pathname } = new URL(c.req.url);
logi({ level: 'info', ns: 'ditto.http.request', method, pathname });
logi({ level: 'info', ns: 'ditto.http.request', method, pathname, requestId });
const start = new Date();
@ -15,5 +17,5 @@ export const logiMiddleware: MiddlewareHandler = async (c, next) => {
const duration = (end.getTime() - start.getTime()) / 1000;
const level = c.res.status >= 500 ? 'error' : 'info';
logi({ level, ns: 'ditto.http.response', method, pathname, status: c.res.status, duration });
logi({ level, ns: 'ditto.http.response', method, pathname, status: c.res.status, duration, requestId });
};

View file

@ -15,6 +15,7 @@ export class DittoApp extends Hono<DittoEnv> {
c.set('conf', opts.conf);
c.set('relay', opts.relay);
c.set('signal', c.req.raw.signal);
c.set('requestId', c.req.header('X-Request-Id') ?? crypto.randomUUID());
return next();
});
}

View file

@ -16,5 +16,7 @@ export interface DittoEnv extends Env {
db: DittoDB;
/** Abort signal for the request. */
signal: AbortSignal;
/** Unique ID for the request. */
requestId: string;
};
}

View file

@ -2,4 +2,4 @@ import type { MiddlewareHandler } from '@hono/hono';
import type { DittoEnv } from './DittoEnv.ts';
// deno-lint-ignore ban-types
export type DittoMiddleware<T extends {}> = MiddlewareHandler<DittoEnv & { Variables: T }>;
export type DittoMiddleware<T extends {} = {}> = MiddlewareHandler<DittoEnv & { Variables: T }>;

View file

@ -25,6 +25,7 @@ export class DittoRoute extends Hono<DittoEnv> {
if (!vars.conf) this.throwMissingVar('conf');
if (!vars.relay) this.throwMissingVar('relay');
if (!vars.signal) this.throwMissingVar('signal');
if (!vars.requestId) this.throwMissingVar('requestId');
return {
...vars,
@ -32,6 +33,7 @@ export class DittoRoute extends Hono<DittoEnv> {
conf: vars.conf,
relay: vars.relay,
signal: vars.signal,
requestId: vars.requestId,
};
}