hubxglpi/src/server.js

47 lines
1.7 KiB
JavaScript
Raw Normal View History

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.
*/