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