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.

jobmgr.go 9.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. package sch
  2. import (
  3. "fmt"
  4. "gitlink.org.cn/cloudream/common/utils/http2"
  5. "gitlink.org.cn/cloudream/common/utils/serder"
  6. "net/url"
  7. "path/filepath"
  8. "strings"
  9. )
  10. type QueryTasksReq struct {
  11. PageNum int64 `form:"pageNum"`
  12. PageSize int64 `form:"pageSize"`
  13. Type int64 `form:"type"`
  14. Name string `form:"name"`
  15. Status string `form:"status"`
  16. }
  17. type QueryTasksResp struct {
  18. List []TaskModel `json:"list"`
  19. Total int64 `json:"total"`
  20. PageNum int64 `json:"pageNum"`
  21. PageSize int64 `json:"pageSize"`
  22. }
  23. type TaskModel struct {
  24. Id int64 `json:"id,omitempty,string" db:"id"` // id
  25. Name string `json:"name,omitempty" db:"name"` // 作业名称
  26. Description string `json:"description,omitempty" db:"description"` // 作业描述
  27. Status string `json:"status,omitempty" db:"status"` // 作业状态
  28. Strategy int64 `json:"strategy" db:"strategy"` // 策略
  29. SynergyStatus int64 `json:"synergyStatus" db:"synergy_status"` // 协同状态(0-未协同、1-已协同)
  30. CommitTime string `json:"commitTime,omitempty" db:"commit_time"` // 提交时间
  31. StartTime string `json:"startTime,omitempty" db:"start_time"` // 开始时间
  32. EndTime string `json:"endTime,omitempty" db:"end_time"` // 结束运行时间
  33. RunningTime int64 `json:"runningTime" db:"running_time"` // 已运行时间(单位秒)
  34. YamlString string `json:"yamlString,omitempty" db:"yaml_string"`
  35. Result string `json:"result,omitempty" db:"result"` // 作业结果
  36. DeletedAt string `json:"deletedAt,omitempty" gorm:"index" db:"deleted_at"`
  37. NsID string `json:"nsId,omitempty" db:"ns_id"`
  38. TenantId string `json:"tenantId,omitempty" db:"tenant_id"`
  39. CreatedTime string `json:"createdTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
  40. UpdatedTime string `json:"updatedTime,omitempty" db:"updated_time"`
  41. AdapterTypeDict string `json:"adapterTypeDict" db:"adapter_type_dict" gorm:"adapter_type_dict"` //适配器类型(对应字典表的值
  42. TaskTypeDict string `json:"taskTypeDict" db:"task_type_dict" gorm:"task_type_dict"` //任务类型(对应字典表的值
  43. UserId int64 `json:"userId,omitempty" db:"user_id"`
  44. }
  45. func (c *Client) QueryTasks(req QueryTasksReq, token string) (*QueryTasksResp, error) {
  46. targetUrl, err := url.JoinPath(c.baseURL, "/core/task/list")
  47. if err != nil {
  48. return nil, err
  49. }
  50. resp, err := http2.GetJSON(targetUrl, http2.RequestParam{
  51. Query: req,
  52. Header: map[string]string{
  53. "Authorization": token,
  54. },
  55. })
  56. if err != nil {
  57. return nil, err
  58. }
  59. contType := resp.Header.Get("Content-Type")
  60. if strings.Contains(contType, http2.ContentTypeJSON) {
  61. var codeResp response[QueryTasksResp]
  62. if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
  63. return nil, fmt.Errorf("parsing response: %w", err)
  64. }
  65. if codeResp.Code == ResponseCodeOK {
  66. return &codeResp.Data, nil
  67. }
  68. return nil, codeResp.ToError()
  69. }
  70. return nil, fmt.Errorf("unknow response content type: %s", contType)
  71. }
  72. type QueryDetailsReq struct {
  73. TaskID string `form:"id"`
  74. }
  75. type QueryDetailsResp struct {
  76. Name string `json:"name"`
  77. Description string `json:"description"`
  78. StartTime string `json:"startTime"`
  79. EndTime string `json:"endTime"`
  80. Strategy int64 `json:"strategy"`
  81. SynergyStatus int64 `json:"synergyStatus"`
  82. ClusterInfos []*ClusterInfo `json:"clusterInfos"`
  83. SubTaskInfos []*SubTaskInfo `json:"subTaskInfos"`
  84. TaskTypeDict string `json:"taskTypeDict"`
  85. AdapterTypeDict string `json:"adapterTypeDict"`
  86. }
  87. type SubTaskInfo struct {
  88. Id string `json:"id" db:"id"`
  89. Name string `json:"name" db:"name"`
  90. ClusterId string `json:"clusterId" db:"cluster_id"`
  91. ClusterName string `json:"clusterName" db:"cluster_name"`
  92. Status string `json:"status" db:"status"`
  93. Remark string `json:"remark" db:"remark"`
  94. InferUrl string `json:"inferUrl"`
  95. WorkDir string `json:"workDir"`
  96. AppName string `json:"appName"`
  97. }
  98. type ClusterInfo struct {
  99. Id string `json:"id,omitempty" db:"id"`
  100. AdapterId int64 `json:"adapterId,omitempty,string" db:"adapter_id"`
  101. Name string `json:"name,omitempty" db:"name"`
  102. Nickname string `json:"nickname,omitempty" db:"nickname"`
  103. Description string `json:"description,omitempty" db:"description"`
  104. Server string `json:"server,omitempty" db:"server"`
  105. MonitorServer string `json:"monitorServer,omitempty" db:"monitor_server"`
  106. Username string `json:"username,omitempty" db:"username"`
  107. Password string `json:"password,omitempty" db:"password"`
  108. Token string `json:"token,omitempty" db:"token"`
  109. Ak string `json:"ak,omitempty" db:"ak"`
  110. Sk string `json:"sk,omitempty" db:"sk"`
  111. Region string `json:"region,omitempty" db:"region"`
  112. ProjectId string `json:"projectId,omitempty" db:"project_id"`
  113. Version string `json:"version,omitempty" db:"version"`
  114. Label string `json:"label,omitempty" db:"label"`
  115. OwnerId string `json:"ownerId,omitempty" db:"owner_id"`
  116. AuthType string `json:"authType,omitempty" db:"auth_type"`
  117. ProducerDict string `json:"producerDict,omitempty" db:"producer_dict"`
  118. RegionDict string `json:"regionDict,omitempty" db:"region_dict"`
  119. Location string `json:"location,omitempty" db:"location"`
  120. CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
  121. EnvPath string `json:"envPath,omitempty" db:"env_path"`
  122. EnvLdPath string `json:"envLdPath,omitempty" db:"env_ld_path"`
  123. WorkDir string `json:"workDir,omitempty" db:"work_dir"`
  124. Address string `json:"address,omitempty" db:"address"`
  125. ProxyAddress string `json:"proxyAddress,omitempty" db:"proxy_address"`
  126. ProxyEnable string `json:"proxyEnable,omitempty" db:"proxy_enable"`
  127. Driver string `json:"driver,omitempty" db:"driver"`
  128. }
  129. func (c *Client) QueryDetails(req QueryDetailsReq, token string) (*QueryDetailsResp, error) {
  130. targetUrl, err := url.JoinPath(c.baseURL, "/core/task/details")
  131. if err != nil {
  132. return nil, err
  133. }
  134. resp, err := http2.GetJSON(targetUrl, http2.RequestParam{
  135. Query: req,
  136. Header: map[string]string{
  137. "Authorization": token,
  138. },
  139. })
  140. if err != nil {
  141. return nil, err
  142. }
  143. contType := resp.Header.Get("Content-Type")
  144. if strings.Contains(contType, http2.ContentTypeJSON) {
  145. var codeResp response[QueryDetailsResp]
  146. if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
  147. return nil, fmt.Errorf("parsing response: %w", err)
  148. }
  149. if codeResp.Code == ResponseCodeOK {
  150. return &codeResp.Data, nil
  151. }
  152. return nil, codeResp.ToError()
  153. }
  154. return nil, fmt.Errorf("unknow response content type: %s", contType)
  155. }
  156. type QueryHPCTrainReq struct {
  157. TaskID string `form:"taskId"`
  158. }
  159. type QueryHPCTrainResp struct {
  160. ErrLogs string `json:"errLogs"`
  161. JobId string `json:"jobId"`
  162. OutLogs string `json:"outLogs"`
  163. WorkDir string `json:"workDir"`
  164. }
  165. func (c *Client) QueryHPCTrainLog(req QueryHPCTrainReq, token string) (*QueryHPCTrainResp, error) {
  166. targetUrl, err := url.JoinPath(c.baseURL, "/hpc/jobLogs")
  167. if err != nil {
  168. return nil, err
  169. }
  170. resp, err := http2.GetJSON(targetUrl, http2.RequestParam{
  171. Query: req,
  172. Header: map[string]string{
  173. "Authorization": token,
  174. },
  175. })
  176. if err != nil {
  177. return nil, err
  178. }
  179. contType := resp.Header.Get("Content-Type")
  180. if strings.Contains(contType, http2.ContentTypeJSON) {
  181. var codeResp response[QueryHPCTrainResp]
  182. if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
  183. return nil, fmt.Errorf("parsing response: %w", err)
  184. }
  185. if codeResp.Code == ResponseCodeOK {
  186. return &codeResp.Data, nil
  187. }
  188. return nil, codeResp.ToError()
  189. }
  190. return nil, fmt.Errorf("unknow response content type: %s", contType)
  191. }
  192. type QueryAITrainLogReq struct {
  193. AdapterID string `form:"adapterId"`
  194. ClusterID string `form:"clusterId"`
  195. TaskID string `form:"taskId"`
  196. InstanceNum string `form:"instanceNum"`
  197. }
  198. type QueryAITrainLogResp struct {
  199. Log string `json:"log"`
  200. }
  201. func (c *Client) QueryAITrainLog(req QueryAITrainLogReq, token string) (*QueryAITrainLogResp, error) {
  202. urlPath := filepath.Join("/schedule/ai/getJobLog", "1777144940459986944", req.ClusterID, req.TaskID, "0")
  203. urlPath = filepath.ToSlash(urlPath)
  204. targetUrl, err := url.JoinPath(c.baseURL, urlPath)
  205. if err != nil {
  206. return nil, err
  207. }
  208. resp, err := http2.GetJSON(targetUrl, http2.RequestParam{
  209. Query: req,
  210. Header: map[string]string{
  211. "Authorization": token,
  212. },
  213. })
  214. if err != nil {
  215. return nil, err
  216. }
  217. //all, err := io.ReadAll(resp.Body)
  218. //println(string(all))
  219. contType := resp.Header.Get("Content-Type")
  220. if strings.Contains(contType, http2.ContentTypeJSON) {
  221. var codeResp response[QueryAITrainLogResp]
  222. if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
  223. return nil, fmt.Errorf("parsing response: %w", err)
  224. }
  225. if codeResp.Code == ResponseCodeOK {
  226. return &codeResp.Data, nil
  227. }
  228. return nil, codeResp.ToError()
  229. }
  230. return nil, fmt.Errorf("unknow response content type: %s", contType)
  231. }