diff --git a/apps/web/server/createRouter.ts b/apps/web/server/createRouter.ts index 8334b73281..f4ac59d83b 100644 --- a/apps/web/server/createRouter.ts +++ b/apps/web/server/createRouter.ts @@ -1,3 +1,5 @@ +import { performance } from "@calcom/lib/server/perfObserver"; + import * as trpc from "@trpc/server"; import { Context } from "./createContext"; @@ -6,7 +8,13 @@ import { Context } from "./createContext"; * Helper function to create a router with context */ export function createRouter() { - return trpc.router(); + return trpc.router().middleware(async ({ path, type, next }) => { + performance.mark("Start"); + const result = await next(); + performance.mark("End"); + performance.measure(`[${result.ok ? "OK" : "ERROR"}][$1] ${type} '${path}'`, "Start", "End"); + return result; + }); } export function createProtectedRouter() { diff --git a/packages/lib/server/defaultResponder.ts b/packages/lib/server/defaultResponder.ts index b937af3a3c..a46b11a08a 100644 --- a/packages/lib/server/defaultResponder.ts +++ b/packages/lib/server/defaultResponder.ts @@ -8,9 +8,11 @@ type Handle = (req: NextApiRequest, res: NextApiResponse) => Promise; /** Allows us to get type inference from API handler responses */ function defaultResponder(f: Handle) { return async (req: NextApiRequest, res: NextApiResponse) => { + let ok = false; try { performance.mark("Start"); const result = await f(req, res); + ok = true; if (result) res.json(result); } catch (err) { const error = getServerErrorFromUnkown(err); @@ -18,7 +20,7 @@ function defaultResponder(f: Handle) { res.json({ message: error.message }); } finally { performance.mark("End"); - performance.measure("Measuring endpoint: " + req.url, "Start", "End"); + performance.measure(`[${ok ? "OK" : "ERROR"}][$1] ${req.method} '${req.url}'`, "Start", "End"); } }; } diff --git a/packages/lib/server/perfObserver.ts b/packages/lib/server/perfObserver.ts index 87fa325ce3..5d70a2ce55 100644 --- a/packages/lib/server/perfObserver.ts +++ b/packages/lib/server/perfObserver.ts @@ -8,7 +8,8 @@ export const perfObserver = globalThis.perfObserver || new PerformanceObserver((items) => { items.getEntries().forEach((entry) => { - console.log(entry); // fake call to our custom logging solution + // Log entry duration in seconds with four decimal places. + console.log(entry.name.replace("$1", `${(entry.duration / 1000.0).toFixed(4)}s`)); }); });