aboutsummaryrefslogtreecommitdiffstats
path: root/apps/workers/server.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/workers/server.ts')
-rw-r--r--apps/workers/server.ts51
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;