Dispatcher: evitar ticks solapados, enviar en lotes y mejorar logs
- index.ts: guard tickRunning; un tick largo ya no se solapa con el siguiente de node-cron (causaba -2035 en @EVN1 y -1116 cruzados por requests concurrentes sobre la misma sesion de Service Layer). - process-tick.ts: un evento con error ya no corta el tick; progreso cada 100 eventos; envios en lotes de MAX_EVENTS_PER_BATCH (default 30) para no superar el tamano de body del receptor (HTTP 413). - evn1-repository.ts: findExisting falla si el GET falla, en vez de tratarlo como "no existe" y crear un duplicado. - service-layer-client.ts: errores incluyen metodo, ruta y body. - logger.ts: no poder escribir el archivo de log no tumba el proceso. - CLAUDE.md: notas operativas y mejoras pendientes.
This commit is contained in:
1 parent
9e85c4cee8
commit
5a2e149825
8 files changed
+154
-45
No files matched your search
+12
-1
@@ -34,9 +34,20 @@ function logFilePath(date: Date): string {
|
||||
return `${LOGS_DIR}dispatcher-${day}.log`;
|
||||
}
|
||||
|
||||
// No poder escribir el archivo de log (ej. creado por el servicio como
|
||||
// SYSTEM y corrido a mano con otro usuario: EPERM) nunca debe tumbar el
|
||||
// dispatcher a mitad de un tick — se avisa una vez y se sigue solo por consola.
|
||||
let fileWriteFailed = false;
|
||||
|
||||
function write(level: string, message: string): void {
|
||||
if (fileWriteFailed) return;
|
||||
const now = new Date();
|
||||
appendFileSync(logFilePath(now), `${localTimestamp(now)} [${level}] ${message}\n`);
|
||||
try {
|
||||
appendFileSync(logFilePath(now), `${localTimestamp(now)} [${level}] ${message}\n`);
|
||||
} catch (err) {
|
||||
fileWriteFailed = true;
|
||||
console.warn(`[logger] No se pudo escribir ${logFilePath(now)} (${err instanceof Error ? err.message : String(err)}) — se sigue solo por consola.`);
|
||||
}
|
||||
}
|
||||
|
||||
// Errores de red de axios (ECONNREFUSED, timeout, DNS...): primero se
|
||||
|
||||
Reference in new issue
Block a user