diff --git a/src/metrics.ts b/src/metrics.ts index 1e20747b..7bed083d 100644 --- a/src/metrics.ts +++ b/src/metrics.ts @@ -27,10 +27,10 @@ export const streamingClientMessagesCounter = new Counter({ help: 'Total number of messages received by the streaming API', }); -export const fetchCounter = new Counter({ - name: 'ditto_fetch_total', +export const fetchResponsesCounter = new Counter({ + name: 'ditto_fetch_responses_total', help: 'Total number of fetch requests', - labelNames: ['method'], + labelNames: ['method', 'status'], }); export const firehoseEventsCounter = new Counter({ diff --git a/src/workers/fetch.ts b/src/workers/fetch.ts index 3ed98fbb..4fbc57bb 100644 --- a/src/workers/fetch.ts +++ b/src/workers/fetch.ts @@ -3,7 +3,7 @@ import * as Comlink from 'comlink'; import { FetchWorker } from './fetch.worker.ts'; import './handlers/abortsignal.ts'; -import { fetchCounter } from '@/metrics.ts'; +import { fetchResponsesCounter } from '@/metrics.ts'; const worker = new Worker(new URL('./fetch.worker.ts', import.meta.url), { type: 'module' }); const client = Comlink.wrap(worker); @@ -23,11 +23,18 @@ const ready = new Promise((resolve) => { */ const fetchWorker: typeof fetch = async (...args) => { await ready; + const [url, init] = serializeFetchArgs(args); const { body, signal, ...rest } = init; - fetchCounter.inc({ method: init.method }); + const result = await client.fetch(url, { ...rest, body: await prepareBodyForWorker(body) }, signal); - return new Response(...result); + const response = new Response(...result); + + const { method } = init; + const { status } = response; + fetchResponsesCounter.inc({ method, status }); + + return response; }; /** Take arguments to `fetch`, and turn them into something we can send over Comlink. */