func()

in plugins/processors/k8sdecorator/stores/podstore.go [325:369]


func (p *PodStore) decorateMem(metric telegraf.Metric, tags map[string]string, pod *corev1.Pod) {
	if tags[MetricType] == TypePod {
		if metric.HasField(MetricName(TypePod, MemWorkingset)) {
			// add mem limit and request for pod mem
			podMemReq, _ := getResourceSettingForPod(pod, p.nodeInfo.getMemCapacity(), memoryKey, getRequestForContainer)
			// set podReq to the sum of containerReq which has req
			if podMemReq != 0 {
				metric.AddField(MetricName(TypePod, MemRequest), podMemReq)
			}

			if p.nodeInfo.getMemCapacity() != 0 {
				metric.AddField(MetricName(TypePod, MemUtilization), getFloat64(metric.Fields()[MetricName(TypePod, MemWorkingset)])/float64(p.nodeInfo.getMemCapacity())*100)
				if podMemReq != 0 {
					metric.AddField(MetricName(TypePod, MemReservedCapacity), float64(podMemReq)/float64(p.nodeInfo.getMemCapacity())*100)
				}
			}

			podMemLimit, ok := getResourceSettingForPod(pod, p.nodeInfo.getMemCapacity(), memoryKey, getLimitForContainer)
			// only set podLimit when all the containers has limit
			if ok && podMemLimit != 0 {
				metric.AddField(MetricName(TypePod, MemLimit), podMemLimit)
				metric.AddField(MetricName(TypePod, MemUtilizationOverPodLimit), getFloat64(metric.Fields()[MetricName(TypePod, MemWorkingset)])/float64(podMemLimit)*100)
			}
		}
	} else if tags[MetricType] == TypeContainer {
		// add mem limit and request for container
		if metric.HasField(MetricName(TypeContainer, MemWorkingset)) {
			if p.nodeInfo.getMemCapacity() != 0 {
				metric.AddField(MetricName(TypeContainer, MemUtilization), getFloat64(metric.Fields()[MetricName(TypeContainer, MemWorkingset)])/float64(p.nodeInfo.getMemCapacity())*100)
			}
			if containerName, ok := tags[ContainerNamekey]; ok {
				for _, containerSpec := range pod.Spec.Containers {
					if containerSpec.Name == containerName {
						if memLimit, ok := getLimitForContainer(memoryKey, containerSpec); ok {
							metric.AddField(MetricName(TypeContainer, MemLimit), memLimit)
						}
						if memReq, ok := getRequestForContainer(memoryKey, containerSpec); ok {
							metric.AddField(MetricName(TypeContainer, MemRequest), memReq)
						}
					}
				}
			}
		}
	}
}