snglpi/cron.js

44 lines
1.6 KiB
JavaScript
Raw Normal View History

const path = require('path');
const dotenv = require('dotenv');
const nodeEnv = process.env.NODE_ENV || 'development';
const envFile = nodeEnv === 'production' ? '.env.production' : '.env.development';
dotenv.config({ path: path.resolve(__dirname, envFile) });
const cron = require('node-cron');
const { main: runSyncCycle } = require('./src/app.js');
const { logInfo, logError } = require('./src/utils/logger.js');
let isCronRunning = false;
const CRON_SCHEDULE = process.env.CRON_SCHEDULE || '*/5 * * * *'; // A cada 5 minutos por padrão
logInfo(`⏰ Agendando ciclo de sincronização para rodar com a frequência: ${CRON_SCHEDULE}`);
cron.schedule(CRON_SCHEDULE, async () => {
if (isCronRunning) {
logInfo('CRON: Ciclo anterior ainda em execução. Pulando esta rodada.');
return;
}
isCronRunning = true;
logInfo('CRON: Iniciando ciclo de sincronização...');
try {
await runSyncCycle();
// A função main já loga sua própria mensagem de sucesso, então não precisamos duplicar aqui.
} catch (error) {
logError('CRON: Ocorreu um erro inesperado durante o ciclo de sincronização.', error);
} finally {
logInfo('CRON: Finalizando ciclo de sincronização.');
isCronRunning = false;
}
});
/**
* @file cron.js
* @description Responsável por agendar e executar a rotina de sincronização periodicamente.
* Este arquivo:
* 1. Carrega as variáveis de ambiente apropriadas para o ambiente (desenvolvimento/produção).
* 2. Agenda um `cron job` (usando node-cron) para executar a função principal de sincronização.
* 3. Garante que apenas uma instância do ciclo de sincronização rode por vez.
*/