Skip to content

Commit 5cd2c9f

Browse files
committed
add client for cpumen plugin
1 parent b123642 commit 5cd2c9f

File tree

2 files changed

+100
-0
lines changed

2 files changed

+100
-0
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package client
2+
3+
import (
4+
"encoding/json"
5+
"strconv"
6+
"strings"
7+
8+
"github.com/projecteru2/core/resource/plugins/cpumem/types"
9+
)
10+
11+
type cpuType interface {
12+
string | int64
13+
}
14+
15+
// NodeResourceRequest includes all possible fields passed by eru-core for editing node, it not parsed!
16+
type NodeResourceRequest[T cpuType] struct {
17+
CPU T `json:"cpu"`
18+
Share int64 `json:"share"`
19+
Memory int64 `json:"memory"`
20+
NUMA []string `json:"numa-cpu"`
21+
NUMAMemory []int64 `json:"numa-memory"`
22+
23+
NUMACPUMap types.NUMA `json:"-"`
24+
NUMAMemoryMap types.NUMAMemory `json:"-"`
25+
}
26+
27+
// NewNodeResourceRequest .
28+
func NewNodeResourceRequest[T cpuType](cpu T, share, memory int64, NUMACPUMap types.NUMA, NUMAMemoryMap types.NUMAMemory) (*NodeResourceRequest[T], error) {
29+
r := &NodeResourceRequest[T]{
30+
CPU: cpu,
31+
Share: share,
32+
Memory: memory,
33+
}
34+
tmpNUMA := map[int][]string{}
35+
for cpuID, nodeID := range NUMACPUMap {
36+
nID, err := strconv.Atoi(nodeID)
37+
if err != nil {
38+
return nil, err
39+
}
40+
if tmpNUMA[nID] == nil {
41+
tmpNUMA[nID] = []string{cpuID}
42+
continue
43+
}
44+
tmpNUMA[nID] = append(tmpNUMA[nID], cpuID)
45+
}
46+
r.NUMA = make([]string, len(tmpNUMA))
47+
for nodeID, cpus := range tmpNUMA {
48+
r.NUMA[nodeID] = strings.Join(cpus, ",")
49+
}
50+
51+
tmpNUMAMemory := map[int]int64{}
52+
for nodeID, memory := range NUMAMemoryMap {
53+
nID, err := strconv.Atoi(nodeID)
54+
if err != nil {
55+
return nil, err
56+
}
57+
tmpNUMAMemory[nID] = memory
58+
}
59+
r.NUMAMemory = make([]int64, len(tmpNUMAMemory))
60+
for nodeID, memory := range tmpNUMAMemory {
61+
r.NUMAMemory[nodeID] = memory
62+
}
63+
64+
return r, nil
65+
}
66+
67+
// Encode .
68+
func (n NodeResourceRequest[T]) Encode() ([]byte, error) {
69+
return json.Marshal(n)
70+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package client
2+
3+
import "encoding/json"
4+
5+
// WorkloadResourceRequest .
6+
type WorkloadResourceRequest struct {
7+
CPUBind bool `json:"cpu-bind"`
8+
KeepCPUBind bool `json:"keep-cpu-bind"`
9+
CPURequest float64 `json:"cpu-request"`
10+
CPULimit float64 `json:"cpu-limit"`
11+
MemRequest int64 `json:"mem-request"`
12+
MemLimit int64 `json:"mem-limit"`
13+
}
14+
15+
// NewWorkloadResourceRequest .
16+
func NewWorkloadResourceRequest(cpuBind, keepCPUBind bool, CPURequest, CPULimit float64, MemRequest, MemLimit int64) (*WorkloadResourceRequest, error) {
17+
return &WorkloadResourceRequest{
18+
CPUBind: cpuBind,
19+
KeepCPUBind: keepCPUBind,
20+
CPURequest: CPURequest,
21+
CPULimit: CPULimit,
22+
MemRequest: MemRequest,
23+
MemLimit: MemLimit,
24+
}, nil
25+
}
26+
27+
// Encode .
28+
func (w WorkloadResourceRequest) Encode() ([]byte, error) {
29+
return json.Marshal(w)
30+
}

0 commit comments

Comments
 (0)