From d522548d35b9e81aca86b5675b233e36d953cc65 Mon Sep 17 00:00:00 2001 From: JeshuaRen <270813223@qq.com> Date: Mon, 7 Jul 2025 10:56:23 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=B5=84=E6=BA=90=E8=A7=84?= =?UTF-8?q?=E6=A0=BC=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdks/pcmscheduler/client.go | 9 +++++- sdks/pcmscheduler/jobset.go | 58 ++++++++++++++++++++++++++++++++++--- sdks/pcmscheduler/models.go | 34 ++++++++++++++++++++++ 3 files changed, 96 insertions(+), 5 deletions(-) diff --git a/sdks/pcmscheduler/client.go b/sdks/pcmscheduler/client.go index fde07fc..8f26777 100644 --- a/sdks/pcmscheduler/client.go +++ b/sdks/pcmscheduler/client.go @@ -12,7 +12,7 @@ type response[T any] struct { Data T `json:"data"` } -type respons2[T any] struct { +type response2[T any] struct { Code int `json:"code"` Message string `json:"msg"` Data T `json:"data"` @@ -29,6 +29,13 @@ func (r *response[T]) ToError() *sdks.CodeMessageError { } } +func (r *response2[T]) ToError() *sdks.CodeMessageError { + return &sdks.CodeMessageError{ + Code: fmt.Sprintf("%d", r.Code), + Message: r.Message, + } +} + type Client struct { baseURL string } diff --git a/sdks/pcmscheduler/jobset.go b/sdks/pcmscheduler/jobset.go index 00bf144..f4800e2 100644 --- a/sdks/pcmscheduler/jobset.go +++ b/sdks/pcmscheduler/jobset.go @@ -155,7 +155,7 @@ func (c *Client) CreateInferenceJob(req CreateAIJobReq, token string) (*CreateIn contType := resp.Header.Get("Content-Type") if strings.Contains(contType, http2.ContentTypeJSON) { - var codeResp respons2[CreateInferenceJobResp] + var codeResp response2[CreateInferenceJobResp] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { return nil, fmt.Errorf("parsing response: %w", err) } @@ -195,7 +195,7 @@ func (c *Client) StopInferenceJob(req StopInferenceJobReq, token string) error { contType := resp.Header.Get("Content-Type") if strings.Contains(contType, http2.ContentTypeJSON) { - var codeResp respons2[CreateInferenceJobResp] + var codeResp response2[CreateInferenceJobResp] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { return fmt.Errorf("parsing response: %w", err) } @@ -228,7 +228,7 @@ func (c *Client) CreateJob(req CreateAIJobReq, token string) (*CreateJobResp, er contType := resp.Header.Get("Content-Type") if strings.Contains(contType, http2.ContentTypeJSON) { - var codeResp respons2[CreateJobResp] + var codeResp response2[CreateJobResp] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { return nil, fmt.Errorf("parsing response: %w", err) } @@ -280,7 +280,7 @@ func (c *Client) RunJob(req RunJobReq, token string) error { contType := resp.Header.Get("Content-Type") if strings.Contains(contType, http2.ContentTypeJSON) { - var codeResp respons2[string] + var codeResp response2[string] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { return fmt.Errorf("parsing response: %w", err) } @@ -327,3 +327,53 @@ func (c *Client) CancelJob(req CancelJobReq) error { return fmt.Errorf("unknow response content type: %s", contType) } + +type GetResourceSpecReq struct { + ClusterID schsdk.ClusterID `form:"clusterId"` + Tag string `form:"tag"` + PageNum int64 `form:"pageNum"` + PageSize int64 `form:"pageSize"` +} + +type GetResourceSpecResp struct { + Total int64 `json:"total"` + PageNum int64 `json:"pageNum"` + PageSize int64 `json:"pageSize"` + List []ResourceDetail `json:"list"` +} + +func (c *Client) GetResourceSpec(req GetResourceSpecReq, token string) ([]ResourceDetail, int64, error) { + targetUrl, err := url.JoinPath(c.baseURL, "core/ai/resourceSpec/page") + if err != nil { + return nil, 0, err + } + resp, err := http2.GetJSON(targetUrl, http2.RequestParam{ + Query: req, + Header: map[string]string{ + "Authorization": token, + }, + }) + + //all, err := io.ReadAll(resp.Body) + //println(string(all)) + + if err != nil { + return nil, 0, err + } + contType := resp.Header.Get("Content-Type") + if strings.Contains(contType, http2.ContentTypeJSON) { + + var codeResp response2[GetResourceSpecResp] + if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { + return nil, 0, fmt.Errorf("parsing response: %w", err) + } + + if codeResp.Code == ResponseCodeOK { + return codeResp.Data.List, codeResp.Data.Total, nil + } + + return nil, 0, codeResp.ToError() + } + + return nil, 0, fmt.Errorf("unknow response content type: %s", contType) +} diff --git a/sdks/pcmscheduler/models.go b/sdks/pcmscheduler/models.go index a42f874..1b524fa 100644 --- a/sdks/pcmscheduler/models.go +++ b/sdks/pcmscheduler/models.go @@ -131,6 +131,40 @@ type TmpResourceData struct { Available UnitValue[float64] `json:"available"` } +type ResourceDetail struct { + ID DataID `json:"id"` + SourceKey string `json:"sourceKey"` + Type ResourceType `json:"type"` + Name string `json:"name"` + TotalCount int64 `json:"totalCount"` + AvailableCount int64 `json:"availableCount"` + ChangeType int64 `json:"changeType"` + Status int64 `json:"status"` + Region string `json:"region"` + ClusterID schsdk.ClusterID `json:"clusterId"` + CostPerUnit float64 `json:"costPerUnit"` + CostType string `json:"costType"` + Tag string `json:"tag"` + UserID cdssdk.UserID `json:"userId"` + CreateTime string `json:"createTime"` + UpdateTime string `json:"updateTime"` + BaseResourceSpecs []ResourceSpec `json:"baseResourceSpecs"` +} + +type ResourceSpec struct { + ID DataID `json:"id"` + ResourceSpecId DataID `json:"resourceSpecId"` + Type ResourceType `json:"type"` + Name string `json:"name"` + TotalValue float64 `json:"totalValue"` + TotalUnit string `json:"totalUnit"` + AvailableValue float64 `json:"availableValue"` + AvailableUnit string `json:"availableUnit"` + UserID cdssdk.UserID `json:"userId"` + CreateTime string `json:"createTime"` + UpdateTime string `json:"updateTime"` +} + type ResourceData interface { Noop() }