mirror of
				https://github.com/lzh-1625/go_process_manager.git
				synced 2025-10-31 11:26:49 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package logic
 | |
| 
 | |
| import (
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/lzh-1625/go_process_manager/config"
 | |
| 	"github.com/lzh-1625/go_process_manager/internal/app/eum"
 | |
| 	"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[eum.Condition]conditionFunc{
 | |
| 	eum.TaskCondRunning: func(data *model.Task, proc *ProcessBase) bool {
 | |
| 		return proc.State.State == eum.ProcessStateRunning
 | |
| 	},
 | |
| 	eum.TaskCondNotRunning: func(data *model.Task, proc *ProcessBase) bool {
 | |
| 		return proc.State.State != eum.ProcessStateRunning && proc.State.State != eum.ProcessStateStart
 | |
| 	},
 | |
| 	eum.TaskCondException: func(data *model.Task, proc *ProcessBase) bool {
 | |
| 		return proc.State.State == eum.ProcessStateWarnning
 | |
| 	},
 | |
| }
 | |
| 
 | |
| // 执行操作,返回结果是否成功
 | |
| type operationFunc func(data *model.Task, proc *ProcessBase) bool
 | |
| 
 | |
| var OperationHandle = map[eum.TaskOperation]operationFunc{
 | |
| 	eum.TaskStart: func(data *model.Task, proc *ProcessBase) bool {
 | |
| 		if proc.State.State == eum.ProcessStateRunning || proc.State.State == eum.ProcessStateStart {
 | |
| 			log.Logger.Debugw("进程已在运行", "proc", proc.Name)
 | |
| 			return false
 | |
| 		}
 | |
| 		proc.Start()
 | |
| 		return true
 | |
| 	},
 | |
| 
 | |
| 	eum.TaskStartWaitDone: func(data *model.Task, proc *ProcessBase) bool {
 | |
| 		if proc.State.State == eum.ProcessStateRunning || proc.State.State == eum.ProcessStateStart {
 | |
| 			log.Logger.Debugw("进程已在运行", "proc", proc.Name)
 | |
| 			return false
 | |
| 		}
 | |
| 		if err := proc.Start(); err != nil {
 | |
| 			log.Logger.Debugw("进程启动失败", "proc", proc.Name)
 | |
| 			return false
 | |
| 		}
 | |
| 		select {
 | |
| 		case <-proc.StopChan:
 | |
| 			log.Logger.Debugw("进程停止,任务完成", "proc", proc.Name)
 | |
| 			return true
 | |
| 		case <-time.After(time.Second * time.Duration(config.CF.TaskTimeout)):
 | |
| 			log.Logger.Errorw("任务超时")
 | |
| 			return false
 | |
| 		}
 | |
| 	},
 | |
| 
 | |
| 	eum.TaskStop: func(data *model.Task, proc *ProcessBase) bool {
 | |
| 		if proc.State.State != eum.ProcessStateRunning {
 | |
| 			log.Logger.Debugw("进程未在运行", "proc", proc.Name)
 | |
| 			return false
 | |
| 		}
 | |
| 		log.Logger.Debugw("异步停止任务", "proc", proc.Name)
 | |
| 		go proc.Kill()
 | |
| 		return true
 | |
| 	},
 | |
| 
 | |
| 	eum.TaskStopWaitDone: func(data *model.Task, proc *ProcessBase) bool {
 | |
| 		if proc.State.State != eum.ProcessStateRunning {
 | |
| 			log.Logger.Debugw("进程未在运行", "proc", proc.Name)
 | |
| 			return false
 | |
| 		}
 | |
| 		log.Logger.Debugw("停止任务并等待结束", "proc", proc.Name)
 | |
| 		return proc.Kill() == nil
 | |
| 	},
 | |
| }
 | 
