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.

models.go 3.8 kB

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