diff --git a/.cursor/debug-378b5f.log b/.cursor/debug-378b5f.log index 260e684..907f5c1 100644 --- a/.cursor/debug-378b5f.log +++ b/.cursor/debug-378b5f.log @@ -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} diff --git a/backend/routes/resourceStatsRoutes.js b/backend/routes/resourceStatsRoutes.js index a8e52ef..7394e8c 100644 --- a/backend/routes/resourceStatsRoutes.js +++ b/backend/routes/resourceStatsRoutes.js @@ -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 }; } diff --git a/backend/routes/textDataRoutes.js b/backend/routes/textDataRoutes.js index 62b2156..44b6dd0 100644 --- a/backend/routes/textDataRoutes.js +++ b/backend/routes/textDataRoutes.js @@ -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', { diff --git a/backend/server.js b/backend/server.js index 8548319..3431fa3 100644 --- a/backend/server.js +++ b/backend/server.js @@ -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); }); diff --git a/backend/services/networkMapScheduler.js b/backend/services/networkMapScheduler.js index 7eb6d20..89e61d0 100644 --- a/backend/services/networkMapScheduler.js +++ b/backend/services/networkMapScheduler.js @@ -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(); diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 05cd965..9698bb9 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -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]); // Состояние для управления выпадающими меню diff --git a/frontend/src/ResourceStatsPage.jsx b/frontend/src/ResourceStatsPage.jsx index 0f712a0..ddac8fd 100644 --- a/frontend/src/ResourceStatsPage.jsx +++ b/frontend/src/ResourceStatsPage.jsx @@ -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; diff --git a/frontend/src/UptimeMonitorPage.jsx b/frontend/src/UptimeMonitorPage.jsx index 4cc2b54..d641b91 100644 --- a/frontend/src/UptimeMonitorPage.jsx +++ b/frontend/src/UptimeMonitorPage.jsx @@ -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(() => { diff --git a/frontend/src/components/ErrorBoundary.jsx b/frontend/src/components/ErrorBoundary.jsx index eab5d78..08112f7 100644 --- a/frontend/src/components/ErrorBoundary.jsx +++ b/frontend/src/components/ErrorBoundary.jsx @@ -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); diff --git a/frontend/src/contexts/PingContext.jsx b/frontend/src/contexts/PingContext.jsx index 93558af..122b179 100644 --- a/frontend/src/contexts/PingContext.jsx +++ b/frontend/src/contexts/PingContext.jsx @@ -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 = { diff --git a/frontend/src/lib/api.js b/frontend/src/lib/api.js index 08e102b..e3a44f5 100644 --- a/frontend/src/lib/api.js +++ b/frontend/src/lib/api.js @@ -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') {