Update useDockerManager.ts
This commit is contained in:
@@ -79,7 +79,6 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
// Clear existing WebSocket listeners
|
// Clear existing WebSocket listeners
|
||||||
const clearWsListeners = () => {
|
const clearWsListeners = () => {
|
||||||
if (wsUnsubscribeHooks.length > 0) {
|
if (wsUnsubscribeHooks.length > 0) {
|
||||||
console.log(`[DockerManager ${sessionId}] Clearing ${wsUnsubscribeHooks.length} WebSocket listeners.`);
|
|
||||||
wsUnsubscribeHooks.forEach(unsub => unsub());
|
wsUnsubscribeHooks.forEach(unsub => unsub());
|
||||||
wsUnsubscribeHooks = [];
|
wsUnsubscribeHooks = [];
|
||||||
}
|
}
|
||||||
@@ -88,7 +87,6 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
// Request Docker status via WebSocket
|
// Request Docker status via WebSocket
|
||||||
const requestDockerStatus = () => {
|
const requestDockerStatus = () => {
|
||||||
if (!isConnected.value) {
|
if (!isConnected.value) {
|
||||||
console.log(`[DockerManager ${sessionId}] WebSocket not connected, skipping Docker status request.`);
|
|
||||||
// Reset state if disconnected? Or rely on watch(isConnected)?
|
// Reset state if disconnected? Or rely on watch(isConnected)?
|
||||||
// Let's reset here for immediate feedback if called manually while disconnected.
|
// Let's reset here for immediate feedback if called manually while disconnected.
|
||||||
containers.value = [];
|
containers.value = [];
|
||||||
@@ -102,7 +100,6 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`[DockerManager ${sessionId}] Requesting Docker status.`);
|
|
||||||
isLoading.value = true;
|
isLoading.value = true;
|
||||||
error.value = null; // Clear previous error
|
error.value = null; // Clear previous error
|
||||||
sendMessage({ type: 'docker:get_status', sessionId }); // Ensure sessionId is included if needed by backend routing
|
sendMessage({ type: 'docker:get_status', sessionId }); // Ensure sessionId is included if needed by backend routing
|
||||||
@@ -115,11 +112,9 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
console.warn(`[DockerManager ${sessionId}] Cannot setup listeners, WebSocket not connected.`);
|
console.warn(`[DockerManager ${sessionId}] Cannot setup listeners, WebSocket not connected.`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
console.log(`[DockerManager ${sessionId}] Setting up WebSocket listeners.`);
|
|
||||||
|
|
||||||
const unsubStatus = onMessage('docker:status:update', (payload, message) => {
|
const unsubStatus = onMessage('docker:status:update', (payload, message) => {
|
||||||
if (message?.sessionId && message.sessionId !== sessionId) return; // Ignore messages for other sessions
|
if (message?.sessionId && message.sessionId !== sessionId) return; // Ignore messages for other sessions
|
||||||
console.log(`[DockerManager ${sessionId}] Received docker:status:update`, payload);
|
|
||||||
isLoading.value = false;
|
isLoading.value = false;
|
||||||
|
|
||||||
if (payload && typeof payload.available === 'boolean') {
|
if (payload && typeof payload.available === 'boolean') {
|
||||||
@@ -138,7 +133,6 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
|
|
||||||
// Handle default expand on initial load
|
// Handle default expand on initial load
|
||||||
if (!initialLoadDone.value && dockerDefaultExpandBoolean.value) {
|
if (!initialLoadDone.value && dockerDefaultExpandBoolean.value) {
|
||||||
console.log(`[DockerManager ${sessionId}] Applying default expand setting.`);
|
|
||||||
containers.value.forEach(container => {
|
containers.value.forEach(container => {
|
||||||
if (!expandedContainerIds.value.has(container.id)) {
|
if (!expandedContainerIds.value.has(container.id)) {
|
||||||
expandedContainerIds.value.add(container.id);
|
expandedContainerIds.value.add(container.id);
|
||||||
@@ -153,7 +147,6 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
if (refreshInterval && !payload.available) {
|
if (refreshInterval && !payload.available) {
|
||||||
clearInterval(refreshInterval);
|
clearInterval(refreshInterval);
|
||||||
refreshInterval = null;
|
refreshInterval = null;
|
||||||
console.log(`[DockerManager ${sessionId}] Stopped refresh interval due to remote Docker unavailability.`);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -189,7 +182,6 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
|
|
||||||
const unsubRequestUpdate = onMessage('request_docker_status_update', (payload, message) => {
|
const unsubRequestUpdate = onMessage('request_docker_status_update', (payload, message) => {
|
||||||
if (message?.sessionId && message.sessionId !== sessionId) return;
|
if (message?.sessionId && message.sessionId !== sessionId) return;
|
||||||
console.log(`[DockerManager ${sessionId}] Received request_docker_status_update from backend.`);
|
|
||||||
requestDockerStatus(); // Trigger a status refresh immediately
|
requestDockerStatus(); // Trigger a status refresh immediately
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -209,7 +201,6 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`[DockerManager ${sessionId}] Sending command '${command}' for container ${containerId}`);
|
|
||||||
sendMessage({
|
sendMessage({
|
||||||
type: 'docker:command',
|
type: 'docker:command',
|
||||||
sessionId, // Include sessionId if needed by backend routing
|
sessionId, // Include sessionId if needed by backend routing
|
||||||
@@ -223,10 +214,8 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
const toggleExpand = (containerId: string) => {
|
const toggleExpand = (containerId: string) => {
|
||||||
if (expandedContainerIds.value.has(containerId)) {
|
if (expandedContainerIds.value.has(containerId)) {
|
||||||
expandedContainerIds.value.delete(containerId);
|
expandedContainerIds.value.delete(containerId);
|
||||||
console.log(`[DockerManager ${sessionId}] Collapsed container ${containerId}.`);
|
|
||||||
} else {
|
} else {
|
||||||
expandedContainerIds.value.add(containerId);
|
expandedContainerIds.value.add(containerId);
|
||||||
console.log(`[DockerManager ${sessionId}] Expanded container ${containerId}.`);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -234,7 +223,6 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
|
|
||||||
// Reset state function
|
// Reset state function
|
||||||
const resetStateAndInterval = () => {
|
const resetStateAndInterval = () => {
|
||||||
console.log(`[DockerManager ${sessionId}] Resetting state and clearing interval.`);
|
|
||||||
containers.value = [];
|
containers.value = [];
|
||||||
isLoading.value = false;
|
isLoading.value = false;
|
||||||
error.value = null;
|
error.value = null;
|
||||||
@@ -245,14 +233,12 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
if (refreshInterval) {
|
if (refreshInterval) {
|
||||||
clearInterval(refreshInterval);
|
clearInterval(refreshInterval);
|
||||||
refreshInterval = null;
|
refreshInterval = null;
|
||||||
console.log(`[DockerManager ${sessionId}] Cleared main refresh interval.`);
|
|
||||||
}
|
}
|
||||||
clearWsListeners();
|
clearWsListeners();
|
||||||
};
|
};
|
||||||
|
|
||||||
// Watch for connection changes to manage listeners and interval
|
// Watch for connection changes to manage listeners and interval
|
||||||
watch(isConnected, (newIsConnected, oldIsConnected) => {
|
watch(isConnected, (newIsConnected, oldIsConnected) => {
|
||||||
console.log(`[DockerManager ${sessionId}] Connection status changed: ${oldIsConnected} -> ${newIsConnected}`);
|
|
||||||
if (newIsConnected) {
|
if (newIsConnected) {
|
||||||
// 只有当Docker管理器在布局中时才设置监听器和定时器
|
// 只有当Docker管理器在布局中时才设置监听器和定时器
|
||||||
const layoutStore = useLayoutStore();
|
const layoutStore = useLayoutStore();
|
||||||
@@ -265,10 +251,8 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
if (!refreshInterval) {
|
if (!refreshInterval) {
|
||||||
// Keep a safety interval
|
// Keep a safety interval
|
||||||
refreshInterval = setInterval(requestDockerStatus, 15000); // Check every 15s
|
refreshInterval = setInterval(requestDockerStatus, 15000); // Check every 15s
|
||||||
console.log(`[DockerManager ${sessionId}] Main refresh interval started (15s).`);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log(`[DockerManager ${sessionId}] Docker管理器不在布局中,跳过设置监听器和定时器。`);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Connection lost
|
// Connection lost
|
||||||
@@ -281,7 +265,6 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
|
|
||||||
// Cleanup function to be called when the session ends
|
// Cleanup function to be called when the session ends
|
||||||
const cleanup = () => {
|
const cleanup = () => {
|
||||||
console.log(`[DockerManager ${sessionId}] Cleaning up.`);
|
|
||||||
resetStateAndInterval(); // Clears listeners and interval
|
resetStateAndInterval(); // Clears listeners and interval
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -289,7 +272,6 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
// If already connected when this manager is created, set up listeners and fetch data.
|
// If already connected when this manager is created, set up listeners and fetch data.
|
||||||
// This handles cases where the manager is created after the WS connection is live.
|
// This handles cases where the manager is created after the WS connection is live.
|
||||||
if (isConnected.value) {
|
if (isConnected.value) {
|
||||||
console.log(`[DockerManager ${sessionId}] Initial setup: Already connected.`);
|
|
||||||
// 只有当Docker管理器在布局中时才设置监听器和定时器
|
// 只有当Docker管理器在布局中时才设置监听器和定时器
|
||||||
const layoutStore = useLayoutStore();
|
const layoutStore = useLayoutStore();
|
||||||
if (layoutStore.usedPanes.has('dockerManager')) {
|
if (layoutStore.usedPanes.has('dockerManager')) {
|
||||||
@@ -297,13 +279,10 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
requestDockerStatus();
|
requestDockerStatus();
|
||||||
if (!refreshInterval) {
|
if (!refreshInterval) {
|
||||||
refreshInterval = setInterval(requestDockerStatus, 15000);
|
refreshInterval = setInterval(requestDockerStatus, 15000);
|
||||||
console.log(`[DockerManager ${sessionId}] Initial setup: Main refresh interval started (15s).`);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log(`[DockerManager ${sessionId}] Docker管理器不在布局中,跳过初始设置。`);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log(`[DockerManager ${sessionId}] Initial setup: Not connected yet.`);
|
|
||||||
// Set initial state for disconnected status
|
// Set initial state for disconnected status
|
||||||
error.value = t('dockerManager.error.sshDisconnected');
|
error.value = t('dockerManager.error.sshDisconnected');
|
||||||
isDockerAvailable.value = false;
|
isDockerAvailable.value = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user