56 lines
1.4 KiB
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)
|
|
}
|