diff --git a/api/unifyops/unifyops.go b/api/unifyops/unifyops.go index 769e062..29c293c 100644 --- a/api/unifyops/unifyops.go +++ b/api/unifyops/unifyops.go @@ -5,6 +5,7 @@ import ( "net/url" "strings" + "gitlink.org.cn/cloudream/common/models" myhttp "gitlink.org.cn/cloudream/common/utils/http" "gitlink.org.cn/cloudream/common/utils/serder" ) @@ -48,18 +49,7 @@ type Node struct { NodeId int64 `json:"nodeId"` } -type ResourceData[T any] struct { - Name string `json:"name"` - Total DetailType[T] `json:"total"` - Available DetailType[T] `json:"available"` -} - -type DetailType[T any] struct { - Unit string `json:"unit"` - Value T `json:"value"` -} - -func (c *Client) GetCPUData(node Node) (*ResourceData[int64], error) { +func (c *Client) GetCPUData(node Node) (*models.CPUResourceData, error) { url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getCPUData") if err != nil { return nil, err @@ -74,7 +64,7 @@ func (c *Client) GetCPUData(node Node) (*ResourceData[int64], error) { contType := resp.Header.Get("Content-Type") if strings.Contains(contType, myhttp.ContentTypeJSON) { - var codeResp response[ResourceData[int64]] + var codeResp response[models.CPUResourceData] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { return nil, fmt.Errorf("parsing response: %w", err) } @@ -89,7 +79,7 @@ func (c *Client) GetCPUData(node Node) (*ResourceData[int64], error) { return nil, fmt.Errorf("unknow response content type: %s", contType) } -func (c *Client) GetNPUData(node Node) (*ResourceData[int64], error) { +func (c *Client) GetNPUData(node Node) (*models.NPUResourceData, error) { url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getNPUData") if err != nil { return nil, err @@ -104,7 +94,7 @@ func (c *Client) GetNPUData(node Node) (*ResourceData[int64], error) { contType := resp.Header.Get("Content-Type") if strings.Contains(contType, myhttp.ContentTypeJSON) { - var codeResp response[ResourceData[int64]] + var codeResp response[models.NPUResourceData] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { return nil, fmt.Errorf("parsing response: %w", err) } @@ -119,7 +109,7 @@ func (c *Client) GetNPUData(node Node) (*ResourceData[int64], error) { return nil, fmt.Errorf("unknow response content type: %s", contType) } -func (c *Client) GetGPUData(node Node) (*ResourceData[int64], error) { +func (c *Client) GetGPUData(node Node) (*models.GPUResourceData, error) { url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getGPUData") if err != nil { return nil, err @@ -134,7 +124,7 @@ func (c *Client) GetGPUData(node Node) (*ResourceData[int64], error) { contType := resp.Header.Get("Content-Type") if strings.Contains(contType, myhttp.ContentTypeJSON) { - var codeResp response[ResourceData[int64]] + var codeResp response[models.GPUResourceData] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { return nil, fmt.Errorf("parsing response: %w", err) } @@ -149,7 +139,7 @@ func (c *Client) GetGPUData(node Node) (*ResourceData[int64], error) { return nil, fmt.Errorf("unknow response content type: %s", contType) } -func (c *Client) GetMLUData(node Node) (*ResourceData[int64], error) { +func (c *Client) GetMLUData(node Node) (*models.MLUResourceData, error) { url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getMLUData") if err != nil { return nil, err @@ -164,7 +154,7 @@ func (c *Client) GetMLUData(node Node) (*ResourceData[int64], error) { contType := resp.Header.Get("Content-Type") if strings.Contains(contType, myhttp.ContentTypeJSON) { - var codeResp response[ResourceData[int64]] + var codeResp response[models.MLUResourceData] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { return nil, fmt.Errorf("parsing response: %w", err) } @@ -179,7 +169,7 @@ func (c *Client) GetMLUData(node Node) (*ResourceData[int64], error) { return nil, fmt.Errorf("unknow response content type: %s", contType) } -func (c *Client) GetStorageData(node Node) (*ResourceData[float64], error) { +func (c *Client) GetStorageData(node Node) (*models.StorageResourceData, error) { url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getStorageData") if err != nil { return nil, err @@ -194,7 +184,7 @@ func (c *Client) GetStorageData(node Node) (*ResourceData[float64], error) { contType := resp.Header.Get("Content-Type") if strings.Contains(contType, myhttp.ContentTypeJSON) { - var codeResp response[ResourceData[float64]] + var codeResp response[models.StorageResourceData] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { return nil, fmt.Errorf("parsing response: %w", err) } @@ -209,7 +199,7 @@ func (c *Client) GetStorageData(node Node) (*ResourceData[float64], error) { return nil, fmt.Errorf("unknow response content type: %s", contType) } -func (c *Client) GetMemoryData(node Node) (*ResourceData[float64], error) { +func (c *Client) GetMemoryData(node Node) (*models.MemoryResourceData, error) { url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getMemoryData") if err != nil { return nil, err @@ -224,7 +214,7 @@ func (c *Client) GetMemoryData(node Node) (*ResourceData[float64], error) { contType := resp.Header.Get("Content-Type") if strings.Contains(contType, myhttp.ContentTypeJSON) { - var codeResp response[ResourceData[float64]] + var codeResp response[models.MemoryResourceData] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { return nil, fmt.Errorf("parsing response: %w", err) } @@ -239,7 +229,13 @@ func (c *Client) GetMemoryData(node Node) (*ResourceData[float64], error) { return nil, fmt.Errorf("unknow response content type: %s", contType) } -func (c *Client) GetIndicatorData(node Node) (*[]ResourceData[any], error) { +type IndicatorData struct { + Name string `json:"name"` + Total models.DetailType[any] `json:"total"` + Available models.DetailType[any] `json:"available"` +} + +func (c *Client) GetIndicatorData(node Node) (*[]IndicatorData, error) { url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getIndicatorData") if err != nil { return nil, err @@ -254,7 +250,7 @@ func (c *Client) GetIndicatorData(node Node) (*[]ResourceData[any], error) { contType := resp.Header.Get("Content-Type") if strings.Contains(contType, myhttp.ContentTypeJSON) { - var codeResp response[[]ResourceData[any]] + var codeResp response[[]IndicatorData] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { return nil, fmt.Errorf("parsing response: %w", err) } diff --git a/api/unifyops/unifyops_test.go b/api/unifyops/unifyops_test.go index ad626c5..f3f176d 100644 --- a/api/unifyops/unifyops_test.go +++ b/api/unifyops/unifyops_test.go @@ -13,10 +13,10 @@ func Test_UnifyOps(t *testing.T) { URL: "http://101.201.215.165:6000", }) - slwNodeInfo, err := cli.GetSlwNodeInfo() + slwNodeInfos, err := cli.GetSlwNodeInfo() So(err, ShouldBeNil) - sNodes := *slwNodeInfo + sNodes := *slwNodeInfos cpuData, err := cli.GetCPUData(Node{ NodeId: sNodes[0].ID, }) diff --git a/models/unifyops.go b/models/unifyops.go new file mode 100644 index 0000000..a05f827 --- /dev/null +++ b/models/unifyops.go @@ -0,0 +1,104 @@ +package models + +const ( + ResourceTypeCPU = "CPU" + ResourceTypeNPU = "NPU" + ResourceTypeGPU = "GPU" + ResourceTypeMLU = "MLU" + ResourceTypeStorage = "storage" + ResourceTypeMemory = "memory" +) + +type ResourceData interface{} +type ResourceDataConst interface { + ResourceData | CPUResourceData | NPUResourceData | GPUResourceData | MLUResourceData | StorageResourceData | MemoryResourceData +} + +type DetailType[T any] struct { + Unit string `json:"unit"` + Value T `json:"value"` +} + +type CPUResourceData struct { + Name string `json:"name"` + Total DetailType[int64] `json:"total"` + Available DetailType[int64] `json:"available"` +} + +func NewCPUResourceData(name string, total DetailType[int64], available DetailType[int64]) CPUResourceData { + return CPUResourceData{ + Name: name, + Total: total, + Available: available, + } +} + +type NPUResourceData struct { + Name string `json:"name"` + Total DetailType[int64] `json:"total"` + Available DetailType[int64] `json:"available"` +} + +func NewNPUResourceData(name string, total DetailType[int64], available DetailType[int64]) NPUResourceData { + return NPUResourceData{ + Name: name, + Total: total, + Available: available, + } +} + +type GPUResourceData struct { + Name string `json:"name"` + Total DetailType[int64] `json:"total"` + Available DetailType[int64] `json:"available"` +} + +func NewGPUResourceData(name string, total DetailType[int64], available DetailType[int64]) GPUResourceData { + return GPUResourceData{ + Name: name, + Total: total, + Available: available, + } +} + +type MLUResourceData struct { + Name string `json:"name"` + Total DetailType[int64] `json:"total"` + Available DetailType[int64] `json:"available"` +} + +func NewMLUResourceData(name string, total DetailType[int64], available DetailType[int64]) MLUResourceData { + return MLUResourceData{ + Name: name, + Total: total, + Available: available, + } +} + +type StorageResourceData struct { + Name string `json:"name"` + Total DetailType[float64] `json:"total"` + Available DetailType[float64] `json:"available"` +} + +func NewStorageResourceData(name string, total DetailType[float64], available DetailType[float64]) StorageResourceData { + return StorageResourceData{ + Name: name, + Total: total, + Available: available, + } +} + +type MemoryResourceData struct { + Name string `json:"name"` + Total DetailType[float64] `json:"total"` + Available DetailType[float64] `json:"available"` +} + +func NewMemoryResourceData(name string, total DetailType[float64], available DetailType[float64]) MemoryResourceData { + return MemoryResourceData{ + Name: name, + Total: total, + Available: available, + } +}