Browse Source

collector init

pull/11/head
songjc 2 years ago
parent
commit
b6bd1ee060
3 changed files with 127 additions and 27 deletions
  1. +21
    -25
      api/unifyops/unifyops.go
  2. +2
    -2
      api/unifyops/unifyops_test.go
  3. +104
    -0
      models/unifyops.go

+ 21
- 25
api/unifyops/unifyops.go View File

@@ -5,6 +5,7 @@ import (
"net/url" "net/url"
"strings" "strings"


"gitlink.org.cn/cloudream/common/models"
myhttp "gitlink.org.cn/cloudream/common/utils/http" myhttp "gitlink.org.cn/cloudream/common/utils/http"
"gitlink.org.cn/cloudream/common/utils/serder" "gitlink.org.cn/cloudream/common/utils/serder"
) )
@@ -48,18 +49,7 @@ type Node struct {
NodeId int64 `json:"nodeId"` 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") url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getCPUData")
if err != nil { if err != nil {
return nil, err return nil, err
@@ -74,7 +64,7 @@ func (c *Client) GetCPUData(node Node) (*ResourceData[int64], error) {
contType := resp.Header.Get("Content-Type") contType := resp.Header.Get("Content-Type")
if strings.Contains(contType, myhttp.ContentTypeJSON) { 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 { if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
return nil, fmt.Errorf("parsing response: %w", err) 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) 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") url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getNPUData")
if err != nil { if err != nil {
return nil, err return nil, err
@@ -104,7 +94,7 @@ func (c *Client) GetNPUData(node Node) (*ResourceData[int64], error) {
contType := resp.Header.Get("Content-Type") contType := resp.Header.Get("Content-Type")
if strings.Contains(contType, myhttp.ContentTypeJSON) { 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 { if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
return nil, fmt.Errorf("parsing response: %w", err) 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) 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") url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getGPUData")
if err != nil { if err != nil {
return nil, err return nil, err
@@ -134,7 +124,7 @@ func (c *Client) GetGPUData(node Node) (*ResourceData[int64], error) {
contType := resp.Header.Get("Content-Type") contType := resp.Header.Get("Content-Type")
if strings.Contains(contType, myhttp.ContentTypeJSON) { 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 { if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
return nil, fmt.Errorf("parsing response: %w", err) 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) 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") url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getMLUData")
if err != nil { if err != nil {
return nil, err return nil, err
@@ -164,7 +154,7 @@ func (c *Client) GetMLUData(node Node) (*ResourceData[int64], error) {
contType := resp.Header.Get("Content-Type") contType := resp.Header.Get("Content-Type")
if strings.Contains(contType, myhttp.ContentTypeJSON) { 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 { if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
return nil, fmt.Errorf("parsing response: %w", err) 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) 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") url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getStorageData")
if err != nil { if err != nil {
return nil, err return nil, err
@@ -194,7 +184,7 @@ func (c *Client) GetStorageData(node Node) (*ResourceData[float64], error) {
contType := resp.Header.Get("Content-Type") contType := resp.Header.Get("Content-Type")
if strings.Contains(contType, myhttp.ContentTypeJSON) { 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 { if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
return nil, fmt.Errorf("parsing response: %w", err) 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) 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") url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getMemoryData")
if err != nil { if err != nil {
return nil, err return nil, err
@@ -224,7 +214,7 @@ func (c *Client) GetMemoryData(node Node) (*ResourceData[float64], error) {
contType := resp.Header.Get("Content-Type") contType := resp.Header.Get("Content-Type")
if strings.Contains(contType, myhttp.ContentTypeJSON) { 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 { if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
return nil, fmt.Errorf("parsing response: %w", err) 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) 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") url, err := url.JoinPath(c.baseURL, "/cmdb/resApi/getIndicatorData")
if err != nil { if err != nil {
return nil, err return nil, err
@@ -254,7 +250,7 @@ func (c *Client) GetIndicatorData(node Node) (*[]ResourceData[any], error) {
contType := resp.Header.Get("Content-Type") contType := resp.Header.Get("Content-Type")
if strings.Contains(contType, myhttp.ContentTypeJSON) { if strings.Contains(contType, myhttp.ContentTypeJSON) {


var codeResp response[[]ResourceData[any]]
var codeResp response[[]IndicatorData]
if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
return nil, fmt.Errorf("parsing response: %w", err) return nil, fmt.Errorf("parsing response: %w", err)
} }


+ 2
- 2
api/unifyops/unifyops_test.go View File

@@ -13,10 +13,10 @@ func Test_UnifyOps(t *testing.T) {
URL: "http://101.201.215.165:6000", URL: "http://101.201.215.165:6000",
}) })


slwNodeInfo, err := cli.GetSlwNodeInfo()
slwNodeInfos, err := cli.GetSlwNodeInfo()
So(err, ShouldBeNil) So(err, ShouldBeNil)


sNodes := *slwNodeInfo
sNodes := *slwNodeInfos
cpuData, err := cli.GetCPUData(Node{ cpuData, err := cli.GetCPUData(Node{
NodeId: sNodes[0].ID, NodeId: sNodes[0].ID,
}) })


+ 104
- 0
models/unifyops.go View File

@@ -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,
}
}

Loading…
Cancel
Save