From aab5697b21f9279ac44e51393e0ff7d7bedb2976 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 9 Dec 2023 10:23:53 -0500 Subject: [PATCH] Improved API tracing --- server/routes/api/index.ts | 6 ++++-- .../{apiWrapper.ts => apiResponse.ts} | 12 ++--------- server/routes/api/middlewares/apiTracer.ts | 21 +++++++++++++++++++ 3 files changed, 27 insertions(+), 12 deletions(-) rename server/routes/api/middlewares/{apiWrapper.ts => apiResponse.ts} (59%) create mode 100644 server/routes/api/middlewares/apiTracer.ts diff --git a/server/routes/api/index.ts b/server/routes/api/index.ts index 52a622909..eb48aa4dc 100644 --- a/server/routes/api/index.ts +++ b/server/routes/api/index.ts @@ -22,7 +22,8 @@ import events from "./events"; import fileOperationsRoute from "./fileOperations"; import groups from "./groups"; import integrations from "./integrations"; -import apiWrapper from "./middlewares/apiWrapper"; +import apiResponse from "./middlewares/apiResponse"; +import apiTracer from "./middlewares/apiTracer"; import editor from "./middlewares/editor"; import notifications from "./notifications"; import pins from "./pins"; @@ -54,7 +55,8 @@ api.use( ); api.use(coalesceBody()); api.use(userAgent); -api.use(apiWrapper()); +api.use(apiTracer()); +api.use(apiResponse()); api.use(editor()); // register package API routes before others to allow for overrides diff --git a/server/routes/api/middlewares/apiWrapper.ts b/server/routes/api/middlewares/apiResponse.ts similarity index 59% rename from server/routes/api/middlewares/apiWrapper.ts rename to server/routes/api/middlewares/apiResponse.ts index 6c0a12709..9ea28f3ba 100644 --- a/server/routes/api/middlewares/apiWrapper.ts +++ b/server/routes/api/middlewares/apiResponse.ts @@ -1,17 +1,9 @@ import stream from "stream"; import { Context, Next } from "koa"; import { Readable } from "readable-stream"; -import { addTags } from "@server/logging/tracer"; - -export default function apiWrapper() { - return async function apiWrapperMiddleware(ctx: Context, next: Next) { - const id = ctx.request.body?.id ?? ctx.request.query?.id; - if (id) { - addTags({ - "resource.id": `${id}`, - }); - } +export default function apiResponse() { + return async function apiResponseMiddleware(ctx: Context, next: Next) { await next(); const ok = ctx.status < 400; diff --git a/server/routes/api/middlewares/apiTracer.ts b/server/routes/api/middlewares/apiTracer.ts new file mode 100644 index 000000000..48f8c3f3f --- /dev/null +++ b/server/routes/api/middlewares/apiTracer.ts @@ -0,0 +1,21 @@ +import { Context, Next } from "koa"; +import { addTags } from "@server/logging/tracer"; + +export default function apiTracer() { + return async function apiTracerMiddleware(ctx: Context, next: Next) { + const params = ctx.request.body ?? ctx.request.query; + + for (const key in params) { + if (key === "id" || key.endsWith("Id")) { + const value = params[key]; + if (typeof value === "string") { + addTags({ + [`resource.${key}`]: value, + }); + } + } + } + + await next(); + }; +}