JCC-CSScheduler/common/models/job/state.go

184 lines
3.9 KiB
Go

package jobmod
import (
"gitlink.org.cn/cloudream/common/pkgs/types"
"gitlink.org.cn/cloudream/common/utils/serder"
)
type JobState interface {
Clone() JobState
}
type JobStateBase struct{}
var JobStateTypeUnion = types.NewTypeUnion[JobState](
(*StatePreScheduling)(nil),
(*StateReadyToAdjust)(nil),
(*StateMakingAdjustScheme)(nil),
(*StateAdjusting)(nil),
(*StateReadyToExecute)(nil),
(*StateExecuting)(nil),
(*StateFailed)(nil),
(*StateSuccess)(nil),
)
var _ = serder.UseTypeUnionExternallyTagged(&JobStateTypeUnion)
// TODO var _ = serder.RegisterNewTaggedTypeUnion(JobStateTypeUnion, "Type", "type")
type FileSchedulingStep string
const (
StepBegin FileSchedulingStep = "Begin" // 准备开始调度
StepUploading FileSchedulingStep = "Uploading" // 正在等待文件上传
StepUploaded FileSchedulingStep = "Uploaded" // 文件上传完成
StepMoving FileSchedulingStep = "Moving" // 正在移动缓存
StepLoading FileSchedulingStep = "Loading" // 正在加载
StepImageImporting FileSchedulingStep = "ImageImporting" // 正在导入镜像
StepCompleted FileSchedulingStep = "Completed" // 完成
)
type FileSchedulingState struct {
Step FileSchedulingStep `json:"step"`
Error string `json:"error"`
FullTaskID string `json:"fullTaskID"`
}
type StatePreScheduling struct {
JobStateBase
Scheme JobScheduleScheme `json:"scheme"`
Dataset FileSchedulingState `json:"dataset"`
Code FileSchedulingState `json:"code"`
Image FileSchedulingState `json:"image"`
}
func NewStatePreScheduling(scheme JobScheduleScheme) *StatePreScheduling {
return &StatePreScheduling{
Scheme: scheme,
Dataset: FileSchedulingState{
Step: StepBegin,
},
Code: FileSchedulingState{
Step: StepBegin,
},
Image: FileSchedulingState{
Step: StepBegin,
},
}
}
func (s *StatePreScheduling) Clone() JobState {
tmp := *s
return &tmp
}
type StateReadyToAdjust struct {
JobStateBase
}
func NewStateReadyToAdjust() *StateReadyToAdjust {
return &StateReadyToAdjust{}
}
func (s *StateReadyToAdjust) Clone() JobState {
tmp := *s
return &tmp
}
type StateMakingAdjustScheme struct {
JobStateBase
FullTaskID string `json:"fullTaskID"`
}
func NewStateMakingAdjustScheme() *StateMakingAdjustScheme {
return &StateMakingAdjustScheme{}
}
func (s *StateMakingAdjustScheme) Clone() JobState {
tmp := *s
return &tmp
}
type StateAdjusting struct {
JobStateBase
Scheme JobScheduleScheme `json:"scheme"`
Dataset FileSchedulingState `json:"dataset"`
Code FileSchedulingState `json:"code"`
Image FileSchedulingState `json:"image"`
}
func NewStateAdjusting(scheme JobScheduleScheme) *StateAdjusting {
return &StateAdjusting{
Scheme: scheme,
Dataset: FileSchedulingState{
Step: StepBegin,
},
Code: FileSchedulingState{
Step: StepBegin,
},
Image: FileSchedulingState{
Step: StepBegin,
},
}
}
func (s *StateAdjusting) Clone() JobState {
tmp := *s
return &tmp
}
type StateReadyToExecute struct {
JobStateBase
}
func NewStateReadyToExecute() *StateReadyToExecute {
return &StateReadyToExecute{}
}
func (s *StateReadyToExecute) Clone() JobState {
tmp := *s
return &tmp
}
type StateExecuting struct {
JobStateBase
FullTaskID string `json:"fullTaskID"`
}
func NewStateExecuting() *StateExecuting {
return &StateExecuting{}
}
func (s *StateExecuting) Clone() JobState {
tmp := *s
return &tmp
}
type StateFailed struct {
JobStateBase
Error string `json:"error"`
LastState JobState `json:"lastState"`
}
func NewStateFailed(err string, lastState JobState) *StateFailed {
return &StateFailed{
Error: err,
LastState: lastState,
}
}
func (s *StateFailed) Clone() JobState {
tmp := *s
return &tmp
}
type StateSuccess struct {
JobStateBase
}
func NewStateSuccess() *StateSuccess {
return &StateSuccess{}
}
func (s *StateSuccess) Clone() JobState {
tmp := *s
return &tmp
}