Files
go_process_manager/internal/app/logic/task_exec.go
2025-07-09 16:58:08 +08:00

79 lines
2.1 KiB
Go

package logic
import (
"time"
"github.com/lzh-1625/go_process_manager/config"
"github.com/lzh-1625/go_process_manager/internal/app/constants"
"github.com/lzh-1625/go_process_manager/internal/app/model"
"github.com/lzh-1625/go_process_manager/log"
)
type conditionFunc func(data *model.Task, proc *ProcessBase) bool
var conditionHandle = map[constants.Condition]conditionFunc{
constants.RUNNING: func(data *model.Task, proc *ProcessBase) bool {
return proc.State.State == 1
},
constants.NOT_RUNNING: func(data *model.Task, proc *ProcessBase) bool {
return proc.State.State != 1
},
constants.EXCEPTION: func(data *model.Task, proc *ProcessBase) bool {
return proc.State.State == 2
},
}
// 执行操作,返回结果是否成功
type operationFunc func(data *model.Task, proc *ProcessBase) bool
var OperationHandle = map[constants.TaskOperation]operationFunc{
constants.TASK_START: func(data *model.Task, proc *ProcessBase) bool {
if proc.State.State == 1 {
log.Logger.Debugw("进程已在运行")
return false
}
go proc.Start()
return true
},
constants.TASK_START_WAIT_DONE: func(data *model.Task, proc *ProcessBase) bool {
if proc.State.State == 1 {
log.Logger.Debugw("进程已在运行")
return false
}
if err := proc.Start(); err != nil {
log.Logger.Debugw("进程启动失败")
return false
}
select {
case <-proc.StopChan:
log.Logger.Debugw("进程停止,任务完成")
return true
case <-time.After(time.Second * time.Duration(config.CF.TaskTimeout)):
log.Logger.Errorw("任务超时")
return false
}
},
constants.TASK_STOP: func(data *model.Task, proc *ProcessBase) bool {
if proc.State.State != 1 {
log.Logger.Debugw("进程未在运行")
return false
}
log.Logger.Debugw("异步停止任务")
proc.State.manualStopFlag = true
go proc.Kill()
return true
},
constants.TASK_STOP_WAIT_DONE: func(data *model.Task, proc *ProcessBase) bool {
if proc.State.State != 1 {
log.Logger.Debugw("进程未在运行")
return false
}
log.Logger.Debugw("停止任务并等待结束")
proc.State.manualStopFlag = true
return proc.Kill() == nil
},
}