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 3.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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. GetLocalJobID() string
  20. }
  21. var JobInfoTypeUnion = types.NewTypeUnion[JobInfo](
  22. myreflect.TypeOf[NormalJobInfo](),
  23. myreflect.TypeOf[ResourceJobInfo](),
  24. )
  25. var JobInfoTaggedTypeUnion = serder.NewTaggedTypeUnion(JobInfoTypeUnion, "Type", "type")
  26. type JobInfoBase struct {
  27. LocalJobID string `json:"localJobID"`
  28. }
  29. func (i *JobInfoBase) GetLocalJobID() string {
  30. return i.LocalJobID
  31. }
  32. type NormalJobInfo struct {
  33. JobInfoBase
  34. Type string `json:"type" union:"Normal"`
  35. Files JobFilesInfo `json:"files"`
  36. Runtime JobRuntimeInfo `json:"runtime"`
  37. Resources JobResourcesInfo `json:"resources"`
  38. }
  39. type ResourceJobInfo struct {
  40. JobInfoBase
  41. Type string `json:"type" union:"Resource"`
  42. TargetLocalJobID string `json:"targetLocalJobID"`
  43. }
  44. type JobFilesInfo struct {
  45. Dataset JobFileInfo `json:"dataset"`
  46. Code JobFileInfo `json:"code"`
  47. Image JobFileInfo `json:"image"`
  48. }
  49. type JobFileInfo interface {
  50. Noop()
  51. }
  52. var FileInfoTypeUnion = types.NewTypeUnion[JobFileInfo](
  53. myreflect.TypeOf[PackageJobFileInfo](),
  54. myreflect.TypeOf[LocalJobFileInfo](),
  55. myreflect.TypeOf[ResourceJobFileInfo](),
  56. myreflect.TypeOf[ImageJobFileInfo](),
  57. )
  58. var FileInfoTaggedTypeUnion = serder.NewTaggedTypeUnion(FileInfoTypeUnion, "Type", "type")
  59. type JobFileInfoBase struct{}
  60. func (i *JobFileInfoBase) Noop() {}
  61. type PackageJobFileInfo struct {
  62. JobFileInfoBase
  63. Type string `json:"type" union:"Package"`
  64. PackageID int64 `json:"packageID"`
  65. }
  66. type LocalJobFileInfo struct {
  67. JobFileInfoBase
  68. Type string `json:"type" union:"LocalFile"`
  69. LocalPath string `json:"localPath"`
  70. }
  71. type ResourceJobFileInfo struct {
  72. JobFileInfoBase
  73. Type string `json:"type" union:"Resource"`
  74. ResourceLocalJobID string `json:"resourceLocalJobID"`
  75. }
  76. type ImageJobFileInfo struct {
  77. JobFileInfoBase
  78. Type string `json:"type" union:"Image"`
  79. ImageID string `json:"imageID"`
  80. }
  81. type JobRuntimeInfo struct {
  82. Command string `json:"command"`
  83. Envs []EnvVar `json:"envs"`
  84. }
  85. type EnvVar struct {
  86. Var string `json:"var"`
  87. Value string `json:"value"`
  88. }
  89. type JobResourcesInfo struct {
  90. CPU float64 `json:"cpu"`
  91. GPU float64 `json:"gpu"`
  92. NPU float64 `json:"npu"`
  93. MLU float64 `json:"mlu"`
  94. Storage int64 `json:"storage"`
  95. Memory int64 `json:"memory"`
  96. }
  97. func JobSetInfoFromJSON(data []byte) (*JobSetInfo, error) {
  98. mp := make(map[string]any)
  99. if err := serder.JSONToObject(data, &mp); err != nil {
  100. return nil, err
  101. }
  102. var ret JobSetInfo
  103. err := serder.MapToObject(mp, &ret, serder.MapToObjectOption{
  104. UnionTypes: []serder.TaggedUnionType{
  105. JobInfoTaggedTypeUnion,
  106. FileInfoTaggedTypeUnion,
  107. },
  108. })
  109. if err != nil {
  110. return nil, err
  111. }
  112. return &ret, nil
  113. }
  114. type JobSetFilesUploadScheme struct {
  115. LocalFileSchemes []LocalFileUploadScheme `json:"localFileUploadSchemes"`
  116. }
  117. type LocalFileUploadScheme struct {
  118. LocalPath string `json:"localPath"`
  119. UploadToStgNodeID *int64 `json:"uploadToStgNodeID"`
  120. }