Rebaixa para debug uma serie de logs "heartbeat" que disparavam todo ciclo (a cada 1 minuto) independente de qualquer mudanca real, competindo com os logs de acao/erro que realmente importam: buscas por watermark, contagem de tickets pendentes/monitorados, checagens de comentario ja sincronizado, abertura de conexao GLPI/PostgreSQL, e o resumo de sincronizacao do SN (que a margem de seguranca de 6h do watermark sempre retorna nao-vazio, mesmo sem mudanca real de campo). Corrige tambem um bug real encontrado em teste: no fluxo GLPI -> SN, todo comentario historico de um ticket era sanitizado e checado contra a API do SN a cada ciclo antes mesmo de verificar se ja tinha sido sincronizado (ticket_updates.destiny_id). Em tickets com historico longo isso significava dezenas de chamadas desnecessarias por minuto. Agora a checagem local (barata) roda primeiro, e so sanitiza/consulta o SN quando o comentario realmente ainda nao foi sincronizado. Corrige tambem o log de configuracao do pool PostgreSQL, que imprimia "[object Object]" por passar o objeto de config como mensagem em vez de metadado. LOG_LEVEL default muda de debug para info em .env.example e .env.production, unica forma do rebaixamento acima ter efeito pratico. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
34 lines
1.4 KiB
JavaScript
34 lines
1.4 KiB
JavaScript
const { fetchCommentsFromServiceNow } = require('../services/servicenowService');
|
|
const { syncCommentsGlpitoSN, syncCommentsSNtoGlpi } = require('../services/glpiCommentService');
|
|
const TicketSyncModel = require('../models/ticketSyncModel');
|
|
const TicketGlpiModel = require('../models/ticketGlpiModel');
|
|
const { logDebug } = require('../utils/logger');
|
|
|
|
const processCommentsController = async () => {
|
|
const ticketsToMonitor = await TicketSyncModel.getTicketsToMonitor();
|
|
logDebug(`Tickets em monitoramento: ${ticketsToMonitor.length}`);
|
|
|
|
for (const ticket of ticketsToMonitor) {
|
|
const glpiStatus = await TicketGlpiModel.getTicketStatus(ticket.glpi_ticket_id);
|
|
if (glpiStatus === 5) {
|
|
// Regra de negocio: enquanto o GLPI estiver Solucionado, nao manda comentario novo
|
|
// do SN pra dentro do chamado. A decisao de reabertura acontece em
|
|
// processTicketLifecycleController.js, que roda antes deste controlador no ciclo.
|
|
logDebug(`Ticket ${ticket.glpi_ticket_id} permanece Solucionado no GLPI. Comentarios SN -> GLPI bloqueados ate reabertura.`);
|
|
await syncCommentsGlpitoSN(ticket);
|
|
continue;
|
|
}
|
|
|
|
const comments = await fetchCommentsFromServiceNow(ticket);
|
|
if (comments.length !== 0) {
|
|
await syncCommentsSNtoGlpi(comments, ticket);
|
|
}
|
|
|
|
await syncCommentsGlpitoSN(ticket);
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
processCommentsController
|
|
};
|