feat: add more docker api
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
"devDependencies": {
|
||||
"@types/express": "^4.17.0",
|
||||
"@types/socket.io": "^2.1.2",
|
||||
"nodemon": "^1.19.1",
|
||||
"rimraf": "^2.6.3",
|
||||
"ts-node-dev": "^1.0.0-pre.40",
|
||||
"typescript": "^3.5.2"
|
||||
@@ -43,4 +44,4 @@
|
||||
"delay": "1500",
|
||||
"ext": "js,json"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
19
packages/core/src/controller/service.ts
Normal file
19
packages/core/src/controller/service.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { controller, httpGet, requestParam } from 'inversify-express-utils';
|
||||
import * as docker from '@dayu/docker-api'
|
||||
|
||||
@controller('/service')
|
||||
class ServiceController {
|
||||
@httpGet('/list')
|
||||
public async list() {
|
||||
let services = await docker.service.list();
|
||||
return services.map(s => ({
|
||||
id: s.ID,
|
||||
name: s.Spec.Name
|
||||
}));
|
||||
}
|
||||
|
||||
@httpGet('/:id')
|
||||
public async details(@requestParam('id') id: string) {
|
||||
return await docker.service.inspect(id)
|
||||
}
|
||||
}
|
||||
@@ -6,18 +6,25 @@ const STACK_LABEL = 'com.docker.stack.namespace';
|
||||
@controller('/stack')
|
||||
class StackController {
|
||||
@httpGet('/list')
|
||||
public async list() {
|
||||
public async list(): Promise<any> {
|
||||
let stacks: { [key: string]: string[] } = {};
|
||||
let result = [];
|
||||
let services = await docker.service.list();
|
||||
for (const service of services) {
|
||||
let stackName = service.Spec.Labels[STACK_LABEL]
|
||||
if (stackName) {
|
||||
let stack = stacks[stackName] || [];
|
||||
let stack = stacks[stackName];
|
||||
if (!stack) {
|
||||
result.push({
|
||||
name: stackName,
|
||||
services: stack = []
|
||||
})
|
||||
stacks[stackName] = stack;
|
||||
}
|
||||
stack.push(service.Spec.Name);
|
||||
stacks[stackName] = stack;
|
||||
}
|
||||
}
|
||||
return stacks;
|
||||
return result;
|
||||
}
|
||||
|
||||
@httpGet('/:stack')
|
||||
@@ -31,11 +38,9 @@ class StackController {
|
||||
}
|
||||
let services = await docker.service.list(filterOpt)
|
||||
let networks = await docker.network.list(filterOpt)
|
||||
let containers = await docker.container.list(filterOpt);
|
||||
return {
|
||||
services: services.map(service => service.Spec.Name),
|
||||
networks: networks.map(network => network.Name),
|
||||
containers: containers.map(container => container.Names[0].substring(1))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,4 +19,4 @@ for (let file of list) {
|
||||
}
|
||||
}
|
||||
|
||||
server.static().build().start();
|
||||
server.static().build().start(81);
|
||||
|
||||
@@ -1,7 +1,14 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"baseUrl": "src",
|
||||
"outDir": "dist"
|
||||
"outDir": "dist",
|
||||
"target": "es6",
|
||||
"module": "commonjs",
|
||||
"sourceMap": true,
|
||||
"declaration": true,
|
||||
"noImplicitAny": true,
|
||||
"allowUnreachableCode": true,
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user