From 52d018c872d0db30c4d54d89fefa8543ee9ff93e Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Fri, 22 Aug 2025 20:09:52 +0300 Subject: feat: Export prometheus metrics from the workers --- apps/workers/server.ts | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 apps/workers/server.ts (limited to 'apps/workers/server.ts') diff --git a/apps/workers/server.ts b/apps/workers/server.ts new file mode 100644 index 00000000..f1b8a11d --- /dev/null +++ b/apps/workers/server.ts @@ -0,0 +1,51 @@ +import { serve } from "@hono/node-server"; +import { Hono } from "hono"; +import { bearerAuth } from "hono/bearer-auth"; + +import serverConfig from "@karakeep/shared/config"; +import logger from "@karakeep/shared/logger"; + +import { printMetrics } from "./metrics"; + +const app = new Hono() + .get("/health", (c) => + c.json({ status: "ok", timestamp: new Date().toISOString() }), + ) + .get( + "/metrics", + bearerAuth({ token: serverConfig.prometheus.metricsToken }), + printMetrics, + ); + +export function buildServer() { + const server = serve( + { + fetch: app.fetch, + port: serverConfig.workers.port, + hostname: serverConfig.workers.host, + }, + (info) => { + logger.info(`Listening on http://${info.address}:${info.port}`); + }, + ); + return { + _server: server, + stop: () => + new Promise((resolve, reject) => { + server.close((err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }), + serve: () => + new Promise((resolve, reject) => { + server.on("error", reject); + server.on("close", () => resolve()); + }), + }; +} + +export default app; -- cgit v1.2.3-70-g09d2