22 lines
1.0 KiB
TypeScript
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);
|
|
}
|