125 lines
3.1 KiB
Go
125 lines
3.1 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"
|
|
)
|
|
|
|
type GetComputingPowerLogic struct {
|
|
ctx context.Context
|
|
svcCtx *svc.ServiceContext
|
|
logx.Logger
|
|
}
|
|
|
|
func NewGetComputingPowerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetComputingPowerLogic {
|
|
return &GetComputingPowerLogic{
|
|
ctx: ctx,
|
|
svcCtx: svcCtx,
|
|
Logger: logx.WithContext(ctx),
|
|
}
|
|
}
|
|
|
|
// 获取曙光账号算力
|
|
func (l *GetComputingPowerLogic) GetComputingPower(in *hpcAC.ResourceReq) (*hpcAC.CpResp, error) {
|
|
|
|
resp := &hpcAC.CpResp{}
|
|
resp.POpsAtFp16 = 0
|
|
|
|
cpConf := l.svcCtx.Config.CPConf
|
|
|
|
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
|
|
}
|
|
}
|
|
|
|
//获取 hpc prefix url
|
|
var centerResp common.CenterResp
|
|
centerUrl := cpConf.AcBaseUrl + cpConf.CenterUrl
|
|
var hpc_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
|
|
|
|
//获取调度器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 computingPowerInTops float32
|
|
dcuNum := quotaResp.Data.AccountMaxDcu
|
|
cpuCoreNum := quotaResp.Data.AccountMaxCpu
|
|
|
|
if dcuNum != -1 {
|
|
computingPowerInTops += float32(dcuNum) * cpConf.Dcu
|
|
}
|
|
|
|
if cpuCoreNum != -1 {
|
|
computingPowerInTops += float32(cpuCoreNum) * cpConf.CpuCore
|
|
}
|
|
|
|
if computingPowerInTops == 0 {
|
|
return resp, nil
|
|
}
|
|
|
|
resp.POpsAtFp16 = computingPowerInTops / 1024
|
|
return resp, nil
|
|
}
|