pcm-hpc/slurm/resource_impl.go

67 lines
1.6 KiB
Go

package slurm
import (
"github.com/go-resty/resty/v2"
coreClient "gitlink.org.cn/JointCloud/pcm-coordinator/client"
"gitlink.org.cn/JointCloud/pcm-hpc/global"
"log"
"sync"
)
type resource struct {
sync.RWMutex
client *client
log log.Logger
}
func newResource(client *client, options *ClientOptions) (*resource, error) {
resource := &resource{
RWMutex: sync.RWMutex{},
client: nil,
log: log.Logger{},
}
return resource, nil
}
func (r *resource) GetResourceStats(options ClientOptions) (getResourceStatsResp GetResourceStatsResp) {
httpClient := resty.New().R()
var nodeResp NodeResp
httpClient.SetHeader("Content-Type", "application/json").
SetHeader("X-SLURM-USER-NAME", r.client.restUsername).
SetHeader("X-SLURM-USER-TOKEN", r.client.token).
SetResult(&nodeResp).
Get(r.client.url + "/slurm/" + r.client.clientVersion + "/nodes")
var coresRemaining int
var coresTotal int
var memRemaining int
var memTotal int
for _, node := range nodeResp.Nodes {
coresRemaining += node.IdleCpus
coresTotal += node.Cores
memRemaining += node.FreeMemory
memTotal += node.RealMemory
}
resourceStats := coreClient.ResourceStats{
Name: global.PCM_CONFIG.System.CoreServerUrl,
CpuCoreAvail: int64(coresRemaining),
CpuCoreTotal: int64(coresTotal),
MemAvail: float64(memRemaining),
MemTotal: float64(memTotal),
DiskAvail: 0,
DiskTotal: 0,
GpuAvail: 0,
CardsAvail: nil,
CpuCoreHours: 0,
Balance: 0,
}
getResourceStatsResp = GetResourceStatsResp{
Code: "200",
Msg: "success",
Data: resourceStats,
}
return getResourceStatsResp
}