fix
This commit is contained in:
+55
-8
@@ -26,6 +26,23 @@ const connectedPeers = new Set();
|
||||
const terminalSessions = new Map(); // Map to track terminal sessions per peer
|
||||
const logsStreams = new Map(); // Map to track logs streams: key = `${peerId}:${containerId}`
|
||||
|
||||
/**
|
||||
* Helper function to extract volumes list from Docker API response
|
||||
* Docker API can return volumes in different formats depending on version
|
||||
* @param {Object|Array} volumesResult - Response from docker.listVolumes()
|
||||
* @returns {Array} - Array of volume objects
|
||||
*/
|
||||
function extractVolumesList(volumesResult) {
|
||||
if (Array.isArray(volumesResult)) {
|
||||
return volumesResult;
|
||||
} else if (volumesResult && Array.isArray(volumesResult.Volumes)) {
|
||||
return volumesResult.Volumes;
|
||||
} else if (volumesResult && volumesResult.volumes && Array.isArray(volumesResult.volumes)) {
|
||||
return volumesResult.volumes;
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
// Function to generate a new key
|
||||
function generateNewKey() {
|
||||
const newKey = crypto.randomBytes(32);
|
||||
@@ -848,7 +865,9 @@ swarm.on('connection', (peer) => {
|
||||
return { Volumes: [] };
|
||||
})
|
||||
]);
|
||||
const volumesList = volumesResult.Volumes || [];
|
||||
|
||||
// Extract volumes list from Docker socket API response
|
||||
const volumesList = extractVolumesList(volumesResult);
|
||||
response = {
|
||||
type: 'systemInfo',
|
||||
data: { info, version, volumes: volumesList }
|
||||
@@ -1132,8 +1151,14 @@ swarm.on('connection', (peer) => {
|
||||
case 'listVolumes':
|
||||
console.log('[INFO] ===== Handling \'listVolumes\' command =====');
|
||||
try {
|
||||
const volumes = await docker.listVolumes();
|
||||
const volumesList = volumes.Volumes || [];
|
||||
// Directly call Docker API via socket - dockerode handles the socket communication
|
||||
const volumesResult = await docker.listVolumes();
|
||||
|
||||
// Docker API returns { Volumes: [...], Warnings: [...] }
|
||||
// Extract volumes list from Docker socket API response
|
||||
const volumesList = extractVolumesList(volumesResult);
|
||||
|
||||
console.log(`[INFO] Retrieved ${volumesList.length} volumes from Docker socket API`);
|
||||
|
||||
// Return consistent format with type field for volumes tab
|
||||
// Also include success/volumes for backwards compatibility with selector
|
||||
@@ -1144,13 +1169,15 @@ swarm.on('connection', (peer) => {
|
||||
volumes: volumesList
|
||||
};
|
||||
} catch (error) {
|
||||
console.error(`[ERROR] ===== Failed to list volumes =====`);
|
||||
console.error(`[ERROR] ===== Failed to list volumes from Docker socket API =====`);
|
||||
console.error(`[ERROR] Error message: ${error.message}`);
|
||||
console.error(`[ERROR] Error stack:`, error.stack);
|
||||
response = {
|
||||
type: 'volumes',
|
||||
success: false,
|
||||
error: `Failed to list volumes: ${error.message}`
|
||||
error: `Failed to list volumes: ${error.message}`,
|
||||
data: [],
|
||||
volumes: []
|
||||
};
|
||||
}
|
||||
break;
|
||||
@@ -1174,7 +1201,16 @@ swarm.on('connection', (peer) => {
|
||||
// Broadcast updated volumes list to all peers
|
||||
try {
|
||||
const volumesResult = await docker.listVolumes();
|
||||
const volumesList = volumesResult.Volumes || [];
|
||||
// Handle both direct array response and object with Volumes property
|
||||
let volumesList = [];
|
||||
if (Array.isArray(volumesResult)) {
|
||||
volumesList = volumesResult;
|
||||
} else if (volumesResult && Array.isArray(volumesResult.Volumes)) {
|
||||
volumesList = volumesResult.Volumes;
|
||||
} else if (volumesResult && volumesResult.volumes && Array.isArray(volumesResult.volumes)) {
|
||||
volumesList = volumesResult.volumes;
|
||||
}
|
||||
|
||||
const update = {
|
||||
type: 'volumes',
|
||||
data: volumesList,
|
||||
@@ -1208,7 +1244,16 @@ swarm.on('connection', (peer) => {
|
||||
// Broadcast updated volumes list to all peers
|
||||
try {
|
||||
const volumesResult = await docker.listVolumes();
|
||||
const volumesList = volumesResult.Volumes || [];
|
||||
// Handle both direct array response and object with Volumes property
|
||||
let volumesList = [];
|
||||
if (Array.isArray(volumesResult)) {
|
||||
volumesList = volumesResult;
|
||||
} else if (volumesResult && Array.isArray(volumesResult.Volumes)) {
|
||||
volumesList = volumesResult.Volumes;
|
||||
} else if (volumesResult && volumesResult.volumes && Array.isArray(volumesResult.volumes)) {
|
||||
volumesList = volumesResult.volumes;
|
||||
}
|
||||
|
||||
const update = {
|
||||
type: 'volumes',
|
||||
data: volumesList,
|
||||
@@ -1592,7 +1637,9 @@ async function initializeDockerEventStream() {
|
||||
if (event.Type === 'volume' && (event.Action === 'create' || event.Action === 'destroy')) {
|
||||
try {
|
||||
const volumesResult = await docker.listVolumes();
|
||||
const volumesList = volumesResult.Volumes || [];
|
||||
// Extract volumes list from Docker socket API response
|
||||
const volumesList = extractVolumesList(volumesResult);
|
||||
|
||||
const update = {
|
||||
type: 'volumes',
|
||||
data: volumesList,
|
||||
|
||||
Reference in New Issue
Block a user