| @@ -0,0 +1,263 @@ | |||
| package sch | |||
| import ( | |||
| "fmt" | |||
| "gitlink.org.cn/cloudream/common/utils/http2" | |||
| "gitlink.org.cn/cloudream/common/utils/serder" | |||
| "net/url" | |||
| "strings" | |||
| ) | |||
| type QueryTasksReq struct { | |||
| PageNum int64 `json:"pageNum"` | |||
| PageSize int64 `json:"pageSize"` | |||
| Type int64 `json:"type"` | |||
| } | |||
| type QueryTasksResp struct { | |||
| List []TaskModel `json:"list"` | |||
| Total int64 `json:"total"` | |||
| PageNum int64 `json:"pageNum"` | |||
| PageSize int64 `json:"pageSize"` | |||
| } | |||
| type TaskModel struct { | |||
| Id int64 `json:"id,omitempty,string" db:"id"` // id | |||
| Name string `json:"name,omitempty" db:"name"` // 作业名称 | |||
| Description string `json:"description,omitempty" db:"description"` // 作业描述 | |||
| Status string `json:"status,omitempty" db:"status"` // 作业状态 | |||
| Strategy int64 `json:"strategy" db:"strategy"` // 策略 | |||
| SynergyStatus int64 `json:"synergyStatus" db:"synergy_status"` // 协同状态(0-未协同、1-已协同) | |||
| CommitTime string `json:"commitTime,omitempty" db:"commit_time"` // 提交时间 | |||
| StartTime string `json:"startTime,omitempty" db:"start_time"` // 开始时间 | |||
| EndTime string `json:"endTime,omitempty" db:"end_time"` // 结束运行时间 | |||
| RunningTime int64 `json:"runningTime" db:"running_time"` // 已运行时间(单位秒) | |||
| YamlString string `json:"yamlString,omitempty" db:"yaml_string"` | |||
| Result string `json:"result,omitempty" db:"result"` // 作业结果 | |||
| DeletedAt string `json:"deletedAt,omitempty" gorm:"index" db:"deleted_at"` | |||
| NsID string `json:"nsId,omitempty" db:"ns_id"` | |||
| TenantId string `json:"tenantId,omitempty" db:"tenant_id"` | |||
| CreatedTime string `json:"createdTime,omitempty" db:"created_time" gorm:"autoCreateTime"` | |||
| UpdatedTime string `json:"updatedTime,omitempty" db:"updated_time"` | |||
| AdapterTypeDict string `json:"adapterTypeDict" db:"adapter_type_dict" gorm:"adapter_type_dict"` //适配器类型(对应字典表的值 | |||
| TaskTypeDict string `json:"taskTypeDict" db:"task_type_dict" gorm:"task_type_dict"` //任务类型(对应字典表的值 | |||
| UserId int64 `json:"userId,omitempty" db:"user_id"` | |||
| } | |||
| func (c *Client) QueryTasks(req QueryTasksReq, token string) (*QueryTasksResp, error) { | |||
| targetUrl, err := url.JoinPath(c.baseURL, "/pcm/v1/core/task/list") | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| resp, err := http2.GetJSON(targetUrl, http2.RequestParam{ | |||
| Body: req, | |||
| Header: map[string]string{ | |||
| "Authorization": token, | |||
| }, | |||
| }) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| contType := resp.Header.Get("Content-Type") | |||
| if strings.Contains(contType, http2.ContentTypeJSON) { | |||
| var codeResp response[QueryTasksResp] | |||
| if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { | |||
| return nil, fmt.Errorf("parsing response: %w", err) | |||
| } | |||
| if codeResp.Code == ResponseCodeOK { | |||
| return &codeResp.Data, nil | |||
| } | |||
| return nil, codeResp.ToError() | |||
| } | |||
| return nil, fmt.Errorf("unknow response content type: %s", contType) | |||
| } | |||
| type QueryDetailsReq struct { | |||
| TaskID string `json:"id"` | |||
| } | |||
| type QueryDetailsResp struct { | |||
| Name string `json:"name"` | |||
| Description string `json:"description"` | |||
| StartTime string `json:"startTime"` | |||
| EndTime string `json:"endTime"` | |||
| Strategy int64 `json:"strategy"` | |||
| SynergyStatus int64 `json:"synergyStatus"` | |||
| ClusterInfos []*ClusterInfo `json:"clusterInfos"` | |||
| SubTaskInfos []*SubTaskInfo `json:"subTaskInfos"` | |||
| TaskTypeDict string `json:"taskTypeDict"` | |||
| AdapterTypeDict string `json:"adapterTypeDict"` | |||
| } | |||
| type SubTaskInfo struct { | |||
| Id string `json:"id" db:"id"` | |||
| Name string `json:"name" db:"name"` | |||
| ClusterId string `json:"clusterId" db:"cluster_id"` | |||
| ClusterName string `json:"clusterName" db:"cluster_name"` | |||
| Status string `json:"status" db:"status"` | |||
| Remark string `json:"remark" db:"remark"` | |||
| InferUrl string `json:"inferUrl"` | |||
| WorkDir string `json:"workDir"` | |||
| AppName string `json:"appName"` | |||
| } | |||
| type ClusterInfo struct { | |||
| Id string `json:"id,omitempty" db:"id"` | |||
| AdapterId int64 `json:"adapterId,omitempty,string" db:"adapter_id"` | |||
| Name string `json:"name,omitempty" db:"name"` | |||
| Nickname string `json:"nickname,omitempty" db:"nickname"` | |||
| Description string `json:"description,omitempty" db:"description"` | |||
| Server string `json:"server,omitempty" db:"server"` | |||
| MonitorServer string `json:"monitorServer,omitempty" db:"monitor_server"` | |||
| Username string `json:"username,omitempty" db:"username"` | |||
| Password string `json:"password,omitempty" db:"password"` | |||
| Token string `json:"token,omitempty" db:"token"` | |||
| Ak string `json:"ak,omitempty" db:"ak"` | |||
| Sk string `json:"sk,omitempty" db:"sk"` | |||
| Region string `json:"region,omitempty" db:"region"` | |||
| ProjectId string `json:"projectId,omitempty" db:"project_id"` | |||
| Version string `json:"version,omitempty" db:"version"` | |||
| Label string `json:"label,omitempty" db:"label"` | |||
| OwnerId string `json:"ownerId,omitempty" db:"owner_id"` | |||
| AuthType string `json:"authType,omitempty" db:"auth_type"` | |||
| ProducerDict string `json:"producerDict,omitempty" db:"producer_dict"` | |||
| RegionDict string `json:"regionDict,omitempty" db:"region_dict"` | |||
| Location string `json:"location,omitempty" db:"location"` | |||
| CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"` | |||
| EnvPath string `json:"envPath,omitempty" db:"env_path"` | |||
| EnvLdPath string `json:"envLdPath,omitempty" db:"env_ld_path"` | |||
| WorkDir string `json:"workDir,omitempty" db:"work_dir"` | |||
| Address string `json:"address,omitempty" db:"address"` | |||
| ProxyAddress string `json:"proxyAddress,omitempty" db:"proxy_address"` | |||
| ProxyEnable string `json:"proxyEnable,omitempty" db:"proxy_enable"` | |||
| Driver string `json:"driver,omitempty" db:"driver"` | |||
| } | |||
| func (c *Client) QueryDetails(req QueryDetailsReq, token string) (*QueryDetailsResp, error) { | |||
| targetUrl, err := url.JoinPath(c.baseURL, "/pcm/v1/core/task/details") | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| resp, err := http2.GetJSON(targetUrl, http2.RequestParam{ | |||
| Body: req, | |||
| Header: map[string]string{ | |||
| "Authorization": token, | |||
| }, | |||
| }) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| contType := resp.Header.Get("Content-Type") | |||
| if strings.Contains(contType, http2.ContentTypeJSON) { | |||
| var codeResp response[QueryDetailsResp] | |||
| if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { | |||
| return nil, fmt.Errorf("parsing response: %w", err) | |||
| } | |||
| if codeResp.Code == ResponseCodeOK { | |||
| return &codeResp.Data, nil | |||
| } | |||
| return nil, codeResp.ToError() | |||
| } | |||
| return nil, fmt.Errorf("unknow response content type: %s", contType) | |||
| } | |||
| type QueryHPCTrainReq struct { | |||
| TaskID string `json:"taskId"` | |||
| } | |||
| type QueryHPCTrainResp struct { | |||
| ErrLogs string `json:"errLogs"` | |||
| JobId string `json:"jobId"` | |||
| OutLogs string `json:"outLogs"` | |||
| WorkDir string `json:"workDir"` | |||
| } | |||
| func (c *Client) QueryHPCTrainLog(req QueryHPCTrainReq, token string) (*QueryHPCTrainResp, error) { | |||
| targetUrl, err := url.JoinPath(c.baseURL, "/pcm/v1/hpc/jobLogs") | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| resp, err := http2.GetJSON(targetUrl, http2.RequestParam{ | |||
| Body: req, | |||
| Header: map[string]string{ | |||
| "Authorization": token, | |||
| }, | |||
| }) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| contType := resp.Header.Get("Content-Type") | |||
| if strings.Contains(contType, http2.ContentTypeJSON) { | |||
| var codeResp response[QueryHPCTrainResp] | |||
| if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { | |||
| return nil, fmt.Errorf("parsing response: %w", err) | |||
| } | |||
| if codeResp.Code == ResponseCodeOK { | |||
| return &codeResp.Data, nil | |||
| } | |||
| return nil, codeResp.ToError() | |||
| } | |||
| return nil, fmt.Errorf("unknow response content type: %s", contType) | |||
| } | |||
| type QueryAITrainLogReq struct { | |||
| AdapterID string `json:"adapterId"` | |||
| ClusterID string `json:"clusterId"` | |||
| TaskID string `json:"taskId"` | |||
| InstanceNum string `json:"instanceNum"` | |||
| } | |||
| type QueryAITrainLogResp struct { | |||
| Log string `json:"log"` | |||
| } | |||
| func (c *Client) QueryAITrainLog(req QueryAITrainLogReq, token string) (*QueryAITrainLogResp, error) { | |||
| targetUrl, err := url.JoinPath(c.baseURL, "/pcm/v1/schedule/ai/getJobLog") | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| req.AdapterID = "1777144940459986944" | |||
| req.InstanceNum = "0" | |||
| resp, err := http2.GetJSON(targetUrl, http2.RequestParam{ | |||
| Body: req, | |||
| Header: map[string]string{ | |||
| "Authorization": token, | |||
| }, | |||
| }) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| contType := resp.Header.Get("Content-Type") | |||
| if strings.Contains(contType, http2.ContentTypeJSON) { | |||
| var codeResp response[QueryAITrainLogResp] | |||
| if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { | |||
| return nil, fmt.Errorf("parsing response: %w", err) | |||
| } | |||
| if codeResp.Code == ResponseCodeOK { | |||
| return &codeResp.Data, nil | |||
| } | |||
| return nil, codeResp.ToError() | |||
| } | |||
| return nil, fmt.Errorf("unknow response content type: %s", contType) | |||
| } | |||