feat(sat-sync): bajar concurrencia a 3 y aumentar pausa entre lotes a 30s
This commit is contained in:
@@ -15,11 +15,12 @@ const SYNC_CRON_SCHEDULE = '0 3-7 * * *'; // 3:00–7:00 AM CDMX — ~20% de ten
|
|||||||
const RECOVERY_CRON_SCHEDULE = '0 14 * * *'; // 2:00 PM todos los días
|
const RECOVERY_CRON_SCHEDULE = '0 14 * * *'; // 2:00 PM todos los días
|
||||||
const RETRY_4PM_CRON_SCHEDULE = '0 16 * * *'; // 4:00 PM todos los días
|
const RETRY_4PM_CRON_SCHEDULE = '0 16 * * *'; // 4:00 PM todos los días
|
||||||
const CONCURRENT_SYNCS = 3; // Máximo de sincronizaciones simultáneas (legacy, se mantiene por compatibilidad)
|
const CONCURRENT_SYNCS = 3; // Máximo de sincronizaciones simultáneas (legacy, se mantiene por compatibilidad)
|
||||||
const CONCURRENT_CONTRIBUYENTES = Number(process.env.SAT_CONCURRENT_CONTRIBUYENTES || '5'); // Máximo de contribuyentes en paralelo
|
const CONCURRENT_CONTRIBUYENTES = Number(process.env.SAT_CONCURRENT_CONTRIBUYENTES || '3'); // Máximo de contribuyentes en paralelo
|
||||||
const OPINION_CRON_SCHEDULE = '0 4 * * 0'; // Sundays 4:00 AM
|
const OPINION_CRON_SCHEDULE = '0 4 * * 0'; // Sundays 4:00 AM
|
||||||
const CSF_CRON_SCHEDULE = '0 4 1 * *'; // Día 1 de cada mes 04:00 AM (CSF mensual)
|
const CSF_CRON_SCHEDULE = '0 4 1 * *'; // Día 1 de cada mes 04:00 AM (CSF mensual)
|
||||||
const INCREMENTAL_CRON_SCHEDULE = '0 12,16 * * *'; // 12:00 PM y 4:00 PM CDMX
|
const INCREMENTAL_CRON_SCHEDULE = '0 12,16 * * *'; // 12:00 PM y 4:00 PM CDMX
|
||||||
const BATCH_JITTER_MS = Number(process.env.SAT_BATCH_JITTER_MS || '60000'); // Jitter máximo entre inicios de sync en un batch (default 60s)
|
const BATCH_JITTER_MS = Number(process.env.SAT_BATCH_JITTER_MS || '60000'); // Jitter máximo entre inicios de sync en un batch (default 60s)
|
||||||
|
const BATCH_DELAY_MS = Number(process.env.SAT_BATCH_DELAY_MS || '30000'); // Pausa entre lotes para no saturar al SAT
|
||||||
const SUBSCRIPTION_LIFECYCLE_CRON = '30 2 * * *'; // 2:30 AM diario — aplica pending changes + expira trials
|
const SUBSCRIPTION_LIFECYCLE_CRON = '30 2 * * *'; // 2:30 AM diario — aplica pending changes + expira trials
|
||||||
const EXPIRY_REMINDERS_CRON = '0 9 * * *'; // 9:00 AM diario — avisos pre-vencimiento (7d/3d/1d/0d)
|
const EXPIRY_REMINDERS_CRON = '0 9 * * *'; // 9:00 AM diario — avisos pre-vencimiento (7d/3d/1d/0d)
|
||||||
|
|
||||||
@@ -384,9 +385,10 @@ async function runSyncJob(): Promise<void> {
|
|||||||
return syncUnit(unit, '[SAT Cron]');
|
return syncUnit(unit, '[SAT Cron]');
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Pequeña pausa entre lotes
|
// Pausa entre lotes para no saturar al SAT
|
||||||
if (i + CONCURRENT_CONTRIBUYENTES < units.length) {
|
if (i + CONCURRENT_CONTRIBUYENTES < units.length) {
|
||||||
await new Promise(resolve => setTimeout(resolve, 5000));
|
console.log(`[SAT Cron] Pausa de ${BATCH_DELAY_MS / 1000}s entre lotes`);
|
||||||
|
await new Promise(resolve => setTimeout(resolve, BATCH_DELAY_MS));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -533,8 +535,10 @@ async function runIncrementalSyncJob(): Promise<void> {
|
|||||||
return syncUnit(unit, '[SAT Cron Inc]');
|
return syncUnit(unit, '[SAT Cron Inc]');
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
// Pausa entre lotes para no saturar al SAT
|
||||||
if (i + CONCURRENT_CONTRIBUYENTES < units.length) {
|
if (i + CONCURRENT_CONTRIBUYENTES < units.length) {
|
||||||
await new Promise(resolve => setTimeout(resolve, 5000));
|
console.log(`[SAT Cron Inc] Pausa de ${BATCH_DELAY_MS / 1000}s entre lotes`);
|
||||||
|
await new Promise(resolve => setTimeout(resolve, BATCH_DELAY_MS));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ module.exports = {
|
|||||||
NODE_ENV: 'production',
|
NODE_ENV: 'production',
|
||||||
PORT: 4000,
|
PORT: 4000,
|
||||||
SAT_SYNC_EXCLUDED_TENANTS: 'DEMO2501019X2',
|
SAT_SYNC_EXCLUDED_TENANTS: 'DEMO2501019X2',
|
||||||
|
SAT_CONCURRENT_CONTRIBUYENTES: '3',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user