Skip to content

Commit

Permalink
Merge pull request #281 from linkernetworks/phstsai/VX-278
Browse files Browse the repository at this point in the history
[Bug] VX-278: Modify the way that reporting the status
  • Loading branch information
John-Lin authored Aug 27, 2018
2 parents 0a7a32c + 0f8d2f7 commit 1528fc4
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 26 deletions.
15 changes: 4 additions & 11 deletions src/entity/metrics_container.go
Original file line number Diff line number Diff line change
@@ -1,23 +1,17 @@
package entity

// ContainerResourceMetrics is the sructure for Container Resource Metrics
// ContainerResourceMetrics is the structure for Container Resource Metrics
type ContainerResourceMetrics struct {
CPUUsagePercentage []SamplePair `json:"cpuUsagePercentage"`
MemoryUsageBytes []SamplePair `json:"memoryUsageBytes"`
}

// ContainerStatusMetrics is the sructure for Container Status Metrics
type ContainerStatusMetrics struct {
Status string `json:"status"`
WaitingReason string `json:"waitingReason"`
TerminatedReason string `json:"terminatedReason"`
RestartTime int `json:"restartTime"`
}

// ContainerDetailMetrics is the sructure for Container Detail Metrics
// ContainerDetailMetrics is the structure for Container Detail Metrics
type ContainerDetailMetrics struct {
ContainerName string `json:"containerName"`
CreatedAt int `json:"createAt"`
Status string `json:"status"`
RestartCount int `json:"restartCount"`
Pod string `json:"pod"`
Namespace string `json:"namespace"`
Node string `json:"node"`
Expand All @@ -28,6 +22,5 @@ type ContainerDetailMetrics struct {
// ContainerMetrics is the structure for Container Metrics
type ContainerMetrics struct {
Detail ContainerDetailMetrics `json:"detail"`
Status ContainerStatusMetrics `json:"status"`
Resource ContainerResourceMetrics `json:"resource"`
}
1 change: 1 addition & 0 deletions src/entity/metrics_pod.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ type PodMetrics struct {
Namespace string `json:"namespace"`
Node string `json:"node"`
Status string `json:"status"`
Phase string `json:"phase"`
CreateAt int `json:"createAt"`
CreateByKind string `json:"createByKind"`
CreateByName string `json:"createByName"`
Expand Down
63 changes: 48 additions & 15 deletions src/prometheuscontroller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ func GetPod(sp *serviceprovider.Container, id string) (entity.PodMetrics, error)

case "kube_pod_status_phase":
if int(result.Value) == 1 {
pod.Status = string(result.Metric["phase"])
pod.Phase = string(result.Metric["phase"])
}

case "kube_pod_container_info":
Expand All @@ -207,6 +207,42 @@ func GetPod(sp *serviceprovider.Container, id string) (entity.PodMetrics, error)
}
}

// status
pod.Status = ""
podStatusCheckingLoop:
for _, container := range pod.Containers {
expression.Metrics = []string{"kube_pod_container_status.*"}
expression.QueryLabels = map[string]string{"container": container}

str = basicExpr(expression.Metrics)
str = queryExpr(str, expression.QueryLabels)
str = equalExpr(str, 1)

results, err = query(sp, str)
if err != nil {
return pod, err
}

for _, result := range results {
switch result.Metric["__name__"] {

case "kube_pod_container_status_ready":
pod.Status = "ready"

case "kube_pod_container_status_running":
pod.Status = "running"

case "kube_pod_container_status_terminated_reason":
pod.Status = string(result.Metric["reason"])
break podStatusCheckingLoop

case "kube_pod_container_status_waiting_reason":
pod.Status = string(result.Metric["reason"])
break podStatusCheckingLoop
}
}
}

// network interface
expression.Metrics = []string{"container_network_receive_bytes_total"}
expression.QueryLabels = map[string]string{"container_label_io_kubernetes_pod_name": id}
Expand Down Expand Up @@ -335,7 +371,7 @@ func GetContainer(sp *serviceprovider.Container, id string) (entity.ContainerMet
container.Detail.Namespace = string(result.Metric["namespace"])

case "kube_pod_container_status_restarts_total":
container.Status.RestartTime = int(result.Value)
container.Detail.RestartCount = int(result.Value)
}
}

Expand Down Expand Up @@ -365,6 +401,8 @@ func GetContainer(sp *serviceprovider.Container, id string) (entity.ContainerMet
}

// status
container.Detail.Status = ""

expression.Metrics = []string{"kube_pod_container_status.*"}
expression.QueryLabels = map[string]string{"container": id}

Expand All @@ -377,28 +415,23 @@ func GetContainer(sp *serviceprovider.Container, id string) (entity.ContainerMet
return container, err
}

containerStatusCheckingLoop:
for _, result := range results {
switch result.Metric["__name__"] {

case "kube_pod_container_status_ready":
if container.Status.Status == "" {
container.Status.Status = "ready"
}
container.Detail.Status = "ready"

case "kube_pod_container_status_running":
container.Status.Status = "running"

case "kube_pod_container_status_waiting":
container.Status.Status = "waiting"

case "kube_pod_container_status_terminated":
container.Status.Status = "terminated"
container.Detail.Status = "running"

case "kube_pod_container_status_terminated_reason":
container.Status.TerminatedReason = string(result.Metric["reason"])
container.Detail.Status = string(result.Metric["reason"])
break containerStatusCheckingLoop

case "kube_pod_container_status_waiting_reason":
container.Status.WaitingReason = string(result.Metric["reason"])
container.Detail.Status = string(result.Metric["reason"])
break containerStatusCheckingLoop
}
}

Expand All @@ -416,7 +449,7 @@ func GetContainer(sp *serviceprovider.Container, id string) (entity.ContainerMet
}
}

if container.Status.Status == "waiting" || container.Status.Status == "terminated" {
if container.Detail.Status != "ready" && container.Detail.Status != "running" {
return container, nil
}

Expand Down

0 comments on commit 1528fc4

Please sign in to comment.