diff --git a/mayfly_go_web/src/components/dynamic-form/DynamicForm.vue b/mayfly_go_web/src/components/dynamic-form/DynamicForm.vue index 382df614..76c382a6 100755 --- a/mayfly_go_web/src/components/dynamic-form/DynamicForm.vue +++ b/mayfly_go_web/src/components/dynamic-form/DynamicForm.vue @@ -51,8 +51,8 @@ - 重 置 - 保 存 + 重 置 + 保 存 diff --git a/mayfly_go_web/src/components/dynamic-form/DynamicFormDialog.vue b/mayfly_go_web/src/components/dynamic-form/DynamicFormDialog.vue index 5c48e29c..42b50130 100644 --- a/mayfly_go_web/src/components/dynamic-form/DynamicFormDialog.vue +++ b/mayfly_go_web/src/components/dynamic-form/DynamicFormDialog.vue @@ -4,8 +4,8 @@ diff --git a/mayfly_go_web/src/views/layout/navBars/breadcrumb/setings.vue b/mayfly_go_web/src/views/layout/navBars/breadcrumb/setings.vue index 4d77256a..982a04ac 100644 --- a/mayfly_go_web/src/views/layout/navBars/breadcrumb/setings.vue +++ b/mayfly_go_web/src/views/layout/navBars/breadcrumb/setings.vue @@ -152,7 +152,7 @@ :min="0" :max="9999" @change="setLocalThemeConfig" - size="mini" + size="small" style="width: 90px" > @@ -236,7 +236,7 @@
@@ -251,7 +251,7 @@ @@ -268,7 +268,7 @@ @@ -284,7 +284,7 @@ diff --git a/mayfly_go_web/src/views/ops/machine/FileManage.vue b/mayfly_go_web/src/views/ops/machine/FileManage.vue index 6461bb66..e226c413 100755 --- a/mayfly_go_web/src/views/ops/machine/FileManage.vue +++ b/mayfly_go_web/src/views/ops/machine/FileManage.vue @@ -171,7 +171,6 @@ import { codemirror } from '@/components/codemirror'; import { getSession } from '@/common/utils/storage'; import enums from './enums'; import config from '@/common/config'; -import SvgIcon from '@/components/svgIcon/index.vue'; export default defineComponent({ name: 'FileManage', diff --git a/mayfly_go_web/src/views/ops/machine/MachineEdit.vue b/mayfly_go_web/src/views/ops/machine/MachineEdit.vue index 1de00a3e..3c7bf3f9 100644 --- a/mayfly_go_web/src/views/ops/machine/MachineEdit.vue +++ b/mayfly_go_web/src/views/ops/machine/MachineEdit.vue @@ -32,8 +32,8 @@ diff --git a/mayfly_go_web/src/views/ops/machine/MachineList.vue b/mayfly_go_web/src/views/ops/machine/MachineList.vue index eecf2173..a0213409 100644 --- a/mayfly_go_web/src/views/ops/machine/MachineList.vue +++ b/mayfly_go_web/src/views/ops/machine/MachineList.vue @@ -53,17 +53,12 @@ {{ $filters.dateFormat(scope.row.createTime) }} - - + @@ -91,6 +86,8 @@ --> + + @@ -107,11 +104,13 @@ import { projectApi } from '../project/api.ts'; import ServiceManage from './ServiceManage.vue'; import FileManage from './FileManage.vue'; import MachineEdit from './MachineEdit.vue'; +import ProcessList from './ProcessList.vue'; export default defineComponent({ name: 'MachineList', components: { ServiceManage, + ProcessList, FileManage, MachineEdit, }, @@ -142,6 +141,10 @@ export default defineComponent({ machineId: 0, title: '', }, + processDialog: { + visible: false, + machineId: 0, + }, fileDialog: { visible: false, machineId: 0, @@ -256,6 +259,11 @@ export default defineComponent({ state.data = res; }; + const showProcess = (row: any) => { + state.processDialog.machineId = row.id; + state.processDialog.visible = true; + }; + return { ...toRefs(state), choose, @@ -266,6 +274,7 @@ export default defineComponent({ deleteMachine, closeCli, serviceManager, + showProcess, submitSuccess, fileManage, search, diff --git a/mayfly_go_web/src/views/ops/machine/ProcessList.vue b/mayfly_go_web/src/views/ops/machine/ProcessList.vue new file mode 100644 index 00000000..db0c2970 --- /dev/null +++ b/mayfly_go_web/src/views/ops/machine/ProcessList.vue @@ -0,0 +1,203 @@ + + + diff --git a/mayfly_go_web/src/views/ops/machine/ScriptEdit.vue b/mayfly_go_web/src/views/ops/machine/ScriptEdit.vue index fb8291dd..284e3336 100644 --- a/mayfly_go_web/src/views/ops/machine/ScriptEdit.vue +++ b/mayfly_go_web/src/views/ops/machine/ScriptEdit.vue @@ -40,11 +40,11 @@ type="primary" :loading="btnLoading" @click="btnOk" - size="mini" + size="small" :disabled="submitDisabled" >保 存 - 关 闭 + 关 闭
diff --git a/mayfly_go_web/src/views/ops/machine/api.ts b/mayfly_go_web/src/views/ops/machine/api.ts index c1d78441..88bd9d03 100644 --- a/mayfly_go_web/src/views/ops/machine/api.ts +++ b/mayfly_go_web/src/views/ops/machine/api.ts @@ -5,6 +5,9 @@ export const machineApi = { list: Api.create("/machines", 'get'), info: Api.create("/machines/{id}/sysinfo", 'get'), stats: Api.create("/machines/{id}/stats", 'get'), + process: Api.create("/machines/{id}/process", 'get'), + // 终止进程 + killProcess: Api.create("/machines/{id}/process", 'delete'), closeCli: Api.create("/machines/{id}/close-cli", 'delete'), // 保存按钮 saveMachine: Api.create("/machines", 'post'), diff --git a/server/devops/api/machine.go b/server/devops/api/machine.go index bcb35c6a..ed07f8e6 100644 --- a/server/devops/api/machine.go +++ b/server/devops/api/machine.go @@ -2,6 +2,7 @@ package api import ( "bytes" + "fmt" "mayfly-go/base/biz" "mayfly-go/base/ctx" "mayfly-go/base/ginx" @@ -72,6 +73,41 @@ func (m *Machine) CloseCli(rc *ctx.ReqCtx) { machine.DeleteCli(GetMachineId(rc.GinCtx)) } +// 获取进程列表信息 +func (m *Machine) GetProcess(rc *ctx.ReqCtx) { + g := rc.GinCtx + cmd := "ps -aux " + sortType := g.Query("sortType") + if sortType == "2" { + cmd += "--sort -pmem " + } else { + cmd += "--sort -pcpu " + } + + pname := g.Query("name") + if pname != "" { + cmd += fmt.Sprintf("| grep %s ", pname) + } + + count := g.Query("count") + if count == "" { + count = "10" + } + + cmd += "| head -n " + count + res, err := m.MachineApp.GetCli(GetMachineId(rc.GinCtx)).Run(cmd) + biz.ErrIsNilAppendErr(err, "获取进程信息失败: %s") + rc.ResData = res +} + +// 终止进程 +func (m *Machine) KillProcess(rc *ctx.ReqCtx) { + pid := rc.GinCtx.Query("pid") + biz.NotEmpty(pid, "进程id不能为空") + _, err := m.MachineApp.GetCli(GetMachineId(rc.GinCtx)).Run("kill -9 " + pid) + biz.ErrIsNilAppendErr(err, "终止进程失败: %s") +} + func (m *Machine) WsSSH(g *gin.Context) { wsConn, err := ws.Upgrader.Upgrade(g.Writer, g.Request, nil) defer func() { diff --git a/server/devops/router/machine.go b/server/devops/router/machine.go index 22be9c63..37093ca1 100644 --- a/server/devops/router/machine.go +++ b/server/devops/router/machine.go @@ -20,6 +20,20 @@ func InitMachineRouter(router *gin.RouterGroup) { ctx.NewReqCtxWithGin(c).Handle(m.MachineStats) }) + machines.GET(":machineId/process", func(c *gin.Context) { + ctx.NewReqCtxWithGin(c).Handle(m.GetProcess) + }) + + // 终止进程 + killProcessL := ctx.NewLogInfo("终止进程") + killProcessP := ctx.NewPermission("machine:killprocess") + machines.DELETE(":machineId/process", func(c *gin.Context) { + ctx.NewReqCtxWithGin(c). + WithLog(killProcessL). + WithRequiredPermission(killProcessP). + Handle(m.KillProcess) + }) + saveMachine := ctx.NewLogInfo("保存机器信息") machines.POST("", func(c *gin.Context) { ctx.NewReqCtxWithGin(c).