let mws; const RECONNECT_INTERVAL = 3000; let isConnectedMetrics = false; function setupFrontendMetrics() { mws = new WebSocket(CONFIG.metrics); mws.onopen = () => { console.log("[Metrics] З'єднання встановлено"); isConnectedMetrics = true; // Відправляємо один раз навігацію та ресурси sendMetrics(); }; mws.onclose = () => { console.warn("[Metrics] З'єднання розірвано"); console.log(`[Metrics] Спроба перепідключення`); isConnectedMetrics = false; // Спроба перепідключення через заданий інтервал setTimeout(setupFrontendMetrics, RECONNECT_INTERVAL); }; mws.onerror = (err) => { console.error("[Metrics] Помилка", err); mws.close(); // Примусово закриваємо для запуску логіки перепідключення }; } async function sendMetrics() { if (isConnectedMetrics) { const perf = performance; const payload = { type: "frontend_metrics", memory: perf.memory || null, resources: perf.getEntriesByType("resource").slice(0, 500), id: USER.id }; mws.send(JSON.stringify(payload)); } } window.addEventListener('popstate', () => { console.log("[Metrics] Запуск sendMetrics після popstate"); sendMetrics(); }); window.addEventListener('click', (e) => { const target = e.target.closest('[data-route]'); if (!target || !target.href) return; console.log("[Metrics] Запуск sendMetrics після click"); sendMetrics(); });