diff options
Diffstat (limited to 'apps/workers/server.ts')
| -rw-r--r-- | apps/workers/server.ts | 51 |
1 files changed, 51 insertions, 0 deletions
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<void>((resolve, reject) => { + server.close((err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }), + serve: () => + new Promise<void>((resolve, reject) => { + server.on("error", reject); + server.on("close", () => resolve()); + }), + }; +} + +export default app; |
