func()

in plugins/processors/k8sdecorator/stores/podstore.go [538:588]


func (p *PodStore) addPodOwnersAndPodName(metric telegraf.Metric, pod *corev1.Pod, kubernetesBlob map[string]interface{}) {
	var owners []Owner
	podName := ""
	for _, owner := range pod.OwnerReferences {
		if owner.Kind != "" && owner.Name != "" {
			kind := owner.Kind
			name := owner.Name
			if owner.Kind == ReplicaSet {
				rsToDeployment := k8sclient.Get().ReplicaSet.ReplicaSetToDeployment()
				if parent := rsToDeployment[owner.Name]; parent != "" {
					kind = Deployment
					name = parent
				} else if parent := parseDeploymentFromReplicaSet(owner.Name); parent != "" {
					profiler.Profiler.AddStats([]string{"k8sdecorator", "podstore", "rsToDeploymentMiss"}, 1)
					kind = Deployment
					name = parent
				}
			} else if owner.Kind == Job {
				if parent := parseCronJobFromJob(owner.Name); parent != "" {
					kind = CronJob
					name = parent
				} else if !p.prefFullPodName {
					name = getJobNamePrefix(name)
				}
			}
			owners = append(owners, Owner{OwnerKind: kind, OwnerName: name})

			if podName == "" {
				if owner.Kind == StatefulSet {
					podName = pod.Name
				} else if owner.Kind == DaemonSet || owner.Kind == Job || owner.Kind == ReplicaSet || owner.Kind == ReplicationController {
					podName = name
				}
			}
		}
	}
	if len(owners) > 0 {
		kubernetesBlob["pod_owners"] = owners
	}

	// if podName is not set according to a well-known controllers, then set it to its own name
	if podName == "" {
		if strings.HasPrefix(pod.Name, kubeProxy) && !p.prefFullPodName {
			podName = kubeProxy
		} else {
			podName = pod.Name
		}
	}

	metric.AddTag(PodNameKey, podName)
}