feat: add PDF render timing to convert and demo routes
Some checks failed
Build & Deploy to Staging / Build & Deploy to Staging (push) Failing after 1m42s

- renderPdf() and renderUrlPdf() now return { pdf, durationMs }
- Timing wraps the actual render with Date.now()
- Log render duration via logger.info
- Add X-Render-Time response header in convert and demo routes
- Update all callers in convert, demo, templates routes
- Add TDD tests in render-timing.test.ts
- Update existing test mocks for new return shape
This commit is contained in:
Hoid 2026-03-06 11:08:06 +01:00
parent 0283e9dae8
commit f9caef82e6
13 changed files with 165 additions and 23 deletions

View file

@ -113,13 +113,14 @@ convertRouter.post("/html", async (req: Request & { acquirePdfSlot?: () => Promi
? body.html
: wrapHtml(body.html, body.css);
const pdf = await renderPdf(fullHtml, {
const { pdf, durationMs } = await renderPdf(fullHtml, {
...validation.sanitized,
});
const filename = sanitizeFilename(body.filename || "document.pdf");
res.setHeader("Content-Type", "application/pdf");
res.setHeader("Content-Disposition", `inline; filename="${filename}"`);
res.setHeader("X-Render-Time", String(durationMs));
res.send(pdf);
} catch (err: any) {
logger.error({ err }, "Convert HTML error");
@ -214,13 +215,14 @@ convertRouter.post("/markdown", async (req: Request & { acquirePdfSlot?: () => P
}
const html = markdownToHtml(body.markdown, body.css);
const pdf = await renderPdf(html, {
const { pdf, durationMs } = await renderPdf(html, {
...validation.sanitized,
});
const filename = sanitizeFilename(body.filename || "document.pdf");
res.setHeader("Content-Type", "application/pdf");
res.setHeader("Content-Disposition", `inline; filename="${filename}"`);
res.setHeader("X-Render-Time", String(durationMs));
res.send(pdf);
} catch (err: any) {
logger.error({ err }, "Convert MD error");
@ -345,7 +347,7 @@ convertRouter.post("/url", async (req: Request & { acquirePdfSlot?: () => Promis
slotAcquired = true;
}
const pdf = await renderUrlPdf(body.url, {
const { pdf, durationMs } = await renderUrlPdf(body.url, {
...validation.sanitized,
hostResolverRules: `MAP ${parsed.hostname} ${resolvedAddress}`,
});
@ -353,6 +355,7 @@ convertRouter.post("/url", async (req: Request & { acquirePdfSlot?: () => Promis
const filename = sanitizeFilename(body.filename || "page.pdf");
res.setHeader("Content-Type", "application/pdf");
res.setHeader("Content-Disposition", `inline; filename="${filename}"`);
res.setHeader("X-Render-Time", String(durationMs));
res.send(pdf);
} catch (err: any) {
logger.error({ err }, "Convert URL error");