pcm-ac/internal/logic/getcomputingpowerlogic.go

127 lines
3.1 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"
"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 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(&centerResp).
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(&quotaResp).
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
}