- feito ajuste do fluxo GLPI->SN para tratar status 5 (resolve no SN) e status 6 (aviso definitivo e retirada de monitoramento) - feito ajuste de reabertura SN->GLPI quando ticket estiver solved no GLPI - feito ajuste de data/hora de comments/worknotes para evitar inversão de data - feito ajuste de vínculo Ticket Externo no SN com validação de persistência e retry idempotente - feito ajuste de filtro de journals para ignorar SOTHIS.CAOA e admin.caoa por configuração - feito inclusão de monitor dedicado de encerramento definitivo (processGlpiClosureController) - feito atualização de flags de controle (ENABLE_STATUS_SYNC, ENABLE_GLPI_CLOSE_CRON, ENABLE_GLPI_WEBHOOK) - feito atualização da documentação (README, docs/regrasdenegocio.md, docs/fluxo.md, docs/casosdeuso.md, docs/checklist.md)
55 lines
1.9 KiB
JavaScript
55 lines
1.9 KiB
JavaScript
const path = require('path');
|
|
const dotenv = require('dotenv');
|
|
const nodeEnv = process.env.NODE_ENV;
|
|
let envFile = '.env.development';
|
|
if (nodeEnv === 'production') {
|
|
envFile = '.env.production';
|
|
} else {
|
|
envFile = '.env.development';
|
|
}
|
|
dotenv.config({ path: path.resolve(__dirname, '..', envFile) });
|
|
|
|
const { processTicketsController } = require('./controllers/processTicketsController');
|
|
const { processCommentsController } = require('./controllers/processCommentsController');
|
|
const { processErrorController } = require('./controllers/processErrorController');
|
|
const { processStatusAndClosureController } = require('./controllers/processStatusController');
|
|
const { processGlpiClosureController } = require('./controllers/processGlpiClosureController');
|
|
const { logInfo } = require('./utils/logger');
|
|
|
|
logInfo(`Ambiente carregado: ${process.env.NODE_ENV || 'development'}`);
|
|
|
|
logInfo('Aplicacao iniciada', {
|
|
timestamp: new Date().toISOString(),
|
|
environment: process.env.NODE_ENV || 'development'
|
|
});
|
|
|
|
async function main() {
|
|
try {
|
|
const statusSyncEnabled = process.env.ENABLE_STATUS_SYNC === 'true';
|
|
const glpiCloseCronEnabled = process.env.ENABLE_GLPI_CLOSE_CRON !== 'false';
|
|
|
|
await processErrorController();
|
|
await processTicketsController();
|
|
await processCommentsController();
|
|
|
|
if (statusSyncEnabled) {
|
|
await processStatusAndClosureController();
|
|
} else {
|
|
logInfo('Sincronizacao legada de status desabilitada (ENABLE_STATUS_SYNC=false).');
|
|
}
|
|
|
|
if (glpiCloseCronEnabled) {
|
|
await processGlpiClosureController();
|
|
} else {
|
|
logInfo('Monitor de encerramento definitivo GLPI desabilitado (ENABLE_GLPI_CLOSE_CRON=false).');
|
|
}
|
|
|
|
logInfo('Ciclo de sincronizacao concluido com sucesso.');
|
|
} catch (error) {
|
|
logInfo('Erro na aplicacao:', error);
|
|
}
|
|
}
|
|
|
|
module.exports = { main };
|
|
|