From 6017944686240b65fc1671aacf41bf5b9c76137c Mon Sep 17 00:00:00 2001 From: Katia Bulatova Date: Wed, 22 Jul 2026 13:09:45 +0000 Subject: [PATCH] fix(webapp): guard workload auth gate metric against dev HMR re-registration --- .../worker/workerGroupTokenService.server.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/apps/webapp/app/v3/services/worker/workerGroupTokenService.server.ts b/apps/webapp/app/v3/services/worker/workerGroupTokenService.server.ts index 23d20e108f..ba4741a5ec 100644 --- a/apps/webapp/app/v3/services/worker/workerGroupTokenService.server.ts +++ b/apps/webapp/app/v3/services/worker/workerGroupTokenService.server.ts @@ -62,12 +62,17 @@ if (workloadCreatedAtGateEnabled && !workloadTokenCutoff) { type WorkloadGateAction = "start" | "complete" | "continue" | "snapshots_since"; -const workloadAuthGateCounter = new Counter({ - name: "workload_auth_gate_total", - help: "Deployment token authorization outcomes on worker actions", - labelNames: ["outcome", "action"] as const, - registers: [metricsRegister], -}); +// singleton: module-scope registration double-registers under dev HMR +const workloadAuthGateCounter = singleton( + "workloadAuthGateCounter", + () => + new Counter({ + name: "workload_auth_gate_total", + help: "Deployment token authorization outcomes on worker actions", + labelNames: ["outcome", "action"] as const, + registers: [metricsRegister], + }) +); function createAuthenticatedWorkerInstanceCache() { return createCache({