diff --git a/api/desc/core/pcm-core.api b/api/desc/core/pcm-core.api index 79758887..0e395e7f 100644 --- a/api/desc/core/pcm-core.api +++ b/api/desc/core/pcm-core.api @@ -40,7 +40,6 @@ type remoteResp { type ( clustersLoadReq { - adapterId int64 `form:"adapterId"` clusterName string `form:"clusterName"` } clustersLoadResp { @@ -155,6 +154,8 @@ type ( MatchLabels map[string]string `json:"matchLabels,optional"` servers []ServerCommit `json:"servers,optional"` platform string `json:"platform,optional"` + AdapterId string `json:"adapterId,optional"` + ClusterType string `json:"clusterType,optional"` } ServerCommit { allCardRunTime string `json:"allCardRunTime"` @@ -181,7 +182,10 @@ type ( } commitVmTaskResp { - VmTask []VmTask `json:"vmTask" copier:"VmTask"` + // VmTask []VmTask `json:"vmTask" copier:"VmTask"` + TaskId int64 `json:"taskId"` + Code int32 `json:"code"` + Msg string `json:"msg"` } VmTask{ Id string `json:"id" copier:"Id"` @@ -835,7 +839,6 @@ type ( ItemValue string `json:"itemValue,omitempty"` Description string `json:"description,omitempty"` SortOrder string `json:"sortOrder,omitempty"` - Type string `json:"type,omitempty" db:"type"` ParentId string `json:"parentId,omitempty"` Status string `json:"status,omitempty" db:"status"` CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"` @@ -861,7 +864,6 @@ type ( ItemValue string `json:"itemValue,optional"` Description string `json:"description,optional"` SortOrder string `json:"sortOrder,optional"` - Type string `json:"type,optional"` ParentId string `json:"parentId,optional"` Status string `json:"status,optional"` } @@ -873,7 +875,6 @@ type ( ItemValue string `json:"itemValue,omitempty"` Description string `json:"description,omitempty"` SortOrder string `json:"sortOrder,omitempty"` - Type string `json:"type,omitempty"` ParentId string `json:"parentId,omitempty"` Status string `json:"status,omitempty"` CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"` diff --git a/api/desc/monitoring/pcm-monitoring.api b/api/desc/monitoring/pcm-monitoring.api index edf95b4a..c5ff3f5a 100644 --- a/api/desc/monitoring/pcm-monitoring.api +++ b/api/desc/monitoring/pcm-monitoring.api @@ -1,12 +1,40 @@ syntax = "v1" type CreateAlertRuleReq { + CLusterId int64 `json:"clusterId"` ClusterName string `json:"clusterName"` - Namespace string `json:"namespace"` Name string `json:"name"` - PromQL string `json:"PromQL"` + PromQL string `json:"promQL"` Duration string `json:"duration"` - Labels map[string]string `json:"labels"` - Annotations map[string]string `json:"annotations"` + Annotations string `json:"annotations,optional"` AlertLevel string `json:"alertLevel"` -} \ No newline at end of file + AlertType string `json:"alertType"` +} + +type ( + AlertRulesResp { + alertRules []AlertRule `json:"alertRules"` + } + + AlertRule { + Id int64 `json:"id"` + ClusterName string `json:"clusterName"` + Name string `json:"name"` + PromQL string `json:"promQL"` + Duration string `json:"duration"` + Annotations string `json:"annotations"` + AlertLevel string `json:"alertLevel"` + } +) + +type ( + nodesLoadTopReq { + ClusterName string `form:"clusterName"` + Metrics string `form:"metrics"` + } + nodesLoadTopResp { + code int `json:"code"` + data interface{} `json:"data"` + msg string `json:"msg"` + } +) \ No newline at end of file diff --git a/api/desc/pcm.api b/api/desc/pcm.api index 9040a551..8cda470c 100644 --- a/api/desc/pcm.api +++ b/api/desc/pcm.api @@ -43,10 +43,6 @@ service pcm { @handler commitVmTaskHandler post /core/commitVmTask (commitVmTaskReq) returns (commitVmTaskResp) - @doc "提交虚拟机任务临时" - @handler commitVmTaskTempHandler - post /core/commitVmTaskTemp (commitVmTaskReq) returns (commitVmTaskResp) - @doc "删除任务" @handler deleteTaskHandler delete /core/deleteTask/:id (deleteTaskReq) @@ -389,10 +385,14 @@ service pcm { @handler GetNetworkNumHandler get /vm/getNetworkNum (ListNetworksReq) returns (NetworkNum) - @doc "查询镜像列表" + @doc "查询镜像数量" @handler getImageNumHandler get /vm/getImageNum (ListImagesReq) returns (ImageNum) + @doc "查询虚拟机概览数据" + @handler getOpenstackOverviewHandler + get /vm/getOpenstackOverview (OpenstackOverviewReq) returns (OpenstackOverviewResp) + @doc "查询虚拟机列表" @handler ListServerHandler get /vm/listServer (ListServersReq) returns (ListServersResp) @@ -409,6 +409,10 @@ service pcm { @handler CreateServerHandler post /vm/createServer (CreateServerReq) returns (CreateServerResp) + @doc "跨域创建虚拟机" + @handler CreateMulServerHandler + post /vm/createMulServer (CreateMulServerReq) returns (CreateMulServerResp) + @doc "根据ID查询虚拟机详情" @handler GetServersDetailedByIdHandler get /vm/getServersDetailedById (GetServersDetailedByIdReq) returns (GetServersDetailedByIdResp) @@ -897,7 +901,7 @@ service pcm { get /schedule/ai/getStrategies returns (AiStrategyResp) @handler ScheduleGetAlgorithmsHandler - get /schedule/ai/getAlgorithms (AiAlgorithmsReq) returns (AiAlgorithmsResp) + get /schedule/ai/getAlgorithms/:resourceType/:taskType/:dataset (AiAlgorithmsReq) returns (AiAlgorithmsResp) @handler ScheduleSubmitHandler post /schedule/submit (ScheduleReq) returns (ScheduleResp) @@ -952,9 +956,13 @@ service pcm { @doc "alert rules" @handler alertRulesHandler - get /monitoring/alert/rules + get /monitoring/alert/rule returns (AlertRulesResp) @doc "cluster resource load" @handler clustersLoadHandler get /monitoring/cluster/load (clustersLoadReq) returns (clustersLoadResp) + + @doc "node resource load" + @handler nodesLoadTopHandler + get /monitoring/node/top (nodesLoadTopReq) returns (nodesLoadTopResp) } \ No newline at end of file diff --git a/api/desc/schedule/pcm-schedule.api b/api/desc/schedule/pcm-schedule.api index 72ba71a7..8b6b2dd0 100644 --- a/api/desc/schedule/pcm-schedule.api +++ b/api/desc/schedule/pcm-schedule.api @@ -13,8 +13,14 @@ type ( } ScheduleResp { - Success bool `json:"success"` - ErrorMsg string `json:"errorMsg"` + Results []*ScheduleResult `json:"results"` + } + + ScheduleResult { + ClusterId string `json:"clusterId"` + TaskId string `json:"taskId"` + Replica int32 `json:"replica"` + Msg string `json:"msg"` } AiOption { @@ -49,9 +55,9 @@ type ( } AiAlgorithmsReq { - ResourceType string `json:"resourceType"` - TaskType string `json:"taskType"` - Dataset string `json:"dataset"` + ResourceType string `path:"resourceType"` + TaskType string `path:"taskType"` + Dataset string `path:"dataset"` } AiAlgorithmsResp { diff --git a/api/desc/vm/pcm-vm.api b/api/desc/vm/pcm-vm.api index b632439e..eb18dc3a 100644 --- a/api/desc/vm/pcm-vm.api +++ b/api/desc/vm/pcm-vm.api @@ -75,6 +75,22 @@ type ( Msg string `json:"msg,omitempty"` ErrorMsg string `json:"errorMsg,omitempty"` } + + OpenstackOverviewReq { + Platform string `form:"platform,optional"` + } + OpenstackOverviewResp { + Data OpenstackOverview `json:"data"` + Code int32 `json:"code,omitempty"` + Msg string `json:"msg,omitempty"` + ErrorMsg string `json:"errorMsg,omitempty"` + } + OpenstackOverview { + max_total_cores int32 `json:"max_total_cores"` + max_total_ram_size int32 `json:"max_total_ram_size"` + max_total_volumes int32 `json:"max_total_volumes"` + } + ) /****************** servers start*************************/ type ( @@ -121,19 +137,20 @@ type ( } ServersDetailed { - //created string `json:"created" copier:"created"` - Id string `json:"Id" copier:"Id"` - Name string `json:"Name" copier:"Name"` - OSTaskState uint32 `json:"OSTaskState" copier:"OSTaskState"` - Status string `json:"Status" copier:"Status"` - VmState string `json:"VmState" copier:"VmState"` - OS_EXT_SRV_ATTR_Instance_Name string `json:"OS_EXT_SRV_ATTR_Instance_Name" copier:"OS_EXT_SRV_ATTR_Instance_Name"` - Created string `json:"Created" copier:"Created"` - HostId string `json:"HostId" copier:"HostId"` - Ip string `json:"Ip" copier:"Ip"` - Image string `json:"Image" copier:"Image"` - Updated string `json:"Updated" copier:"Updated"` - Flavor string `json:"Flavor" copier:"Flavor"` + Id string `json:"id" copier:"Id"` + Name string `json:"name" copier:"Name"` + OSTaskState uint32 `json:"os_task_state" copier:"OSTaskState"` + Status string `json:"status" copier:"Status"` + VmState string `json:"vm_state" copier:"VmState"` + OS_EXT_SRV_ATTR_Instance_Name string `json:"os_ext_srv_attr_instance_name" copier:"OS_EXT_SRV_ATTR_Instance_Name"` + Created string `json:"created" copier:"Created"` + HostId string `json:"hostId" copier:"HostId"` + Ip string `json:"ip" copier:"Ip"` + Image string `json:"image" copier:"Image"` + Updated string `json:"updated" copier:"Updated"` + Flavor string `json:"flavor" copier:"Flavor"` + Key_name string `json:"key_name" copier:"Key_name"` + Survival_time int32 `json:"survival_time" copier:"Survival_time"` } ) @@ -368,6 +385,41 @@ type ( } ) +type ( + CreateMulServerReq { + CreateMulServer []CreateMulServer `json:"createMulServer,optional"` + } + CreateMulServer { + Platform string `json:"platform,optional"` + CrServer MulCrServer `json:"crserver" copier:"CrServer"` + } + MulCrServer { + Server MulServer `json:"server" copier:"Server"` + } + MulServer { + AvailabilityZone string `json:"availability_zone" copier:"AvailabilityZone"` + Name string `json:"name,optional" copier:"Name"` + FlavorRef string `json:"flavorRef,optional" copier:"FlavorRef"` + Description string `json:"description,optional" copier:"Description"` + ImageRef string `json:"imageRef,optional" copier:"ImageRef"` + Networks []CreNetwork `json:"networks,optional" copier:"Networks"` + MinCount int32 `json:"min_count,optional" copier:"MinCount"` + } + CreateMulServerResp { + Server []MulServerResp `json:"server" copier:"Server"` + Code int32 `json:"code,omitempty"` + Msg string `json:"msg,omitempty"` + ErrorMsg string `json:"errorMsg,omitempty"` + } + MulServerResp { + Id string `json:"id" copier:"Id"` + Links []Links `json:"links" copier:"Links"` + OSDCFDiskConfig string `json:"OS_DCF_diskConfig" copier:"OSDCFDiskConfig"` + SecurityGroups []Security_groups_server `json:"security_groups" copier:"SecurityGroups"` + AdminPass string `json:"adminPass" copier:"AdminPass"` + } +) + type( RebuildServerReq{ ServerId string `json:"server_id" copier:"ServerId"` diff --git a/api/etc/pcm.yaml b/api/etc/pcm.yaml index b2b4766e..79bde9f1 100644 --- a/api/etc/pcm.yaml +++ b/api/etc/pcm.yaml @@ -6,6 +6,7 @@ Timeout: 50000 DB: DataSource: root:uJpLd6u-J?HC1@(10.206.0.12:3306)/pcm?parseTime=true&loc=Local + # DataSource: root:uJpLd6u-J?HC1@(47.92.88.143:3306)/pcm?parseTime=true&loc=Local Redis: Host: 10.206.0.12:6379 Pass: redisPW123 diff --git a/api/internal/handler/cloud/clusterinfohandler.go b/api/internal/handler/cloud/clusterinfohandler.go index 50083770..51522ea4 100644 --- a/api/internal/handler/cloud/clusterinfohandler.go +++ b/api/internal/handler/cloud/clusterinfohandler.go @@ -1,6 +1,7 @@ package cloud import ( + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" "net/http" "github.com/zeromicro/go-zero/rest/httpx" @@ -19,10 +20,6 @@ func ClusterInfoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { l := cloud.NewClusterInfoLogic(r.Context(), svcCtx) resp, err := l.ClusterInfo(&req) - if err != nil { - httpx.ErrorCtx(r.Context(), w, err) - } else { - httpx.OkJsonCtx(r.Context(), w, resp) - } + result.HttpResult(r, w, resp, err) } } diff --git a/api/internal/handler/monitoring/alertruleshandler.go b/api/internal/handler/monitoring/alertruleshandler.go index b058e73e..28cea567 100644 --- a/api/internal/handler/monitoring/alertruleshandler.go +++ b/api/internal/handler/monitoring/alertruleshandler.go @@ -1,9 +1,9 @@ package monitoring 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/monitoring" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" ) @@ -11,11 +11,7 @@ import ( func AlertRulesHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { l := monitoring.NewAlertRulesLogic(r.Context(), svcCtx) - err := l.AlertRules() - if err != nil { - httpx.ErrorCtx(r.Context(), w, err) - } else { - httpx.Ok(w) - } + resp, err := l.AlertRules() + result.HttpResult(r, w, resp, err) } } diff --git a/api/internal/handler/monitoring/createalertrulehandler.go b/api/internal/handler/monitoring/createalertrulehandler.go index 444f60dd..292ca021 100644 --- a/api/internal/handler/monitoring/createalertrulehandler.go +++ b/api/internal/handler/monitoring/createalertrulehandler.go @@ -1,6 +1,7 @@ package monitoring import ( + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" "net/http" "github.com/zeromicro/go-zero/rest/httpx" @@ -19,10 +20,6 @@ func CreateAlertRuleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { l := monitoring.NewCreateAlertRuleLogic(r.Context(), svcCtx) err := l.CreateAlertRule(&req) - if err != nil { - httpx.ErrorCtx(r.Context(), w, err) - } else { - httpx.Ok(w) - } + result.HttpResult(r, w, nil, err) } } diff --git a/api/internal/handler/monitoring/nodesloadtophandler.go b/api/internal/handler/monitoring/nodesloadtophandler.go new file mode 100644 index 00000000..81630285 --- /dev/null +++ b/api/internal/handler/monitoring/nodesloadtophandler.go @@ -0,0 +1,25 @@ +package monitoring + +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/monitoring" + "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" + "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" +) + +func NodesLoadTopHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.NodesLoadTopReq + if err := httpx.Parse(r, &req); err != nil { + httpx.ErrorCtx(r.Context(), w, err) + return + } + + l := monitoring.NewNodesLoadTopLogic(r.Context(), svcCtx) + resp, err := l.NodesLoadTop(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/api/internal/handler/routes.go b/api/internal/handler/routes.go index ff1df60e..b74eb5a3 100644 --- a/api/internal/handler/routes.go +++ b/api/internal/handler/routes.go @@ -45,11 +45,6 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/core/commitVmTask", Handler: core.CommitVmTaskHandler(serverCtx), }, - { - Method: http.MethodPost, - Path: "/core/commitVmTaskTemp", - Handler: core.CommitVmTaskTempHandler(serverCtx), - }, { Method: http.MethodDelete, Path: "/core/deleteTask/:id", @@ -461,6 +456,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/vm/getImageNum", Handler: vm.GetImageNumHandler(serverCtx), }, + { + Method: http.MethodGet, + Path: "/vm/getOpenstackOverview", + Handler: vm.GetOpenstackOverviewHandler(serverCtx), + }, { Method: http.MethodGet, Path: "/vm/listServer", @@ -481,6 +481,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/vm/createServer", Handler: vm.CreateServerHandler(serverCtx), }, + { + Method: http.MethodPost, + Path: "/vm/createMulServer", + Handler: vm.CreateMulServerHandler(serverCtx), + }, { Method: http.MethodGet, Path: "/vm/getServersDetailedById", @@ -1112,7 +1117,7 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { }, { Method: http.MethodGet, - Path: "/schedule/ai/getAlgorithms", + Path: "/schedule/ai/getAlgorithms/:resourceType/:taskType/:dataset", Handler: schedule.ScheduleGetAlgorithmsHandler(serverCtx), }, { @@ -1194,7 +1199,7 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { }, { Method: http.MethodGet, - Path: "/monitoring/alert/rules", + Path: "/monitoring/alert/rule", Handler: monitoring.AlertRulesHandler(serverCtx), }, { @@ -1202,6 +1207,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/monitoring/cluster/load", Handler: monitoring.ClustersLoadHandler(serverCtx), }, + { + Method: http.MethodGet, + Path: "/monitoring/node/top", + Handler: monitoring.NodesLoadTopHandler(serverCtx), + }, }, rest.WithPrefix("/pcm/v1"), ) diff --git a/api/internal/handler/core/commitvmtasktemphandler.go b/api/internal/handler/vm/createmulserverhandler.go similarity index 61% rename from api/internal/handler/core/commitvmtasktemphandler.go rename to api/internal/handler/vm/createmulserverhandler.go index 6167ba5c..613f1ca2 100644 --- a/api/internal/handler/core/commitvmtasktemphandler.go +++ b/api/internal/handler/vm/createmulserverhandler.go @@ -1,24 +1,24 @@ -package core +package vm import ( "net/http" "github.com/zeromicro/go-zero/rest/httpx" - "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/core" + "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/vm" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" ) -func CommitVmTaskTempHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { +func CreateMulServerHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var req types.CommitVmTaskReq + var req types.CreateMulServerReq if err := httpx.Parse(r, &req); err != nil { httpx.ErrorCtx(r.Context(), w, err) return } - l := core.NewCommitVmTaskTempLogic(r.Context(), svcCtx) - resp, err := l.CommitVmTaskTemp(&req) + l := vm.NewCreateMulServerLogic(r.Context(), svcCtx) + resp, err := l.CreateMulServer(&req) if err != nil { httpx.ErrorCtx(r.Context(), w, err) } else { diff --git a/api/internal/handler/vm/getopenstackoverviewhandler.go b/api/internal/handler/vm/getopenstackoverviewhandler.go new file mode 100644 index 00000000..871f814c --- /dev/null +++ b/api/internal/handler/vm/getopenstackoverviewhandler.go @@ -0,0 +1,28 @@ +package vm + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/vm" + "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" + "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" +) + +func GetOpenstackOverviewHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.OpenstackOverviewReq + if err := httpx.Parse(r, &req); err != nil { + httpx.ErrorCtx(r.Context(), w, err) + return + } + + l := vm.NewGetOpenstackOverviewLogic(r.Context(), svcCtx) + resp, err := l.GetOpenstackOverview(&req) + if err != nil { + httpx.ErrorCtx(r.Context(), w, err) + } else { + httpx.OkJsonCtx(r.Context(), w, resp) + } + } +} diff --git a/api/internal/logic/core/commitvmtasklogic.go b/api/internal/logic/core/commitvmtasklogic.go index 4b81af55..fd048234 100644 --- a/api/internal/logic/core/commitvmtasklogic.go +++ b/api/internal/logic/core/commitvmtasklogic.go @@ -42,6 +42,14 @@ func (l *CommitVmTaskLogic) CommitVmTask(req *types.CommitVmTaskReq) (resp *type if tx.Error != nil { return nil, tx.Error } + + var clusterIds []int64 + l.svcCtx.DbEngin.Raw("SELECT id FROM `t_cluster` where adapter_id = ? and label = ?", req.AdapterId, req.ClusterType).Scan(&clusterIds) + + if len(clusterIds) == 0 || clusterIds == nil { + return nil, nil + } + vm := models.Vm{} tool.Convert(req, &vm) mqInfo := response.TaskInfo{ @@ -52,5 +60,11 @@ func (l *CommitVmTaskLogic) CommitVmTask(req *types.CommitVmTaskReq) (resp *type } //req.TaskId = taskModel.Id mqs.InsQueue.Beta.Add(&mqInfo) - return + tx = l.svcCtx.DbEngin.Create(&mqInfo) + resp = &types.CommitVmTaskResp{ + Code: 200, + Msg: "success", + TaskId: taskModel.Id, + } + return resp, nil } diff --git a/api/internal/logic/core/commitvmtasktemplogic.go b/api/internal/logic/core/commitvmtasktemplogic.go deleted file mode 100644 index f9501d46..00000000 --- a/api/internal/logic/core/commitvmtasktemplogic.go +++ /dev/null @@ -1,30 +0,0 @@ -package core - -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 CommitVmTaskTempLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewCommitVmTaskTempLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CommitVmTaskTempLogic { - return &CommitVmTaskTempLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -func (l *CommitVmTaskTempLogic) CommitVmTaskTemp(req *types.CommitVmTaskReq) (resp *types.CommitVmTaskResp, err error) { - // todo: add your logic here and delete this line - - return -} diff --git a/api/internal/logic/core/getcomputingpowerlogic.go b/api/internal/logic/core/getcomputingpowerlogic.go index 8fe735b4..40ec24fd 100644 --- a/api/internal/logic/core/getcomputingpowerlogic.go +++ b/api/internal/logic/core/getcomputingpowerlogic.go @@ -17,10 +17,10 @@ package core import ( "context" "github.com/zeromicro/go-zero/core/logx" + "gitlink.org.cn/JointCloud/pcm-ac/hpcAC" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" - "gitlink.org.cn/jcce-pcm/pcm-ac/hpcAC" - "gitlink.org.cn/jcce-pcm/pcm-participant-octopus/octopus" + "gitlink.org.cn/JointCloud/pcm-octopus/octopus" "log" ) diff --git a/api/internal/logic/core/getgeneralinfologic.go b/api/internal/logic/core/getgeneralinfologic.go index 92f69e05..8d0e3461 100644 --- a/api/internal/logic/core/getgeneralinfologic.go +++ b/api/internal/logic/core/getgeneralinfologic.go @@ -17,10 +17,10 @@ package core import ( "context" "github.com/zeromicro/go-zero/core/logx" + "gitlink.org.cn/JointCloud/pcm-ac/hpcAC" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" - "gitlink.org.cn/jcce-pcm/pcm-ac/hpcAC" - "gitlink.org.cn/jcce-pcm/pcm-participant-octopus/octopus" + "gitlink.org.cn/JointCloud/pcm-octopus/octopus" "log" ) diff --git a/api/internal/logic/dictionary/adddictitemlogic.go b/api/internal/logic/dictionary/adddictitemlogic.go index 22f8f667..11892d8e 100644 --- a/api/internal/logic/dictionary/adddictitemlogic.go +++ b/api/internal/logic/dictionary/adddictitemlogic.go @@ -39,11 +39,10 @@ func (l *AddDictItemLogic) AddDictItem(req *types.DictItemEditReq) (resp *types. dictItem.ItemValue = req.ItemValue dictItem.Description = req.Description dictItem.SortOrder = req.SortOrder - dictItem.Type = req.Type + dictItem.ParentId = "0" if req.ParentId != "" { dictItem.ParentId = req.ParentId } - dictItem.ParentId = "0" dictItem.Status = req.Status dictItem.Id = utils.GenSnowflakeIDStr() dictItem.CreateTime = time.Now().Format("2006-01-02 15:04:05") diff --git a/api/internal/logic/dictionary/editdictitemlogic.go b/api/internal/logic/dictionary/editdictitemlogic.go index b09de93b..60cadbd0 100644 --- a/api/internal/logic/dictionary/editdictitemlogic.go +++ b/api/internal/logic/dictionary/editdictitemlogic.go @@ -30,7 +30,7 @@ func (l *EditDictItemLogic) EditDictItem(req *types.DictItemEditReq) (resp *type dictItem := &types.DictItemInfo{} result := l.svcCtx.DbEngin.Table("t_dict_item").First(&dictItem, req.Id) if errors.Is(result.Error, gorm.ErrRecordNotFound) { - logx.Errorf("Dictionary data editing failure. errors: %s", err.Error()) + logx.Errorf("Dictionary data editing failure. errors: %s", result.Error) return nil, errors.New("DictItem does not exist") } utils.Convert(req, &dictItem) diff --git a/api/internal/logic/dictionary/editdictlogic.go b/api/internal/logic/dictionary/editdictlogic.go index a9323e29..735718a2 100644 --- a/api/internal/logic/dictionary/editdictlogic.go +++ b/api/internal/logic/dictionary/editdictlogic.go @@ -31,7 +31,7 @@ func (l *EditDictLogic) EditDict(req *types.DictEditReq) (resp *types.DictResp, dict := &types.DictInfo{} result := l.svcCtx.DbEngin.Table("t_dict").First(&dict, req.Id) if errors.Is(result.Error, gorm.ErrRecordNotFound) { - logx.Errorf("Dictionary editing failure. errors: %s", err.Error()) + logx.Errorf("Dictionary editing failure. errors: %s", result.Error) return nil, errors.New("Dict does not exist") } utils.Convert(req, &dict) diff --git a/api/internal/logic/dictionary/listdictitembycodelogic.go b/api/internal/logic/dictionary/listdictitembycodelogic.go index b8eb2331..0fd16b86 100644 --- a/api/internal/logic/dictionary/listdictitembycodelogic.go +++ b/api/internal/logic/dictionary/listdictitembycodelogic.go @@ -2,6 +2,7 @@ package dictionary import ( "context" + "github.com/pkg/errors" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" @@ -29,12 +30,13 @@ func (l *ListDictItemByCodeLogic) ListDictItemByCode(req *types.DictCodeReq) (re db := l.svcCtx.DbEngin.Model(&types.DictInfo{}).Table("t_dict") // 左连接查询 - db.Select("t_dict_item.*").Joins("left join t_dict_item on t_dict.id = t_dict_item.dict_id"). + err = db.Select("t_dict_item.*").Joins("left join t_dict_item on t_dict.id = t_dict_item.dict_id"). Where("t_dict.dict_code = ?", req.DictCode). Where("t_dict_item.status", 1). - Order("t_dict_item.sort_order").Scan(&dictList) + Order("t_dict_item.sort_order").Scan(&dictList).Error if err != nil { - return resp, err + logx.Errorf("ListDictItemByCode()=> failed %s", err.Error()) + return nil, errors.New("description Failed to query dictionary entry data") } resp.List = dictList return resp, nil diff --git a/api/internal/logic/monitoring/alertruleslogic.go b/api/internal/logic/monitoring/alertruleslogic.go index 3014853b..ee9eb1dc 100644 --- a/api/internal/logic/monitoring/alertruleslogic.go +++ b/api/internal/logic/monitoring/alertruleslogic.go @@ -2,10 +2,11 @@ package monitoring import ( "context" - "github.com/prometheus/alertmanager/api/v2/client/alert" + + "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" - "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" ) type AlertRulesLogic struct { @@ -22,13 +23,10 @@ func NewAlertRulesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AlertR } } -func (l *AlertRulesLogic) AlertRules() error { - // todo: add your logic here and delete this line - alerts, err := l.svcCtx.AlertClient.Alert.GetAlerts(&alert.GetAlertsParams{}) - if err != nil { - return err - } - println(alerts.Error()) - return nil - return nil +func (l *AlertRulesLogic) AlertRules() (resp *types.AlertRulesResp, err error) { + resp = &types.AlertRulesResp{} + var alertRules []types.AlertRule + l.svcCtx.DbEngin.Raw("SELECT ar.id,ar.*,GROUP_CONCAT(tc.`name` ORDER BY tc.`name` ASC SEPARATOR ',') as cluster_name FROM alert_rule ar JOIN t_cluster tc ON ar.cluster_id = tc.id WHERE ar.deleted_at IS NULL AND tc.deleted_at IS NULL GROUP BY ar.id").Scan(&alertRules) + resp.AlertRules = alertRules + return resp, nil } diff --git a/api/internal/logic/monitoring/clustersloadlogic.go b/api/internal/logic/monitoring/clustersloadlogic.go index 68f07eb1..ed2a4d07 100644 --- a/api/internal/logic/monitoring/clustersloadlogic.go +++ b/api/internal/logic/monitoring/clustersloadlogic.go @@ -28,8 +28,7 @@ func NewClustersLoadLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Clus func (l *ClustersLoadLogic) ClustersLoad(req *types.ClustersLoadReq) (resp *types.ClustersLoadResp, err error) { resp = &types.ClustersLoadResp{} metrics := []string{"cluster_cpu_utilisation", "cluster_cpu_avail", "cluster_cpu_total", "cluster_memory_total", "cluster_memory_avail", "cluster_memory_utilisation", "cluster_disk_utilisation", "cluster_disk_avail", "cluster_disk_total"} - result := l.svcCtx.PromClient.GetNamedMetrics(metrics, time.Now(), tracker.ClusterOption{AdapterId: req.AdapterId, ClusterName: req.ClusterName}) + result := l.svcCtx.PromClient.GetNamedMetrics(metrics, time.Now(), tracker.ClusterOption{ClusterName: req.ClusterName}) resp.Data = result return resp, nil - return } diff --git a/api/internal/logic/monitoring/createalertrulelogic.go b/api/internal/logic/monitoring/createalertrulelogic.go index 63dfb95e..828f5635 100644 --- a/api/internal/logic/monitoring/createalertrulelogic.go +++ b/api/internal/logic/monitoring/createalertrulelogic.go @@ -3,12 +3,14 @@ package monitoring import ( "context" v1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" - v12 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/intstr" - "github.com/zeromicro/go-zero/core/logx" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models" + tool "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils" + v12 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/apimachinery/pkg/util/json" ) type CreateAlertRuleLogic struct { @@ -25,16 +27,49 @@ func NewCreateAlertRuleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *C } } +type RuleSelectorResp struct { + Code int `json:"code"` + Msg string `json:"msg"` + Prometheus v1.Prometheus `json:"data"` +} + func (l *CreateAlertRuleLogic) CreateAlertRule(req *types.CreateAlertRuleReq) error { - // todo: add your logic here and delete this line + + // save to db + var alertRule models.AlertRule + tool.Convert(req, &alertRule) + alertRule.Id = tool.GenSnowflakeID() + tx := l.svcCtx.DbEngin.Save(&alertRule) + if tx.Error != nil { + return tx.Error + } + + // query server http url. + var server string + l.svcCtx.DbEngin.Raw("select ta.server from t_adapter ta,t_cluster tc where ta.id = tc.adapter_id and tc.name = ?", &req.ClusterName).Scan(&server) + + // rule selector + var ruleSelectorResp RuleSelectorResp + + response, err := l.svcCtx.HttpClient.R(). + SetQueryParams(map[string]string{ + "clusterName": req.ClusterName, + }). + SetResult(&ruleSelectorResp). + ForceContentType("application/json"). + Get(server + "/api/v1/monitoring/rule/selector") + if err != nil || response.IsError() { + return err + } + // Data Filling ruleDuration := v1.Duration(req.Duration) rule := &v1.PrometheusRule{ + TypeMeta: v12.TypeMeta{Kind: "PrometheusRule", + APIVersion: "monitoring.coreos.com/v1"}, ObjectMeta: v12.ObjectMeta{ Name: req.Name, - Namespace: req.Namespace, - Labels: map[string]string{ - "release": "prometheus", - }, + Namespace: ruleSelectorResp.Prometheus.ObjectMeta.Namespace, + Labels: ruleSelectorResp.Prometheus.Spec.RuleSelector.MatchLabels, }, Spec: v1.PrometheusRuleSpec{ Groups: []v1.RuleGroup{ @@ -48,13 +83,35 @@ func (l *CreateAlertRuleLogic) CreateAlertRule(req *types.CreateAlertRuleReq) er Labels: map[string]string{ "severity": req.AlertLevel, }, - Annotations: req.Annotations, + Annotations: map[string]string{"description": req.Annotations}, }, }, }, }, }, } - println(rule.Kind) + + ruleBytes, err := json.Marshal(rule) + if err != nil { + return err + } + + // create prometheus rule + response, err = l.svcCtx.HttpClient.R(). + SetBody(&OperateStruct{ + ClusterName: req.ClusterName, + YamlString: string(ruleBytes), + }). + ForceContentType("application/json"). + Post(server + "/api/v1/operate/apply") + if err != nil || response.IsError() { + return err + } + return nil } + +type OperateStruct struct { + ClusterName string `json:"clusterName"` + YamlString string `json:"yamlString"` +} diff --git a/api/internal/logic/monitoring/nodesloadtoplogic.go b/api/internal/logic/monitoring/nodesloadtoplogic.go new file mode 100644 index 00000000..5a1fd7e2 --- /dev/null +++ b/api/internal/logic/monitoring/nodesloadtoplogic.go @@ -0,0 +1,44 @@ +package monitoring + +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 NodesLoadTopLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewNodesLoadTopLogic(ctx context.Context, svcCtx *svc.ServiceContext) *NodesLoadTopLogic { + return &NodesLoadTopLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *NodesLoadTopLogic) NodesLoadTop(req *types.NodesLoadTopReq) (resp *types.NodesLoadTopResp, err error) { + + resp = &types.NodesLoadTopResp{} + + var server string + l.svcCtx.DbEngin.Raw("select ta.server from t_adapter ta,t_cluster tc where ta.id = tc.adapter_id and tc.name = ?", &req.ClusterName).Scan(&server) + response, err := l.svcCtx.HttpClient.R(). + SetQueryParams(map[string]string{ + "clusterName": req.ClusterName, + "metrics": req.Metrics, + }). + SetResult(&resp). + ForceContentType("application/json"). + Get(server + "/api/v1/monitoring/node") + if err != nil || response.IsError() { + return nil, err + } + return resp, nil +} diff --git a/api/internal/logic/schedule/schedulesubmitlogic.go b/api/internal/logic/schedule/schedulesubmitlogic.go index a4704def..c1f9e0f0 100644 --- a/api/internal/logic/schedule/schedulesubmitlogic.go +++ b/api/internal/logic/schedule/schedulesubmitlogic.go @@ -4,7 +4,6 @@ import ( "context" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/schedulers" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/schedulers/option" - "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" @@ -29,25 +28,42 @@ func (l *ScheduleSubmitLogic) ScheduleSubmit(req *types.ScheduleReq) (resp *type resp = &types.ScheduleResp{} opt := &option.AiOption{ ResourceType: req.AiOption.ResourceType, - Tops: 0, + Tops: req.AiOption.Tops, TaskType: req.AiOption.TaskType, DatasetsName: req.AiOption.Datasets, - AlgorithmName: "cnn", + AlgorithmName: req.AiOption.Algorithm, StrategyName: req.AiOption.Strategy, - ClusterToStaticWeight: nil, - Params: []string{ - "epoch,1", - }, + ClusterToStaticWeight: req.AiOption.StaticWeightMap, + Params: req.AiOption.Params, + Envs: req.AiOption.Envs, + Cmd: req.AiOption.Cmd, } aiSchdl, err := schedulers.NewAiScheduler(l.ctx, "", l.svcCtx.Scheduler, opt) if err != nil { return nil, err } - _, err = l.svcCtx.Scheduler.AssignAndSchedule(aiSchdl) + results, err := l.svcCtx.Scheduler.AssignAndSchedule(aiSchdl) if err != nil { return nil, err } + switch opt.GetOptionType() { + case option.AI: + rs := (results).([]*schedulers.AiResult) + for _, r := range rs { + scheResult := &types.ScheduleResult{} + scheResult.ClusterId = r.ClusterId + scheResult.TaskId = r.TaskId + scheResult.Replica = r.Replica + scheResult.Msg = r.Msg + resp.Results = append(resp.Results, scheResult) + } + err = l.svcCtx.Scheduler.AiStorages.SaveTask(req.AiOption.TaskName) + if err != nil { + return nil, err + } + } + return resp, nil } diff --git a/api/internal/logic/vm/createmulserverlogic.go b/api/internal/logic/vm/createmulserverlogic.go new file mode 100644 index 00000000..b59f575c --- /dev/null +++ b/api/internal/logic/vm/createmulserverlogic.go @@ -0,0 +1,82 @@ +package vm + +import ( + "context" + "fmt" + "github.com/jinzhu/copier" + "github.com/pkg/errors" + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/helper/xerr" + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils" + "gitlink.org.cn/JointCloud/pcm-openstack/openstack" + "k8s.io/apimachinery/pkg/util/json" + + "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 CreateMulServerLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewCreateMulServerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateMulServerLogic { + return &CreateMulServerLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +// ServerLinks 表示服务器链接的结构体 +type ServerLinks struct { + Href string `json:"href"` // 注意:在JSON中,"href "有一个额外的空格,需要移除 + Rel string `json:"rel"` +} + +// SecurityGroup 表示安全组的结构体 +type SecurityGroup struct { + Name string `json:"name"` +} + +// Server 表示服务器的结构体 +type Server struct { + ID string `json:"id"` + Links []ServerLinks `json:"links"` + OSDCFDiskConfig string `json:"OS_DCF_diskConfig"` + SecurityGroups []SecurityGroup `json:"security_groups"` + AdminPass string `json:"adminPass"` +} + +// Response 表示整个响应的结构体 +type Response struct { + Server Server `json:"server"` +} + +func (l *CreateMulServerLogic) CreateMulServer(req *types.CreateMulServerReq) (resp *types.CreateMulServerResp, err error) { + // todo: add your logic here and delete this line + CreateServerReq := &openstack.CreateServerReq{} + var response Response + fmt.Println("请求入参:", req) + for _, server := range req.CreateMulServer { + fmt.Println("入参参数:", server) + err = copier.CopyWithOption(CreateServerReq, server, copier.Option{Converters: utils.Converters}) + CreateServerResp, err := l.svcCtx.OpenstackRpc.CreateServer(l.ctx, CreateServerReq) + fmt.Println("返回结果:", CreateServerResp) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrMsg("Failed to create Server list"), "Failed to get db Server list err : %v ,req:%+v", err, req) + } + marshal, err := json.Marshal(&CreateServerResp) + fmt.Println("返回结果b:", marshal) + if err != nil { + return nil, result.NewDefaultError(err.Error()) + } + json.Unmarshal(marshal, &response) + } + err = copier.CopyWithOption(&resp, &response, copier.Option{Converters: utils.Converters}) + fmt.Println("返回结果c:", resp) + return resp, err +} diff --git a/api/internal/logic/vm/getopenstackoverviewlogic.go b/api/internal/logic/vm/getopenstackoverviewlogic.go new file mode 100644 index 00000000..39155fc8 --- /dev/null +++ b/api/internal/logic/vm/getopenstackoverviewlogic.go @@ -0,0 +1,35 @@ +package vm + +import ( + "context" + "github.com/zeromicro/go-zero/core/logx" + "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" + "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" +) + +type GetOpenstackOverviewLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetOpenstackOverviewLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetOpenstackOverviewLogic { + return &GetOpenstackOverviewLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetOpenstackOverviewLogic) GetOpenstackOverview(req *types.OpenstackOverviewReq) (resp *types.OpenstackOverviewResp, err error) { + // todo: add your logic here and delete this line + var openstackOverview types.OpenstackOverview + sqlStr := "SELECT t.max_total_cores,t.max_total_ram_size,t.max_total_volumes FROM `vm_openstack_overview` t left join t_cluster tc on t.cluster_id=tc.id where tc.`name` = ?" + l.svcCtx.DbEngin.Raw(sqlStr, req.Platform).Scan(&openstackOverview) + resp = &types.OpenstackOverviewResp{ + Code: 200, + Msg: "success", + Data: openstackOverview, + } + return resp, err +} diff --git a/api/internal/logic/vm/listserversdetailedlogic.go b/api/internal/logic/vm/listserversdetailedlogic.go index 63fdbe80..79b217e5 100644 --- a/api/internal/logic/vm/listserversdetailedlogic.go +++ b/api/internal/logic/vm/listserversdetailedlogic.go @@ -18,15 +18,12 @@ import ( "context" "github.com/jinzhu/copier" "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/helper/xerr" - error2 "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/error" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils" "gitlink.org.cn/JointCloud/pcm-openstack/openstack" - "k8s.io/apimachinery/pkg/util/json" - - "github.com/zeromicro/go-zero/core/logx" ) type ListServersDetailedLogic struct { @@ -44,18 +41,14 @@ func NewListServersDetailedLogic(ctx context.Context, svcCtx *svc.ServiceContext } func (l *ListServersDetailedLogic) ListServersDetailed(req *types.ListServersDetailedReq) (resp *types.ListServersDetailedResp, err error) { - // todo: add your logic here and delete this line + resp = &types.ListServersDetailedResp{} ListServersDetailedReq := &openstack.ListServersDetailedReq{} err = copier.CopyWithOption(ListServersDetailedReq, req, copier.Option{Converters: utils.Converters}) ListServersDetailedResp, err := l.svcCtx.OpenstackRpc.ListServersDetailed(l.ctx, ListServersDetailedReq) if err != nil { return nil, errors.Wrapf(xerr.NewErrMsg("Failed to get Servers list"), "Failed to get db Servers list err : %v ,req:%+v", err, req) } - marshal, err := json.Marshal(&ListServersDetailedResp) - if err != nil { - return nil, error2.NewDefaultError(err.Error()) - } - json.Unmarshal(marshal, &resp) + utils.Convert(&ListServersDetailedResp.Servers, &resp.ServersDetailed) err = copier.CopyWithOption(&resp, &ListServersDetailedResp, copier.Option{Converters: utils.Converters}) return resp, err diff --git a/api/internal/scheduler/database/aiStorage.go b/api/internal/scheduler/database/aiStorage.go index edcc5969..c0b706f2 100644 --- a/api/internal/scheduler/database/aiStorage.go +++ b/api/internal/scheduler/database/aiStorage.go @@ -2,7 +2,6 @@ package database import ( "github.com/zeromicro/go-zero/core/logx" - "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/strategy" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/constants" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models" @@ -24,12 +23,22 @@ func (s *AiStorage) GetParticipants() (*types.ClusterListResp, error) { return &resp, nil } -func (s *AiStorage) SaveTask(cluster strategy.AssignedCluster) error { +func (s *AiStorage) GetClustersByAdapterId(id string) (*types.ClusterListResp, error) { + var resp types.ClusterListResp + tx := s.DbEngin.Raw("select * from t_cluster where `deleted_at` IS NULL and `adapter_id` = ? ORDER BY create_time Desc", id).Scan(&resp.List) + if tx.Error != nil { + logx.Errorf(tx.Error.Error()) + return nil, tx.Error + } + return &resp, nil +} + +func (s *AiStorage) SaveTask(name string) error { // 构建主任务结构体 taskModel := models.Task{ Status: constants.Saved, Description: "ai task", - Name: "testAi", + Name: name, CommitTime: time.Now(), } // 保存任务数据到数据库 diff --git a/api/internal/scheduler/scheduler.go b/api/internal/scheduler/scheduler.go index 2ed27228..75aa115f 100644 --- a/api/internal/scheduler/scheduler.go +++ b/api/internal/scheduler/scheduler.go @@ -47,7 +47,7 @@ type Scheduler struct { type SubSchedule interface { GetNewStructForDb(task *response.TaskInfo, resource string, participantId int64) (interface{}, error) PickOptimalStrategy() (strategy.Strategy, error) - AssignTask(clusters []*strategy.AssignedCluster) ([]interface{}, error) + AssignTask(clusters []*strategy.AssignedCluster) (interface{}, error) } func NewScheduler(subSchedule SubSchedule, val string, dbEngin *gorm.DB, participantRpc participantservice.ParticipantService) (*Scheduler, error) { @@ -130,7 +130,7 @@ func (s *Scheduler) TempAssign() error { return nil } -func (s *Scheduler) AssignAndSchedule(ss SubSchedule) ([]interface{}, error) { +func (s *Scheduler) AssignAndSchedule(ss SubSchedule) (interface{}, error) { //// 已指定 ParticipantId //if s.task.ParticipantId != 0 { // return nil diff --git a/api/internal/scheduler/schedulers/aiScheduler.go b/api/internal/scheduler/schedulers/aiScheduler.go index 4b62f427..58a4b614 100644 --- a/api/internal/scheduler/schedulers/aiScheduler.go +++ b/api/internal/scheduler/schedulers/aiScheduler.go @@ -16,7 +16,9 @@ package schedulers import ( "context" + "encoding/json" "errors" + "gitlink.org.cn/JointCloud/pcm-ac/hpcAC" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/schedulers/option" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/service/collector" @@ -25,6 +27,8 @@ import ( "gitlink.org.cn/JointCloud/pcm-coordinator/api/pkg/response" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils" + "gitlink.org.cn/JointCloud/pcm-octopus/octopus" + "strconv" "sync" ) @@ -36,6 +40,13 @@ type AiScheduler struct { ctx context.Context } +type AiResult struct { + TaskId string + ClusterId string + Replica int32 + Msg string +} + func NewAiScheduler(ctx context.Context, val string, scheduler *scheduler.Scheduler, option *option.AiOption) (*AiScheduler, error) { return &AiScheduler{ctx: ctx, yamlString: val, Scheduler: scheduler, option: option}, nil } @@ -95,15 +106,15 @@ func (as *AiScheduler) PickOptimalStrategy() (strategy.Strategy, error) { return nil, errors.New("no strategy has been chosen") } -func (as *AiScheduler) AssignTask(clusters []*strategy.AssignedCluster) ([]interface{}, error) { +func (as *AiScheduler) AssignTask(clusters []*strategy.AssignedCluster) (interface{}, error) { if clusters == nil { return nil, errors.New("clusters is nil") } var wg sync.WaitGroup - var result []interface{} + var results []*AiResult var errs []error - var ch = make(chan interface{}, len(clusters)) + var ch = make(chan *AiResult, len(clusters)) var errCh = make(chan error, len(clusters)) executorMap := *as.AiExecutor @@ -114,23 +125,26 @@ func (as *AiScheduler) AssignTask(clusters []*strategy.AssignedCluster) ([]inter } wg.Add(1) go func() { - resp, err := executorMap[c.Name].Execute(as.ctx, as.option) + opt, _ := cloneAiOption(as.option) + resp, err := executorMap[c.Name].Execute(as.ctx, opt) + if err != nil { - // TODO: database operation errCh <- err wg.Done() return } - // TODO: database operation - ch <- resp + + result, _ := convertType(resp) + result.Replica = c.Replicas + result.ClusterId = strconv.FormatInt(c.ParticipantId, 10) + + ch <- result wg.Done() }() } wg.Wait() - - for s := range ch { - result = append(result, s) - } + close(ch) + close(errCh) for e := range errCh { errs = append(errs, e) @@ -140,7 +154,12 @@ func (as *AiScheduler) AssignTask(clusters []*strategy.AssignedCluster) ([]inter return nil, errors.New("submit task failed") } - return result, nil + for s := range ch { + // TODO: database operation + results = append(results, s) + } + + return results, nil } func (as *AiScheduler) findClustersWithResources() ([]*collector.ResourceStats, error) { @@ -186,3 +205,43 @@ func (as *AiScheduler) findClustersWithResources() ([]*collector.ResourceStats, } return resourceSpecs, nil } + +func convertType(in interface{}) (*AiResult, error) { + var result AiResult + switch (in).(type) { + case *hpcAC.SubmitTaskAiResp: + resp := (in).(*hpcAC.SubmitTaskAiResp) + if resp.Code == "0" { + result.TaskId = resp.Data + } else { + result.Msg = resp.Msg + } + return &result, nil + case *octopus.CreateTrainJobResp: + resp := (in).(*octopus.CreateTrainJobResp) + + if resp.Success { + result.TaskId = resp.Payload.JobId + } else { + result.Msg = resp.Error.Message + } + + return &result, nil + default: + return nil, errors.New("ai task response failed") + } +} + +func cloneAiOption(opt *option.AiOption) (*option.AiOption, error) { + origJSON, err := json.Marshal(opt) + if err != nil { + return nil, err + } + + clone := option.AiOption{} + if err = json.Unmarshal(origJSON, &clone); err != nil { + return nil, err + } + + return &clone, nil +} diff --git a/api/internal/scheduler/schedulers/cloudScheduler.go b/api/internal/scheduler/schedulers/cloudScheduler.go index 097635ab..e4035574 100644 --- a/api/internal/scheduler/schedulers/cloudScheduler.go +++ b/api/internal/scheduler/schedulers/cloudScheduler.go @@ -115,6 +115,6 @@ func (cs *CloudScheduler) genTaskAndProviders() (*providerPricing.Task, []*provi return nil, providerList, nil } -func (cs *CloudScheduler) AssignTask(clusters []*strategy.AssignedCluster) ([]interface{}, error) { +func (cs *CloudScheduler) AssignTask(clusters []*strategy.AssignedCluster) (interface{}, error) { return nil, nil } diff --git a/api/internal/scheduler/schedulers/hpcScheduler.go b/api/internal/scheduler/schedulers/hpcScheduler.go index 319b8183..6d84eaef 100644 --- a/api/internal/scheduler/schedulers/hpcScheduler.go +++ b/api/internal/scheduler/schedulers/hpcScheduler.go @@ -50,6 +50,6 @@ func (h *HpcScheduler) genTaskAndProviders(task *response.TaskInfo) (*providerPr return nil, nil } -func (h *HpcScheduler) AssignTask(clusters []*strategy.AssignedCluster) ([]interface{}, error) { +func (h *HpcScheduler) AssignTask(clusters []*strategy.AssignedCluster) (interface{}, error) { return nil, nil } diff --git a/api/internal/scheduler/schedulers/option/cloudOption.go b/api/internal/scheduler/schedulers/option/cloudOption.go new file mode 100644 index 00000000..fe6274ed --- /dev/null +++ b/api/internal/scheduler/schedulers/option/cloudOption.go @@ -0,0 +1,9 @@ +package option + +type CloudOption struct { + task interface{} +} + +func (c CloudOption) GetOptionType() string { + return CLOUD +} diff --git a/api/internal/scheduler/schedulers/vmScheduler.go b/api/internal/scheduler/schedulers/vmScheduler.go index 80e89c4e..4bb626f3 100644 --- a/api/internal/scheduler/schedulers/vmScheduler.go +++ b/api/internal/scheduler/schedulers/vmScheduler.go @@ -64,7 +64,7 @@ func (vm *VmScheduler) genTaskAndProviders() (*providerPricing.Task, []*provider return nil, providerList, nil } -func (v VmScheduler) AssignTask(clusters []*strategy.AssignedCluster) ([]interface{}, error) { +func (v VmScheduler) AssignTask(clusters []*strategy.AssignedCluster) (interface{}, error) { //TODO implement me panic("implement me") } diff --git a/api/internal/scheduler/service/aiService.go b/api/internal/scheduler/service/aiService.go index 5b21003b..aa8ded01 100644 --- a/api/internal/scheduler/service/aiService.go +++ b/api/internal/scheduler/service/aiService.go @@ -1,13 +1,15 @@ package service import ( + "gitlink.org.cn/JointCloud/pcm-ac/hpcacclient" + "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/database" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/service/collector" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/service/executor" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/storeLink" - "gitlink.org.cn/jcce-pcm/pcm-ac/hpcacclient" + "gitlink.org.cn/JointCloud/pcm-octopus/octopusclient" "gitlink.org.cn/jcce-pcm/pcm-participant-modelarts/client/imagesservice" "gitlink.org.cn/jcce-pcm/pcm-participant-modelarts/client/modelartsservice" - "gitlink.org.cn/jcce-pcm/pcm-participant-octopus/octopusclient" + "strconv" ) const ( @@ -16,34 +18,30 @@ const ( SHUGUANGAI = "shuguangAi" ) -var ( - AiTypeMap = map[string]string{ - "hanwuji": OCTOPUS, - //"suiyan": OCTOPUS, - //"sailingsi": OCTOPUS, - //"modelarts-CloudBrain2": MODELARTS, - "shuguangAi": SHUGUANGAI, - } -) +func InitAiClusterMap(octopusRpc octopusclient.Octopus, modelArtsRpc modelartsservice.ModelArtsService, modelArtsImgRpc imagesservice.ImagesService, aCRpc hpcacclient.HpcAC, storages *database.AiStorage) (*map[string]executor.AiExecutor, *map[string]collector.AiCollector) { + clusters, _ := storages.GetClustersByAdapterId("1777144940459986944") -func InitAiClusterMap(octopusRpc octopusclient.Octopus, modelArtsRpc modelartsservice.ModelArtsService, modelArtsImgRpc imagesservice.ImagesService, aCRpc hpcacclient.HpcAC) (*map[string]executor.AiExecutor, *map[string]collector.AiCollector) { executorMap := make(map[string]executor.AiExecutor) collectorMap := make(map[string]collector.AiCollector) - for k, v := range AiTypeMap { - switch v { + for _, c := range clusters.List { + switch c.Name { case OCTOPUS: - octopus := storeLink.NewOctopusLink(octopusRpc, k, 0) - collectorMap[k] = octopus - executorMap[k] = octopus + id, _ := strconv.ParseInt(c.Id, 10, 64) + octopus := storeLink.NewOctopusLink(octopusRpc, c.Nickname, id) + collectorMap[c.Nickname] = octopus + executorMap[c.Nickname] = octopus case MODELARTS: - modelarts := storeLink.NewModelArtsLink(modelArtsRpc, modelArtsImgRpc, k, 0) - collectorMap[k] = modelarts - executorMap[k] = modelarts + id, _ := strconv.ParseInt(c.Id, 10, 64) + modelarts := storeLink.NewModelArtsLink(modelArtsRpc, modelArtsImgRpc, c.Nickname, id) + collectorMap[c.Nickname] = modelarts + executorMap[c.Nickname] = modelarts case SHUGUANGAI: - sgai := storeLink.NewShuguangAi(aCRpc, k, 0) - collectorMap[k] = sgai - executorMap[k] = sgai + id, _ := strconv.ParseInt(c.Id, 10, 64) + sgai := storeLink.NewShuguangAi(aCRpc, c.Nickname, id) + collectorMap[c.Nickname] = sgai + executorMap[c.Nickname] = sgai } } + return &executorMap, &collectorMap } diff --git a/api/internal/scheduler/strategy/dynamicResources.go b/api/internal/scheduler/strategy/dynamicResources.go index c8d4052f..cb1d4922 100644 --- a/api/internal/scheduler/strategy/dynamicResources.go +++ b/api/internal/scheduler/strategy/dynamicResources.go @@ -49,7 +49,7 @@ func (ps *DynamicResourcesStrategy) Schedule() ([]*AssignedCluster, error) { if opt.ResourceType == "computeCard" { var maxCurrentCardHours float64 for _, card := range res.CardsAvail { - cardHours := common.RoundFloat(card.TOpsAtFp16*card.CardHours, 3) + cardHours := common.RoundFloat( /*card.TOpsAtFp16**/ card.CardHours, 3) if cardHours > maxCurrentCardHours { maxCurrentCardHours = cardHours } @@ -64,6 +64,8 @@ func (ps *DynamicResourcesStrategy) Schedule() ([]*AssignedCluster, error) { } results = append(results, &assignedCluster) return results, nil + case option.CLOUD: + } return nil, errors.New("failed to apply DynamicResourcesStrategy") diff --git a/api/internal/storeLink/octopus.go b/api/internal/storeLink/octopus.go index 2422ada3..18d6c3e1 100644 --- a/api/internal/storeLink/octopus.go +++ b/api/internal/storeLink/octopus.go @@ -20,8 +20,8 @@ import ( "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/schedulers/option" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/service/collector" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils" - "gitlink.org.cn/jcce-pcm/pcm-participant-octopus/octopus" - "gitlink.org.cn/jcce-pcm/pcm-participant-octopus/octopusclient" + "gitlink.org.cn/JointCloud/pcm-octopus/octopus" + "gitlink.org.cn/JointCloud/pcm-octopus/octopusclient" "math" "strconv" "strings" diff --git a/api/internal/storeLink/shuguangHpc.go b/api/internal/storeLink/shuguangHpc.go index d5ffc8ec..9b16401f 100644 --- a/api/internal/storeLink/shuguangHpc.go +++ b/api/internal/storeLink/shuguangHpc.go @@ -4,10 +4,10 @@ import ( "context" "errors" "fmt" + "gitlink.org.cn/JointCloud/pcm-ac/hpcAC" + "gitlink.org.cn/JointCloud/pcm-ac/hpcacclient" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils" - "gitlink.org.cn/jcce-pcm/pcm-ac/hpcAC" - "gitlink.org.cn/jcce-pcm/pcm-ac/hpcacclient" "strconv" "strings" ) diff --git a/api/internal/storeLink/shuguangai.go b/api/internal/storeLink/shuguangai.go index e7da3222..fd9c6245 100644 --- a/api/internal/storeLink/shuguangai.go +++ b/api/internal/storeLink/shuguangai.go @@ -17,13 +17,13 @@ package storeLink import ( "context" "errors" + "gitlink.org.cn/JointCloud/pcm-ac/hpcAC" + "gitlink.org.cn/JointCloud/pcm-ac/hpcacclient" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/common" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/schedulers/option" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/service/collector" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils" - "gitlink.org.cn/jcce-pcm/pcm-ac/hpcAC" - "gitlink.org.cn/jcce-pcm/pcm-ac/hpcacclient" "strconv" "strings" ) @@ -284,14 +284,14 @@ func (s *ShuguangAi) GetResourceStats(ctx context.Context) (*collector.ResourceS totalDcu := limitResp.Data.AccountMaxDcu //disk - diskReq := &hpcAC.ParaStorQuotaReq{} - diskResp, err := s.aCRpc.ParaStorQuota(ctx, diskReq) - if err != nil { - return nil, err - } - - totalDisk := common.RoundFloat(diskResp.Data[0].Threshold*KB*KB*KB, 3) - availDisk := common.RoundFloat((diskResp.Data[0].Threshold-diskResp.Data[0].Usage)*KB*KB*KB, 3) + //diskReq := &hpcAC.ParaStorQuotaReq{} + //diskResp, err := s.aCRpc.ParaStorQuota(ctx, diskReq) + //if err != nil { + // return nil, err + //} + // + //totalDisk := common.RoundFloat(diskResp.Data[0].Threshold*KB*KB*KB, 3) + //availDisk := common.RoundFloat((diskResp.Data[0].Threshold-diskResp.Data[0].Usage)*KB*KB*KB, 3) //memory nodeResp, err := s.aCRpc.GetNodeResources(ctx, nil) @@ -349,12 +349,12 @@ func (s *ShuguangAi) GetResourceStats(ctx context.Context) (*collector.ResourceS Balance: balance, CpuCoreTotal: totalCpu, CpuCoreAvail: CpuCoreAvail, - DiskTotal: totalDisk, - DiskAvail: availDisk, - MemTotal: memSize, - MemAvail: MemAvail, - CpuCoreHours: cpuHours, - CardsAvail: cards, + //DiskTotal: totalDisk, + //DiskAvail: availDisk, + MemTotal: memSize, + MemAvail: MemAvail, + CpuCoreHours: cpuHours, + CardsAvail: cards, } return resourceStats, nil @@ -381,7 +381,7 @@ func (s *ShuguangAi) GetAlgorithms(ctx context.Context) ([]*collector.Algorithm, var algorithms []*collector.Algorithm for _, t := range GetTaskTypes() { taskType := t - req := &hpcAC.GetFileListReq{Limit: 100, Path: ALGORITHM_DIR + FORWARD_SLASH + taskType, Start: 0} + req := &hpcAC.GetFileListReq{Limit: 100, Path: ALGORITHM_DIR + FORWARD_SLASH + taskType, Start: 0, Order: "asc", OrderBy: "name", KeyWord: ""} list, err := s.aCRpc.GetFileList(ctx, req) if err != nil { return nil, err diff --git a/api/internal/storeLink/storeLink.go b/api/internal/storeLink/storeLink.go index ce00a540..87ca2ff8 100644 --- a/api/internal/storeLink/storeLink.go +++ b/api/internal/storeLink/storeLink.go @@ -17,18 +17,18 @@ package storeLink import ( "context" "github.com/pkg/errors" + "gitlink.org.cn/JointCloud/pcm-ac/hpcAC" + "gitlink.org.cn/JointCloud/pcm-ac/hpcacclient" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/common" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/service/collector" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils/timeutils" - "gitlink.org.cn/jcce-pcm/pcm-ac/hpcAC" - "gitlink.org.cn/jcce-pcm/pcm-ac/hpcacclient" + "gitlink.org.cn/JointCloud/pcm-octopus/octopus" + "gitlink.org.cn/JointCloud/pcm-octopus/octopusclient" "gitlink.org.cn/jcce-pcm/pcm-participant-modelarts/client/imagesservice" "gitlink.org.cn/jcce-pcm/pcm-participant-modelarts/client/modelartsservice" "gitlink.org.cn/jcce-pcm/pcm-participant-modelarts/modelarts" - "gitlink.org.cn/jcce-pcm/pcm-participant-octopus/octopus" - "gitlink.org.cn/jcce-pcm/pcm-participant-octopus/octopusclient" "gorm.io/gorm" "strings" "sync" @@ -370,6 +370,9 @@ func ConvertType(in interface{}, out interface{}, participant *models.StorelinkC resp.TaskId = inresp.Payload.JobId + return resp, nil + case *types.ScheduleResp: + resp := (interface{})(out).(*types.ScheduleResp) return resp, nil } return nil, nil @@ -404,6 +407,9 @@ func ConvertType(in interface{}, out interface{}, participant *models.StorelinkC resp.ErrorMsg = inresp.Msg } return resp, nil + case *types.ScheduleResp: + resp := (interface{})(out).(*types.ScheduleResp) + return resp, nil } return nil, nil diff --git a/api/internal/svc/servicecontext.go b/api/internal/svc/servicecontext.go index 4bec99a7..ee6fc50f 100644 --- a/api/internal/svc/servicecontext.go +++ b/api/internal/svc/servicecontext.go @@ -21,6 +21,7 @@ import ( "github.com/robfig/cron/v3" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/zrpc" + "gitlink.org.cn/JointCloud/pcm-ac/hpcacclient" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/config" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/database" @@ -29,13 +30,12 @@ import ( "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils" "gitlink.org.cn/JointCloud/pcm-coordinator/rpc/client/participantservice" "gitlink.org.cn/JointCloud/pcm-kubernetes/kubernetesclient" + "gitlink.org.cn/JointCloud/pcm-octopus/octopusclient" "gitlink.org.cn/JointCloud/pcm-openstack/openstackclient" slurmClient "gitlink.org.cn/JointCloud/pcm-slurm/slurmclient" - "gitlink.org.cn/jcce-pcm/pcm-ac/hpcacclient" "gitlink.org.cn/jcce-pcm/pcm-participant-ceph/cephclient" "gitlink.org.cn/jcce-pcm/pcm-participant-modelarts/client/imagesservice" "gitlink.org.cn/jcce-pcm/pcm-participant-modelarts/client/modelartsservice" - "gitlink.org.cn/jcce-pcm/pcm-participant-octopus/octopusclient" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" @@ -120,8 +120,8 @@ func NewServiceContext(c config.Config) *ServiceContext { aCRpc := hpcacclient.NewHpcAC(zrpc.MustNewClient(c.ACRpcConf)) modelArtsRpc := modelartsservice.NewModelArtsService(zrpc.MustNewClient(c.ModelArtsRpcConf)) modelArtsImgRpc := imagesservice.NewImagesService(zrpc.MustNewClient(c.ModelArtsImgRpcConf)) - aiExecutor, resourceCollector := service.InitAiClusterMap(octopusRpc, modelArtsRpc, modelArtsImgRpc, aCRpc) storage := &database.AiStorage{DbEngin: dbEngin} + aiExecutor, resourceCollector := service.InitAiClusterMap(octopusRpc, modelArtsRpc, modelArtsImgRpc, aCRpc, storage) scheduler := scheduler.NewSchdlr(resourceCollector, storage, aiExecutor) return &ServiceContext{ diff --git a/api/internal/types/types.go b/api/internal/types/types.go index 9406bc6b..83ab8d30 100644 --- a/api/internal/types/types.go +++ b/api/internal/types/types.go @@ -32,7 +32,6 @@ type RemoteResp struct { } type ClustersLoadReq struct { - AdapterId int64 `form:"adapterId"` ClusterName string `form:"clusterName"` } @@ -138,6 +137,8 @@ type CommitVmTaskReq struct { MatchLabels map[string]string `json:"matchLabels,optional"` Servers []ServerCommit `json:"servers,optional"` Platform string `json:"platform,optional"` + AdapterId string `json:"adapterId,optional"` + ClusterType string `json:"clusterType,optional"` } type ServerCommit struct { @@ -167,7 +168,9 @@ type Block_device_mapping_v2Commit struct { } type CommitVmTaskResp struct { - VmTask []VmTask `json:"vmTask" copier:"VmTask"` + TaskId int64 `json:"taskId"` + Code int32 `json:"code"` + Msg string `json:"msg"` } type VmTask struct { @@ -808,7 +811,6 @@ type DictItemInfo struct { ItemValue string `json:"itemValue,omitempty"` Description string `json:"description,omitempty"` SortOrder string `json:"sortOrder,omitempty"` - Type string `json:"type,omitempty" db:"type"` ParentId string `json:"parentId,omitempty"` Status string `json:"status,omitempty" db:"status"` CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"` @@ -834,7 +836,6 @@ type DictItemEditReq struct { ItemValue string `json:"itemValue,optional"` Description string `json:"description,optional"` SortOrder string `json:"sortOrder,optional"` - Type string `json:"type,optional"` ParentId string `json:"parentId,optional"` Status string `json:"status,optional"` } @@ -846,7 +847,6 @@ type DictItemResp struct { ItemValue string `json:"itemValue,omitempty"` Description string `json:"description,omitempty"` SortOrder string `json:"sortOrder,omitempty"` - Type string `json:"type,omitempty"` ParentId string `json:"parentId,omitempty"` Status string `json:"status,omitempty"` CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"` @@ -2712,6 +2712,23 @@ type GetVolumeLimitsResp struct { ErrorMsg string `json:"errorMsg,omitempty"` } +type OpenstackOverviewReq struct { + Platform string `form:"platform,optional"` +} + +type OpenstackOverviewResp struct { + Data OpenstackOverview `json:"data"` + Code int32 `json:"code,omitempty"` + Msg string `json:"msg,omitempty"` + ErrorMsg string `json:"errorMsg,omitempty"` +} + +type OpenstackOverview struct { + Max_total_cores int32 `json:"max_total_cores"` + Max_total_ram_size int32 `json:"max_total_ram_size"` + Max_total_volumes int32 `json:"max_total_volumes"` +} + type ListServersReq struct { Limit int32 `form:"limit,optional"` OffSet int32 `form:"offSet,optional"` @@ -2755,18 +2772,20 @@ type ListServersDetailedResp struct { } type ServersDetailed struct { - Id string `json:"Id" copier:"Id"` - Name string `json:"Name" copier:"Name"` - OSTaskState uint32 `json:"OSTaskState" copier:"OSTaskState"` - Status string `json:"Status" copier:"Status"` - VmState string `json:"VmState" copier:"VmState"` - OS_EXT_SRV_ATTR_Instance_Name string `json:"OS_EXT_SRV_ATTR_Instance_Name" copier:"OS_EXT_SRV_ATTR_Instance_Name"` - Created string `json:"Created" copier:"Created"` - HostId string `json:"HostId" copier:"HostId"` - Ip string `json:"Ip" copier:"Ip"` - Image string `json:"Image" copier:"Image"` - Updated string `json:"Updated" copier:"Updated"` - Flavor string `json:"Flavor" copier:"Flavor"` + Id string `json:"id" copier:"Id"` + Name string `json:"name" copier:"Name"` + OSTaskState uint32 `json:"os_task_state" copier:"OSTaskState"` + Status string `json:"status" copier:"Status"` + VmState string `json:"vm_state" copier:"VmState"` + OS_EXT_SRV_ATTR_Instance_Name string `json:"os_ext_srv_attr_instance_name" copier:"OS_EXT_SRV_ATTR_Instance_Name"` + Created string `json:"created" copier:"Created"` + HostId string `json:"hostId" copier:"HostId"` + Ip string `json:"ip" copier:"Ip"` + Image string `json:"image" copier:"Image"` + Updated string `json:"updated" copier:"Updated"` + Flavor string `json:"flavor" copier:"Flavor"` + Key_name string `json:"key_name" copier:"Key_name"` + Survival_time int32 `json:"survival_time" copier:"Survival_time"` } type GetServersDetailedByIdReq struct { @@ -3003,6 +3022,44 @@ type ServerResp struct { AdminPass string `json:"adminPass" copier:"AdminPass"` } +type CreateMulServerReq struct { + CreateMulServer []CreateMulServer `json:"createMulServer,optional"` +} + +type CreateMulServer struct { + Platform string `json:"platform,optional"` + CrServer MulCrServer `json:"crserver" copier:"CrServer"` +} + +type MulCrServer struct { + Server MulServer `json:"server" copier:"Server"` +} + +type MulServer struct { + AvailabilityZone string `json:"availability_zone" copier:"AvailabilityZone"` + Name string `json:"name,optional" copier:"Name"` + FlavorRef string `json:"flavorRef,optional" copier:"FlavorRef"` + Description string `json:"description,optional" copier:"Description"` + ImageRef string `json:"imageRef,optional" copier:"ImageRef"` + Networks []CreNetwork `json:"networks,optional" copier:"Networks"` + MinCount int32 `json:"min_count,optional" copier:"MinCount"` +} + +type CreateMulServerResp struct { + Server []MulServerResp `json:"server" copier:"Server"` + Code int32 `json:"code,omitempty"` + Msg string `json:"msg,omitempty"` + ErrorMsg string `json:"errorMsg,omitempty"` +} + +type MulServerResp struct { + Id string `json:"id" copier:"Id"` + Links []Links `json:"links" copier:"Links"` + OSDCFDiskConfig string `json:"OS_DCF_diskConfig" copier:"OSDCFDiskConfig"` + SecurityGroups []Security_groups_server `json:"security_groups" copier:"SecurityGroups"` + AdminPass string `json:"adminPass" copier:"AdminPass"` +} + type RebuildServerReq struct { ServerId string `json:"server_id" copier:"ServerId"` Platform string `form:"platform,optional"` @@ -5246,8 +5303,14 @@ type ScheduleReq struct { } type ScheduleResp struct { - Success bool `json:"success"` - ErrorMsg string `json:"errorMsg"` + Results []*ScheduleResult `json:"results"` +} + +type ScheduleResult struct { + ClusterId string `json:"clusterId"` + TaskId string `json:"taskId"` + Replica int32 `json:"replica"` + Msg string `json:"msg"` } type AiOption struct { @@ -5282,9 +5345,9 @@ type AiStrategyResp struct { } type AiAlgorithmsReq struct { - ResourceType string `json:"resourceType"` - TaskType string `json:"taskType"` - Dataset string `json:"dataset"` + ResourceType string `path:"resourceType"` + TaskType string `path:"taskType"` + Dataset string `path:"dataset"` } type AiAlgorithmsResp struct { @@ -5409,12 +5472,37 @@ type PushResourceInfoReq struct { } type CreateAlertRuleReq struct { - ClusterName string `json:"clusterName"` - Namespace string `json:"namespace"` - Name string `json:"name"` - PromQL string `json:"PromQL"` - Duration string `json:"duration"` - Labels map[string]string `json:"labels"` - Annotations map[string]string `json:"annotations"` - AlertLevel string `json:"alertLevel"` + CLusterId int64 `json:"clusterId"` + ClusterName string `json:"clusterName"` + Name string `json:"name"` + PromQL string `json:"promQL"` + Duration string `json:"duration"` + Annotations string `json:"annotations,optional"` + AlertLevel string `json:"alertLevel"` + AlertType string `json:"alertType"` +} + +type AlertRulesResp struct { + AlertRules []AlertRule `json:"alertRules"` +} + +type AlertRule struct { + Id int64 `json:"id"` + ClusterName string `json:"clusterName"` + Name string `json:"name"` + PromQL string `json:"promQL"` + Duration string `json:"duration"` + Annotations string `json:"annotations"` + AlertLevel string `json:"alertLevel"` +} + +type NodesLoadTopReq struct { + ClusterName string `form:"clusterName"` + Metrics string `form:"metrics"` +} + +type NodesLoadTopResp struct { + Code int `json:"code"` + Data interface{} `json:"data"` + Msg string `json:"msg"` } diff --git a/go.mod b/go.mod index 1717af8a..b6422d1c 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,6 @@ module gitlink.org.cn/JointCloud/pcm-coordinator -go 1.22 - -toolchain go1.22.1 +go 1.21 require ( github.com/JCCE-nudt/zero-contrib/zrpc/registry/nacos v0.0.0-20230419021610-13bbc83fbc3c @@ -15,25 +13,25 @@ require ( github.com/go-sql-driver/mysql v1.7.1 github.com/jinzhu/copier v0.4.0 github.com/json-iterator/go v1.1.12 - github.com/nacos-group/nacos-sdk-go/v2 v2.2.4 + github.com/nacos-group/nacos-sdk-go/v2 v2.2.5 github.com/pkg/errors v0.9.1 github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.71.2 github.com/prometheus/alertmanager v0.27.0 github.com/prometheus/client_golang v1.19.0 - github.com/prometheus/common v0.51.1 + github.com/prometheus/common v0.52.2 github.com/robfig/cron/v3 v3.0.1 github.com/rs/zerolog v1.28.0 github.com/zeromicro/go-zero v1.6.3 + gitlink.org.cn/JointCloud/pcm-ac v0.0.0-20240407112649-e479e74b58c8 gitlink.org.cn/JointCloud/pcm-kubernetes v0.0.0-20240301071143-347480abff2c - gitlink.org.cn/JointCloud/pcm-openstack v0.0.0-20240401022404-2f1425735f0d + gitlink.org.cn/JointCloud/pcm-octopus v0.0.0-20240407105727-38e45468eaa8 + gitlink.org.cn/JointCloud/pcm-openstack v0.0.0-20240403033338-e7edabad4203 gitlink.org.cn/JointCloud/pcm-slurm v0.0.0-20240301080743-8b94bbaf57f5 - gitlink.org.cn/jcce-pcm/pcm-ac v0.0.0-20240301085553-f6ad88fa357a gitlink.org.cn/jcce-pcm/pcm-participant-ceph v0.0.0-20230904090036-24fc730ec87d gitlink.org.cn/jcce-pcm/pcm-participant-modelarts v0.0.0-20231101085149-724c7c4cc090 - gitlink.org.cn/jcce-pcm/pcm-participant-octopus v0.0.0-20240222124813-e275cfa342f4 - go.opentelemetry.io/otel/trace v1.24.0 + go.opentelemetry.io/otel/trace v1.25.0 gonum.org/v1/gonum v0.11.0 - google.golang.org/grpc v1.62.1 + google.golang.org/grpc v1.63.0 google.golang.org/protobuf v1.33.0 gorm.io/datatypes v1.2.0 gorm.io/driver/mysql v1.5.2 @@ -58,7 +56,7 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/coreos/go-semver v0.3.1 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -124,7 +122,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/openzipkin/zipkin-go v0.4.2 // indirect github.com/pelletier/go-toml/v2 v2.2.0 // indirect - github.com/prometheus/client_model v0.6.0 // indirect + github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common/sigv4 v0.1.0 // indirect github.com/prometheus/exporter-toolkit v0.11.0 // indirect github.com/prometheus/procfs v0.13.0 // indirect @@ -139,33 +137,32 @@ require ( go.etcd.io/etcd/client/pkg/v3 v3.5.13 // indirect go.etcd.io/etcd/client/v3 v3.5.13 // indirect go.mongodb.org/mongo-driver v1.13.1 // indirect - go.opentelemetry.io/otel v1.24.0 // indirect + go.opentelemetry.io/otel v1.25.0 // indirect go.opentelemetry.io/otel/exporters/jaeger v1.17.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0 // indirect - go.opentelemetry.io/otel/exporters/zipkin v1.24.0 // indirect - go.opentelemetry.io/otel/metric v1.24.0 // indirect - go.opentelemetry.io/otel/sdk v1.24.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 // indirect + go.opentelemetry.io/otel/exporters/zipkin v1.25.0 // indirect + go.opentelemetry.io/otel/metric v1.25.0 // indirect + go.opentelemetry.io/otel/sdk v1.25.0 // indirect go.opentelemetry.io/proto/otlp v1.1.0 // indirect go.uber.org/automaxprocs v1.5.3 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/crypto v0.21.0 // indirect + golang.org/x/crypto v0.22.0 // indirect golang.org/x/exp v0.0.0-20240119083558-1b970713d09a // indirect golang.org/x/mod v0.15.0 // indirect - golang.org/x/net v0.22.0 // indirect - golang.org/x/oauth2 v0.18.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/oauth2 v0.19.0 // indirect golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/term v0.18.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/term v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.18.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240401170217-c3f982113cda // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect @@ -173,7 +170,7 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/api v0.29.3 // indirect k8s.io/klog/v2 v2.120.1 // indirect - k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940 // indirect + k8s.io/kube-openapi v0.0.0-20240403164606-bc84c2ddaf99 // indirect k8s.io/utils v0.0.0-20240310230437-4693a0247e57 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect diff --git a/go.sum b/go.sum index d00af510..cdd78495 100644 --- a/go.sum +++ b/go.sum @@ -467,8 +467,9 @@ github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -889,8 +890,8 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nacos-group/nacos-sdk-go/v2 v2.2.1/go.mod h1:ys/1adWeKXXzbNWfRNbaFlX/t6HVLWdpsNDvmoWTw0g= -github.com/nacos-group/nacos-sdk-go/v2 v2.2.4 h1:t3Eoz3ySvKrm7p2WMfWYciCF87UEdLac64CZKFlC0BA= -github.com/nacos-group/nacos-sdk-go/v2 v2.2.4/go.mod h1:Q9qY/WK+kxTKK7cNoxMkdkKcD7BLBgTmwQ1jmThgGK8= +github.com/nacos-group/nacos-sdk-go/v2 v2.2.5 h1:r0wwT7PayEjvEHzWXwr1ROi/JSqzujM4w+1L5ikThzQ= +github.com/nacos-group/nacos-sdk-go/v2 v2.2.5/go.mod h1:OObBon0prVJVPoIbSZxpEkFiBfL0d1LcBtuAMiNn+8c= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -972,8 +973,8 @@ github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1: github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos= -github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= @@ -981,8 +982,8 @@ github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9 github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/common v0.51.1 h1:eIjN50Bwglz6a/c3hAgSMcofL3nD+nFQkV6Dd4DsQCw= -github.com/prometheus/common v0.51.1/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= +github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck= +github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4= github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI= github.com/prometheus/exporter-toolkit v0.11.0 h1:yNTsuZ0aNCNFQ3aFTD2uhPOvr4iD7fdBvKPAEGkNf+g= @@ -1077,20 +1078,20 @@ github.com/yuin/gopher-lua v1.1.0/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7 github.com/zeromicro/go-zero v1.5.1/go.mod h1:bGYm4XWsGN9GhDsO2O2BngpVoWjf3Eog2a5hUOMhlXs= github.com/zeromicro/go-zero v1.6.3 h1:OL0NnHD5LdRNDolfcK9vUkJt7K8TcBE3RkzfM8poOVw= github.com/zeromicro/go-zero v1.6.3/go.mod h1:XZL435ZxVi9MSXXtw2MRQhHgx6OoX3++MRMOE9xU70c= +gitlink.org.cn/JointCloud/pcm-ac v0.0.0-20240407112649-e479e74b58c8 h1:cX6U2gUcp/sIP3TKFv4q/1O8gp10q+M3k5Ql15yaEMI= +gitlink.org.cn/JointCloud/pcm-ac v0.0.0-20240407112649-e479e74b58c8/go.mod h1:w3Nb5TNymCItQ7K3x4Q0JLuoq9OerwAzAWT2zsPE9Xo= gitlink.org.cn/JointCloud/pcm-kubernetes v0.0.0-20240301071143-347480abff2c h1:2Wl/hvaSFjh6fmCSIQhjkr9llMRREQeqcXNLZ/HPY18= gitlink.org.cn/JointCloud/pcm-kubernetes v0.0.0-20240301071143-347480abff2c/go.mod h1:lSRfGs+PxFvw7CcndHWRd6UlLlGrZn0b0hp5cfaMNGw= -gitlink.org.cn/JointCloud/pcm-openstack v0.0.0-20240401022404-2f1425735f0d h1:ZX/Kg8eKdaAfDsTd+Y+TrJsUvxp/DpbWUp+Ij4CtR+s= -gitlink.org.cn/JointCloud/pcm-openstack v0.0.0-20240401022404-2f1425735f0d/go.mod h1:i2rrbMQ+Fve345BY9Heh4MUqVTAimZQElQhzzRee5B8= +gitlink.org.cn/JointCloud/pcm-octopus v0.0.0-20240407105727-38e45468eaa8 h1:jdwYydJxYPlfIS9yZvnNX1w08aJGYWq5ADD5EXLW3+Q= +gitlink.org.cn/JointCloud/pcm-octopus v0.0.0-20240407105727-38e45468eaa8/go.mod h1:QOD5+/l2D+AYBjF2h5T0mdJyfGAmF78QmeKdbBXbjLQ= +gitlink.org.cn/JointCloud/pcm-openstack v0.0.0-20240403033338-e7edabad4203 h1:s6PsZ1+bev294IWdZRlV7mnOwI1+UzFcldVW/BqhQzI= +gitlink.org.cn/JointCloud/pcm-openstack v0.0.0-20240403033338-e7edabad4203/go.mod h1:i2rrbMQ+Fve345BY9Heh4MUqVTAimZQElQhzzRee5B8= gitlink.org.cn/JointCloud/pcm-slurm v0.0.0-20240301080743-8b94bbaf57f5 h1:+/5vnzkJBfMRnya1NrhOzlroUtRa5ePiYbPKlHLoLV0= gitlink.org.cn/JointCloud/pcm-slurm v0.0.0-20240301080743-8b94bbaf57f5/go.mod h1:97AlUXN13g9UN3+9/DzCHpeoU5sbdyv0IQuTEHNexzQ= -gitlink.org.cn/jcce-pcm/pcm-ac v0.0.0-20240301085553-f6ad88fa357a h1:fY1KmyZ6O7wVBvgt2HB+C9e1DncJdk/Wkv8m5Qz7abw= -gitlink.org.cn/jcce-pcm/pcm-ac v0.0.0-20240301085553-f6ad88fa357a/go.mod h1:oMaWf5sEDFKTfCbIlT6/7IFI3f6PsuiRnWzzQruSF5Q= gitlink.org.cn/jcce-pcm/pcm-participant-ceph v0.0.0-20230904090036-24fc730ec87d h1:DHjl/rLuH2gKYtY0MKMGNQDHFT12APg25RlMUQo+tHk= gitlink.org.cn/jcce-pcm/pcm-participant-ceph v0.0.0-20230904090036-24fc730ec87d/go.mod h1:r/KLzUpupCV5jdxSfgDhc2pVjP0fBi3VhAWRttsBn30= gitlink.org.cn/jcce-pcm/pcm-participant-modelarts v0.0.0-20231101085149-724c7c4cc090 h1:jztlHo72bcWM1jUwvG3Hfk2K+AJL0RvlsdIqlktH/MI= gitlink.org.cn/jcce-pcm/pcm-participant-modelarts v0.0.0-20231101085149-724c7c4cc090/go.mod h1:pisJKAI8FRFFUcBaH3Gob+ENXWRM97rpuYmv9s1raag= -gitlink.org.cn/jcce-pcm/pcm-participant-octopus v0.0.0-20240222124813-e275cfa342f4 h1:NrxKAZ5uAzshB9EHcPw+XTOTzpxb5HslNRMYBrFC1Qo= -gitlink.org.cn/jcce-pcm/pcm-participant-octopus v0.0.0-20240222124813-e275cfa342f4/go.mod h1:uyvpVqG1jHDXX+ubXI0RBwnWXzVykD/mliqGQIDvRoo= go.etcd.io/etcd/api/v3 v3.5.7/go.mod h1:9qew1gCdDDLu+VwmeG+iFpL+QlpHTo7iubavdVDgCAA= go.etcd.io/etcd/api/v3 v3.5.13 h1:8WXU2/NBge6AUF1K1gOexB6e07NgsN1hXK0rSTtgSp4= go.etcd.io/etcd/api/v3 v3.5.13/go.mod h1:gBqlqkcMMZMVTMm4NDZloEVJzxQOQIls8splbqBDa0c= @@ -1112,34 +1113,34 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= -go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= -go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k= +go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg= go.opentelemetry.io/otel/exporters/jaeger v1.14.0/go.mod h1:4Ay9kk5vELRrbg5z4cpP9EtmQRFap2Wb0woPG4lujZA= go.opentelemetry.io/otel/exporters/jaeger v1.17.0 h1:D7UpUy2Xc2wsi1Ras6V40q806WM07rqoCWzXu7Sqy+4= go.opentelemetry.io/otel/exporters/jaeger v1.17.0/go.mod h1:nPCqOnEH9rNLKqH/+rrUjiMzHJdV1BlpKcTwRTyKkKI= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.14.0/go.mod h1:UFG7EBMRdXyFstOwH028U0sVf+AvukSGhF0g8+dmNG8= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0/go.mod h1:HrbCVv40OOLTABmOn1ZWty6CHXkU8DK/Urc43tHug70= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 h1:t6wl9SPayj+c7lEIFgm4ooDBZVb01IhLB4InpomhRw8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0/go.mod h1:iSDOcsnSA5INXzZtwaBPrKp/lWu/V14Dd+llD0oI2EA= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0/go.mod h1:5w41DY6S9gZrbjuq6Y+753e96WfPha5IcsOSZTtullM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0 h1:Mw5xcxMwlqoJd97vwPxA8isEaIoxsta9/Q51+TTJLGE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0/go.mod h1:CQNu9bj7o7mC6U7+CA/schKEYakYXWr79ucDHTMGhCM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.14.0/go.mod h1:+N7zNjIJv4K+DeX67XXET0P+eIciESgaFDBqh+ZJFS4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 h1:Xw8U6u2f8DK2XAkGRFV7BBLENgnTGX9i4rQRxJf+/vs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0/go.mod h1:6KW1Fm6R/s6Z3PGXwSJN2K4eT6wQB3vXX6CVnYX9NmM= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0 h1:s0PHtIkN+3xrbDOpt2M8OTG92cWqUESvzh2MxiR5xY8= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0/go.mod h1:hZlFbDbRt++MMPCCfSJfmhkGIWnX1h3XjkfxZUjLrIA= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 h1:0vZZdECYzhTt9MKQZ5qQ0V+J3MFu4MQaQ3COfugF+FQ= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0/go.mod h1:e7iXx3HjaSSBXfy9ykVUlupS2Vp7LBIBuT21ousM2Hk= go.opentelemetry.io/otel/exporters/zipkin v1.14.0/go.mod h1:RcjvOAcvhzcufQP8aHmzRw1gE9g/VEZufDdo2w+s4sk= -go.opentelemetry.io/otel/exporters/zipkin v1.24.0 h1:3evrL5poBuh1KF51D9gO/S+N/1msnm4DaBqs/rpXUqY= -go.opentelemetry.io/otel/exporters/zipkin v1.24.0/go.mod h1:0EHgD8R0+8yRhUYJOGR8Hfg2dpiJQxDOszd5smVO9wM= -go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= -go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/exporters/zipkin v1.25.0 h1:iLzdsOsstvim/54ymA2BhEN4+1NbsvwGvOhSkQy2TaY= +go.opentelemetry.io/otel/exporters/zipkin v1.25.0/go.mod h1:3QXxNo6ace1QZX6pSHEzGKKESVdjQxXR03FcIH7dNGs= +go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA= +go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s= go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM= -go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw= -go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= +go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo= +go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw= go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8= -go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= -go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM= +go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= @@ -1184,8 +1185,9 @@ golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1303,8 +1305,9 @@ golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1332,8 +1335,8 @@ golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= -golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= +golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg= +golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1452,8 +1455,9 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1466,8 +1470,9 @@ golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= +golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1628,8 +1633,6 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1745,10 +1748,10 @@ google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614G google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa h1:Jt1XW5PaLXF1/ePZrznsh/aAUvI7Adfc3LY1dAKlzRs= -google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa/go.mod h1:K4kfzHtI0kqWA79gecJarFtDn/Mls+GxQcg3Zox91Ac= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa h1:RBgMaUMP+6soRkik4VoN8ojR2nex2TqZwjSSogic+eo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/api v0.0.0-20240401170217-c3f982113cda h1:b6F6WIV4xHHD0FA4oIyzU6mHWg2WI2X1RBehwa5QN38= +google.golang.org/genproto/googleapis/api v0.0.0-20240401170217-c3f982113cda/go.mod h1:AHcE/gZH76Bk/ROZhQphlRoWo5xKDEtz3eVEO1LfA8c= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1789,8 +1792,8 @@ google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= -google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= -google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8= +google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1883,8 +1886,8 @@ k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= -k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940 h1:qVoMaQV5t62UUvHe16Q3eb2c5HPzLHYzsi0Tu/xLndo= -k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= +k8s.io/kube-openapi v0.0.0-20240403164606-bc84c2ddaf99 h1:w6nThEmGo9zcL+xH1Tu6pjxJ3K1jXFW+V0u4peqN8ks= +k8s.io/kube-openapi v0.0.0-20240403164606-bc84c2ddaf99/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= k8s.io/utils v0.0.0-20230115233650-391b47cb4029/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= diff --git a/pkg/models/alertrulemodel.go b/pkg/models/alertrulemodel.go new file mode 100644 index 00000000..b5e47bab --- /dev/null +++ b/pkg/models/alertrulemodel.go @@ -0,0 +1,18 @@ +package models + +import ( + "database/sql" +) + +type AlertRule struct { + Id int64 `db:"id"` // id + ClusterId int64 `db:"cluster_id"` + Name string `db:"name"` // 节点名称 + AlertType string `db:"alert_type"` // 节点类型 int64 `db:"cpu_total"` // cpu核数 + PromQL string `db:"prom_ql"` + Duration string `db:"duration"` + AlertLevel string `db:"alert_level"` + Annotations string `db:"annotations"` + CreatedBy sql.NullInt64 `db:"created_by"` // 创建人 + UpdatedBy sql.NullInt64 `db:"updated_by"` // 更新人 +} diff --git a/pkg/tracker/promql.go b/pkg/tracker/promql.go index 1dc07394..013c079f 100644 --- a/pkg/tracker/promql.go +++ b/pkg/tracker/promql.go @@ -19,32 +19,31 @@ import ( "strings" ) -const ( - StatefulSet = "StatefulSet" - DaemonSet = "DaemonSet" - Deployment = "Deployment" -) - var promQLTemplates = map[string]string{ - "cluster_cpu_utilisation": "cluster_cpu_utilisation{$1}", - "cluster_memory_utilisation": "cluster_memory_utilisation{$1}", - "cluster_disk_utilisation": "cluster_disk_utilisation{$1}", - "cluster_cpu_total": "cluster_cpu_total{$1}", - "cluster_memory_total": "cluster_memory_total{$1}", - "cluster_disk_total": "cluster_disk_total{$1}", - "cluster_cpu_avail": "cluster_cpu_total{$1}", - "cluster_memory_avail": "cluster_memory_total{$1}", - "cluster_disk_avail": "cluster_disk_total{$1}", - "center_cpu_utilisation": "(sum by (adapter_id)(cluster_cpu_total{$1})-sum by (adapter_id)(cluster_cpu_avail{$1}))/sum by (adapter_id)(cluster_cpu_total{$1})", - "center_memory_utilisation": "(sum by (adapter_id)(cluster_memory_total{$1})-sum by (adapter_id)(cluster_memory_avail{$1}))/sum by (adapter_id)(cluster_memory_total{$1})", - "center_disk_utilisation": "(sum by (adapter_id)(cluster_disk_total{$1})-sum by (adapter_id)(cluster_disk_avail{$1}))/sum by (adapter_id)(cluster_disk_total{$1})", - "center_top3": "topk(3,((sum by (adapter_id)(cluster_cpu_total)-sum by (adapter_id)(cluster_cpu_avail))/sum by (adapter_id)(cluster_cpu_total) + (sum by (adapter_id)(cluster_memory_total) - sum by (adapter_id)(cluster_memory_avail))/sum by (adapter_id)(cluster_memory_total) + (sum by (adapter_id)(cluster_disk_total)-sum by (adapter_id)(cluster_disk_avail))/sum by (adapter_id)(cluster_disk_total))/3)", + "cluster_cpu_utilisation": "cluster_cpu_utilisation{$1}", + "cluster_memory_utilisation": "cluster_memory_utilisation{$1}", + "cluster_disk_utilisation": "cluster_disk_utilisation{$1}", + "cluster_cpu_total": "cluster_cpu_total{$1}", + "cluster_memory_total": "cluster_memory_total{$1}", + "cluster_disk_total": "cluster_disk_total{$1}", + "cluster_cpu_avail": "cluster_cpu_total{$1}", + "cluster_memory_avail": "cluster_memory_total{$1}", + "cluster_disk_avail": "cluster_disk_total{$1}", + + // center + "center_cpu_utilisation": "(sum by (adapter_id)(cluster_cpu_total{$1})-sum by (adapter_id)(cluster_cpu_avail{$1}))/sum by (adapter_id)(cluster_cpu_total{$1})", + "center_memory_utilisation": "(sum by (adapter_id)(cluster_memory_total{$1})-sum by (adapter_id)(cluster_memory_avail{$1}))/sum by (adapter_id)(cluster_memory_total{$1})", + "center_disk_utilisation": "(sum by (adapter_id)(cluster_disk_total{$1})-sum by (adapter_id)(cluster_disk_avail{$1}))/sum by (adapter_id)(cluster_disk_total{$1})", + "center_top3": "topk(3,((sum by (adapter_id)(cluster_cpu_total)-sum by (adapter_id)(cluster_cpu_avail))/sum by (adapter_id)(cluster_cpu_total) + (sum by (adapter_id)(cluster_memory_total) - sum by (adapter_id)(cluster_memory_avail))/sum by (adapter_id)(cluster_memory_total) + (sum by (adapter_id)(cluster_disk_total)-sum by (adapter_id)(cluster_disk_avail))/sum by (adapter_id)(cluster_disk_total))/3)", + + // namespace "namespace_cpu_usage": `round(namespace:container_cpu_usage_seconds_total:sum_rate{namespace!="", $1}, 0.001)`, "namespace_memory_usage": `namespace:container_memory_usage_bytes:sum{namespace!="", $1}`, "namespace_memory_usage_wo_cache": `namespace:container_memory_usage_bytes_wo_cache:sum{namespace!="", $1}`, - "controller_cpu_usage_rate": `sum( node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{}* on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{$1}) by (workload)/sum( kube_pod_container_resource_limits{job="kube-state-metrics", resource="cpu"}* on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{ }) by (workload)`, - "controller_memory_usage_rate": `sum( container_memory_working_set_bytes{job="kubelet", metrics_path="/metrics/cadvisor", container!="", image!=""} * on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{$1}) by (workload)/sum( kube_pod_container_resource_limits{job="kube-state-metrics", resource="memory"}* on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{ }) by (workload)`, + // controller + "controller_cpu_usage_rate": `sum( node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{}* on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{$1}) by (workload)/sum( kube_pod_container_resource_limits{job="kube-state-metrics", resource="cpu"}* on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{ }) by (workload)`, + "controller_memory_usage_rate": `sum( container_memory_working_set_bytes{job="kubelet", metrics_path="/metrics/cadvisor", container!="", image!=""} * on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{$1}) by (workload)/sum( kube_pod_container_resource_limits{job="kube-state-metrics", resource="memory"}* on(namespace,pod) group_left(workload) namespace_workload_pod:kube_pod_owner:relabel{ }) by (workload)`, // pod "pod_cpu_usage": `round(sum by (namespace, pod) (irate(container_cpu_usage_seconds_total{job="kubelet", pod!="", image!=""}[5m])) * on (namespace, pod) group_left(owner_kind,owner_name) kube_pod_owner{$1} * on (namespace, pod) group_left(node) kube_pod_info{$2}, 0.001)`, "pod_cpu_usage_rate": `sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{ $1}) by (pod) / sum(kube_pod_container_resource_limits{ $1,unit="core"}) by (pod)`,