44 lines
1.6 KiB
JavaScript
44 lines
1.6 KiB
JavaScript
|
|
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.
|
||
|
|
*/
|