// Healthcheck do contêiner do worker. O worker grava o heartbeat ao fim de cada // tick; se o arquivo envelhecer além da janela, o processo está vivo mas travado, // que é o caso que um healthcheck de PID não detecta. import { stat } from "node:fs/promises"; const file = process.env.ADAPTER_WORKER_HEARTBEAT ?? "/tmp/adaptador-worker-heartbeat"; const tick = Number(process.env.ADAPTER_WORKER_TICK_MS ?? 2000); // Tolera dez ticks ou 60s, o que for maior: um job grande ocupa o tick inteiro. const maxAgeMs = Math.max(tick * 10, 60_000); try { const info = await stat(file); const age = Date.now() - info.mtimeMs; if (age > maxAgeMs) { console.error(`heartbeat com ${Math.round(age / 1000)}s, limite ${Math.round(maxAgeMs / 1000)}s`); process.exit(1); } console.log(`heartbeat com ${Math.round(age / 1000)}s`); process.exit(0); } catch { console.error(`heartbeat ausente em ${file}`); process.exit(1); }