64 lines
1.6 KiB
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() {
|
|
|
|
}
|