37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import * as docker from '@dayu/docker-api'
|
|
import { controller, httpGet } from "@cc-server/binding";
|
|
|
|
const STACK_LABEL = 'com.docker.stack.namespace';
|
|
|
|
@controller('/dashboard')
|
|
class DashboardController {
|
|
@httpGet('')
|
|
async index() {
|
|
let stacks = [];
|
|
let services = [];
|
|
let svrs = await docker.service.list();
|
|
for (const service of svrs) {
|
|
if (service.Spec.Labels[STACK_LABEL]) {
|
|
stacks.push(service.Spec.Labels[STACK_LABEL]);
|
|
}
|
|
services.push(service.Spec.Name)
|
|
}
|
|
let networks = await docker.network.list();
|
|
let nodes = await docker.node.list();
|
|
let tasks = await docker.task.list();
|
|
let containers = await docker.container.list();
|
|
let images = await docker.image.list();
|
|
let volumes = await docker.volume.list();
|
|
return {
|
|
nodes: nodes.map(n => n.Description.Hostname),
|
|
tasks: tasks.map(t => t.ID),
|
|
stacks: Array.from(new Set(stacks)),
|
|
services,
|
|
networks: networks.map(n => n.Name),
|
|
containers: containers.map(c => c.Names),
|
|
images: images.map(i => i.Id),
|
|
volumes: volumes.Volumes.map(v => v.Name)
|
|
}
|
|
}
|
|
}
|