diff --git a/internal/app/api/config.go b/internal/app/api/config.go index 528e0c0..55db311 100644 --- a/internal/app/api/config.go +++ b/internal/app/api/config.go @@ -21,7 +21,7 @@ func (c *configApi) GetSystemConfiguration(ctx *gin.Context, _ any) error { func (c *configApi) SetSystemConfiguration(ctx *gin.Context, _ any) (err error) { req := map[string]string{} if err = ctx.BindJSON(&req); err != nil { - return + return err } err = logic.ConfigLogic.SetSystemConfiguration(req) return diff --git a/internal/app/api/proc.go b/internal/app/api/proc.go index 13e5082..0195be4 100644 --- a/internal/app/api/proc.go +++ b/internal/app/api/proc.go @@ -20,12 +20,12 @@ var ProcApi = new(procApi) func (p *procApi) CreateNewProcess(ctx *gin.Context, req model.Process) (err error) { index, err := repository.ProcessRepository.AddProcessConfig(req) if err != nil { - return + return err } req.Uuid = index proc, err := logic.ProcessCtlLogic.NewProcess(req) if err != nil { - return + return err } logic.ProcessCtlLogic.AddProcess(req.Uuid, proc) rOk(ctx, "Operation successful!", gin.H{ @@ -109,7 +109,7 @@ func (p *procApi) ProcessControl(ctx *gin.Context, req model.ProcessUuidReq) (er user := getUserName(ctx) proc, err := logic.ProcessCtlLogic.GetProcess(req.Uuid) if err != nil { - return + return err } proc.ProcessControl(user) return @@ -124,7 +124,7 @@ func (p *procApi) ProcessCreateShare(ctx *gin.Context, req model.ProcessShare) ( Pid: req.Pid, CreateBy: getUserName(ctx), }); err != nil { - return + return err } rOk(ctx, "Operation successful!", gin.H{ "token": token, diff --git a/internal/app/api/task.go b/internal/app/api/task.go index ed3a672..827df95 100644 --- a/internal/app/api/task.go +++ b/internal/app/api/task.go @@ -21,7 +21,7 @@ func (t *taskApi) CreateTask(ctx *gin.Context, req model.Task) (err error) { func (t *taskApi) GetTaskById(ctx *gin.Context, req model.TaskIdReq) (err error) { result, err := repository.TaskRepository.GetTaskById(req.Id) if err != nil { - return + return err } rOk(ctx, "Operation successful!", result) return diff --git a/internal/app/api/ws.go b/internal/app/api/ws.go index 834a6b3..b69c7c5 100644 --- a/internal/app/api/ws.go +++ b/internal/app/api/ws.go @@ -13,7 +13,6 @@ import ( "github.com/lzh-1625/go_process_manager/internal/app/model" "github.com/lzh-1625/go_process_manager/internal/app/repository" "github.com/lzh-1625/go_process_manager/log" - "github.com/lzh-1625/go_process_manager/utils" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" @@ -53,17 +52,17 @@ func (w *wsApi) WebsocketHandle(ctx *gin.Context, req model.WebsocketHandleReq) reqUser := getUserName(ctx) proc, err := logic.ProcessCtlLogic.GetProcess(req.Uuid) if err != nil { - return + return err } - if !proc.HasWsConn(reqUser) { - return errors.New("connection already exists; unable to establish a new one") + if proc.HasWsConn(reqUser) { + return errors.New("connection already exists") } - if proc.Control.Controller == reqUser || proc.VerifyControl() { - return errors.New("insufficient permissions; please check your access rights") + if proc.Control.Controller != reqUser && !proc.VerifyControl() { + return errors.New("insufficient permissions") } conn, err := upgrader.Upgrade(ctx.Writer, ctx.Request, nil) if err != nil { - return + return err } log.Logger.Infow("ws连接成功") @@ -76,7 +75,7 @@ func (w *wsApi) WebsocketHandle(ctx *gin.Context, req model.WebsocketHandleReq) } proc.ReadCache(wci) if proc.State.State == 1 { - proc.SetTerminalSize(utils.GetIntByString(ctx.Query("cols")), utils.GetIntByString(ctx.Query("rows"))) + proc.SetTerminalSize(req.Cols, req.Rows) w.startWsConnect(wci, cancel, proc, hasOprPermission(ctx, req.Uuid, constants.OPERATION_TERMINAL_WRITE)) proc.AddConn(reqUser, wci) defer proc.DeleteConn(reqUser) @@ -100,14 +99,14 @@ func (w *wsApi) WebsocketHandle(ctx *gin.Context, req model.WebsocketHandleReq) func (w *wsApi) WebsocketShareHandle(ctx *gin.Context, req model.WebsocketHandleReq) (err error) { data, err := repository.WsShare.GetWsShareDataByToken(req.Token) if err != nil { - return + return err } if data.ExpireTime.Unix() <= time.Now().Unix() { return errors.New("share expired") } proc, err := logic.ProcessCtlLogic.GetProcess(data.Pid) if err != nil { - return + return err } guestName := "guest-" + strconv.Itoa(int(data.ID)) // 构造访客用户名 if proc.HasWsConn(guestName) { @@ -121,14 +120,14 @@ func (w *wsApi) WebsocketShareHandle(ctx *gin.Context, req model.WebsocketHandle } conn, err := upgrader.Upgrade(ctx.Writer, ctx.Request, nil) if err != nil { - return + return err } log.Logger.Infow("ws连接成功") data.UpdatedAt = time.Now() repository.WsShare.Edit(data) - proc.SetTerminalSize(utils.GetIntByString(ctx.Query("cols")), utils.GetIntByString(ctx.Query("rows"))) + proc.SetTerminalSize(req.Cols, req.Rows) wsCtx, cancel := context.WithCancel(context.Background()) wci := &WsConnetInstance{ WsConnect: conn, diff --git a/internal/app/logic/process_logic.go b/internal/app/logic/process_logic.go index 2f60e5f..a1a14b7 100644 --- a/internal/app/logic/process_logic.go +++ b/internal/app/logic/process_logic.go @@ -120,7 +120,6 @@ func (p *processCtlLogic) getProcessInfoList(processConfiglist []model.Process) pi.State.State = process.State.State pi.StartTime = process.GetStartTimeFormat() pi.User = process.GetUserString() - pi.Usage.Cpu = process.performanceStatus.cpu pi.Usage.Mem = process.performanceStatus.mem if config.CF.PerformanceCapacityDisplay { @@ -163,7 +162,6 @@ func (p *processCtlLogic) RunPrcessById(id int) (*ProcessBase, error) { func (p *processCtlLogic) ProcessInit() { config := repository.ProcessRepository.GetAllProcessConfig() for _, v := range config { - proc, err := p.NewProcess(v) if err != nil { log.Logger.Warnw("初始化启动进程失败", v.Name, "name", "err", err) diff --git a/internal/app/middle/logger.go b/internal/app/middle/logger.go index 8222198..b6dc471 100644 --- a/internal/app/middle/logger.go +++ b/internal/app/middle/logger.go @@ -28,7 +28,14 @@ func Logger() gin.HandlerFunc { if user, ok := ctx.Get(constants.CTXFLG_USER_NAME); ok { logKv = append(logKv, "user", user) } - log.Logger.Infow("GIN", logKv...) + switch { + case ctx.Writer.Status() >= 200 && ctx.Writer.Status() < 300: + log.Logger.Infow("\033[102mGIN\033[0m", logKv...) + case ctx.Writer.Status() >= 500: + log.Logger.Infow("\033[101mGIN\033[0m", logKv...) + default: + log.Logger.Infow("\033[103mGIN\033[0m", logKv...) + } } } diff --git a/internal/app/middle/panic.go b/internal/app/middle/panic.go deleted file mode 100644 index e5f557b..0000000 --- a/internal/app/middle/panic.go +++ /dev/null @@ -1,26 +0,0 @@ -package middle - -import ( - "github.com/lzh-1625/go_process_manager/internal/app/constants" - - "github.com/gin-gonic/gin" -) - -func PanicMiddle() gin.HandlerFunc { - return func(c *gin.Context) { - defer func() { - if err := recover(); err == 0 { - if err, ok := c.Get(constants.CTXFLG_ERR); ok { - rErr(c, -1, err.(string), nil) - } else { - rErr(c, -1, "Internal error!", nil) - } - } else { - if err != nil { - panic(err) - } - } - }() - c.Next() - } -} diff --git a/internal/app/model/ws.go b/internal/app/model/ws.go index 48eccd9..f710cf0 100644 --- a/internal/app/model/ws.go +++ b/internal/app/model/ws.go @@ -20,8 +20,8 @@ func (WsShare) TableName() string { } type WebsocketHandleReq struct { - Uuid int `json:"uuid"` - Cols int `json:"cols"` - Rows int `json:"rows"` - Token string `json:"token"` + Uuid int `form:"uuid"` + Cols int `form:"cols"` + Rows int `form:"rows"` + Token string `form:"token"` } diff --git a/internal/app/route/route.go b/internal/app/route/route.go index 547d7fb..2e5c3db 100644 --- a/internal/app/route/route.go +++ b/internal/app/route/route.go @@ -54,7 +54,6 @@ func routePathInit(r *gin.Engine) { apiGroup := r.Group("/api") apiGroup.Use(middle.CheckToken()) - apiGroup.Use(middle.PanicMiddle()) // apiGroup.Use(middle.DemoMiddle()) { wsGroup := apiGroup.Group("/ws") @@ -155,19 +154,19 @@ func bind[T any](fn func(*gin.Context, T) error, bindOption int) func(*gin.Conte return func(ctx *gin.Context) { var req T if bindOption&Body != 0 { - if err := ctx.BindJSON(req); err != nil { + if err := ctx.BindJSON(&req); err != nil { rErr(ctx, err) return } } if bindOption&Header != 0 { - if err := ctx.BindHeader(req); err != nil { + if err := ctx.BindHeader(&req); err != nil { rErr(ctx, err) return } } if bindOption&Query != 0 { - if err := ctx.BindQuery(req); err != nil { + if err := ctx.BindQuery(&req); err != nil { rErr(ctx, err) return } @@ -187,8 +186,9 @@ func bind[T any](fn func(*gin.Context, T) error, bindOption int) func(*gin.Conte } func rErr(ctx *gin.Context, err error) { + log.Logger.Warn(err) ctx.JSON(500, gin.H{ "code": -1, - "message": err, + "message": err.Error(), }) }