2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 13:47:15 +08:00

feat: 添加计划任务

This commit is contained in:
耗子
2024-10-12 02:25:41 +08:00
parent 0c4d97a512
commit 96d7e14631
15 changed files with 297 additions and 6 deletions

View File

@@ -0,0 +1,52 @@
package queuejob
import (
"errors"
"github.com/TheTNB/panel/internal/biz"
"github.com/TheTNB/panel/pkg/shell"
)
// ProcessTask 处理面板任务
type ProcessTask struct {
taskRepo biz.TaskRepo
taskID uint
}
// NewProcessTask 实例化 ProcessTask
func NewProcessTask(taskRepo biz.TaskRepo) *ProcessTask {
return &ProcessTask{
taskRepo: taskRepo,
}
}
func (receiver *ProcessTask) Handle(args ...any) error {
taskID, ok := args[0].(uint)
if !ok {
return errors.New("参数错误")
}
receiver.taskID = taskID
task, err := receiver.taskRepo.Get(taskID)
if err != nil {
return err
}
if err = receiver.taskRepo.UpdateStatus(taskID, biz.TaskStatusRunning); err != nil {
return err
}
if _, err = shell.Execf(task.Shell); err != nil { // nolint: govet
return err
}
if err = receiver.taskRepo.UpdateStatus(taskID, biz.TaskStatusSuccess); err != nil {
return err
}
return nil
}
func (receiver *ProcessTask) ErrHandle(err error) {
_ = receiver.taskRepo.UpdateStatus(receiver.taskID, biz.TaskStatusFailed)
}