diff --git a/cmd/server/app/network/controller/script.go b/cmd/server/app/network/controller/script.go index 6e43b58d31a4e68ae4b8db3a5e1854bcbdbe1644..7288a172fb5f2026c968560ba4f78a23db9ab1d3 100644 --- a/cmd/server/app/network/controller/script.go +++ b/cmd/server/app/network/controller/script.go @@ -11,8 +11,10 @@ import ( "fmt" "strconv" "strings" + "time" "gitee.com/openeuler/PilotGo/cmd/server/app/network/jwt" + "gitee.com/openeuler/PilotGo/cmd/server/app/service/auditlog" scriptservice "gitee.com/openeuler/PilotGo/cmd/server/app/service/script" "gitee.com/openeuler/PilotGo/pkg/global" "gitee.com/openeuler/PilotGo/sdk/common" @@ -77,6 +79,19 @@ func UpdateScriptHandler(c *gin.Context) { return } + logId, _ := auditlog.Add(&auditlog.AuditLog{ + Action: "编辑脚本", + Module: auditlog.ScriptEdit, + User: u.Username, + Batches: "", + CreateTime: time.Now().Format("2006-01-02 15:04:05"), + }) + subLogId, _ := auditlog.AddSubLog(&auditlog.SubLog{ + LogId: logId, + ActionObject: "编辑脚本:" + script.Name, + UpdateTime: time.Now().Format("2006-01-02 15:04:05"), + }) + cmds, err := scriptservice.GetDangerousCommandsInBlackList() if err != nil { logger.Error("更新脚本检测到高危命令: %v", err.Error()) @@ -100,6 +115,8 @@ func UpdateScriptHandler(c *gin.Context) { global.ServerSendMsg, fmt.Sprintf("用户 %s 更新脚本 %s", u.Username, script.Name), ) + auditlog.UpdateLog(logId, auditlog.StatusSuccess) + auditlog.UpdateSubLog(subLogId, auditlog.StatusSuccess, "操作成功") response.Success(c, nil, "成功") } @@ -129,16 +146,33 @@ func DeleteScriptHandler(c *gin.Context) { } else { script_name = _script.Name } - global.SendRemindMsg( - global.MachineSendMsg, - fmt.Sprintf("用户 %s 删除脚本 %s %s", u.Username, script_name, req_body.Version), - ) + + logId, _ := auditlog.Add(&auditlog.AuditLog{ + Action: "删除脚本", + Module: auditlog.ScriptDelete, + User: u.Username, + Batches: "", + CreateTime: time.Now().Format("2006-01-02 15:04:05"), + }) + subLogId, _ := auditlog.AddSubLog(&auditlog.SubLog{ + LogId: logId, + ActionObject: "删除脚本:" + script_name, + UpdateTime: time.Now().Format("2006-01-02 15:04:05"), + }) if err := scriptservice.DeleteScript(req_body.ScriptID, req_body.Version); err != nil { logger.Error("fail to delete script: %s", err.Error()) response.Fail(c, nil, err.Error()) return } + + global.SendRemindMsg( + global.MachineSendMsg, + fmt.Sprintf("用户 %s 删除脚本 %s %s", u.Username, script_name, req_body.Version), + ) + auditlog.UpdateLog(logId, auditlog.StatusSuccess) + auditlog.UpdateSubLog(subLogId, auditlog.StatusSuccess, "操作成功") + response.Success(c, nil, "成功") } @@ -156,6 +190,15 @@ func RunScriptHandler(c *gin.Context) { return } + var script_name string + script, err := scriptservice.GetScriptByID(body.ScriptID) + if err != nil { + logger.Error("fail to get script by id: %s", err.Error()) + script_name = "" + } else { + script_name = script.Name + } + batch := &common.Batch{} if body.BatchID < 1 && len(body.MachineUUIDs) == 0 { logger.Error("fail to run script, batchid and machine_uuids are both empty") @@ -175,14 +218,15 @@ func RunScriptHandler(c *gin.Context) { return } - var script_name string - script, err := scriptservice.GetScriptByID(body.ScriptID) - if err != nil { - logger.Error("fail to get script by id: %s", err.Error()) - script_name = "" - } else { - script_name = script.Name + result_str := []string{} + for _, v := range result { + cmdR, ok := v.(common.CmdResult) + if !ok { + continue + } + result_str = append(result_str, fmt.Sprintf("\n机器IP:%s\nstdout:\n%s\nstderr:\n%s", cmdR.MachineIP, cmdR.Stdout, cmdR.Stderr)) } + global.SendRemindMsg( global.MachineSendMsg, fmt.Sprintf("用户 %s 执行脚本 %s %s, batch: %v, machines: %v", u.Username, script_name, body.Version, body.BatchID, body.MachineUUIDs), diff --git a/cmd/server/app/service/auditlog/auditlog.go b/cmd/server/app/service/auditlog/auditlog.go index dc025cb8488c94328bd78ade5662f62039c696db..e7ca7e33a06f5cd393db9e93155c800f8a7e87c2 100644 --- a/cmd/server/app/service/auditlog/auditlog.go +++ b/cmd/server/app/service/auditlog/auditlog.go @@ -32,7 +32,10 @@ const ( RoleChange = "角色管理/权限变更" - ScriptExec = "自定义脚本/脚本执行" + ScriptAdd = "自定义脚本/脚本创建" + ScriptExec = `自定义脚本/脚本运行` + ScriptDelete = "自定义脚本/脚本删除" + ScriptEdit = "自定义脚本/脚本编辑" ) type AuditLog = dao.AuditLog diff --git a/cmd/server/app/service/script/script.go b/cmd/server/app/service/script/script.go index 16466ac45493bb9bbc3ec6b5cb1c90efec7d25ca..b43183d0608d8cda3cbe14cf02d769c3e28d354a 100644 --- a/cmd/server/app/service/script/script.go +++ b/cmd/server/app/service/script/script.go @@ -8,6 +8,7 @@ package script import ( + "fmt" "strings" "time" @@ -126,6 +127,15 @@ func RunScript(createName string, runscriptmeta *RunScriptMeta, batch *common.Ba } } + var script_name string + script, err := GetScriptByID(runscriptmeta.ScriptID) + if err != nil { + logger.Error("fail to get script by id: %s", err.Error()) + script_name = "" + } else { + script_name = script.Name + } + var batch_name []string batchName, _ := dao.GetBatchName(runscriptmeta.BatchID) batch_name = append(batch_name, batchName) @@ -167,9 +177,9 @@ func RunScript(createName string, runscriptmeta *RunScriptMeta, batch *common.Ba Stderr: data.Stderr, } if len(data.Stderr) != 0 { - auditlog.UpdateSubLog(subLogId, auditlog.StatusFail, data.Stderr) + auditlog.UpdateSubLog(subLogId, auditlog.StatusFail, fmt.Sprintf("脚本 -> %s\n%s", script_name, data.Stderr)) } else { - auditlog.UpdateSubLog(subLogId, auditlog.StatusSuccess, data.Stdout) + auditlog.UpdateSubLog(subLogId, auditlog.StatusSuccess, fmt.Sprintf("脚本 -> %s\n%s", script_name, data.Stdout)) } return re }