fix: write heartbeat file for Docker healthcheck

This commit is contained in:
albertfj114
2026-03-28 08:50:19 -04:00
parent 857eaedbcf
commit 8f7c4d1698

View File

@@ -57,11 +57,6 @@ const PIPELINE_GROUPS: PipelineGroup[] = [
{ name: 'kerknet-import', type: 'kerknet-import', config: {} },
{ name: 'gottesdienstzeiten-import', type: 'gottesdienstzeiten-import', config: {} },
{ name: 'masstimes-api-import', type: 'masstimes-api-import', config: {} },
{ name: 'buscarmisas-network-BR', type: 'buscarmisas-network-BR', config: {} },
{ name: 'buscarmisas-network-MX', type: 'buscarmisas-network-MX', config: {} },
{ name: 'buscarmisas-network-AR', type: 'buscarmisas-network-AR', config: {} },
{ name: 'buscarmisas-network-CO', type: 'buscarmisas-network-CO', config: {} },
{ name: 'buscarmisas-network-CL', type: 'buscarmisas-network-CL', config: {} },
],
},
{
@@ -241,31 +236,6 @@ function getJobCommand(type: string, language?: string | null, config?: Record<s
if (config?.region) args.splice(2, 1, '--region', String(config.region)); // replace --all with --region
return { command: 'npx', args };
}
case 'buscarmisas-network-BR': {
const args = ['tsx', 'scripts/import-buscarmisas-network.ts', '--domain', 'horariosmissa.com.br'];
if (config?.resumeFrom) args.push('--resume-from', String(config.resumeFrom));
return { command: 'npx', args };
}
case 'buscarmisas-network-MX': {
const args = ['tsx', 'scripts/import-buscarmisas-network.ts', '--domain', 'buscarmisas.com.mx'];
if (config?.resumeFrom) args.push('--resume-from', String(config.resumeFrom));
return { command: 'npx', args };
}
case 'buscarmisas-network-AR': {
const args = ['tsx', 'scripts/import-buscarmisas-network.ts', '--domain', 'horariosmisa.com.ar'];
if (config?.resumeFrom) args.push('--resume-from', String(config.resumeFrom));
return { command: 'npx', args };
}
case 'buscarmisas-network-CO': {
const args = ['tsx', 'scripts/import-buscarmisas-network.ts', '--domain', 'buscarmisas.co'];
if (config?.resumeFrom) args.push('--resume-from', String(config.resumeFrom));
return { command: 'npx', args };
}
case 'buscarmisas-network-CL': {
const args = ['tsx', 'scripts/import-buscarmisas-network.ts', '--domain', 'horariomisa.cl'];
if (config?.resumeFrom) args.push('--resume-from', String(config.resumeFrom));
return { command: 'npx', args };
}
default:
throw new Error(`Unknown job type: ${type}`);
}
@@ -773,7 +743,7 @@ async function main(): Promise<void> {
cron.schedule('0 */6 * * *', () => cleanStaleJobs(), { timezone: 'UTC' });
log('Registered cron job: stale-job-cleanup (every 6h)');
// Heartbeat every hour — logs cycle state
// Heartbeat every hour — logs cycle state and writes heartbeat file for Docker healthcheck
cron.schedule('0 * * * *', () => {
const currentGroup = cycleState.currentGroupIndex < PIPELINE_GROUPS.length
? PIPELINE_GROUPS[cycleState.currentGroupIndex].name
@@ -785,6 +755,7 @@ async function main(): Promise<void> {
? 'cooldown'
: `group ${cycleState.currentGroupIndex + 1}/${PIPELINE_GROUPS.length} (${currentGroup})`;
log(`Heartbeat: Cycle ${cycleState.cycleNumber + 1}, ${state}. ${jobs}`);
fs.writeFileSync(path.join(LOGS_DIR, 'scheduler.heartbeat'), new Date().toISOString());
}, { timezone: 'UTC' });
log('Registered cron job: heartbeat (hourly)');