pcm-ac/internal/logic/getgeneralinfologic.go

183 lines
5.0 KiB
Go

package logic
import (
"context"
"github.com/zeromicro/go-zero/core/logx"
"gitlink.org.cn/JointCloud/pcm-ac/hpcAC"
"gitlink.org.cn/JointCloud/pcm-ac/internal/common"
"gitlink.org.cn/JointCloud/pcm-ac/internal/pkg/utils/httputils"
"gitlink.org.cn/JointCloud/pcm-ac/internal/svc"
"strconv"
"strings"
)
type GetGeneralInfoLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewGetGeneralInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetGeneralInfoLogic {
return &GetGeneralInfoLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// 获取曙光账号cpu,内存,存储信息
func (l *GetGeneralInfoLogic) GetGeneralInfo(in *hpcAC.ResourceReq) (*hpcAC.GiResp, error) {
resp := &hpcAC.GiResp{}
resp.MemoryInGib = 0
resp.CpuCoreNum = 0
resp.StorageInGib = 0
cpConf := l.svcCtx.Config.CPConf
sgConf := l.svcCtx.Config.ShuguangConf
tokenUrl := cpConf.AcBaseUrl + cpConf.AuthUrl
//获取token
var tokenResp common.TokenResp
var token string
tokenReq := httputils.GetHttpRequest()
_, err := tokenReq.SetHeader(httputils.ContentType, httputils.ApplicationJson).
SetHeader("user", l.svcCtx.Config.User).
SetHeader("password", l.svcCtx.Config.Password).
SetHeader("orgId", l.svcCtx.Config.OrgId).
SetResult(&tokenResp).
Post(tokenUrl)
if err != nil || tokenResp.Code != "0" {
return resp, nil
}
for _, datum := range tokenResp.Data {
if datum.ClusterId != "0" {
token = datum.Token
}
}
//获取 ai, hpc prefix url
var centerResp common.CenterResp
centerUrl := cpConf.AcBaseUrl + cpConf.CenterUrl
var hpc_prefix_url string
var ai_prefix_url string
centerReq := httputils.GetHttpRequest()
_, err = centerReq.SetHeader(httputils.ContentType, httputils.ApplicationJson).
SetHeader("token", token).
SetResult(&centerResp).
Get(centerUrl)
if err != nil || centerResp.Code != "0" {
return resp, nil
}
hpc_prefix_url = centerResp.Data.HpcUrls[0].Url
ai_prefix_url = centerResp.Data.AiUrls[0].Url
//获取调度器id
var clusterResp common.ClusterResp
var jobManagerId int
clusterUrl := hpc_prefix_url + cpConf.ClusUrl
clusterReq := httputils.GetHttpRequest()
_, err = clusterReq.SetHeader(httputils.ContentType, httputils.ApplicationJson).
SetHeader("token", token).
SetResult(&clusterResp).
Get(clusterUrl)
if err != nil || clusterResp.Code != "0" {
return resp, nil
}
jobManagerId = clusterResp.Data[0].Id
//获取用户资源限制信息
var quotaResp common.QuotaResp
quotaUrl := hpc_prefix_url + cpConf.UserLimitUrl
quotaReq := httputils.GetHttpRequest()
_, err = quotaReq.SetHeader(httputils.ContentType, httputils.ApplicationJson).
SetHeader("token", token).
SetQueryString("strJobManagerID=" + strconv.Itoa(jobManagerId)).
SetResult(&quotaResp).
Get(quotaUrl)
if err != nil || quotaResp.Code != "0" {
return resp, nil
}
//查询普通共享存储配额及使用量
var parastorQuotaResp common.ParastorQuota
parastorQuotaUrl := hpc_prefix_url + cpConf.ParastorQuotaUrl
parastorQuotaUrl = strings.Replace(parastorQuotaUrl, "{username}", sgConf.User, -1)
parastorQuotaReq := httputils.GetHttpRequest()
_, err = parastorQuotaReq.SetHeader(httputils.ContentType, httputils.ApplicationJson).
SetHeader("token", token).
SetResult(&parastorQuotaResp).
Get(parastorQuotaUrl)
if err != nil || parastorQuotaResp.Code != "0" {
return resp, nil
}
//获取资源分组
var resourceGroupResp common.ResourceGroupResp
resourceGroupUrl := ai_prefix_url + cpConf.AiResourceGroupUrl
resourceGroupReq := httputils.GetHttpRequest()
_, err = resourceGroupReq.SetHeader(httputils.ContentType, httputils.ApplicationJson).
SetHeader("token", token).
SetResult(&resourceGroupResp).
Get(resourceGroupUrl)
if err != nil || resourceGroupResp.Code != "0" {
return resp, nil
}
//获取节点资源限额
resourceUrl := ai_prefix_url + cpConf.AiResourceUrl
resourceGroups := []string{}
if len(resourceGroupResp.Data.Dcu) != 0 {
resourceGroups = append(resourceGroups, resourceGroupResp.Data.Dcu[0])
}
if len(resourceGroupResp.Data.Cpu) != 0 {
resourceGroups = append(resourceGroups, resourceGroupResp.Data.Cpu[0])
}
var memorySize int32
for _, group := range resourceGroups {
var resourceResp common.ResourceResp
resourceReq := httputils.GetHttpRequest()
_, err = resourceReq.SetHeader(httputils.ContentType, httputils.ApplicationJson).
SetHeader("token", token).
SetQueryString("resourceGroup=" + group).
SetQueryString("acceleratorType=" + "gpu").
SetResult(&resourceResp).
Get(resourceUrl)
if err != nil || resourceGroupResp.Code != "0" {
return resp, nil
}
memorySize += int32(resourceResp.Data.MemorySize)
}
//返回数据
cpuCoreNum := quotaResp.Data.AccountMaxCpu
sharedStorageInGib := parastorQuotaResp.Data[0].Threshold
if memorySize != 0 {
resp.MemoryInGib = memorySize / 1024
}
if cpuCoreNum != -1 {
resp.CpuCoreNum = int32(cpuCoreNum)
}
if sharedStorageInGib != 0 {
resp.StorageInGib = int32(sharedStorageInGib)
}
return resp, nil
}