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