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