dayu/packages/core/src/controller/docker/service.ts

76 lines
2.4 KiB
TypeScript

import { controller, post, get, requestParam, queryParam } from '@cc-server/binding';
import * as docker from '@dayu/docker-api'
@controller('/service')
class ServiceController {
@get('/list')
public async list(@queryParam('page') page: number, @queryParam('perPage') perPage: number, ) {
let services = await docker.service.list();
return {
status: 0,
msg: '',
data: services.map(s => ({
"service-name": s.Spec.Name,
image: s.Spec.TaskTemplate.ContainerSpec.Image.split('@')[0],
updated_at: s.UpdatedAt,
mode: s.Spec.Mode,
update_status: s.UpdateStatus
}))
};
}
@post('/:id/restart')
public async restart(@requestParam("id") id: string) {
let service = await docker.service.inspect(id);
service.Spec.TaskTemplate.ForceUpdate++
return {
status: 0,
msg: '重启指令已发送',
data: docker.service.update(id, { version: service.Version.Index }, service.Spec)
}
}
@post('/:id/rollback')
public async rollback(@requestParam("id") id: string) {
let service = await docker.service.inspect(id);
if (!service.PreviousSpec) {
return {
status: 1,
msg: '服务自启动后从未重启<br>无法回滚!'
}
}
return {
status: 0,
msg: '回滚指令已发送',
data: docker.service.update(id, { version: service.Version.Index, rollback: 'previous' }, service.Spec)
}
}
@post('/delete')
public async delete() {
return {
status: 0,
msg: '删除成功!',
}
}
@get('/:id')
public async details(@requestParam('id') id: string) {
let service = await docker.service.inspect(id);
return {
status: 0,
data: {
id: service.ID,
name: service.Spec.Name,
env: (service.Spec.TaskTemplate.ContainerSpec.Env ?? []).map(e => {
let args = e.split('=');
return { key: args[0], value: args[1] }
}),
networks: service.Spec.TaskTemplate.Networks ?? [],
raw: JSON.stringify(service)
}
}
}
}