feat(logging): implement debug logging for network map scheduler to enhance monitoring and diagnostics
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m52s

This commit is contained in:
2026-02-24 13:26:28 +07:00
parent 07bcbe70c2
commit 6290a84cd3
2 changed files with 47 additions and 4 deletions
-1
View File
@@ -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}
+47 -3
View File
@@ -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();