Files
clientsflow/omni_chat/src/index.ts

53 lines
1.5 KiB
TypeScript

import { createServer } from "node:http";
import { closeReceiverWorker, RECEIVER_FLOW_QUEUE_NAME, receiverQueue, startReceiverWorker } from "./worker";
const port = Number(process.env.PORT || 8090);
const service = "omni_chat";
const server = createServer(async (req, res) => {
if (req.method === "GET" && req.url === "/health") {
const q = receiverQueue();
const counts = await q.getJobCounts("wait", "active", "failed", "completed", "delayed");
await q.close();
const payload = JSON.stringify({
ok: true,
service,
receiverFlow: RECEIVER_FLOW_QUEUE_NAME,
senderFlow: process.env.SENDER_FLOW_QUEUE_NAME || "sender.flow",
queue: counts,
now: new Date().toISOString(),
});
res.statusCode = 200;
res.setHeader("content-type", "application/json; charset=utf-8");
res.end(payload);
return;
}
res.statusCode = 404;
res.setHeader("content-type", "application/json; charset=utf-8");
res.end(JSON.stringify({ ok: false, error: "not_found" }));
});
startReceiverWorker();
server.listen(port, "0.0.0.0", () => {
console.log(`[omni_chat] listening on :${port}`);
console.log(`[omni_chat] receiver worker started for queue ${RECEIVER_FLOW_QUEUE_NAME}`);
});
async function shutdown(signal: string) {
console.log(`[omni_chat] shutting down by ${signal}`);
try {
await closeReceiverWorker();
} finally {
server.close(() => process.exit(0));
}
}
process.on("SIGINT", () => {
void shutdown("SIGINT");
});
process.on("SIGTERM", () => {
void shutdown("SIGTERM");
});