Files
minabot/scripts/monitor.ts

22 lines
1.0 KiB
TypeScript

import { probeHealth, healthObserver } from "../src/ops/monitor";
const target = new URL(process.env.MONITOR_URL || `http://127.0.0.1:${process.env.PORT ?? 3000}/api/health`);
if (!["http:", "https:"].includes(target.protocol) || target.username || target.password) throw new Error("MONITOR_URL must be an HTTP(S) URL without credentials");
const emit = (event: Record<string, unknown>) => console.log(JSON.stringify(event));
if (process.argv.includes("--once")) {
const result = await probeHealth(target.href);
emit({ event: "health_probe", ...result });
process.exitCode = result.healthy ? 0 : 1;
} else {
const observe = healthObserver(emit);
let running = false;
const check = async () => {
if (running) return;
running = true;
try { observe(await probeHealth(target.href)); } finally { running = false; }
};
await check();
const timer = setInterval(() => void check(), 60000);
const stop = () => { clearInterval(timer); process.exit(0); };
process.on("SIGTERM", stop); process.on("SIGINT", stop);
}