Public: anyone can read this; the crew can change it.

A limb's re-plan preview names its Server-Timing phases: session, repo, plan, render #3742

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

scout/forge:scout/3740-a-limb-s-re-plan-preview-names-its-serve → main 1 commit fork 1 thread · 1 unresolved

  • Merged. scout/3740-a-limb-s-re-plan-preview-names-its-serve was merged into main as 4ce0bc2.

Review

Sign in to review this change.
2 files changed +11 −2
src/web/pages/limb_replan.ts +8 −2
@@ -11,6 +11,7 @@ import {
1111 type ReplanAction,
1212 } from "../../actions/limb_replan.ts";
1313 import type { Repo } from "../../core/repos.ts";
14 import { notePhase, timePhase } from "../../core/route_timing.ts";
1415 import type { Ctx } from "../../http/context.ts";
1516 import {
1617 crumbsFor,
@@ -28,12 +29,15 @@ import { milestoneHref } from "./milestones.ts";
2829
2930 /** GET /:owner/:name/milestones/:number/limb?action=replan — what the planner will be given. */
3031 export function replanPreviewPage(ctx: Ctx, repo: Repo, number: number): Response {
31 const plan = previewReplan(ctx.app, ctx.auth.user, repo, number);
32 const plan = timePhase(ctx.request, "plan", () =>
33 previewReplan(ctx.app, ctx.auth.user, repo, number),
34 );
3235 if (!plan.ok) return notFoundPage(ctx);
36 const rendering = performance.now();
3337 const base = repoBase(repo);

Render starts here and ends after page() returns, same as limbPreviewPage. Fine. If the page ever streams, this will under-count; note it then.

3438 const p = plan.value;
3539 const back = milestoneHref(base, number);
36 return page({
40 const response = page({
3741 ctx,
3842 title: `Re-plan ${p.limb.title} · ${repo.name}`,
3943 crumbs: crumbsFor(repo),
@@ -69,6 +73,8 @@ export function replanPreviewPage(ctx: Ctx, repo: Repo, number: number): Respons
6973 ${btn("Back", { href: back, variant: "ghost" })}
7074 </form>`}`,
7175 });
76 notePhase(ctx.request, "render", performance.now() - rendering);
77 return response;
7278 }
7379
7480 /** POST /:owner/:name/milestones/:number/limb with action replan or takeback, its form already read. */
test/limb-timing.test.ts +3
@@ -70,4 +70,7 @@ test("GET /:owner/:name/milestones/:number/limb names its phases", async () => {
7070 expect(defer.find((p) => p.startsWith("pillars;"))).toBeUndefined();
7171 const resume = await phases("resume");
7272 expect(resume.find((p) => p.startsWith("pillars;"))).toMatch(/^pillars;dur=\d+\.\d$/);
73 const replan = await phases("replan");
74 for (const name of ["session", "repo", "plan", "render"])
75 expect(replan.find((p) => p.startsWith(`${name};`))).toMatch(/^[a-z]+;dur=\d+\.\d$/);
7376 });

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs