184 lines
3.9 KiB
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
|
|
}
|