提交 9122ed7b 编写于 作者: J jeff

refactor component status

Signed-off-by: Njeff <jeffzhang@yunify.com>
上级 9e7db667
......@@ -19,6 +19,8 @@ package components
import (
"net/http"
"github.com/golang/glog"
"github.com/emicklei/go-restful"
"kubesphere.io/kubesphere/pkg/constants"
......@@ -34,6 +36,24 @@ func Register(ws *restful.WebService, subPath string) {
Filter(route.RouteLogging)).
Consumes(restful.MIME_JSON, restful.MIME_XML).
Produces(restful.MIME_JSON)
ws.Route(ws.GET("/health").To(handleGetSystemHealthStatus).Filter(route.RouteLogging)).
Consumes(restful.MIME_JSON, restful.MIME_XML).
Produces(restful.MIME_JSON)
}
func handleGetSystemHealthStatus(request *restful.Request, response *restful.Response) {
if status, err := models.GetSystemHealthStatus(); err != nil {
err = response.WriteHeaderAndEntity(http.StatusInternalServerError, constants.MessageResponse{Message: err.Error()})
if err != nil {
glog.Errorln(err)
}
} else {
err = response.WriteAsJson(status)
if err != nil {
glog.Errorln(err)
}
}
}
// get a specific component status
......@@ -42,9 +62,14 @@ func handleGetComponentStatus(request *restful.Request, response *restful.Respon
componentName := request.PathParameter("componentName")
if component, err := models.GetComponentStatus(namespace, componentName); err != nil {
response.WriteHeaderAndEntity(http.StatusInternalServerError, constants.MessageResponse{Message: err.Error()})
err = response.WriteHeaderAndEntity(http.StatusInternalServerError, constants.MessageResponse{Message: err.Error()})
if err != nil {
glog.Errorln(err)
}
} else {
response.WriteAsJson(component)
if err = response.WriteAsJson(component); err != nil {
glog.Errorln(err)
}
}
}
......
......@@ -19,6 +19,11 @@ package models
import (
"time"
v13 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1"
"kubesphere.io/kubesphere/pkg/client"
v12 "k8s.io/client-go/listers/core/v1"
"kubesphere.io/kubesphere/pkg/models/controllers"
......@@ -98,6 +103,68 @@ func GetComponentStatus(namespace string, componentName string) (interface{}, er
}
func GetSystemHealthStatus() (map[string]interface{}, error) {
status := make(map[string]interface{})
k8sClient := client.NewK8sClient()
csList, err := k8sClient.Core().ComponentStatuses().List(v1.ListOptions{})
if err != nil {
glog.Errorln(err)
return nil, err
}
for _, cs := range csList.Items {
status[cs.Name] = cs.Conditions[0]
}
// get kubesphere-system components
systemComponentStatus, err := GetAllComponentsStatus()
if err != nil {
glog.Errorln(err)
}
for k, v := range systemComponentStatus {
status[k] = v
}
// get node status
lister, err := controllers.GetLister(controllers.Nodes)
if err != nil {
glog.Errorln(err)
return status, nil
}
nodeLister := lister.(v12.NodeLister)
nodes, err := nodeLister.List(labels.Everything())
if err != nil {
glog.Errorln(err)
return status, nil
}
nodeStatus := make(map[string]int)
totalNodes := 0
healthyNodes := 0
for _, nodes := range nodes {
totalNodes++
for _, condition := range nodes.Status.Conditions {
if condition.Type == v13.NodeReady && condition.Status == v13.ConditionTrue {
healthyNodes++
}
}
}
nodeStatus["totalNodes"] = totalNodes
nodeStatus["healthyNodes"] = healthyNodes
status["nodes"] = nodeStatus
return status, nil
}
func GetAllComponentsStatus() (map[string]interface{}, error) {
status := make(map[string]interface{})
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册