2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 06:47:20 +08:00
Files
panel/internal/queuejob/process_task.go
2025-01-01 15:33:47 +08:00

57 lines
1.1 KiB
Go

package queuejob
import (
"errors"
"log/slog"
"github.com/tnb-labs/panel/internal/biz"
"github.com/tnb-labs/panel/pkg/shell"
)
// ProcessTask 处理面板任务
type ProcessTask struct {
log *slog.Logger
taskRepo biz.TaskRepo
taskID uint
}
// NewProcessTask 实例化 ProcessTask
func NewProcessTask(log *slog.Logger, taskRepo biz.TaskRepo) *ProcessTask {
return &ProcessTask{
log: log,
taskRepo: taskRepo,
}
}
func (r *ProcessTask) Handle(args ...any) error {
taskID, ok := args[0].(uint)
if !ok {
return errors.New("参数错误")
}
r.taskID = taskID
task, err := r.taskRepo.Get(taskID)
if err != nil {
return err
}
if err = r.taskRepo.UpdateStatus(taskID, biz.TaskStatusRunning); err != nil {
return err
}
if _, err = shell.Exec(task.Shell); err != nil {
return err
}
if err = r.taskRepo.UpdateStatus(taskID, biz.TaskStatusSuccess); err != nil {
return err
}
return nil
}
func (r *ProcessTask) ErrHandle(err error) {
r.log.Warn("background task failed", slog.Any("task_id", r.taskID), slog.Any("err", err))
_ = r.taskRepo.UpdateStatus(r.taskID, biz.TaskStatusFailed)
}