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.

job.go 2.8 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package models
  2. import (
  3. myreflect "gitlink.org.cn/cloudream/common/utils/reflect"
  4. "gitlink.org.cn/cloudream/common/utils/serder"
  5. )
  6. const (
  7. JobTypeNormal = "Normal"
  8. JobTypeResource = "Resource"
  9. FileInfoTypePackage = "Package"
  10. FileInfoTypeLocalFile = "LocalFile"
  11. FileInfoTypeResource = "Resource"
  12. FileInfoTypeImage = "Image"
  13. )
  14. type JobSetInfo struct {
  15. Jobs []JobInfo `json:"jobs"`
  16. }
  17. type JobInfo interface{}
  18. var JobInfoTypeUnion = serder.NewTypeUnion[JobInfo]("type",
  19. serder.NewStringTypeResolver().
  20. Add(JobTypeNormal, myreflect.TypeOf[NormalJobInfo]()).
  21. Add(JobTypeResource, myreflect.TypeOf[ResourceJobInfo]()),
  22. )
  23. type NormalJobInfo struct {
  24. LocalJobID string `json:"localJobID"`
  25. Type string `json:"type"`
  26. Files JobFilesInfo `json:"files"`
  27. Runtime JobRuntimeInfo `json:"runtime"`
  28. Resources JobResourcesInfo `json:"resources"`
  29. }
  30. type ResourceJobInfo struct {
  31. LocalJobID string `json:"localJobID"`
  32. Type string `json:"type"`
  33. TargetLocalJobID string `json:"targetLocalJobID"`
  34. }
  35. type JobFilesInfo struct {
  36. Dateset FileInfo `json:"dataset"`
  37. Code FileInfo `json:"code"`
  38. Image FileInfo `json:"image"`
  39. }
  40. type FileInfo interface{}
  41. var FileInfoTypeUnion = serder.NewTypeUnion[JobInfo]("type",
  42. serder.NewStringTypeResolver().
  43. Add(FileInfoTypePackage, myreflect.TypeOf[PackageFileInfo]()).
  44. Add(FileInfoTypeLocalFile, myreflect.TypeOf[LocalFileInfo]()).
  45. Add(FileInfoTypeResource, myreflect.TypeOf[ResourceFileInfo]()).
  46. Add(FileInfoTypeImage, myreflect.TypeOf[ImageFileInfo]()),
  47. )
  48. type PackageFileInfo struct {
  49. Type string `json:"type"`
  50. PackageID int64 `json:"packageID"`
  51. }
  52. type LocalFileInfo struct {
  53. Type string `json:"type"`
  54. LocalPath string `json:"localPath"`
  55. }
  56. type ResourceFileInfo struct {
  57. Type string `json:"type"`
  58. ResourceLocalJobID string `json:"resourceLocalJobID"`
  59. }
  60. type ImageFileInfo struct {
  61. Type string `json:"type"`
  62. ImageID string `json:"imageID"`
  63. }
  64. type JobRuntimeInfo struct {
  65. Command string `json:"command"`
  66. Envs []EnvVar `json:"envs"`
  67. }
  68. type EnvVar struct {
  69. Var string `json:"var"`
  70. Value string `json:"value"`
  71. }
  72. type JobResourcesInfo struct {
  73. CPU float64 `json:"cpu"`
  74. GPU float64 `json:"gpu"`
  75. NPU float64 `json:"npu"`
  76. MLU float64 `json:"mlu"`
  77. Storage int64 `json:"storage"`
  78. Memory int64 `json:"memory"`
  79. }
  80. func JobSetInfoFromJSON(data []byte) (*JobSetInfo, error) {
  81. mp := make(map[string]any)
  82. if err := serder.JSONToObject(data, &mp); err != nil {
  83. return nil, err
  84. }
  85. var ret JobSetInfo
  86. err := serder.MapToObject(mp, &ret, serder.MapToObjectOption{
  87. UnionTypes: []serder.UnionTypeInfo{
  88. JobInfoTypeUnion,
  89. FileInfoTypeUnion,
  90. },
  91. })
  92. if err != nil {
  93. return nil, err
  94. }
  95. return &ret, nil
  96. }