mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 06:47:20 +08:00
57 lines
1.1 KiB
Go
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)
|
|
}
|