From 5a0828fd7cb66ce004ca226eb4d18f9097eea4cb Mon Sep 17 00:00:00 2001 From: zhanghan2021 Date: Thu, 16 Jan 2025 17:43:02 +0800 Subject: [PATCH] fix web terminal disconnected --- .../network/controller/agentcontroller/rpm.go | 4 +-- cmd/server/app/network/controller/batch.go | 6 ++-- cmd/server/app/network/controller/depart.go | 6 ++-- cmd/server/app/network/controller/role.go | 2 +- cmd/server/app/network/controller/script.go | 2 +- cmd/server/app/network/controller/user.go | 30 +++++++++---------- .../app/network/controller/webTerminal.go | 14 ++++++--- cmd/server/app/network/websocket/sshclient.go | 4 +-- .../app/network/websocket/webterminal.go | 5 ++-- cmd/server/app/service/auditlog/auditlog.go | 24 --------------- cmd/server/app/service/auth/casbin.go | 1 - 11 files changed, 38 insertions(+), 60 deletions(-) diff --git a/cmd/server/app/network/controller/agentcontroller/rpm.go b/cmd/server/app/network/controller/agentcontroller/rpm.go index ccedb132..9de55d8c 100644 --- a/cmd/server/app/network/controller/agentcontroller/rpm.go +++ b/cmd/server/app/network/controller/agentcontroller/rpm.go @@ -119,7 +119,7 @@ func InstallRpmHandler(c *gin.Context) { } subLogId, _ := auditlog.AddSubLog(&auditlog.SubLog{ LogId: logId, - ActionObject: "软件包安装:" + agent.IP, + ActionObject: "软件包安装:" + agent.IP, UpdateTime: time.Now().Format("2006-01-02 15:04:05"), }) @@ -198,7 +198,7 @@ func RemoveRpmHandler(c *gin.Context) { } subLogId, _ := auditlog.AddSubLog(&auditlog.SubLog{ LogId: logId, - ActionObject: "软件包卸载:" + agent.IP, + ActionObject: "软件包卸载:" + agent.IP, UpdateTime: time.Now().Format("2006-01-02 15:04:05"), }) diff --git a/cmd/server/app/network/controller/batch.go b/cmd/server/app/network/controller/batch.go index e4ab172a..53c8dc41 100644 --- a/cmd/server/app/network/controller/batch.go +++ b/cmd/server/app/network/controller/batch.go @@ -46,7 +46,7 @@ func CreateBatchHandler(c *gin.Context) { }) subLogId, _ := auditlog.AddSubLog(&auditlog.SubLog{ LogId: logId, - ActionObject: "批次创建:" + params.Name, + ActionObject: "批次创建:" + params.Name, UpdateTime: time.Now().Format("2006-01-02 15:04:05"), }) @@ -142,7 +142,7 @@ func DeleteBatchHandler(c *gin.Context) { }) subLogId, _ := auditlog.AddSubLog(&auditlog.SubLog{ LogId: logId, - ActionObject: "批次删除:" + strings.Join(batchdel.Batches, ","), + ActionObject: "批次删除:" + strings.Join(batchdel.Batches, ","), UpdateTime: time.Now().Format("2006-01-02 15:04:05"), }) @@ -190,7 +190,7 @@ func UpdateBatchHandler(c *gin.Context) { }) subLogId, _ := auditlog.AddSubLog(&auditlog.SubLog{ LogId: logId, - ActionObject: "批次编辑:" + batchinfo.BatchName, + ActionObject: "批次编辑:" + batchinfo.BatchName, UpdateTime: time.Now().Format("2006-01-02 15:04:05"), }) diff --git a/cmd/server/app/network/controller/depart.go b/cmd/server/app/network/controller/depart.go index e01d6fc9..b4ea8f24 100644 --- a/cmd/server/app/network/controller/depart.go +++ b/cmd/server/app/network/controller/depart.go @@ -97,7 +97,7 @@ func AddDepartHandler(c *gin.Context) { }) subLogId, _ := auditlog.AddSubLog(&auditlog.SubLog{ LogId: logId, - ActionObject: "部门添加:" + newDepart.DepartName, + ActionObject: "部门添加:" + newDepart.DepartName, UpdateTime: time.Now().Format("2006-01-02 15:04:05"), }) @@ -176,7 +176,7 @@ func UpdateDepartHandler(c *gin.Context) { }) subLogId, _ := auditlog.AddSubLog(&auditlog.SubLog{ LogId: logId, - ActionObject: "修改部门名称" + new.DepartName, + ActionObject: "修改部门名称:" + new.DepartName, UpdateTime: time.Now().Format("2006-01-02 15:04:05"), }) @@ -188,7 +188,7 @@ func UpdateDepartHandler(c *gin.Context) { return } auditlog.UpdateLog(logId, auditlog.StatusSuccess) - auditlog.UpdateSubLog(subLogId, auditlog.StatusSuccess, "操作成功") + auditlog.UpdateSubLog(subLogId, auditlog.StatusSuccess, "部门新名称为:"+new.DepartName) response.Success(c, nil, "部门更新成功") } diff --git a/cmd/server/app/network/controller/role.go b/cmd/server/app/network/controller/role.go index e9096ba9..bb5c4c96 100644 --- a/cmd/server/app/network/controller/role.go +++ b/cmd/server/app/network/controller/role.go @@ -135,7 +135,7 @@ func RolePermissionChangeHandler(c *gin.Context) { }) subLogId, _ := auditlog.AddSubLog(&auditlog.SubLog{ LogId: logId, - ActionObject: "角色权限变更:" + params.Role, + ActionObject: "角色权限变更:" + params.Role, UpdateTime: time.Now().Format("2006-01-02 15:04:05"), }) diff --git a/cmd/server/app/network/controller/script.go b/cmd/server/app/network/controller/script.go index f907bfd2..2ec92fab 100644 --- a/cmd/server/app/network/controller/script.go +++ b/cmd/server/app/network/controller/script.go @@ -47,7 +47,7 @@ func AddScriptHandler(c *gin.Context) { }) subLogId, _ := auditlog.AddSubLog(&auditlog.SubLog{ LogId: logId, - ActionObject: "创建脚本:" + script.Name, + ActionObject: "创建脚本:" + script.Name, UpdateTime: time.Now().Format("2006-01-02 15:04:05"), }) diff --git a/cmd/server/app/network/controller/user.go b/cmd/server/app/network/controller/user.go index 6e316fb5..433f98ad 100644 --- a/cmd/server/app/network/controller/user.go +++ b/cmd/server/app/network/controller/user.go @@ -9,15 +9,12 @@ package controller import ( "fmt" - "net/http" "regexp" - "strconv" "strings" "time" eventSDK "gitee.com/openeuler/PilotGo-plugins/event/sdk" "gitee.com/openeuler/PilotGo/cmd/server/app/network/jwt" - "gitee.com/openeuler/PilotGo/cmd/server/app/service/auditlog" "gitee.com/openeuler/PilotGo/cmd/server/app/service/plugin" "gitee.com/openeuler/PilotGo/cmd/server/app/service/role" userservice "gitee.com/openeuler/PilotGo/cmd/server/app/service/user" @@ -273,7 +270,6 @@ func ResetPasswordHandler(c *gin.Context) { // 删除用户 func DeleteUserHandler(c *gin.Context) { - statuscodes := []string{} fd := struct { Deldatas []string `json:"delDatas,omitempty"` }{} @@ -282,26 +278,28 @@ func DeleteUserHandler(c *gin.Context) { return } + var codeMap = make(map[string][]string) for _, ps := range fd.Deldatas { - err := userservice.DeleteUser(strings.Split(ps, "/")[0]) if err != nil { - statuscodes = append(statuscodes, strconv.Itoa(http.StatusBadRequest)) - continue + if _, exists := codeMap["失败"]; !exists { + codeMap["失败"] = []string{} + } + codeMap["失败"] = append(codeMap["失败"], ps) + } else { + if _, exists := codeMap["成功"]; !exists { + codeMap["成功"] = []string{} + } + codeMap["成功"] = append(codeMap["成功"], ps) } - - statuscodes = append(statuscodes, strconv.Itoa(http.StatusOK)) } - status := auditlog.BatchActionStatus(statuscodes) - switch strings.Split(status, ",")[2] { - case "0.00": + if len(codeMap["成功"]) == 0 { response.Fail(c, nil, "用户删除失败") - return - case "1.00": + } else if len(codeMap["失败"]) == 0 { response.Success(c, nil, "用户删除成功") - default: - response.Success(c, nil, "用户删除部分成功") + } else { + response.Success(c, nil, "部分用户删除成功") } } diff --git a/cmd/server/app/network/controller/webTerminal.go b/cmd/server/app/network/controller/webTerminal.go index 899f767d..df329743 100644 --- a/cmd/server/app/network/controller/webTerminal.go +++ b/cmd/server/app/network/controller/webTerminal.go @@ -59,24 +59,30 @@ func WebTerminal(c *gin.Context) { } var logBuff = bufPool.Get().(*bytes.Buffer) - logBuff.Reset() - defer bufPool.Put(logBuff) + defer func() { + logBuff.Reset() + defer bufPool.Put(logBuff) + }() ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + wg := sync.WaitGroup{} wg.Add(2) + go func() { defer wg.Done() err := terminal.LoopRead(logBuff, ctx) if err != nil { - logger.Error("%#v", err) + logger.Error("LoopRead 退出:%#v", err) } + cancel() }() go func() { defer wg.Done() err := terminal.SessionWait() if err != nil { - logger.Error("%#v", err) + logger.Error("SessionWait 退出:%#v", err) } cancel() }() diff --git a/cmd/server/app/network/websocket/sshclient.go b/cmd/server/app/network/websocket/sshclient.go index 3b0c873e..a01590b5 100644 --- a/cmd/server/app/network/websocket/sshclient.go +++ b/cmd/server/app/network/websocket/sshclient.go @@ -80,8 +80,8 @@ func DecodedMsgToSSHClient(msg string) (*SSHClient, error) { // 升级HTTP协议为WebSocket var Upgrader = websocket.Upgrader{ - ReadBufferSize: 1024, - WriteBufferSize: 1024, + ReadBufferSize: 1024 * 4, + WriteBufferSize: 1024 * 4, CheckOrigin: func(r *http.Request) bool { return true }, diff --git a/cmd/server/app/network/websocket/webterminal.go b/cmd/server/app/network/websocket/webterminal.go index 89f7d177..2cd43738 100644 --- a/cmd/server/app/network/websocket/webterminal.go +++ b/cmd/server/app/network/websocket/webterminal.go @@ -66,7 +66,7 @@ func NewTerminal(ws_conn *websocket.Conn, sshClient *ssh.Client) (*Terminal, err return terminal, nil } func (t *Terminal) Write(p []byte) (n int, err error) { - writer, err := t.WsConn.NextWriter(websocket.TextMessage) + writer, err := t.WsConn.NextWriter(websocket.BinaryMessage) if err != nil { return 0, err } @@ -108,8 +108,7 @@ func (t *Terminal) LoopRead(logBuff *bytes.Buffer, context context.Context) erro switch wsData[0] { case MsgResize: var args Resize - err := json.Unmarshal(body, &args) - if err != nil { + if err := json.Unmarshal(body, &args); err != nil { return fmt.Errorf("ssh pty resize windows err:%s", err) } if args.Columns > 0 && args.Rows > 0 { diff --git a/cmd/server/app/service/auditlog/auditlog.go b/cmd/server/app/service/auditlog/auditlog.go index 52ab5945..4dd82248 100644 --- a/cmd/server/app/service/auditlog/auditlog.go +++ b/cmd/server/app/service/auditlog/auditlog.go @@ -8,10 +8,6 @@ package auditlog import ( - "fmt" - "net/http" - "strconv" - "gitee.com/openeuler/PilotGo/cmd/server/app/service/internal/dao" ) @@ -42,26 +38,6 @@ const ( type AuditLog = dao.AuditLog type SubLog = dao.SubLog -// 单机操作成功状态:是否成功,机器数量,成功率 -const ( - ActionOK = "1,1,1.00" - ActionFalse = "0,1,0.00" -) - -// 计算批量机器操作的状态:成功数,总数目,比率 -func BatchActionStatus(StatusCodes []string) (status string) { - var StatusOKCounts int - for _, success := range StatusCodes { - if success == strconv.Itoa(http.StatusOK) { - StatusOKCounts++ - } - } - num, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(StatusOKCounts)/float64(len(StatusCodes))), 64) - rate := strconv.FormatFloat(num, 'f', 2, 64) - status = strconv.Itoa(StatusOKCounts) + "," + strconv.Itoa(len(StatusCodes)) + "," + rate - return -} - func Add(log *dao.AuditLog) (int, error) { return log.Record() } diff --git a/cmd/server/app/service/auth/casbin.go b/cmd/server/app/service/auth/casbin.go index 2ee79f21..aac75b43 100644 --- a/cmd/server/app/service/auth/casbin.go +++ b/cmd/server/app/service/auth/casbin.go @@ -115,7 +115,6 @@ var ( MenuList = []string{ "overview", "cluster", - "batch", "usermanager", "rolemanager", "audit", -- Gitee