Files
HoruxDespachos/apps/api/scripts/sweep-stale-sat-jobs.ts
2026-04-27 22:09:36 -06:00

48 lines
1.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* CLI wrapper del watchdog. La lógica vive en
* `src/services/sat/sweep-stale-jobs.service.ts` para que también se pueda
* correr desde un cron (`sat-sync.job.ts`) sin duplicar código.
*
* Uso:
* pnpm --filter @horux/api exec tsx scripts/sweep-stale-sat-jobs.ts # dry-run
* pnpm --filter @horux/api exec tsx scripts/sweep-stale-sat-jobs.ts --apply # ejecuta
* STALE_RUNNING_HOURS=2 pnpm --filter @horux/api exec tsx scripts/sweep-stale-sat-jobs.ts
*/
import { prisma } from '../src/config/database.js';
import { sweepStaleSatJobs } from '../src/services/sat/sweep-stale-jobs.service.js';
async function main() {
const apply = process.argv.includes('--apply');
const pendingHours = Number(process.env.STALE_PENDING_HOURS || 12);
const runningHours = Number(process.env.STALE_RUNNING_HOURS || 4);
const mode = apply ? 'APPLY' : 'DRY-RUN';
console.log(`=== SAT stale-jobs watchdog [${mode}] ===`);
console.log(` pending: nextRetryAt < now ${pendingHours}h`);
console.log(` running: startedAt < now ${runningHours}h`);
console.log();
const result = await sweepStaleSatJobs({ apply, pendingHours, runningHours });
console.log(`Encontrados:`);
console.log(` pending stale: ${result.pendingFound}`);
console.log(` running stale: ${result.runningFound}`);
for (const e of result.entries) {
console.log(`${e.id} tenant=${e.tenantId} kind=${e.kind} edad=${e.ageHours}h`);
}
if (!apply) {
console.log(`\n[DRY-RUN] No se aplicaron cambios. Pasa --apply para marcar como failed.`);
} else {
console.log(`\nMarcados como failed: pending=${result.pendingMarked} running=${result.runningMarked}`);
}
await prisma.$disconnect();
}
main().catch(async (err) => {
console.error('Fatal:', err);
await prisma.$disconnect().catch(() => {});
process.exit(1);
});