JCC-CSScheduler/advisor/internal/task/schedule_scheme.go

53 lines
1.3 KiB
Go

package task
import (
"time"
"gitlink.org.cn/cloudream/common/pkgs/logger"
"gitlink.org.cn/cloudream/common/pkgs/task"
jobmod "gitlink.org.cn/cloudream/scheduler/common/models/job"
advtsk "gitlink.org.cn/cloudream/scheduler/common/pkgs/mq/advisor/task"
)
type MakeScheduleScheme struct {
*advtsk.MakeAdjustScheme
}
func NewMakeScheduleScheme(info *advtsk.MakeAdjustScheme) *MakeScheduleScheme {
return &MakeScheduleScheme{
MakeAdjustScheme: info,
}
}
func (t *MakeScheduleScheme) Execute(task *task.Task[TaskContext], ctx TaskContext, complete CompleteFn) {
log := logger.WithType[MakeScheduleScheme]("Task")
log.Debugf("begin")
defer log.Debugf("end")
scheme, err := t.do(task.ID(), ctx)
if err != nil {
ctx.reporter.Report(task.ID(), advtsk.NewMakeAdjustSchemeStatus(err.Error(), jobmod.JobScheduleScheme{}))
} else {
ctx.reporter.Report(task.ID(), advtsk.NewMakeAdjustSchemeStatus("", *scheme))
}
ctx.reporter.ReportNow()
complete(err, CompleteOption{
RemovingDelay: time.Minute,
})
}
func (t *MakeScheduleScheme) do(taskID string, ctx TaskContext) (*jobmod.JobScheduleScheme, error) {
scheme, err := ctx.scheduleSvc.MakeScheme(t.Job)
if err != nil {
return nil, err
}
return scheme, nil
}
func init() {
Register(NewMakeScheduleScheme)
}