refactor(logging): remove agent logging from various components to streamline code and improve maintainability
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m49s

This commit is contained in:
2026-02-24 13:53:41 +07:00
parent 8035b7751f
commit b56df61c8f
11 changed files with 197 additions and 146 deletions
+196
View File
@@ -2,3 +2,199 @@
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915608646}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915615281}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915615733}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915668305}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915668662}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915674375}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915680196}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915728302}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915728641}
{"sessionId":"378b5f","runId":"nm-startup-investigation","hypothesisId":"H_STARTUP_SPEEDTEST","location":"backend/services/networkMapScheduler.js:init","message":"initNetworkMapScheduler called","data":{"port":3001,"baseUrl":"http://127.0.0.1:3001"},"timestamp":1771915726890}
{"sessionId":"378b5f","runId":"nm-startup-investigation","hypothesisId":"H_STARTUP_SPEEDTEST","location":"backend/services/networkMapScheduler.js:schedule-settings","message":"Schedule loaded settings","data":{"enabled":true,"intervalMinutes":90,"runPing":true,"runSpeedTest":true,"logMaxLines":500},"timestamp":1771915727143}
{"sessionId":"378b5f","runId":"nm-startup-investigation","hypothesisId":"H_STARTUP_SPEEDTEST","location":"backend/services/networkMapScheduler.js:schedule-startup-tick-skipped","message":"Startup delayed tick skipped","data":{"reason":"disabled_to_avoid_immediate_speedtest_after_restart","intervalMs":5400000},"timestamp":1771915727144}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915727565}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":194,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":107,"hasError":false},{"serverId":"msk-vpsville","durationMs":105,"hasError":false},{"serverId":"msk-dc","durationMs":104,"hasError":false},{"serverId":"srv-5","durationMs":96,"hasError":false},{"serverId":"nsk-servhost","durationMs":20,"hasError":false}]},"timestamp":1771915727673}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915735275}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915732376}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":130,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":56,"hasError":false},{"serverId":"msk-vpsville","durationMs":55,"hasError":false},{"serverId":"msk-dc","durationMs":54,"hasError":false},{"serverId":"srv-5","durationMs":49,"hasError":false},{"serverId":"rtk-home","durationMs":10,"hasError":false}]},"timestamp":1771915732433}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915735559}
{"sessionId":"378b5f","runId":"resource-stats-fix","hypothesisId":"H_RS_RETRY","location":"frontend/src/ResourceStatsPage.jsx:fetchStats","message":"Resource stats request started with noRetry","data":{"timeoutMs":15000,"noRetry":true,"hasAbortSignal":true},"timestamp":1771915750420}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H5","location":"frontend/src/App.jsx:route-change","message":"Route changed in MainLayout","data":{"pathname":"/resource-stats","layout":"fluid"},"timestamp":1771915750421}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/resources/stats"},"timestamp":1771915750422}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915750422}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915747398}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915747822}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":1426,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"mts-home","durationMs":1345,"hasError":false},{"serverId":"rtk-home","durationMs":1342,"hasError":false},{"serverId":"msk-ihor","durationMs":107,"hasError":false},{"serverId":"msk-dc","durationMs":106,"hasError":false},{"serverId":"msk-vpsville","durationMs":104,"hasError":false}]},"timestamp":1771915748744}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/resources/stats","status":200},"timestamp":1771915751868}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":2938,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":2819,"hasError":false},{"serverId":"msk-vpsville","durationMs":1853,"hasError":false},{"serverId":"mts-home","durationMs":928,"hasError":false},{"serverId":"rtk-home","durationMs":925,"hasError":false},{"serverId":"msk-dc","durationMs":53,"hasError":false}]},"timestamp":1771915750642}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915753763}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H5","location":"frontend/src/App.jsx:route-change","message":"Route changed in MainLayout","data":{"pathname":"/dashboard","layout":"fluid"},"timestamp":1771915754247}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/domains-new"},"timestamp":1771915754255}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/servers"},"timestamp":1771915754256}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/ip-ranges"},"timestamp":1771915754256}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/asns"},"timestamp":1771915754256}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/servers/availability"},"timestamp":1771915754256}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/s3/last-modified"},"timestamp":1771915754256}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/ping-services-list"},"timestamp":1771915754256}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/ping-services"},"timestamp":1771915754256}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/ip-ranges","status":200},"timestamp":1771915754378}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/domains-new","status":200},"timestamp":1771915754378}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/ping-services-list","status":200},"timestamp":1771915754452}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/s3/last-modified","status":200},"timestamp":1771915754497}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/servers","status":200},"timestamp":1771915754498}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/asns","status":200},"timestamp":1771915754511}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/ping-services","status":200},"timestamp":1771915754665}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/servers/availability","status":200},"timestamp":1771915755483}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/ui-settings"},"timestamp":1771915756475}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/traffic/interface-stats"},"timestamp":1771915756475}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H5","location":"frontend/src/App.jsx:route-change","message":"Route changed in MainLayout","data":{"pathname":"/traffic","layout":"fluid"},"timestamp":1771915756471}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/ui-settings","status":200},"timestamp":1771915756563}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/traffic/interface-stats","status":200},"timestamp":1771915760644}
{"sessionId":"378b5f","runId":"resource-stats-fix","hypothesisId":"H_RS_RETRY","location":"frontend/src/ResourceStatsPage.jsx:fetchStats","message":"Resource stats request started with noRetry","data":{"timeoutMs":15000,"noRetry":true,"hasAbortSignal":true},"timestamp":1771915762275}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/resources/stats"},"timestamp":1771915762279}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H5","location":"frontend/src/App.jsx:route-change","message":"Route changed in MainLayout","data":{"pathname":"/resource-stats","layout":"fluid"},"timestamp":1771915762275}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915759248}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":631,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"nsk-servhost","durationMs":561,"hasError":false},{"serverId":"msk-ihor","durationMs":107,"hasError":false},{"serverId":"msk-vpsville","durationMs":105,"hasError":false},{"serverId":"msk-dc","durationMs":104,"hasError":false},{"serverId":"srv-5","durationMs":91,"hasError":false}]},"timestamp":1771915759810}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/resources/stats","status":200},"timestamp":1771915762934}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/servers"},"timestamp":1771915764242}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/network-config"},"timestamp":1771915764242}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H5","location":"frontend/src/App.jsx:route-change","message":"Route changed in MainLayout","data":{"pathname":"/network-map","layout":"fluid"},"timestamp":1771915764240}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/ui-settings"},"timestamp":1771915764242}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/network-map-cache"},"timestamp":1771915764242}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/servers","status":304},"timestamp":1771915764331}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/network-config","status":200},"timestamp":1771915764338}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/ui-settings","status":304},"timestamp":1771915764337}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/network-map-cache","status":200},"timestamp":1771915764359}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H5","location":"frontend/src/App.jsx:route-change","message":"Route changed in MainLayout","data":{"pathname":"/interface-speed","layout":"fluid"},"timestamp":1771915782869}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/servers"},"timestamp":1771915782877}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/network-config"},"timestamp":1771915782877}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/ui-settings"},"timestamp":1771915782877}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/ui-settings","status":304},"timestamp":1771915782980}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/servers","status":304},"timestamp":1771915782980}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/network-config","status":304},"timestamp":1771915782983}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H5","location":"frontend/src/App.jsx:route-change","message":"Route changed in MainLayout","data":{"pathname":"/mikrotik-tools","layout":"fluid"},"timestamp":1771915783798}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/network-config"},"timestamp":1771915783803}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/servers"},"timestamp":1771915783803}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/network-config","status":304},"timestamp":1771915783890}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/servers","status":304},"timestamp":1771915783890}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H5","location":"frontend/src/App.jsx:route-change","message":"Route changed in MainLayout","data":{"pathname":"/mikrotik-backups","layout":"fluid"},"timestamp":1771915784696}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/servers"},"timestamp":1771915784701}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/ui-settings"},"timestamp":1771915784702}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/servers","status":304},"timestamp":1771915784791}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/ui-settings","status":304},"timestamp":1771915784792}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/mikrotik/backups"},"timestamp":1771915784814}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/mikrotik/backups","status":200},"timestamp":1771915784933}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H5","location":"frontend/src/App.jsx:route-change","message":"Route changed in MainLayout","data":{"pathname":"/auto-urls","layout":"fluid"},"timestamp":1771915787629}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/auto-urls"},"timestamp":1771915787637}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/auto-urls","status":200},"timestamp":1771915787714}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915788300}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915785416}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915785444}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":170,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":106,"hasError":false},{"serverId":"msk-vpsville","durationMs":105,"hasError":false},{"serverId":"msk-dc","durationMs":105,"hasError":false},{"serverId":"srv-5","durationMs":90,"hasError":false},{"serverId":"rtk-home","durationMs":17,"hasError":false}]},"timestamp":1771915785523}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915788642}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":181,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":106,"hasError":false},{"serverId":"msk-dc","durationMs":106,"hasError":false},{"serverId":"msk-vpsville","durationMs":104,"hasError":false},{"serverId":"srv-5","durationMs":89,"hasError":false},{"serverId":"rtk-home","durationMs":8,"hasError":false}]},"timestamp":1771915785551}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915785748}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":119,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":54,"hasError":false},{"serverId":"msk-vpsville","durationMs":53,"hasError":false},{"serverId":"msk-dc","durationMs":53,"hasError":false},{"serverId":"srv-5","durationMs":46,"hasError":false},{"serverId":"nsk-servhost","durationMs":24,"hasError":false}]},"timestamp":1771915785802}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915786000}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":118,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":54,"hasError":false},{"serverId":"msk-vpsville","durationMs":53,"hasError":false},{"serverId":"msk-dc","durationMs":52,"hasError":false},{"serverId":"srv-5","durationMs":45,"hasError":false},{"serverId":"mts-home","durationMs":13,"hasError":false}]},"timestamp":1771915786055}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/servers"},"timestamp":1771915794784}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H5","location":"frontend/src/App.jsx:route-change","message":"Route changed in MainLayout","data":{"pathname":"/uptime-monitor","layout":"fluid"},"timestamp":1771915794781}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/ui-settings"},"timestamp":1771915794785}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/ui-settings","status":304},"timestamp":1771915794876}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/servers","status":304},"timestamp":1771915794876}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/uptime/cache"},"timestamp":1771915794882}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/uptime/cache","status":200},"timestamp":1771915795034}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915798889}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915798888}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915798889}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915798889}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915801307}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915801308}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915801330}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915801330}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915801346}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915801347}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915802315}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915803782}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915803896}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915806095}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H5","location":"frontend/src/App.jsx:route-change","message":"Route changed in MainLayout","data":{"pathname":"/uptime-monitor","layout":"fluid"},"timestamp":1771915807766}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/servers"},"timestamp":1771915807769}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915807769}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/ui-settings"},"timestamp":1771915807769}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/servers","status":200},"timestamp":1771915807844}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/ui-settings","status":200},"timestamp":1771915807847}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/uptime/cache"},"timestamp":1771915807857}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/uptime/cache","status":200},"timestamp":1771915807937}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915804867}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":178,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":110,"hasError":false},{"serverId":"msk-vpsville","durationMs":104,"hasError":false},{"serverId":"msk-dc","durationMs":102,"hasError":false},{"serverId":"srv-5","durationMs":93,"hasError":false},{"serverId":"rtk-home","durationMs":12,"hasError":false}]},"timestamp":1771915804978}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915808100}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915811862}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915811862}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915811862}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915811862}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915814222}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915814221}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915814310}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915814310}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915814452}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915814452}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915815384}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915816567}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915816902}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915818621}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915848292}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915845424}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915845504}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":179,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-dc","durationMs":114,"hasError":false},{"serverId":"msk-ihor","durationMs":106,"hasError":false},{"serverId":"srv-5","durationMs":106,"hasError":false},{"serverId":"msk-vpsville","durationMs":105,"hasError":false},{"serverId":"nsk-servhost","durationMs":19,"hasError":false}]},"timestamp":1771915845539}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":255,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":104,"hasError":false},{"serverId":"msk-vpsville","durationMs":104,"hasError":false},{"serverId":"msk-dc","durationMs":104,"hasError":false},{"serverId":"srv-5","durationMs":94,"hasError":false},{"serverId":"rtk-home","durationMs":16,"hasError":false}]},"timestamp":1771915845609}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915848728}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915845921}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":235,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":53,"hasError":false},{"serverId":"msk-vpsville","durationMs":53,"hasError":false},{"serverId":"msk-dc","durationMs":53,"hasError":false},{"serverId":"srv-5","durationMs":48,"hasError":false},{"serverId":"nsk-servhost","durationMs":15,"hasError":false}]},"timestamp":1771915845974}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915846181}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":121,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":54,"hasError":false},{"serverId":"msk-vpsville","durationMs":53,"hasError":false},{"serverId":"msk-dc","durationMs":53,"hasError":false},{"serverId":"srv-5","durationMs":48,"hasError":false},{"serverId":"mts-home","durationMs":15,"hasError":false}]},"timestamp":1771915846235}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915868279}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915865487}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":291,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-vpsville","durationMs":107,"hasError":false},{"serverId":"msk-ihor","durationMs":106,"hasError":false},{"serverId":"msk-dc","durationMs":104,"hasError":false},{"serverId":"srv-5","durationMs":93,"hasError":false},{"serverId":"nsk-servhost","durationMs":21,"hasError":false}]},"timestamp":1771915865595}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915868718}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915908321}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915905436}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":182,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-dc","durationMs":114,"hasError":false},{"serverId":"msk-ihor","durationMs":107,"hasError":false},{"serverId":"msk-vpsville","durationMs":106,"hasError":false},{"serverId":"srv-5","durationMs":95,"hasError":false},{"serverId":"mts-home","durationMs":20,"hasError":false}]},"timestamp":1771915905550}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915908669}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915905569}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":133,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":54,"hasError":false},{"serverId":"msk-vpsville","durationMs":53,"hasError":false},{"serverId":"msk-dc","durationMs":53,"hasError":false},{"serverId":"srv-5","durationMs":48,"hasError":false},{"serverId":"rtk-home","durationMs":9,"hasError":false}]},"timestamp":1771915905623}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915905839}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":123,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":54,"hasError":false},{"serverId":"msk-dc","durationMs":53,"hasError":false},{"serverId":"msk-vpsville","durationMs":52,"hasError":false},{"serverId":"srv-5","durationMs":47,"hasError":false},{"serverId":"mts-home","durationMs":14,"hasError":false}]},"timestamp":1771915905893}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915906106}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":123,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":53,"hasError":false},{"serverId":"msk-vpsville","durationMs":53,"hasError":false},{"serverId":"msk-dc","durationMs":53,"hasError":false},{"serverId":"srv-5","durationMs":47,"hasError":false},{"serverId":"mts-home","durationMs":17,"hasError":false}]},"timestamp":1771915906160}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915928268}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915928269}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915928269}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915928270}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915928269}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915925527}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":2178,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"srv-5","durationMs":2105,"hasError":false},{"serverId":"msk-ihor","durationMs":108,"hasError":false},{"serverId":"msk-vpsville","durationMs":107,"hasError":false},{"serverId":"msk-dc","durationMs":105,"hasError":false},{"serverId":"nsk-servhost","durationMs":25,"hasError":false}]},"timestamp":1771915927633}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915930758}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915930761}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915930781}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915930890}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915930889}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"POST","url":"/uptime/check"},"timestamp":1771915930917}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915930916}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915931830}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915933096}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915933355}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"POST","url":"/uptime/check","status":200},"timestamp":1771915935261}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915968311}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915965553}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915965560}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":171,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":106,"hasError":false},{"serverId":"msk-vpsville","durationMs":105,"hasError":false},{"serverId":"msk-dc","durationMs":102,"hasError":false},{"serverId":"srv-5","durationMs":90,"hasError":false},{"serverId":"mts-home","durationMs":34,"hasError":false}]},"timestamp":1771915965659}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915968778}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":298,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":105,"hasError":false},{"serverId":"msk-vpsville","durationMs":105,"hasError":false},{"serverId":"msk-dc","durationMs":103,"hasError":false},{"serverId":"srv-5","durationMs":93,"hasError":false},{"serverId":"rtk-home","durationMs":33,"hasError":false}]},"timestamp":1771915965666}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915965889}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":127,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":54,"hasError":false},{"serverId":"msk-vpsville","durationMs":53,"hasError":false},{"serverId":"msk-dc","durationMs":52,"hasError":false},{"serverId":"srv-5","durationMs":48,"hasError":false},{"serverId":"rtk-home","durationMs":14,"hasError":false}]},"timestamp":1771915965943}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915966170}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":127,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-ihor","durationMs":55,"hasError":false},{"serverId":"msk-vpsville","durationMs":53,"hasError":false},{"serverId":"srv-5","durationMs":53,"hasError":false},{"serverId":"msk-dc","durationMs":53,"hasError":false},{"serverId":"nsk-servhost","durationMs":17,"hasError":false}]},"timestamp":1771915966225}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:request","message":"API request started","data":{"method":"GET","url":"/alerts"},"timestamp":1771915988276}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers","message":"Resource stats routers loaded","data":{"serversCount":12,"routersCount":7},"timestamp":1771915985368}
{"sessionId":"378b5f","runId":"resource-stats-investigation","hypothesisId":"H_RS_BACKEND_SLOW","location":"backend/routes/resourceStatsRoutes.js:getResourceStatsData-done","message":"Resource stats aggregate timing","data":{"totalDurationMs":175,"routersCount":7,"errorsCount":0,"slowRouters":[{"serverId":"msk-vpsville","durationMs":106,"hasError":false},{"serverId":"msk-dc","durationMs":106,"hasError":false},{"serverId":"msk-ihor","durationMs":105,"hasError":false},{"serverId":"srv-5","durationMs":90,"hasError":false},{"serverId":"rtk-home","durationMs":13,"hasError":false}]},"timestamp":1771915985475}
{"sessionId":"378b5f","runId":"baseline","hypothesisId":"H1_H2","location":"frontend/src/lib/api.js:response","message":"API response received","data":{"method":"GET","url":"/alerts","status":200},"timestamp":1771915988597}
-44
View File
@@ -7,25 +7,6 @@ const { sendError } = require('../middleware/errorHandler');
const { decrypt } = require('../utils/encryption');
const { readServersFromS3 } = require('./serversRoutes');
const { createRosClient } = require('../services/mikrotikApplyService');
const DEBUG_ENDPOINT = 'http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266';
function sendDebugLog(location, message, data, hypothesisId = 'H_RS_BACKEND_SLOW') {
// #region agent log
fetch(DEBUG_ENDPOINT, {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-Debug-Session-Id': '378b5f' },
body: JSON.stringify({
sessionId: '378b5f',
runId: 'resource-stats-investigation',
hypothesisId,
location,
message,
data: data || {},
timestamp: Date.now(),
}),
}).catch(() => {});
// #endregion
}
function getMikrotikCredentials(server) {
if (!server || (server.type !== 'jumphost' && server.type !== 'home')) return null;
@@ -96,7 +77,6 @@ function parseResource(raw) {
* Внутренняя функция: возвращает данные по ресурсам роутеров (без HTTP).
*/
async function getResourceStatsData() {
const startedAt = Date.now();
const servers = await readServersFromS3();
const routers = (Array.isArray(servers) ? servers : []).filter(
(s) =>
@@ -104,14 +84,9 @@ async function getResourceStatsData() {
(String(s.type || '').toLowerCase() === 'jumphost' ||
String(s.type || '').toLowerCase() === 'home')
);
sendDebugLog('backend/routes/resourceStatsRoutes.js:getResourceStatsData-routers', 'Resource stats routers loaded', {
serversCount: Array.isArray(servers) ? servers.length : 0,
routersCount: routers.length,
});
const results = await Promise.all(
routers.map(async (server) => {
const routerStartedAt = Date.now();
const serverId = server.id || server.dns || server.ip;
const name = server.name || server.dns || server.ip || serverId;
const host = server.mikrotikHost || server.ip || server.dns;
@@ -123,7 +98,6 @@ async function getResourceStatsData() {
name,
host,
groupKey: server.groupKey || null,
durationMs: Date.now() - routerStartedAt,
error: 'MikroTik API не настроен или нет пароля',
resource: null,
};
@@ -139,7 +113,6 @@ async function getResourceStatsData() {
name,
host,
groupKey: server.groupKey || null,
durationMs: Date.now() - routerStartedAt,
error: null,
resource,
};
@@ -150,7 +123,6 @@ async function getResourceStatsData() {
name,
host,
groupKey: server.groupKey || null,
durationMs: Date.now() - routerStartedAt,
error: msg,
resource: null,
};
@@ -158,22 +130,6 @@ async function getResourceStatsData() {
})
);
const totalDurationMs = Date.now() - startedAt;
const slowRouters = results
.map((r) => ({
serverId: r.serverId,
durationMs: Number(r.durationMs || 0),
hasError: Boolean(r.error),
}))
.sort((a, b) => b.durationMs - a.durationMs)
.slice(0, 5);
sendDebugLog('backend/routes/resourceStatsRoutes.js:getResourceStatsData-done', 'Resource stats aggregate timing', {
totalDurationMs,
routersCount: results.length,
errorsCount: results.filter((r) => Boolean(r.error)).length,
slowRouters,
});
return { routers: results };
}
-3
View File
@@ -148,9 +148,6 @@ function createTextDataPOST(s3Key, formatLine, validate, validateItem = null) {
} catch {}
if (current && (ifMatch || etag) && current !== String(ifMatch || etag)) {
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'baseline',hypothesisId:'H2',location:'backend/routes/textDataRoutes.js:etag-mismatch',message:'ETag mismatch detected in text POST',data:{s3Key:String(s3Key||''),currentEtag:String(current||''),providedEtag:String(ifMatch||etag||'')},timestamp:Date.now()})}).catch(()=>{});
// #endregion
const { headMeta } = require('../services/s3Service');
const meta = await headMeta(s3Key);
return sendError(res, 412, 'Precondition Failed: ETag mismatch', 'E_ETAG_MISMATCH', {
-9
View File
@@ -412,18 +412,12 @@ app.post('/api/server-filters/:serverId', serverConfigsRoutes.postServerFilters)
// === LOCKS ===
app.get('/api/locks/:resource', (req, res) => {
const status = getLockStatus(req.params.resource);
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'baseline',hypothesisId:'H4',location:'backend/server.js:locks-get',message:'Lock status requested',data:{resource:String(req?.params?.resource||''),locked:Boolean(status?.locked)},timestamp:Date.now()})}).catch(()=>{});
// #endregion
res.json(status);
});
app.post('/api/locks/:resource', (req, res) => {
const { owner = 'anonymous', ttlSeconds = 120 } = req.body || {};
const result = acquireLock(req.params.resource, owner, ttlSeconds);
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'baseline',hypothesisId:'H4',location:'backend/server.js:locks-post',message:'Lock acquire attempted',data:{resource:String(req?.params?.resource||''),owner:String(owner||''),success:Boolean(result?.success),locked:Boolean(result?.locked)},timestamp:Date.now()})}).catch(()=>{});
// #endregion
if (!result.success) {
return sendError(res, 423, 'Resource is locked by another user', 'E_RESOURCE_LOCKED', {
owner: result.owner,
@@ -435,9 +429,6 @@ app.post('/api/locks/:resource', (req, res) => {
app.delete('/api/locks/:resource', (req, res) => {
const result = releaseLock(req.params.resource);
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'baseline',hypothesisId:'H4',location:'backend/server.js:locks-delete',message:'Lock released',data:{resource:String(req?.params?.resource||''),released:Boolean(result?.released)},timestamp:Date.now()})}).catch(()=>{});
// #endregion
res.json(result);
});
-45
View File
@@ -14,25 +14,6 @@ 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://192.168.10.2: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 {
@@ -369,7 +350,6 @@ 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(source = 'interval') {
lastScheduledRunAt = Date.now();
@@ -381,22 +361,10 @@ 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,
@@ -421,13 +389,6 @@ 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;
@@ -440,12 +401,6 @@ function initNetworkMapScheduler(logger, port) {
settings.intervalMinutes
);
schedulerTimer = setInterval(() => tick('interval'), intervalMs);
// #region agent log
sendDebugLog('backend/services/networkMapScheduler.js:schedule-startup-tick-skipped', 'Startup delayed tick skipped', {
reason: 'disabled_to_avoid_immediate_speedtest_after_restart',
intervalMs,
});
// #endregion
}
schedule();
-3
View File
@@ -197,9 +197,6 @@ function MainLayout() {
}, [location.pathname, layout]);
useEffect(() => {
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'baseline',hypothesisId:'H5',location:'frontend/src/App.jsx:route-change',message:'Route changed in MainLayout',data:{pathname:String(location?.pathname||''),layout:String(layout||'')},timestamp:Date.now()})}).catch(()=>{});
// #endregion
}, [location.pathname, layout]);
// Состояние для управления выпадающими меню
-3
View File
@@ -152,9 +152,6 @@ export default function ResourceStatsPage() {
setLoading(true);
setError(null);
const opts = { timeout: REQUEST_TIMEOUT_MS, noRetry: true, ...(abortSignal ? { signal: abortSignal } : {}) };
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'resource-stats-fix',hypothesisId:'H_RS_RETRY',location:'frontend/src/ResourceStatsPage.jsx:fetchStats',message:'Resource stats request started with noRetry',data:{timeoutMs:REQUEST_TIMEOUT_MS,noRetry:true,hasAbortSignal:Boolean(abortSignal)},timestamp:Date.now()})}).catch(()=>{});
// #endregion
try {
const res = await api.get('/resources/stats', opts);
const data = res?.data;
-6
View File
@@ -191,9 +191,6 @@ export default function UptimeMonitorPage() {
ms = typeof checkData?.ms === 'number' ? checkData.ms : Date.now() - t0;
} catch (e) {
if (e?.code === 'ERR_CANCELED' || e?.name === 'CanceledError' || e?.name === 'AbortError') {
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'post-fix',hypothesisId:'H7',location:'frontend/src/UptimeMonitorPage.jsx:uptime-check-canceled',message:'Canceled uptime check request',data:{serverId:String(serverId||''),path:String(location?.pathname||'')},timestamp:Date.now()})}).catch(()=>{});
// #endregion
setCurrentCheckingServerIds((prev) => prev.filter((id) => id !== serverId));
checkControllersRef.current.delete(controller);
continue;
@@ -246,9 +243,6 @@ export default function UptimeMonitorPage() {
checkControllersRef.current.clear();
setCurrentCheckingServerIds([]);
setChecking(false);
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'post-fix',hypothesisId:'H7',location:'frontend/src/UptimeMonitorPage.jsx:leave-page',message:'Stopped uptime background checks on page leave',data:{pathname:String(location?.pathname||'')},timestamp:Date.now()})}).catch(()=>{});
// #endregion
}, [location.pathname]);
useEffect(() => {
+1 -4
View File
@@ -23,10 +23,7 @@ class ErrorBoundary extends Component {
componentDidCatch(error, errorInfo) {
// Логируем ошибку
console.error('ErrorBoundary caught an error:', error, errorInfo);
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'baseline',hypothesisId:'H3',location:'frontend/src/components/ErrorBoundary.jsx:componentDidCatch',message:'React ErrorBoundary caught error',data:{message:String(error?.message||''),name:String(error?.name||''),componentStack:String(errorInfo?.componentStack||'').slice(0,500)},timestamp:Date.now()})}).catch(()=>{});
// #endregion
// Отправляем в мониторинг (если настроен)
this.logErrorToService(error, errorInfo);
-10
View File
@@ -63,10 +63,6 @@ export function PingProvider({ children }) {
toRequest.push({ routerId, ip, key });
});
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'post-fix',hypothesisId:'H6',location:'frontend/src/contexts/PingContext.jsx:requestPings',message:'Ping batch scheduled',data:{scope,count:toRequest.length,force},timestamp:Date.now()})}).catch(()=>{});
// #endregion
toRequest.forEach(({ routerId, ip, key }) => {
const controller = new AbortController();
controllersRef.current.set(key, controller);
@@ -84,9 +80,6 @@ export function PingProvider({ children }) {
})
.catch((e) => {
if (e?.code === 'ERR_CANCELED' || e?.name === 'CanceledError' || e?.name === 'AbortError') {
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'post-fix',hypothesisId:'H6',location:'frontend/src/contexts/PingContext.jsx:ping-canceled',message:'Ping request canceled',data:{routerId:String(routerId||''),gatewayIp:String(ip||''),scope:String(keyScopesRef.current.get(key)||'')},timestamp:Date.now()})}).catch(()=>{});
// #endregion
return;
}
console.warn('PingContext: failed to fetch ping for', routerId, ip, e?.message || e);
@@ -111,9 +104,6 @@ export function PingProvider({ children }) {
canceled += 1;
}
});
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'post-fix',hypothesisId:'H6',location:'frontend/src/contexts/PingContext.jsx:cancelScope',message:'Canceled ping scope',data:{scope:scopeName,canceled},timestamp:Date.now()})}).catch(()=>{});
// #endregion
}, []);
const value = {
-19
View File
@@ -39,9 +39,6 @@ function buildCacheKey(config) {
// Улучшенный retry interceptor с поддержкой всех методов и типов ошибок
api.interceptors.response.use(
(response) => {
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'baseline',hypothesisId:'H1_H2',location:'frontend/src/lib/api.js:response',message:'API response received',data:{method:String(response?.config?.method||'get').toUpperCase(),url:String(response?.config?.url||''),status:Number(response?.status||0)},timestamp:Date.now()})}).catch(()=>{});
// #endregion
try {
const method = String(response?.config?.method || 'get').toLowerCase();
if (method === 'get') {
@@ -66,9 +63,6 @@ api.interceptors.response.use(
async (error) => {
const isCanceled = error?.code === 'ERR_CANCELED' || error?.name === 'CanceledError' || error?.name === 'AbortError';
if (isCanceled) {
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'post-fix',hypothesisId:'H1_H2',location:'frontend/src/lib/api.js:retry-skip-canceled',message:'Skip retry for canceled request',data:{method:String(error?.config?.method||'get').toUpperCase(),url:String(error?.config?.url||''),code:String(error?.code||'')},timestamp:Date.now()})}).catch(()=>{});
// #endregion
return Promise.reject(error);
}
@@ -77,9 +71,6 @@ api.interceptors.response.use(
const noRetry = config?.noRetry === true || config?.__noRetry === true;
if (noRetry) {
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'resource-stats-fix',hypothesisId:'H_RS_RETRY',location:'frontend/src/lib/api.js:retry-disabled-by-config',message:'Skip retry due to noRetry flag',data:{method:String(method),url:String(config?.url||''),code:String(error?.code||''),retryCount:Number(config?.__retryCount||0)},timestamp:Date.now()})}).catch(()=>{});
// #endregion
return Promise.reject(error);
}
@@ -125,15 +116,8 @@ api.interceptors.response.use(
(err) => {
const isCanceled = err?.code === 'ERR_CANCELED' || err?.name === 'CanceledError' || err?.name === 'AbortError';
if (isCanceled) {
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'post-fix',hypothesisId:'H1_H2',location:'frontend/src/lib/api.js:global-skip-canceled',message:'Skip global error handling for canceled request',data:{method:String(err?.config?.method||'get').toUpperCase(),url:String(err?.config?.url||''),code:String(err?.code||'')},timestamp:Date.now()})}).catch(()=>{});
// #endregion
return Promise.reject(err);
}
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'baseline',hypothesisId:'H1_H2',location:'frontend/src/lib/api.js:error',message:'API response error',data:{method:String(err?.config?.method||'get').toUpperCase(),url:String(err?.config?.url||''),status:Number(err?.response?.status||0),code:String(err?.response?.data?.code||err?.code||'')},timestamp:Date.now()})}).catch(()=>{});
// #endregion
try {
// Не показываем уведомления если это повторная попытка
const isRetrying = err?.config?.__retryCount > 0;
@@ -165,9 +149,6 @@ api.interceptors.response.use(
// Request интерсептор: If-Match из etag (если не задан явный заголовок)
api.interceptors.request.use((config) => {
try {
// #region agent log
fetch('http://192.168.10.2:7343/ingest/aa002dd6-6968-4a35-b09d-f05302d83266',{method:'POST',headers:{'Content-Type':'application/json','X-Debug-Session-Id':'378b5f'},body:JSON.stringify({sessionId:'378b5f',runId:'baseline',hypothesisId:'H1_H2',location:'frontend/src/lib/api.js:request',message:'API request started',data:{method:String(config?.method||'get').toUpperCase(),url:String(config?.url||'')},timestamp:Date.now()})}).catch(()=>{});
// #endregion
// If-None-Match для GET на базе кеша
const method = String(config.method || 'get').toLowerCase();
if (method === 'get') {