in pkg/controllers/metrics/pod/controller.go [128:170]
func (c *Controller) labels(ctx context.Context, pod *v1.Pod) prometheus.Labels {
metricLabels := prometheus.Labels{}
metricLabels[podName] = pod.GetName()
metricLabels[podNameSpace] = pod.GetNamespace()
// Selflink has been deprecated after v.1.20
// Manually generate the selflink for the first owner reference
// Currently we do not support multiple owner references
selflink := ""
if len(pod.GetOwnerReferences()) > 0 {
ownerreference := pod.GetOwnerReferences()[0]
selflink = fmt.Sprintf("/apis/%s/namespaces/%s/%ss/%s", ownerreference.APIVersion, pod.Namespace, strings.ToLower(ownerreference.Kind), ownerreference.Name)
}
metricLabels[ownerSelfLink] = selflink
metricLabels[podHostName] = pod.Spec.NodeName
metricLabels[podPhase] = string(pod.Status.Phase)
node := &v1.Node{}
if err := c.KubeClient.Get(ctx, types.NamespacedName{Name: pod.Spec.NodeName}, node); err != nil {
metricLabels[podHostZone] = "N/A"
metricLabels[podHostArchitecture] = "N/A"
metricLabels[podHostCapacityType] = "N/A"
metricLabels[podHostInstanceType] = "N/A"
if provisionerName, ok := pod.Spec.NodeSelector[v1alpha5.ProvisionerNameLabelKey]; ok {
metricLabels[podProvisioner] = provisionerName
} else {
metricLabels[podProvisioner] = "N/A"
}
} else {
metricLabels[podHostZone] = node.Labels[v1.LabelTopologyZone]
metricLabels[podHostArchitecture] = node.Labels[v1.LabelArchStable]
if capacityType, ok := node.Labels[v1alpha5.LabelCapacityType]; !ok {
metricLabels[podHostCapacityType] = "N/A"
} else {
metricLabels[podHostCapacityType] = capacityType
}
metricLabels[podHostInstanceType] = node.Labels[v1.LabelInstanceTypeStable]
if provisionerName, ok := node.Labels[v1alpha5.ProvisionerNameLabelKey]; !ok {
metricLabels[podProvisioner] = "N/A"
} else {
metricLabels[podProvisioner] = provisionerName
}
}
return metricLabels
}