From c7307e4d7ace3d331cb0e9b2b8317d5d3599d220 Mon Sep 17 00:00:00 2001 From: Calvin Yu Date: Mon, 28 May 2018 11:36:47 +0800 Subject: [PATCH] add real time cpu/memory monitor api for container level --- pkg/client/heapsterclient.go | 5 +++-- pkg/models/containers.go | 15 +++++++++------ pkg/models/pods.go | 3 ++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/pkg/client/heapsterclient.go b/pkg/client/heapsterclient.go index 50ae2a15f..14b883d62 100644 --- a/pkg/client/heapsterclient.go +++ b/pkg/client/heapsterclient.go @@ -19,15 +19,16 @@ package client import ( "net/http" - "github.com/golang/glog" "io/ioutil" "os" + + "github.com/golang/glog" ) const ( DefaultHeapsterScheme = "http" DefaultHeapsterService = "heapster" //"heapster" - DefaultHeapsterPort = "80" // use the first exposed port on the service + DefaultHeapsterPort = "80" // use the first exposed port on the service ) var ( diff --git a/pkg/models/containers.go b/pkg/models/containers.go index 7ded08eaf..08210cbda 100644 --- a/pkg/models/containers.go +++ b/pkg/models/containers.go @@ -64,7 +64,7 @@ func GetContainers(namespace, podName string) []string { func FormatContainersMetrics(nodeName, namespace, podName string) ResultNameSpaceForContainer { var resultNameSpaceForContainer ResultNameSpaceForContainer var resultPodsForContainer []ResultPodForContainer - var resultPodForContainer ResultPodForContainer + var pods []string if nodeName == "" { pods = GetPods(namespace) @@ -76,6 +76,7 @@ func FormatContainersMetrics(nodeName, namespace, podName string) ResultNameSpac resultNameSpaceForContainer.PodsCount = strconv.Itoa(len(pods)) if podName != "" { + var resultPodForContainer ResultPodForContainer resultPodForContainer.PodName = podName resultPodForContainer = FormatPodMetricsWithContainers(namespace, podName) resultPodsForContainer = append(resultPodsForContainer, resultPodForContainer) @@ -83,6 +84,7 @@ func FormatContainersMetrics(nodeName, namespace, podName string) ResultNameSpac return resultNameSpaceForContainer } for _, pod := range pods { + var resultPodForContainer ResultPodForContainer resultPodForContainer.PodName = pod resultPodForContainer = FormatPodMetricsWithContainers(namespace, pod) resultPodsForContainer = append(resultPodsForContainer, resultPodForContainer) @@ -96,17 +98,18 @@ func FormatPodMetricsWithContainers(namespace, pod string) ResultPodForContainer var resultPod ResultPodForContainer var containers []string var resultContainers []ResultContainer - var resultContainer ResultContainer - var containerCPUMetrics []CPUContainer - var containerMemMetrics []MemoryContainer - var cpuMetrics CPUContainer - var memMetrics MemoryContainer resultPod.PodName = pod containers = GetContainers(namespace, pod) resultPod.ContainersCount = strconv.Itoa(len(containers)) for _, container := range containers { + var resultContainer ResultContainer + var containerCPUMetrics []CPUContainer + var containerMemMetrics []MemoryContainer + var cpuMetrics CPUContainer + var memMetrics MemoryContainer + resultContainer.ContainerName = container cpuRequest := client.GetHeapsterMetrics("/namespaces/" + namespace + "/pods/" + pod + "/containers/" + container + "/metrics/cpu/request") cpuRequest = ksutil.JsonRawMessage(cpuRequest).Find("metrics").ToList()[0].Find("value").ToString() diff --git a/pkg/models/pods.go b/pkg/models/pods.go index b829327d9..6f158209c 100644 --- a/pkg/models/pods.go +++ b/pkg/models/pods.go @@ -12,8 +12,9 @@ import ( ksutil "kubesphere.io/kubesphere/pkg/util" "fmt" - "k8s.io/apimachinery/pkg/apis/meta/v1" "strconv" + + "k8s.io/apimachinery/pkg/apis/meta/v1" ) type ResultNameSpaces struct {