Prefer swarm task containers locally for status / stats
This commit is contained in:
parent
aabd05a0cb
commit
f74275293a
2 changed files with 36 additions and 18 deletions
|
@ -53,17 +53,25 @@ export default async function handler(req, res) {
|
|||
})
|
||||
.catch(() => []);
|
||||
|
||||
// For now we are only interested in the first one (in case replicas > 1).
|
||||
// TODO: Show the result for all replicas/containers?
|
||||
const taskContainerId = tasks.at(0)?.Status?.ContainerStatus?.ContainerID;
|
||||
|
||||
// We can only get stats for 'local' containers so try to find one
|
||||
const localContainerIDs = containers.map(c => c.Id);
|
||||
const task = tasks.find(t => localContainerIDs.includes(t.Status?.ContainerStatus?.ContainerID)) ?? tasks.at(0);
|
||||
const taskContainerId = task?.Status?.ContainerStatus?.ContainerID;
|
||||
|
||||
if (taskContainerId) {
|
||||
const container = docker.getContainer(taskContainerId);
|
||||
const stats = await container.stats({ stream: false });
|
||||
try {
|
||||
const container = docker.getContainer(taskContainerId);
|
||||
const stats = await container.stats({ stream: false });
|
||||
|
||||
return res.status(200).json({
|
||||
stats,
|
||||
});
|
||||
return res.status(200).json({
|
||||
stats,
|
||||
});
|
||||
} catch (e) {
|
||||
return res.status(200).json({
|
||||
error: "Unable to retrieve stats"
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -53,18 +53,28 @@ export default async function handler(req, res) {
|
|||
})
|
||||
.catch(() => []);
|
||||
|
||||
// For now we are only interested in the first one (in case replicas > 1).
|
||||
// TODO: Show the result for all replicas/containers?
|
||||
const taskContainerId = tasks.at(0)?.Status?.ContainerStatus?.ContainerID;
|
||||
|
||||
// We can only get stats for 'local' containers so try to find one
|
||||
const localContainerIDs = containers.map(c => c.Id);
|
||||
const task = tasks.find(t => localContainerIDs.includes(t.Status?.ContainerStatus?.ContainerID)) ?? tasks.at(0);
|
||||
const taskContainerId = task?.Status?.ContainerStatus?.ContainerID;
|
||||
|
||||
if (taskContainerId) {
|
||||
const container = docker.getContainer(taskContainerId);
|
||||
const info = await container.inspect();
|
||||
|
||||
return res.status(200).json({
|
||||
status: info.State.Status,
|
||||
health: info.State.Health?.Status,
|
||||
});
|
||||
try {
|
||||
const container = docker.getContainer(taskContainerId);
|
||||
const info = await container.inspect();
|
||||
|
||||
return res.status(200).json({
|
||||
status: info.State.Status,
|
||||
health: info.State.Health?.Status,
|
||||
});
|
||||
} catch (e) {
|
||||
if (task) {
|
||||
return res.status(200).json({
|
||||
status: task.Status.State
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue