Files
open-gsio/workers/site/services/MetricsService.ts
geoffsee 33679583af init
2025-05-22 23:14:01 -04:00

39 lines
1.1 KiB
TypeScript

import { types, flow } from "mobx-state-tree";
const MetricsService = types
.model("MetricsService", {
isCollectingMetrics: types.optional(types.boolean, true),
})
.volatile((self) => ({
env: {} as Env,
ctx: {} as ExecutionContext,
}))
.actions((self) => ({
setEnv(env: Env) {
self.env = env;
},
setCtx(ctx: ExecutionContext) {
self.ctx = ctx;
},
handleMetricsRequest: flow(function* (request: Request) {
const url = new URL(request.url);
const proxyUrl = `https://metrics.seemueller.io${url.pathname}${url.search}`;
try {
const response = yield fetch(proxyUrl, {
method: request.method,
headers: request.headers,
body: ["GET", "HEAD"].includes(request.method) ? null : request.body,
redirect: "follow",
});
return response;
} catch (error) {
console.error("Failed to proxy metrics request:", error);
return new Response("Failed to fetch metrics", { status: 500 });
}
}),
}));
export default MetricsService;