JCC-CSScheduler/manager/internal/jobmgr/job/state/complete.go

56 lines
1.4 KiB
Go

package state
import (
"reflect"
"gitlink.org.cn/cloudream/common/pkgs/logger"
jobmod "gitlink.org.cn/cloudream/scheduler/common/models/job"
"gitlink.org.cn/cloudream/scheduler/manager/internal/jobmgr"
"gitlink.org.cn/cloudream/scheduler/manager/internal/jobmgr/event"
)
type Completed struct {
err error
}
func SuccessComplete() *Completed {
return &Completed{}
}
func FailureComplete(err error) *Completed {
return &Completed{err: err}
}
func (c *Completed) Run(rtx jobmgr.JobStateRunContext, jo *jobmgr.Job) {
// TODO 可以考虑将执行记录落库
if c.err == nil {
c.handleSuccess(rtx, jo)
} else {
c.handleFailed(rtx, jo)
}
}
func (s *Completed) Dump(rtx jobmgr.JobStateRunContext, jo *jobmgr.Job) jobmod.JobStateDump {
err := ""
if s.err != nil {
err = s.err.Error()
}
return &jobmod.CompletedDump{
Error: err,
}
}
func (c *Completed) handleSuccess(rtx jobmgr.JobStateRunContext, job *jobmgr.Job) {
logger.WithField("JobID", job.JobID).Infof("job completed successfuly")
rtx.Mgr.BroadcastEvent(job.JobSetID, event.NewJobCompleted(job, c.err))
rtx.Mgr.JobCompleted(job)
}
func (c *Completed) handleFailed(rtx jobmgr.JobStateRunContext, job *jobmgr.Job) {
logger.
WithField("JobID", job.JobID).
WithField("LastState", reflect.TypeOf(rtx.LastState).String()).
Infof("job failed with: %v", c.err)
rtx.Mgr.BroadcastEvent(job.JobSetID, event.NewJobCompleted(job, c.err))
rtx.Mgr.JobCompleted(job)
}