001package io.prometheus.metrics.exporter.opentelemetry;
002
003import java.util.HashMap;
004import java.util.Map;
005
006public class ResourceAttributes {
007
008    // TODO: The OTel Java instrumentation also has a SpringBootServiceNameDetector, we should port this over.
009    public static Map<String, String> get(String instrumentationScopeName,
010                                          String serviceName,
011                                          String serviceNamespace,
012                                          String serviceInstanceId,
013                                          String serviceVersion,
014                                          Map<String, String> configuredResourceAttributes) {
015        Map<String, String> result = new HashMap<>();
016        ResourceAttributesFromOtelAgent.addIfAbsent(result, instrumentationScopeName);
017        putIfAbsent(result, "service.name", serviceName);
018        putIfAbsent(result, "service.namespace", serviceNamespace);
019        putIfAbsent(result, "service.instance.id", serviceInstanceId);
020        putIfAbsent(result, "service.version", serviceVersion);
021        for (Map.Entry<String, String> attribute : configuredResourceAttributes.entrySet()) {
022            putIfAbsent(result, attribute.getKey(), attribute.getValue());
023        }
024        ResourceAttributesFromJarFileName.addIfAbsent(result);
025        ResourceAttributesDefaults.addIfAbsent(result);
026        return result;
027    }
028
029    private static void putIfAbsent(Map<String, String> result, String key, String value) {
030        if (value != null) {
031            result.putIfAbsent(key, value);
032        }
033    }
034}