func commonResourceAttributesToMonitoredResource()

in internal/resourcemapping/resourcemapping.go [202:240]


func commonResourceAttributesToMonitoredResource(cloudPlatform string, attrs ReadOnlyAttributes) *monitoredrespb.MonitoredResource {
	switch cloudPlatform {
	case semconv.CloudPlatformGCPComputeEngine.Value.AsString():
		return createMonitoredResource(gceInstance, attrs)
	case semconv.CloudPlatformAWSEC2.Value.AsString():
		return createMonitoredResource(awsEc2Instance, attrs)
	// TODO(alex-basinov): replace this string literal with semconv.CloudPlatformGCPBareMetalSolution
	// once https://github.com/open-telemetry/semantic-conventions/pull/64 makes its way
	// into the semconv module.
	case "gcp_bare_metal_solution":
		return createMonitoredResource(bmsInstance, attrs)
	default:
		// if k8s.cluster.name is set, pattern match for various k8s resources.
		// this will also match non-cloud k8s platforms like minikube.
		if _, ok := attrs.GetString(string(semconv.K8SClusterNameKey)); ok {
			// Try for most to least specific k8s_container, k8s_pod, etc
			if _, ok := attrs.GetString(string(semconv.K8SContainerNameKey)); ok {
				return createMonitoredResource(k8sContainer, attrs)
			} else if _, ok := attrs.GetString(string(semconv.K8SPodNameKey)); ok {
				return createMonitoredResource(k8sPod, attrs)
			} else if _, ok := attrs.GetString(string(semconv.K8SNodeNameKey)); ok {
				return createMonitoredResource(k8sNode, attrs)
			}
			return createMonitoredResource(k8sCluster, attrs)
		}

		// Fallback to generic_task
		_, hasServiceName := attrs.GetString(string(semconv.ServiceNameKey))
		_, hasFaaSName := attrs.GetString(string(semconv.FaaSNameKey))
		_, hasServiceInstanceID := attrs.GetString(string(semconv.ServiceInstanceIDKey))
		_, hasFaaSInstance := attrs.GetString(string(semconv.FaaSInstanceKey))
		if (hasServiceName && hasServiceInstanceID) || (hasFaaSInstance && hasFaaSName) {
			return createMonitoredResource(genericTask, attrs)
		}

		// Everything else fallback to generic_node
		return createMonitoredResource(genericNode, attrs)
	}
}