fix: исправлена проблема с WebSocket соединениями при обновлении
- Добавлена задержка между закрытием и открытием WebSocket соединений - Улучшена функция closeWs с проверкой состояния соединения - Добавлена проверка существующих соединений в openWs - Добавлено подробное логирование для отладки WebSocket Изменения: 1. refreshLogsAndCounters: добавлена задержка 100мс после closeWs 2. closeWs: добавлена проверка readyState и подробное логирование 3. openWs: добавлена проверка существующих соединений с автоматическим переподключением Это решает проблему 'WebSocket is closed before the connection is established' при нажатии горячей клавиши 'r' для обновления логов. Автор: Сергей Антропов Сайт: https://devops.org.ru
This commit is contained in:
parent
18466d2cb0
commit
3df66ff55d
@ -2548,10 +2548,24 @@ function wsUrl(containerId, service, project){
|
|||||||
*/
|
*/
|
||||||
function closeWs(id){
|
function closeWs(id){
|
||||||
const o = state.open[id];
|
const o = state.open[id];
|
||||||
if (!o) return;
|
if (!o) {
|
||||||
|
console.log(`closeWs: No connection found for container ${id}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`closeWs: Closing WebSocket connection for container ${id}`);
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (o.ws && o.ws.readyState !== WebSocket.CLOSED) {
|
||||||
|
o.ws.close();
|
||||||
|
console.log(`closeWs: WebSocket connection closed for container ${id}`);
|
||||||
|
}
|
||||||
|
} catch(e){
|
||||||
|
console.error(`closeWs: Error closing WebSocket for container ${id}:`, e);
|
||||||
|
}
|
||||||
|
|
||||||
try { o.ws.close(); } catch(e){}
|
|
||||||
delete state.open[id];
|
delete state.open[id];
|
||||||
|
console.log(`closeWs: Connection state removed for container ${id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2685,6 +2699,17 @@ function openWs(svc, panel){
|
|||||||
console.log(`openWs: Called for ${svc.name} (${id}) in multiViewMode: ${state.multiViewMode}`);
|
console.log(`openWs: Called for ${svc.name} (${id}) in multiViewMode: ${state.multiViewMode}`);
|
||||||
console.log(`openWs: Selected containers: ${state.selectedContainers.join(', ')}`);
|
console.log(`openWs: Selected containers: ${state.selectedContainers.join(', ')}`);
|
||||||
|
|
||||||
|
// Проверяем, есть ли уже открытое соединение для этого контейнера
|
||||||
|
if (state.open[id]) {
|
||||||
|
console.log(`openWs: Connection already exists for container ${id}, closing it first`);
|
||||||
|
closeWs(id);
|
||||||
|
// Добавляем небольшую задержку для корректного закрытия
|
||||||
|
setTimeout(() => {
|
||||||
|
openWs(svc, panel);
|
||||||
|
}, 50);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const logEl = panel.querySelector('.log');
|
const logEl = panel.querySelector('.log');
|
||||||
const wrapEl = panel.querySelector('.logwrap');
|
const wrapEl = panel.querySelector('.logwrap');
|
||||||
|
|
||||||
@ -4249,6 +4274,9 @@ async function refreshLogsAndCounters() {
|
|||||||
const currentId = state.current.id;
|
const currentId = state.current.id;
|
||||||
closeWs(currentId);
|
closeWs(currentId);
|
||||||
|
|
||||||
|
// Добавляем небольшую задержку для корректного закрытия соединения
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 100));
|
||||||
|
|
||||||
// Находим обновленный контейнер в списке
|
// Находим обновленный контейнер в списке
|
||||||
const updatedContainer = state.services.find(s => s.id === currentId);
|
const updatedContainer = state.services.find(s => s.id === currentId);
|
||||||
if (updatedContainer) {
|
if (updatedContainer) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user