func getMonitoredResourceFromLabels()

in prometheus-to-sd/translator/translator.go [482:553]


func getMonitoredResourceFromLabels(config *config.CommonConfig, labels []*dto.LabelPair) *monitoredres.MonitoredResource {
	if config.SourceConfig.CustomResourceType != "" {
		return getCustomMonitoredResource(config)
	}
	container, pod, namespace := config.SourceConfig.PodConfig.GetPodInfo(labels)
	prefix := config.MonitoredResourceTypePrefix

	if prefix == "" {
		return &monitoredres.MonitoredResource{
			Type: "gke_container",
			Labels: map[string]string{
				"project_id":     config.GceConfig.Project,
				"cluster_name":   config.GceConfig.Cluster,
				"zone":           config.GceConfig.Zone,
				"instance_id":    config.GceConfig.Instance,
				"namespace_id":   namespace,
				"pod_id":         pod,
				"container_name": container,
			},
		}
	}

	resourceLabels := make(map[string]string)
	for k, v := range config.MonitoredResourceLabels {
		resourceLabels[k] = v
	}
	if _, found := resourceLabels["project_id"]; !found {
		resourceLabels["project_id"] = config.GceConfig.Project
	}
	if _, found := resourceLabels["cluster_name"]; !found {
		resourceLabels["cluster_name"] = config.GceConfig.Cluster
	}
	if _, found := resourceLabels["location"]; !found {
		resourceLabels["location"] = config.GceConfig.ClusterLocation
	}

	// When MonitoredResource type is not "k8s_*", default "instance_id" label to GCE instance name.
	if prefix != "k8s_" {
		if _, found := resourceLabels["instance_id"]; !found {
			resourceLabels["instance_id"] = config.GceConfig.InstanceId
		}
	}

	// When namespace and pod are unspecified, it should be written to node type.
	if namespace == "" || pod == "" || pod == "machine" {
		// When MonitoredResource is "k8s_node", default "node_name" label to GCE instance name.
		if prefix == "k8s_" {
			if _, found := resourceLabels["node_name"]; !found {
				resourceLabels["node_name"] = config.GceConfig.Instance
			}
		}
		return &monitoredres.MonitoredResource{
			Type:   prefix + "node",
			Labels: resourceLabels,
		}
	}

	resourceLabels["namespace_name"] = namespace
	resourceLabels["pod_name"] = pod
	if container == "" {
		return &monitoredres.MonitoredResource{
			Type:   prefix + "pod",
			Labels: resourceLabels,
		}
	}

	resourceLabels["container_name"] = container
	return &monitoredres.MonitoredResource{
		Type:   prefix + "container",
		Labels: resourceLabels,
	}
}