Merge pull request 'added clusterbalance api' (#188) from tzwang/pcm-coordinator:master into master

Former-commit-id: fc0251f2c2a6803f03aa5a5d7b738793cc8d70f4
This commit is contained in:
tzwang 2024-05-20 16:52:25 +08:00
commit 90b3e9b027
11 changed files with 126 additions and 0 deletions

View File

@ -978,6 +978,9 @@ service pcm {
@handler GetComputeCardsByClusterHandler
get /schedule/getComputeCardsByCluster/:adapterId/:clusterId (GetComputeCardsByClusterReq) returns (GetComputeCardsByClusterResp)
@handler GetClusterBalanceByIdHandler
get /schedule/getClusterBalanceById/:adapterId/:clusterId (GetClusterBalanceByIdReq) returns (GetClusterBalanceByIdResp)
}
@server(

View File

@ -141,4 +141,13 @@ type (
GetComputeCardsByClusterResp {
Cards []string `json:"cards"`
}
GetClusterBalanceByIdReq{
AdapterId string `path:"adapterId"`
ClusterId string `path:"clusterId"`
}
GetClusterBalanceByIdResp{
Balance float64 `json:"balance"`
}
)

View File

@ -1225,6 +1225,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
Path: "/schedule/getComputeCardsByCluster/:adapterId/:clusterId",
Handler: schedule.GetComputeCardsByClusterHandler(serverCtx),
},
{
Method: http.MethodGet,
Path: "/schedule/getClusterBalanceById/:adapterId/:clusterId",
Handler: schedule.GetClusterBalanceByIdHandler(serverCtx),
},
},
rest.WithPrefix("/pcm/v1"),
)

View File

@ -0,0 +1,26 @@
package schedule
import (
"gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result"
"net/http"
"github.com/zeromicro/go-zero/rest/httpx"
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/schedule"
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc"
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types"
)
func GetClusterBalanceByIdHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.GetClusterBalanceByIdReq
if err := httpx.Parse(r, &req); err != nil {
result.ParamErrorResult(r, w, err)
return
}
l := schedule.NewGetClusterBalanceByIdLogic(r.Context(), svcCtx)
resp, err := l.GetClusterBalanceById(&req)
result.HttpResult(r, w, resp, err)
}
}

View File

@ -143,6 +143,11 @@ func (l *PageListTaskLogic) updateTaskStatus(tasks []*types.TaskModel, ch chan<-
}
}
if len(aiTask) == 0 {
ch <- struct{}{}
return
}
start, _ := time.ParseInLocation(constants.Layout, aiTask[0].StartTime, time.Local)
end, _ := time.ParseInLocation(constants.Layout, aiTask[0].EndTime, time.Local)

View File

@ -0,0 +1,35 @@
package schedule
import (
"context"
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc"
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetClusterBalanceByIdLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetClusterBalanceByIdLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetClusterBalanceByIdLogic {
return &GetClusterBalanceByIdLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetClusterBalanceByIdLogic) GetClusterBalanceById(req *types.GetClusterBalanceByIdReq) (resp *types.GetClusterBalanceByIdResp, err error) {
resp = &types.GetClusterBalanceByIdResp{}
balance, err := l.svcCtx.Scheduler.AiService.AiCollectorAdapterMap[req.AdapterId][req.ClusterId].GetUserBalance(l.ctx)
if err != nil {
return nil, err
}
resp.Balance = balance
return resp, nil
}

View File

@ -11,6 +11,7 @@ type AiCollector interface {
DownloadAlgorithmCode(ctx context.Context, resourceType string, card string, taskType string, dataset string, algorithm string) (string, error)
UploadAlgorithmCode(ctx context.Context, resourceType string, card string, taskType string, dataset string, algorithm string, code string) error
GetComputeCards(ctx context.Context) ([]string, error)
GetUserBalance(ctx context.Context) (float64, error)
}
type ResourceStats struct {

View File

@ -187,6 +187,10 @@ func (m *ModelArtsLink) GetComputeCards(ctx context.Context) ([]string, error) {
return nil, nil
}
func (m *ModelArtsLink) GetUserBalance(ctx context.Context) (float64, error) {
return 0, nil
}
func (m *ModelArtsLink) DownloadAlgorithmCode(ctx context.Context, resourceType string, card string, taskType string, dataset string, algorithm string) (string, error) {
return "", nil
}

View File

@ -359,6 +359,25 @@ func (o *OctopusLink) GetComputeCards(ctx context.Context) ([]string, error) {
return cards, nil
}
func (o *OctopusLink) GetUserBalance(ctx context.Context) (float64, error) {
balanceReq := &octopus.GetUserBalanceReq{
Platform: o.platform,
}
balanceResp, err := o.octopusRpc.GetUserBalance(ctx, balanceReq)
if err != nil {
return 0, err
}
if !balanceResp.Success {
if balanceResp.Error != nil {
return 0, errors.New(balanceResp.Error.Message)
} else {
return 0, errors.New("failed to get user balance")
}
}
balance := float64(balanceResp.Payload.BillingUser.Amount)
return balance, nil
}
func (o *OctopusLink) DownloadAlgorithmCode(ctx context.Context, resourceType string, card string, taskType string, dataset string, algorithm string) (string, error) {
var name string
if resourceType == CARD {

View File

@ -453,6 +453,16 @@ func (s *ShuguangAi) GetComputeCards(ctx context.Context) ([]string, error) {
return cards, nil
}
func (s *ShuguangAi) GetUserBalance(ctx context.Context) (float64, error) {
userReq := &hpcAC.GetUserInfoReq{}
userinfo, err := s.aCRpc.GetUserInfo(ctx, userReq)
if err != nil {
return 0, err
}
balance, _ := strconv.ParseFloat(userinfo.Data.AccountBalance, 64)
return balance, nil
}
func (s *ShuguangAi) DownloadAlgorithmCode(ctx context.Context, resourceType string, card string, taskType string, dataset string, algorithm string) (string, error) {
algoName := dataset + DASH + algorithm
req := &hpcAC.GetFileReq{

View File

@ -5746,6 +5746,15 @@ type GetComputeCardsByClusterResp struct {
Cards []string `json:"cards"`
}
type GetClusterBalanceByIdReq struct {
AdapterId string `path:"adapterId"`
ClusterId string `path:"clusterId"`
}
type GetClusterBalanceByIdResp struct {
Balance float64 `json:"balance"`
}
type CreateAlertRuleReq struct {
CLusterId string `json:"clusterId"`
ClusterName string `json:"clusterName"`