added basic support for Docker Swarm services

pull/449/head
Ivan Bravo Bravo 2 years ago
parent 6d46647fc9
commit 99b2ba8944

@ -31,18 +31,41 @@ export default async function handler(req, res) {
const containerNames = containers.map((container) => container.Names[0].replace(/^\//, "")); const containerNames = containers.map((container) => container.Names[0].replace(/^\//, ""));
const containerExists = containerNames.includes(containerName); const containerExists = containerNames.includes(containerName);
if (!containerExists) { if (containerExists) {
res.status(200).send({ const container = docker.getContainer(containerName);
error: "not found", const stats = await container.stats({ stream: false });
res.status(200).json({
stats,
}); });
return; return;
} }
const container = docker.getContainer(containerName); // Try with a service deployed in Docker Swarm
const stats = await container.stats({ stream: false }); const tasks = await docker.listTasks({
filters: {
service: [containerName],
// A service can have several offline containers, so we only look for an active one.
'desired-state': ['running']
}
}).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
if (taskContainerId) {
const container = docker.getContainer(taskContainerId);
const stats = await container.stats({ stream: false });
res.status(200).json({
stats,
});
return;
}
res.status(200).json({ res.status(200).send({
stats, error: "not found",
}); });
} catch { } catch {
res.status(500).send({ res.status(500).send({

@ -29,17 +29,38 @@ export default async function handler(req, res) {
const containerNames = containers.map((container) => container.Names[0].replace(/^\//, "")); const containerNames = containers.map((container) => container.Names[0].replace(/^\//, ""));
const containerExists = containerNames.includes(containerName); const containerExists = containerNames.includes(containerName);
if (!containerExists) { if (containerExists) {
return res.status(200).send({ const container = docker.getContainer(containerName);
error: "not found", const info = await container.inspect();
return res.status(200).json({
status: info.State.Status,
}); });
} }
const container = docker.getContainer(containerName); const tasks = await docker.listTasks({
const info = await container.inspect(); filters: {
service: [containerName],
// A service can have several offline containers, we only look for an active one.
'desired-state': ['running']
}
}).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
if (taskContainerId) {
const container = docker.getContainer(taskContainerId);
const info = await container.inspect();
return res.status(200).json({
status: info.State.Status,
});
}
return res.status(200).json({ return res.status(200).send({
status: info.State.Status, error: "not found",
}); });
} catch { } catch {
return res.status(500).send({ return res.status(500).send({

Loading…
Cancel
Save