func()

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)})
					}
				}
			}
		}
	}
}