This commit is contained in:
akrike
2025-07-05 23:14:44 +08:00
parent be73582e28
commit cf184745ed
9 changed files with 34 additions and 56 deletions

View File

@@ -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

View File

@@ -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,

View File

@@ -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

View File

@@ -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,

View File

@@ -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)

View File

@@ -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...)
}
}
}

View File

@@ -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()
}
}

View File

@@ -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"`
}

View File

@@ -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(),
})
}