in plugins/processors/k8sdecorator/stores/podstore.go [395:452]
func (p *PodStore) addStatus(metric telegraf.Metric, tags map[string]string, pod *corev1.Pod) {
if tags[MetricType] == TypePod {
metric.AddField(PodStatus, string(pod.Status.Phase))
var curContainerRestarts int
for _, containerStatus := range pod.Status.ContainerStatuses {
curContainerRestarts += int(containerStatus.RestartCount)
}
podKey := createPodKeyFromMetric(tags)
if podKey != "" {
content, ok := p.getPrevMeasurement(TypePod, podKey)
if ok {
prevMeasurement := content.(prevPodMeasurement)
result := 0
if curContainerRestarts > prevMeasurement.containersRestarts {
result = curContainerRestarts - prevMeasurement.containersRestarts
}
metric.AddField(MetricName(TypePod, ContainerRestartCount), result)
}
p.setPrevMeasurement(TypePod, podKey, prevPodMeasurement{containersRestarts: curContainerRestarts})
}
} else if tags[MetricType] == TypeContainer {
if containerName, ok := tags[ContainerNamekey]; ok {
for _, containerStatus := range pod.Status.ContainerStatuses {
if containerStatus.Name == containerName {
if containerStatus.State.Running != nil {
metric.AddField(ContainerStatus, "Running")
} else if containerStatus.State.Waiting != nil {
metric.AddField(ContainerStatus, "Waiting")
if containerStatus.State.Waiting.Reason != "" {
metric.AddField(ContainerStatusReason, containerStatus.State.Waiting.Reason)
}
} else if containerStatus.State.Terminated != nil {
metric.AddField(ContainerStatus, "Terminated")
if containerStatus.State.Terminated.Reason != "" {
metric.AddField(ContainerStatusReason, containerStatus.State.Terminated.Reason)
}
}
if containerStatus.LastTerminationState.Terminated != nil && containerStatus.LastTerminationState.Terminated.Reason != "" {
metric.AddField(ContainerLastTerminationReason, containerStatus.LastTerminationState.Terminated.Reason)
}
containerKey := createContainerKeyFromMetric(tags)
if containerKey != "" {
content, ok := p.getPrevMeasurement(TypeContainer, containerKey)
if ok {
prevMeasurement := content.(prevContainerMeasurement)
result := 0
if int(containerStatus.RestartCount) > prevMeasurement.restarts {
result = int(containerStatus.RestartCount) - prevMeasurement.restarts
}
metric.AddField(ContainerRestartCount, result)
}
p.setPrevMeasurement(TypeContainer, containerKey, prevContainerMeasurement{restarts: int(containerStatus.RestartCount)})
}
}
}
}
}
}