diff --git a/server/src/plugins/service-admin-http/index.ts b/server/src/plugins/service-admin-http/index.ts index 3aeb3d0..d78774b 100644 --- a/server/src/plugins/service-admin-http/index.ts +++ b/server/src/plugins/service-admin-http/index.ts @@ -206,37 +206,26 @@ export class Plugin extends BSBService, typeof Event }); reqObs.log.info("{method} {path}", { method, path }); event.context.obs = reqObs; + (event.context as any)._startMs = Date.now(); }, onError: (error, event) => { const reqObs = event.context.obs; - const status = error.status ?? 500; const path = event.req.url ?? "unknown"; + const err = error.message ?? String(error); if (!reqObs) { - obs.log.error("HTTP {status} {path}: {err} (no request trace)", { - status, - path, - err: error.message ?? String(error), - }); + obs.log.error("HTTP error {path}: {err} (no request trace)", { path, err }); return; } - if (status >= 500) { - reqObs.log.error("HTTP {status} {path}: {err}", { - status, - path, - err: error.message ?? String(error), - }); - } else if (status >= 400) { - reqObs.log.warn("HTTP {status} {path}: {err}", { - status, - path, - err: error.message ?? String(error), - }); - } + reqObs.log.error("HTTP error {path}: {err}", { path, err }); }, - onResponse: (_response, event) => { - if (event.context.obs) { - event.context.obs.end(); - } + onResponse: (response, event) => { + const reqObs = event.context.obs; + if (!reqObs) return; + const ms = Date.now() - ((event.context as any)._startMs ?? Date.now()); + const status = response.status ?? 200; + const path = event.req.url ?? "unknown"; + reqObs.log.info("{status} {path} {ms}ms", { status, path, ms }); + reqObs.end(); }, }); diff --git a/server/src/plugins/service-api-http/index.ts b/server/src/plugins/service-api-http/index.ts index b3e2799..34e1e82 100644 --- a/server/src/plugins/service-api-http/index.ts +++ b/server/src/plugins/service-api-http/index.ts @@ -175,37 +175,26 @@ export class Plugin extends BSBService, typeof Event }); reqObs.log.info("{method} {path}", { method, path }); event.context.obs = reqObs; + (event.context as any)._startMs = Date.now(); }, onError: (error, event) => { const reqObs = event.context.obs; - const status = error.status ?? 500; const path = event.req.url ?? "unknown"; + const err = error.message ?? String(error); if (!reqObs) { - obs.log.error("HTTP {status} {path}: {err} (no request trace)", { - status, - path, - err: error.message ?? String(error), - }); + obs.log.error("HTTP error {path}: {err} (no request trace)", { path, err }); return; } - if (status >= 500) { - reqObs.log.error("HTTP {status} {path}: {err}", { - status, - path, - err: error.message ?? String(error), - }); - } else if (status >= 400) { - reqObs.log.warn("HTTP {status} {path}: {err}", { - status, - path, - err: error.message ?? String(error), - }); - } + reqObs.log.error("HTTP error {path}: {err}", { path, err }); }, - onResponse: (_response, event) => { - if (event.context.obs) { - event.context.obs.end(); - } + onResponse: (response, event) => { + const reqObs = event.context.obs; + if (!reqObs) return; + const ms = Date.now() - ((event.context as any)._startMs ?? Date.now()); + const status = response.status ?? 200; + const path = event.req.url ?? "unknown"; + reqObs.log.info("{status} {path} {ms}ms", { status, path, ms }); + reqObs.end(); }, }); diff --git a/server/src/shared/pairing.ts b/server/src/shared/pairing.ts index 4126b95..8f42456 100644 --- a/server/src/shared/pairing.ts +++ b/server/src/shared/pairing.ts @@ -80,9 +80,9 @@ export async function claimPairing( obs?: Observable, ): Promise { const pc = await repo.getPairingCode(code); - if (!pc) { obs?.log.debug("claim {code}: code not found", { code }); return { status: "pending" }; } - if (new Date(pc.expires_at) < new Date()) { obs?.log.debug("claim {code}: expired", { code }); return { status: "pending" }; } - if (!pc.consumed_at) { obs?.log.debug("claim {code}: not yet consumed", { code }); return { status: "pending" }; } + if (!pc) { obs?.log.info("claim {code}: code not found", { code }); return { status: "pending" }; } + if (new Date(pc.expires_at) < new Date()) { obs?.log.info("claim {code}: expired", { code }); return { status: "pending" }; } + if (!pc.consumed_at) { obs?.log.info("claim {code}: not yet consumed", { code }); return { status: "pending" }; } const extras = pc.extras as Record; const kioskKey = extras["kiosk_key_plaintext"] as string | undefined;