JCC-CSScheduler/manager/internal/jobmgr/complete_handler.go

64 lines
1.6 KiB
Go

package jobmgr
import (
"fmt"
"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/event"
)
type CompleteHandler struct {
mgr *Manager
}
func NewCompleteHandler(mgr *Manager) *CompleteHandler {
return &CompleteHandler{
mgr: mgr,
}
}
func (h *CompleteHandler) Handle(job jobmod.Job) {
// TODO 可以考虑将执行记录落库
if state, ok := job.GetState().(*jobmod.StateSuccess); ok {
h.handleSuccess(job, state)
} else if state, ok := job.GetState().(*jobmod.StateFailed); ok {
h.handleFailed(job, state)
} else {
state := jobmod.NewStateFailed(fmt.Sprintf("unknow state: %v", reflect.TypeOf(job.GetState())), job.GetState())
job.SetState(state)
h.handleFailed(job, state)
}
}
func (h *CompleteHandler) handleSuccess(job jobmod.Job, state *jobmod.StateSuccess) {
logger.WithField("JobID", job.GetJobID()).Infof("job completed successfuly")
h.mgr.onEvent(event.ToJobSet(job.GetJobSetID()), event.NewJobCompleted(job))
}
func (h *CompleteHandler) handleFailed(job jobmod.Job, state *jobmod.StateFailed) {
logger.
WithField("JobID", job.GetJobID()).
WithField("LastState", reflect.TypeOf(state.LastState).String()).
Infof("job failed with: %v", state.Error)
h.mgr.onEvent(event.ToJobSet(job.GetJobSetID()), event.NewJobCompleted(job))
}
func (h *CompleteHandler) OnEvent(broadcast event.Broadcast, evt event.Event) {
if cloneEvt, ok := evt.(*event.CloneJob); ok {
cloneEvt.Callback.SetError(fmt.Errorf("job not found"))
return
}
}
func (h *CompleteHandler) Serve() {
}
func (h *CompleteHandler) Stop() {
}