mirror of
https://github.com/lzh-1625/go_process_manager.git
synced 2025-10-06 00:16:53 +08:00
130 lines
3.8 KiB
Go
130 lines
3.8 KiB
Go
package api
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/lzh-1625/go_process_manager/internal/app/logic"
|
|
"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/utils"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type procApi struct{}
|
|
|
|
var ProcApi = new(procApi)
|
|
|
|
func (p *procApi) CreateNewProcess(ctx *gin.Context) {
|
|
req := bind[model.Process](ctx)
|
|
index, err := repository.ProcessRepository.AddProcessConfig(req)
|
|
errCheck(ctx, err != nil, err)
|
|
req.Uuid = index
|
|
proc, err := logic.ProcessCtlLogic.NewProcess(req)
|
|
errCheck(ctx, err != nil, err)
|
|
logic.ProcessCtlLogic.AddProcess(req.Uuid, proc)
|
|
rOk(ctx, "Operation successful!", gin.H{
|
|
"id": req.Uuid,
|
|
})
|
|
}
|
|
|
|
func (p *procApi) DeleteNewProcess(ctx *gin.Context) {
|
|
uuid := getQueryInt(ctx, "uuid")
|
|
logic.ProcessCtlLogic.KillProcess(uuid)
|
|
logic.ProcessCtlLogic.DeleteProcess(uuid)
|
|
err := repository.ProcessRepository.DeleteProcessConfig(uuid)
|
|
errCheck(ctx, err != nil, err)
|
|
rOk(ctx, "Operation successful!", nil)
|
|
}
|
|
|
|
func (p *procApi) KillProcess(ctx *gin.Context) {
|
|
uuid := getQueryInt(ctx, "uuid")
|
|
err := logic.ProcessCtlLogic.KillProcess(uuid)
|
|
errCheck(ctx, err != nil, err)
|
|
rOk(ctx, "Operation successful!", nil)
|
|
}
|
|
|
|
func (p *procApi) StartProcess(ctx *gin.Context) {
|
|
uuid := getQueryInt(ctx, "uuid")
|
|
prod, err := logic.ProcessCtlLogic.GetProcess(uuid)
|
|
if err != nil { // 进程不存在则创建
|
|
proc, err := logic.ProcessCtlLogic.RunNewProcess(repository.ProcessRepository.GetProcessConfigById(uuid))
|
|
errCheck(ctx, err != nil, err)
|
|
logic.ProcessCtlLogic.AddProcess(uuid, proc)
|
|
rOk(ctx, "Operation successful!", nil)
|
|
return
|
|
}
|
|
errCheck(ctx, prod.State.State == 1, "The process is currently running.")
|
|
prod.ResetRestartTimes()
|
|
err = prod.Start()
|
|
errCheck(ctx, err != nil, err)
|
|
rOk(ctx, "Operation successful!", nil)
|
|
}
|
|
|
|
func (p *procApi) StartAllProcess(ctx *gin.Context) {
|
|
if isAdmin(ctx) {
|
|
logic.ProcessCtlLogic.ProcessStartAll()
|
|
} else {
|
|
logic.ProcessCtlLogic.ProcesStartAllByUsername(getUserName(ctx))
|
|
}
|
|
rOk(ctx, "Operation successful!", nil)
|
|
}
|
|
|
|
func (p *procApi) KillAllProcess(ctx *gin.Context) {
|
|
if isAdmin(ctx) {
|
|
logic.ProcessCtlLogic.KillAllProcess()
|
|
} else {
|
|
logic.ProcessCtlLogic.KillAllProcessByUserName(getUserName(ctx))
|
|
}
|
|
rOk(ctx, "Operation successful!", nil)
|
|
}
|
|
|
|
func (p *procApi) GetProcessList(ctx *gin.Context) {
|
|
if isAdmin(ctx) {
|
|
rOk(ctx, "Query successful!", logic.ProcessCtlLogic.GetProcessList())
|
|
} else {
|
|
rOk(ctx, "Query successful!", logic.ProcessCtlLogic.GetProcessListByUser(getUserName(ctx)))
|
|
}
|
|
}
|
|
|
|
func (p *procApi) UpdateProcessConfig(ctx *gin.Context) {
|
|
req := bind[model.Process](ctx)
|
|
logic.ProcessCtlLogic.UpdateProcessConfig(req)
|
|
err := repository.ProcessRepository.UpdateProcessConfig(req)
|
|
errCheck(ctx, err != nil, err)
|
|
rOk(ctx, "Operation successful!", nil)
|
|
}
|
|
|
|
func (p *procApi) GetProcessConfig(ctx *gin.Context) {
|
|
uuid := getQueryInt(ctx, "uuid")
|
|
data := repository.ProcessRepository.GetProcessConfigById(uuid)
|
|
errCheck(ctx, data.Uuid == 0, "No information found!")
|
|
rOk(ctx, "Query successful!", data)
|
|
}
|
|
|
|
func (p *procApi) ProcessControl(ctx *gin.Context) {
|
|
user := getUserName(ctx)
|
|
uuid := getQueryInt(ctx, "uuid")
|
|
proc, err := logic.ProcessCtlLogic.GetProcess(uuid)
|
|
errCheck(ctx, err != nil, err)
|
|
proc.ProcessControl(user)
|
|
rOk(ctx, "Operation successful!", nil)
|
|
}
|
|
|
|
func (p *procApi) ProcessCreateShare(ctx *gin.Context) {
|
|
req := bind[model.ProcessShare](ctx)
|
|
token := utils.UnwarpIgnore(uuid.NewRandom()).String()
|
|
err := repository.WsShare.AddShareData(model.WsShare{
|
|
ExpireTime: time.Now().Add(time.Minute * time.Duration(req.Minutes)),
|
|
Write: req.Write,
|
|
Token: token,
|
|
Pid: req.Pid,
|
|
CreateBy: getUserName(ctx),
|
|
})
|
|
errCheck(ctx, err != nil, err)
|
|
rOk(ctx, "Operation successful!", gin.H{
|
|
"token": token,
|
|
})
|
|
}
|