You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

scheduler.go 4.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package models
  2. import (
  3. "gitlink.org.cn/cloudream/common/pkgs/types"
  4. myreflect "gitlink.org.cn/cloudream/common/utils/reflect"
  5. "gitlink.org.cn/cloudream/common/utils/serder"
  6. )
  7. const (
  8. JobTypeNormal = "Normal"
  9. JobTypeResource = "Resource"
  10. FileInfoTypePackage = "Package"
  11. FileInfoTypeLocalFile = "LocalFile"
  12. FileInfoTypeResource = "Resource"
  13. FileInfoTypeImage = "Image"
  14. )
  15. type JobSetInfo struct {
  16. Jobs []JobInfo `json:"jobs"`
  17. }
  18. type JobInfo interface{}
  19. var JobInfoTypeUnion = types.NewTypeUnion[JobInfo](
  20. myreflect.TypeOf[NormalJobInfo](),
  21. myreflect.TypeOf[ResourceJobInfo](),
  22. )
  23. var JobInfoTaggedTypeUnion = serder.NewTaggedTypeUnion(JobInfoTypeUnion, "Type", "type")
  24. type NormalJobInfo struct {
  25. LocalJobID string `json:"localJobID"`
  26. Type string `json:"type" union:"Normal"`
  27. Files JobFilesInfo `json:"files"`
  28. Runtime JobRuntimeInfo `json:"runtime"`
  29. Resources JobResourcesInfo `json:"resources"`
  30. }
  31. type ResourceJobInfo struct {
  32. LocalJobID string `json:"localJobID"`
  33. Type string `json:"type" union:"Resource"`
  34. TargetLocalJobID string `json:"targetLocalJobID"`
  35. }
  36. type JobFilesInfo struct {
  37. Dataset JobFileInfo `json:"dataset"`
  38. Code JobFileInfo `json:"code"`
  39. Image JobFileInfo `json:"image"`
  40. }
  41. type JobFileInfo interface{}
  42. var FileInfoTypeUnion = types.NewTypeUnion[JobFileInfo](
  43. myreflect.TypeOf[PackageJobFileInfo](),
  44. myreflect.TypeOf[LocalJobFileInfo](),
  45. myreflect.TypeOf[ResourceJobFileInfo](),
  46. myreflect.TypeOf[ImageJobFileInfo](),
  47. )
  48. var FileInfoTaggedTypeUnion = serder.NewTaggedTypeUnion(FileInfoTypeUnion, "Type", "type")
  49. type PackageJobFileInfo struct {
  50. Type string `json:"type" union:"Package"`
  51. PackageID int64 `json:"packageID"`
  52. }
  53. type LocalJobFileInfo struct {
  54. Type string `json:"type" union:"LocalFile"`
  55. LocalPath string `json:"localPath"`
  56. }
  57. type ResourceJobFileInfo struct {
  58. Type string `json:"type" union:"Resource"`
  59. ResourceLocalJobID string `json:"resourceLocalJobID"`
  60. }
  61. type ImageJobFileInfo struct {
  62. Type string `json:"type" union:"Image"`
  63. ImageID string `json:"imageID"`
  64. }
  65. type JobRuntimeInfo struct {
  66. Command string `json:"command"`
  67. Envs []EnvVar `json:"envs"`
  68. }
  69. type EnvVar struct {
  70. Var string `json:"var"`
  71. Value string `json:"value"`
  72. }
  73. type JobResourcesInfo struct {
  74. CPU float64 `json:"cpu"`
  75. GPU float64 `json:"gpu"`
  76. NPU float64 `json:"npu"`
  77. MLU float64 `json:"mlu"`
  78. Storage int64 `json:"storage"`
  79. Memory int64 `json:"memory"`
  80. }
  81. func JobSetInfoFromJSON(data []byte) (*JobSetInfo, error) {
  82. mp := make(map[string]any)
  83. if err := serder.JSONToObject(data, &mp); err != nil {
  84. return nil, err
  85. }
  86. var ret JobSetInfo
  87. err := serder.MapToObject(mp, &ret, serder.MapToObjectOption{
  88. UnionTypes: []serder.TaggedUnionType{
  89. JobInfoTaggedTypeUnion,
  90. FileInfoTaggedTypeUnion,
  91. },
  92. })
  93. if err != nil {
  94. return nil, err
  95. }
  96. return &ret, nil
  97. }
  98. const (
  99. FileScheduleActionNo = "No"
  100. FileScheduleActionMove = "Move"
  101. FileScheduleActionLoad = "Load"
  102. )
  103. type FileScheduleScheme struct {
  104. Action string `json:"action"`
  105. TargetStorageID int64 `json:"targetStorageID"`
  106. }
  107. const (
  108. ImageScheduleActionNo = "No"
  109. ImageScheduleActionImport = "Import"
  110. )
  111. type ImageScheduleScheme struct {
  112. Action string `json:"action"`
  113. }
  114. type JobScheduleScheme struct {
  115. TargetSlwNodeID int64 `json:"targetSlwNodeID"`
  116. Dataset FileScheduleScheme `json:"dataset"`
  117. Code FileScheduleScheme `json:"code"`
  118. Image ImageScheduleScheme `json:"image"`
  119. }
  120. type JobSetPreScheduleScheme struct {
  121. JobSchemes map[string]JobScheduleScheme `json:"jobSchemes"` // 任务的预调度方案。Key为LocalJobIDs
  122. }
  123. type JobSetFilesUploadScheme struct {
  124. LocalFileSchemes []LocalFileUploadScheme `json:"localFileUploadSchemes"`
  125. }
  126. type LocalFileUploadScheme struct {
  127. LocalPath string `json:"localPath"`
  128. UploadToStgNodeID *int64 `json:"uploadToStgNodeID"`
  129. }