From 6290a84cd36f5b30bd39f03513123adca5fc0029 Mon Sep 17 00:00:00 2001 From: shats Date: Tue, 24 Feb 2026 13:26:28 +0700 Subject: [PATCH] feat(logging): implement debug logging for network map scheduler to enhance monitoring and diagnostics --- .cursor/debug-378b5f.log | 1 - backend/services/networkMapScheduler.js | 50 +++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/.cursor/debug-378b5f.log b/.cursor/debug-378b5f.log index 7af9604..e69de29 100644 --- a/.cursor/debug-378b5f.log +++ b/.cursor/debug-378b5f.log @@ -1 +0,0 @@ -{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771912788315} diff --git a/backend/services/networkMapScheduler.js b/backend/services/networkMapScheduler.js index 11a6e88..cf7922e 100644 --- a/backend/services/networkMapScheduler.js +++ b/backend/services/networkMapScheduler.js @@ -14,6 +14,25 @@ const NETWORK_MAP_CACHE_KEY = 'network-map-cache/latest.json'; const DEFAULT_INTERVAL_MINUTES = 5; const DEFAULT_LOG_MAX_LINES = 500; +const DEBUG_ENDPOINT = 'http://127.0.0.1:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266'; + +function sendDebugLog(location, message, data, hypothesisId = 'H_STARTUP_SPEEDTEST') { + // #region agent log + fetch(DEBUG_ENDPOINT, { + method: 'POST', + headers: { 'Content-Type': 'application/json', 'X-Debug-Session-Id': '378b5f' }, + body: JSON.stringify({ + sessionId: '378b5f', + runId: 'nm-startup-investigation', + hypothesisId, + location, + message, + data: data || {}, + timestamp: Date.now(), + }), + }).catch(() => {}); + // #endregion +} /** Кольцевой буфер логов */ class LogBuffer { @@ -350,8 +369,9 @@ function getSettingsFromUiSettings(uiSettings) { function initNetworkMapScheduler(logger, port) { const log = logger || console; const baseUrl = `http://127.0.0.1:${port}`; + sendDebugLog('backend/services/networkMapScheduler.js:init', 'initNetworkMapScheduler called', { port, baseUrl }); - async function tick() { + async function tick(source = 'interval') { lastScheduledRunAt = Date.now(); let uiSettings; try { @@ -361,14 +381,27 @@ function initNetworkMapScheduler(logger, port) { return; } const settings = getSettingsFromUiSettings(uiSettings); + sendDebugLog('backend/services/networkMapScheduler.js:tick-settings', 'Tick evaluated settings', { + source, + enabled: settings.enabled, + intervalMinutes: settings.intervalMinutes, + runPing: settings.runPing, + runSpeedTest: settings.runSpeedTest, + }); if (!settings.enabled) return; logBuffer.setMaxLines(settings.logMaxLines); logBuffer.push('--- Запуск по расписанию ---'); + sendDebugLog('backend/services/networkMapScheduler.js:tick-runjob', 'Tick starts runJob', { + source, + runPing: settings.runPing, + runSpeedTest: settings.runSpeedTest, + }); runJob({ baseUrl, runPing: settings.runPing, runSpeedTest: settings.runSpeedTest, + trigger: source === 'startup-delay' ? 'startup-delay' : 'scheduled', log: (msg) => { logBuffer.push(msg); log.info({ component: 'network-map-scheduler' }, msg); @@ -388,6 +421,13 @@ function initNetworkMapScheduler(logger, port) { return; } const settings = getSettingsFromUiSettings(uiSettings); + sendDebugLog('backend/services/networkMapScheduler.js:schedule-settings', 'Schedule loaded settings', { + enabled: settings.enabled, + intervalMinutes: settings.intervalMinutes, + runPing: settings.runPing, + runSpeedTest: settings.runSpeedTest, + logMaxLines: settings.logMaxLines, + }); if (!settings.enabled) { log.info({ component: 'network-map-scheduler' }, 'Scheduler disabled in settings'); return; @@ -399,9 +439,13 @@ function initNetworkMapScheduler(logger, port) { 'Network map scheduler started (first run in 10 s, then every %d min)', settings.intervalMinutes ); - schedulerTimer = setInterval(tick, intervalMs); + schedulerTimer = setInterval(() => tick('interval'), intervalMs); // Первый запуск через 10 сек, чтобы кеш появился вскоре после старта сервера - setTimeout(() => tick(), 10 * 1000); + sendDebugLog('backend/services/networkMapScheduler.js:schedule-startup-tick', 'Startup delayed tick scheduled', { + delayMs: 10000, + intervalMs, + }); + setTimeout(() => tick('startup-delay'), 10 * 1000); } schedule();