forked from JointCloud/pcm-ac
185 lines
5.0 KiB
Go
185 lines
5.0 KiB
Go
package logic
|
|
|
|
import (
|
|
"context"
|
|
"gitlink.org.cn/jcce-pcm/pcm-ac/internal/common"
|
|
"gitlink.org.cn/jcce-pcm/pcm-ac/internal/pkg/utils/httputils"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"gitlink.org.cn/jcce-pcm/pcm-ac/hpcAC"
|
|
"gitlink.org.cn/jcce-pcm/pcm-ac/internal/svc"
|
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
)
|
|
|
|
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(¢erResp).
|
|
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("aResp).
|
|
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(¶storQuotaResp).
|
|
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
|
|
}
|