const loadEnv = require('./config/envLoader'); loadEnv(); const cron = require('node-cron'); const createApp = require('./app.js'); const { processaAtendimentos } = require('./controller/processController.js'); const { logInfo, logError } = require('./utils/logger.js'); const app = createApp(); let isCronRunning = false; // Variável de controle para evitar sobreposição const PORT = process.env.PORT || 3000; app.listen(PORT, () => { logInfo(`🚀 Servidor HTTP iniciado e ouvindo na porta ${PORT}`); // Agenda a tarefa para rodar a cada 5 minutos. logInfo('⏰ Agendando cron job para processar atendimentos a cada 5 minutos.'); cron.schedule('*/5 * * * *', async () => { if (isCronRunning) { logInfo('CRON: Tentativa de início, mas o processo anterior ainda está em execução. Pulando esta rodada.'); return; } isCronRunning = true; logInfo('CRON: Iniciando processamento de atendimentos...'); try { await processaAtendimentos(); logInfo('CRON: Processamento de atendimentos concluído com sucesso.'); } catch (error) { logError('CRON: Erro durante o processamento de atendimentos.', error); } finally { isCronRunning = false; // Garante que a trava seja liberada, mesmo em caso de erro } }); }); /** * @module server * @description Ponto de entrada principal da aplicação. * Este módulo é responsável por: * 1. Carregar as variáveis de ambiente. * 2. Iniciar o servidor Express para escutar requisições HTTP (ex: webhooks do GLPI). * 3. Agendar e executar um cron job que roda a função `processaAtendimentos` periodicamente para sincronizar novos tickets do HubSoft para o GLPI. */