ocdp v1
This commit is contained in:
137
backend/internal/adapter/input/http/rest/monitoring_handler.go
Normal file
137
backend/internal/adapter/input/http/rest/monitoring_handler.go
Normal file
@ -0,0 +1,137 @@
|
||||
package rest
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/ocdp/cluster-service/internal/adapter/input/http/dto"
|
||||
"github.com/ocdp/cluster-service/internal/domain/service"
|
||||
)
|
||||
|
||||
// MonitoringHandler 监控处理器
|
||||
type MonitoringHandler struct {
|
||||
monitoringService *service.MonitoringService
|
||||
}
|
||||
|
||||
// NewMonitoringHandler 创建监控处理器
|
||||
func NewMonitoringHandler(monitoringService *service.MonitoringService) *MonitoringHandler {
|
||||
return &MonitoringHandler{
|
||||
monitoringService: monitoringService,
|
||||
}
|
||||
}
|
||||
|
||||
// GetClusterMonitoring 获取单个集群的监控信息
|
||||
// @Summary 获取集群监控
|
||||
// @Tags Monitoring
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param cluster_id path string true "集群 ID"
|
||||
// @Success 200 {object} dto.ClusterMetricsResponse
|
||||
// @Failure 500 {object} dto.ErrorResponse
|
||||
// @Router /monitoring/clusters/{cluster_id} [get]
|
||||
func (h *MonitoringHandler) GetClusterMonitoring(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
clusterID := vars["cluster_id"]
|
||||
|
||||
metrics, err := h.monitoringService.GetClusterMonitoring(r.Context(), clusterID)
|
||||
if err != nil {
|
||||
respondError(w, http.StatusInternalServerError, "MONITORING_ERROR", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response := dto.ToClusterMetricsResponse(metrics)
|
||||
respondJSON(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
// ListClusterMonitoring 获取所有集群的监控信息
|
||||
// @Summary 列出集群监控
|
||||
// @Tags Monitoring
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Success 200 {array} dto.ClusterMetricsResponse
|
||||
// @Failure 500 {object} dto.ErrorResponse
|
||||
// @Router /monitoring/clusters [get]
|
||||
func (h *MonitoringHandler) ListClusterMonitoring(w http.ResponseWriter, r *http.Request) {
|
||||
monitoringList, err := h.monitoringService.ListClusterMonitoring(r.Context())
|
||||
if err != nil {
|
||||
respondError(w, http.StatusInternalServerError, "MONITORING_ERROR", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// 转换为响应格式
|
||||
response := make([]*dto.ClusterMetricsResponse, len(monitoringList))
|
||||
for i, m := range monitoringList {
|
||||
response[i] = dto.ToClusterMetricsResponse(m)
|
||||
}
|
||||
|
||||
respondJSON(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
// GetMonitoringSummary 获取监控汇总信息
|
||||
// @Summary 获取监控汇总
|
||||
// @Tags Monitoring
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Success 200 {object} dto.MonitoringSummaryResponse
|
||||
// @Failure 500 {object} dto.ErrorResponse
|
||||
// @Router /monitoring/summary [get]
|
||||
func (h *MonitoringHandler) GetMonitoringSummary(w http.ResponseWriter, r *http.Request) {
|
||||
summary, err := h.monitoringService.GetMonitoringSummary(r.Context())
|
||||
if err != nil {
|
||||
respondError(w, http.StatusInternalServerError, "MONITORING_ERROR", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response := dto.ToMonitoringSummaryResponse(summary)
|
||||
respondJSON(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
// GetNodeMetrics 获取集群的节点指标
|
||||
// @Summary 获取节点指标
|
||||
// @Tags Monitoring
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param cluster_id path string true "集群 ID"
|
||||
// @Success 200 {array} dto.NodeMetricsResponse
|
||||
// @Failure 500 {object} dto.ErrorResponse
|
||||
// @Router /monitoring/clusters/{cluster_id}/nodes [get]
|
||||
func (h *MonitoringHandler) GetNodeMetrics(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
clusterID := vars["cluster_id"]
|
||||
|
||||
nodes, err := h.monitoringService.GetNodeMetrics(r.Context(), clusterID)
|
||||
if err != nil {
|
||||
respondError(w, http.StatusInternalServerError, "MONITORING_ERROR", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// 转换为响应格式
|
||||
response := make([]dto.NodeMetricsResponse, len(nodes))
|
||||
for i, node := range nodes {
|
||||
response[i] = dto.NodeMetricsResponse{
|
||||
NodeName: node.NodeName,
|
||||
Status: node.Status,
|
||||
Role: node.Role,
|
||||
Age: node.Age,
|
||||
PodCount: node.PodCount,
|
||||
CPUCapacity: node.CPUCapacity,
|
||||
CPUAllocatable: node.CPUAllocatable,
|
||||
CPUUsage: node.CPUUsage,
|
||||
CPUPercent: node.CPUPercent,
|
||||
MemoryCapacity: node.MemoryCapacity,
|
||||
MemoryAllocatable: node.MemoryAllocatable,
|
||||
MemoryUsage: node.MemoryUsage,
|
||||
MemoryPercent: node.MemoryPercent,
|
||||
GPUCapacity: node.GPUCapacity,
|
||||
GPUUsage: node.GPUUsage,
|
||||
GPUPercent: node.GPUPercent,
|
||||
GPUType: node.GPUType,
|
||||
OSImage: node.OSImage,
|
||||
KernelVersion: node.KernelVersion,
|
||||
ContainerRuntime: node.ContainerRuntime,
|
||||
KubeletVersion: node.KubeletVersion,
|
||||
}
|
||||
}
|
||||
|
||||
respondJSON(w, http.StatusOK, response)
|
||||
}
|
||||
Reference in New Issue
Block a user