From 0cdb7b8cd514227b37a8a4aa0a632ae88a07f084 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 27 Feb 2025 17:57:22 -0600 Subject: [PATCH] Add requestId middleware --- packages/ditto/middleware/logiMiddleware.ts | 10 ++++++---- packages/mastoapi/router/DittoApp.ts | 1 + packages/mastoapi/router/DittoEnv.ts | 2 ++ packages/mastoapi/router/DittoMiddleware.ts | 2 +- packages/mastoapi/router/DittoRoute.ts | 2 ++ 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/ditto/middleware/logiMiddleware.ts b/packages/ditto/middleware/logiMiddleware.ts index be17e3bb..7db2fa87 100644 --- a/packages/ditto/middleware/logiMiddleware.ts +++ b/packages/ditto/middleware/logiMiddleware.ts @@ -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 }); }; diff --git a/packages/mastoapi/router/DittoApp.ts b/packages/mastoapi/router/DittoApp.ts index 2d3c0107..866965b7 100644 --- a/packages/mastoapi/router/DittoApp.ts +++ b/packages/mastoapi/router/DittoApp.ts @@ -15,6 +15,7 @@ export class DittoApp extends Hono { 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(); }); } diff --git a/packages/mastoapi/router/DittoEnv.ts b/packages/mastoapi/router/DittoEnv.ts index 7f399e62..35fb0118 100644 --- a/packages/mastoapi/router/DittoEnv.ts +++ b/packages/mastoapi/router/DittoEnv.ts @@ -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; }; } diff --git a/packages/mastoapi/router/DittoMiddleware.ts b/packages/mastoapi/router/DittoMiddleware.ts index 1483ca90..91afd533 100644 --- a/packages/mastoapi/router/DittoMiddleware.ts +++ b/packages/mastoapi/router/DittoMiddleware.ts @@ -2,4 +2,4 @@ import type { MiddlewareHandler } from '@hono/hono'; import type { DittoEnv } from './DittoEnv.ts'; // deno-lint-ignore ban-types -export type DittoMiddleware = MiddlewareHandler; +export type DittoMiddleware = MiddlewareHandler; diff --git a/packages/mastoapi/router/DittoRoute.ts b/packages/mastoapi/router/DittoRoute.ts index 369fb858..53d2109b 100644 --- a/packages/mastoapi/router/DittoRoute.ts +++ b/packages/mastoapi/router/DittoRoute.ts @@ -25,6 +25,7 @@ export class DittoRoute extends Hono { 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 { conf: vars.conf, relay: vars.relay, signal: vars.signal, + requestId: vars.requestId, }; }