Skip to content

Commit 73b20fa

Browse files
authored
feat: Add feature metrics to asset-server (#4945)
* feat: Add feature metrics to asset-server
1 parent 50f93bd commit 73b20fa

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@cloudflare/pages-shared": patch
3+
---
4+
5+
feat: Add feature metrics to asset-server

packages/pages-shared/asset-server/handler.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,20 @@ type ServeAsset<AssetEntry> = (
7070
options?: { preserve: boolean }
7171
) => Promise<Response>;
7272

73+
type CacheStatus = "hit" | "miss";
74+
type CacheResult<A extends string> = `${A}-${CacheStatus}`;
75+
export type HandlerMetrics = {
76+
preservationCacheResult?: CacheResult<"checked"> | "disabled";
77+
earlyHintsResult?: CacheResult<"used" | "notused"> | "disabled";
78+
};
79+
7380
type FullHandlerContext<AssetEntry, ContentNegotiation, Asset> = {
7481
request: Request;
7582
metadata: Metadata;
7683
xServerEnvHeader?: string;
7784
xDeploymentIdHeader?: boolean;
7885
logError: (err: Error) => void;
86+
setMetrics?: (metrics: HandlerMetrics) => void;
7987
findAssetEntryForPath: FindAssetEntryForPath<AssetEntry>;
8088
getAssetKey(assetEntry: AssetEntry, content: ContentNegotiation): string;
8189
negotiateContent(
@@ -123,6 +131,7 @@ export async function generateHandler<
123131
xServerEnvHeader,
124132
xDeploymentIdHeader,
125133
logError,
134+
setMetrics,
126135
findAssetEntryForPath,
127136
getAssetKey,
128137
negotiateContent,
@@ -332,7 +341,12 @@ export async function generateHandler<
332341
const earlyHintsLinkHeader = earlyHintsResponse.headers.get("Link");
333342
if (earlyHintsLinkHeader) {
334343
headers.set("Link", earlyHintsLinkHeader);
344+
if (setMetrics) setMetrics({ earlyHintsResult: "used-hit" });
345+
} else {
346+
if (setMetrics) setMetrics({ earlyHintsResult: "notused-hit" });
335347
}
348+
} else {
349+
if (setMetrics) setMetrics({ earlyHintsResult: "notused-miss" });
336350
}
337351

338352
const clonedResponse = response.clone();
@@ -393,6 +407,8 @@ export async function generateHandler<
393407
})()
394408
);
395409
}
410+
} else {
411+
if (setMetrics) setMetrics({ earlyHintsResult: "disabled" });
396412
}
397413

398414
// Iterate through rules and find rules that match the path
@@ -566,8 +582,13 @@ export async function generateHandler<
566582
);
567583
const preservedResponse = await assetPreservationCache.match(request.url);
568584
if (preservedResponse) {
585+
if (setMetrics) setMetrics({ preservationCacheResult: "checked-hit" });
569586
return preservedResponse;
587+
} else {
588+
if (setMetrics) setMetrics({ preservationCacheResult: "checked-miss" });
570589
}
590+
} else {
591+
if (setMetrics) setMetrics({ preservationCacheResult: "disabled" });
571592
}
572593

573594
// Traverse upwards from the current path looking for a custom 404 page

0 commit comments

Comments
 (0)