diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index c31555cbeb..6c3bdc2660 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -8,8 +8,8 @@ configurations.all { ext { versions = [ - opentelemetry : '1.0.1', - opentelemetryAlpha: "1.0.1-alpha", + opentelemetry : '1.1.0', + opentelemetryAlpha: "1.1.0-alpha", slf4j : "1.7.30", guava : "30.1-jre", diff --git a/instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/ApacheCamelInstrumentationModule.java b/instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/ApacheCamelInstrumentationModule.java index 13ab005138..4a572b859b 100644 --- a/instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/ApacheCamelInstrumentationModule.java +++ b/instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/ApacheCamelInstrumentationModule.java @@ -40,7 +40,10 @@ public class ApacheCamelInstrumentationModule extends InstrumentationModule { @Override public String[] additionalHelperClassNames() { - return new String[] {"io.opentelemetry.extension.aws.AwsXrayPropagator"}; + return new String[] { + "io.opentelemetry.extension.aws.AwsXrayPropagator", + "io.opentelemetry.extension.aws.AwsXrayPropagator$1" + }; } public static class CamelContextInstrumentation implements TypeInstrumentation { diff --git a/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaInstrumentationModule.java b/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaInstrumentationModule.java index b69c099825..84eb8d4a23 100644 --- a/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaInstrumentationModule.java +++ b/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaInstrumentationModule.java @@ -20,7 +20,10 @@ public class AwsLambdaInstrumentationModule extends InstrumentationModule { @Override public String[] additionalHelperClassNames() { - return new String[] {"io.opentelemetry.extension.aws.AwsXrayPropagator"}; + return new String[] { + "io.opentelemetry.extension.aws.AwsXrayPropagator", + "io.opentelemetry.extension.aws.AwsXrayPropagator$1" + }; } @Override diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/AwsSdkInstrumentationModule.java b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/AwsSdkInstrumentationModule.java index dd573f9695..2ffee7a5bf 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/AwsSdkInstrumentationModule.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/AwsSdkInstrumentationModule.java @@ -20,7 +20,10 @@ public class AwsSdkInstrumentationModule extends InstrumentationModule { @Override public String[] additionalHelperClassNames() { - return new String[] {"io.opentelemetry.extension.aws.AwsXrayPropagator"}; + return new String[] { + "io.opentelemetry.extension.aws.AwsXrayPropagator", + "io.opentelemetry.extension.aws.AwsXrayPropagator$1" + }; } @Override diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/AwsSdkInstrumentationModule.java b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/AwsSdkInstrumentationModule.java index bc60a27015..4befefe1f0 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/AwsSdkInstrumentationModule.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/AwsSdkInstrumentationModule.java @@ -26,7 +26,10 @@ public class AwsSdkInstrumentationModule extends InstrumentationModule { @Override public String[] additionalHelperClassNames() { - return new String[] {"io.opentelemetry.extension.aws.AwsXrayPropagator"}; + return new String[] { + "io.opentelemetry.extension.aws.AwsXrayPropagator", + "io.opentelemetry.extension.aws.AwsXrayPropagator$1" + }; } /** diff --git a/instrumentation/opentelemetry-api-metrics-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/metrics/OpenTelemetryMetricsInstrumentation.java b/instrumentation/opentelemetry-api-metrics-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/metrics/OpenTelemetryMetricsInstrumentation.java index 620bc7d9c5..d52a13f457 100644 --- a/instrumentation/opentelemetry-api-metrics-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/metrics/OpenTelemetryMetricsInstrumentation.java +++ b/instrumentation/opentelemetry-api-metrics-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/metrics/OpenTelemetryMetricsInstrumentation.java @@ -23,7 +23,7 @@ public class OpenTelemetryMetricsInstrumentation implements TypeInstrumentation @Override public ElementMatcher typeMatcher() { - return named("application.io.opentelemetry.api.metrics.GlobalMetricsProvider"); + return named("application.io.opentelemetry.api.metrics.GlobalMeterProvider"); } @Override diff --git a/instrumentation/opentelemetry-api-metrics-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/metrics/bridge/ApplicationMeterProvider.java b/instrumentation/opentelemetry-api-metrics-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/metrics/bridge/ApplicationMeterProvider.java index 2cf835bb71..af7f243b8f 100644 --- a/instrumentation/opentelemetry-api-metrics-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/metrics/bridge/ApplicationMeterProvider.java +++ b/instrumentation/opentelemetry-api-metrics-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/metrics/bridge/ApplicationMeterProvider.java @@ -15,7 +15,7 @@ public class ApplicationMeterProvider implements MeterProvider { private final io.opentelemetry.api.metrics.MeterProvider agentMeterProvider; public ApplicationMeterProvider() { - this.agentMeterProvider = io.opentelemetry.api.metrics.GlobalMetricsProvider.get(); + this.agentMeterProvider = io.opentelemetry.api.metrics.GlobalMeterProvider.get(); } @Override diff --git a/instrumentation/opentelemetry-api-metrics-1.0/javaagent/src/test/groovy/MeterTest.groovy b/instrumentation/opentelemetry-api-metrics-1.0/javaagent/src/test/groovy/MeterTest.groovy index 2a10547c0f..f8acaf3471 100644 --- a/instrumentation/opentelemetry-api-metrics-1.0/javaagent/src/test/groovy/MeterTest.groovy +++ b/instrumentation/opentelemetry-api-metrics-1.0/javaagent/src/test/groovy/MeterTest.groovy @@ -12,7 +12,7 @@ import static java.util.concurrent.TimeUnit.SECONDS import com.google.common.base.Stopwatch import io.opentelemetry.api.metrics.AsynchronousInstrument -import io.opentelemetry.api.metrics.GlobalMetricsProvider +import io.opentelemetry.api.metrics.GlobalMeterProvider import io.opentelemetry.api.metrics.common.Labels import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification import io.opentelemetry.sdk.metrics.data.MetricData @@ -27,7 +27,7 @@ class MeterTest extends AgentInstrumentationSpecification { def instrumentationName = "test" + new Random().nextLong() when: - def meter = GlobalMetricsProvider.getMeter(instrumentationName, "1.2.3") + def meter = GlobalMeterProvider.getMeter(instrumentationName, "1.2.3") def instrument = meter."$builderMethod"("test") .setDescription("d") .setUnit("u") @@ -78,7 +78,7 @@ class MeterTest extends AgentInstrumentationSpecification { def instrumentationName = "test" + new Random().nextLong() when: - def meter = GlobalMetricsProvider.getMeter(instrumentationName, "1.2.3") + def meter = GlobalMeterProvider.getMeter(instrumentationName, "1.2.3") def instrument = meter."$builderMethod"("test") .setDescription("d") .setUnit("u") @@ -124,7 +124,7 @@ class MeterTest extends AgentInstrumentationSpecification { def instrumentationName = "test" + new Random().nextLong() when: - def meter = GlobalMetricsProvider.getMeter(instrumentationName, "1.2.3") + def meter = GlobalMeterProvider.getMeter(instrumentationName, "1.2.3") def instrument = meter."$builderMethod"("test") .setDescription("d") .setUnit("u") @@ -206,7 +206,7 @@ class MeterTest extends AgentInstrumentationSpecification { def instrumentationName = "test" + new Random().nextLong() when: - def meter = GlobalMetricsProvider.getMeter(instrumentationName, "1.2.3") + def meter = GlobalMeterProvider.getMeter(instrumentationName, "1.2.3") def longCounter = meter.longCounterBuilder("test") .setDescription("d") .setUnit("u") @@ -264,6 +264,7 @@ class MeterTest extends AgentInstrumentationSpecification { List points(MetricData metricData) { def points = [] points.addAll(metricData.getDoubleGaugeData().getPoints()) + points.addAll(metricData.getDoubleHistogramData().getPoints()) points.addAll(metricData.getDoubleSumData().getPoints()) points.addAll(metricData.getDoubleSummaryData().getPoints()) points.addAll(metricData.getLongGaugeData().getPoints()) diff --git a/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/ProcessMetrics.java b/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/ProcessMetrics.java index 90498672a6..d60c787c8b 100644 --- a/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/ProcessMetrics.java +++ b/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/ProcessMetrics.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.oshi; -import io.opentelemetry.api.metrics.GlobalMetricsProvider; +import io.opentelemetry.api.metrics.GlobalMeterProvider; import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.api.metrics.common.Labels; import oshi.SystemInfo; @@ -20,7 +20,7 @@ public class ProcessMetrics { /** Register observers for java runtime metrics. */ public static void registerObservers() { - Meter meter = GlobalMetricsProvider.get().get(ProcessMetrics.class.getName()); + Meter meter = GlobalMeterProvider.get().get(ProcessMetrics.class.getName()); SystemInfo systemInfo = new SystemInfo(); OperatingSystem osInfo = systemInfo.getOperatingSystem(); OSProcess processInfo = osInfo.getProcess(osInfo.getProcessId()); diff --git a/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/SystemMetrics.java b/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/SystemMetrics.java index 2d970cb1da..1007dbaa85 100644 --- a/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/SystemMetrics.java +++ b/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/SystemMetrics.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.oshi; -import io.opentelemetry.api.metrics.GlobalMetricsProvider; +import io.opentelemetry.api.metrics.GlobalMeterProvider; import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.api.metrics.common.Labels; import oshi.SystemInfo; @@ -25,7 +25,7 @@ public class SystemMetrics { /** Register observers for system metrics. */ public static void registerObservers() { - Meter meter = GlobalMetricsProvider.get().get("io.opentelemetry.instrumentation.oshi"); + Meter meter = GlobalMeterProvider.get().get("io.opentelemetry.instrumentation.oshi"); SystemInfo systemInfo = new SystemInfo(); HardwareAbstractionLayer hal = systemInfo.getHardware(); diff --git a/instrumentation/oshi/library/src/test/java/io/opentelemetry/instrumentation/oshi/AbstractMetricsTest.java b/instrumentation/oshi/library/src/test/java/io/opentelemetry/instrumentation/oshi/AbstractMetricsTest.java index 0fb9fd81aa..6ed58d9ddc 100644 --- a/instrumentation/oshi/library/src/test/java/io/opentelemetry/instrumentation/oshi/AbstractMetricsTest.java +++ b/instrumentation/oshi/library/src/test/java/io/opentelemetry/instrumentation/oshi/AbstractMetricsTest.java @@ -48,7 +48,7 @@ class AbstractMetricsTest { .setExportIntervalMillis(100) .setMetricExporter(testMetricExporter) .setMetricProducers(Collections.singletonList(meterProvider)) - .build(); + .buildAndStart(); } public void verify( diff --git a/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/GarbageCollector.java b/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/GarbageCollector.java index d810bc56aa..b8e80f2925 100644 --- a/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/GarbageCollector.java +++ b/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/GarbageCollector.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.runtimemetrics; -import io.opentelemetry.api.metrics.GlobalMetricsProvider; +import io.opentelemetry.api.metrics.GlobalMeterProvider; import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.api.metrics.common.Labels; import java.lang.management.GarbageCollectorMXBean; @@ -35,7 +35,7 @@ public final class GarbageCollector { /** Register all observers provided by this module. */ public static void registerObservers() { List garbageCollectors = ManagementFactory.getGarbageCollectorMXBeans(); - Meter meter = GlobalMetricsProvider.getMeter(GarbageCollector.class.getName()); + Meter meter = GlobalMeterProvider.getMeter(GarbageCollector.class.getName()); List labelSets = new ArrayList<>(garbageCollectors.size()); for (final GarbageCollectorMXBean gc : garbageCollectors) { labelSets.add(Labels.of(GC_LABEL_KEY, gc.getName())); diff --git a/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/MemoryPools.java b/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/MemoryPools.java index aabab72175..b53c1ffe14 100644 --- a/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/MemoryPools.java +++ b/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/MemoryPools.java @@ -6,7 +6,7 @@ package io.opentelemetry.instrumentation.runtimemetrics; import io.opentelemetry.api.metrics.AsynchronousInstrument.LongResult; -import io.opentelemetry.api.metrics.GlobalMetricsProvider; +import io.opentelemetry.api.metrics.GlobalMeterProvider; import io.opentelemetry.api.metrics.LongUpDownSumObserver; import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.api.metrics.common.Labels; @@ -59,7 +59,7 @@ public final class MemoryPools { /** Register only the "area" observers. */ public static void registerMemoryAreaObservers() { MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean(); - Meter meter = GlobalMetricsProvider.getMeter(MemoryPools.class.getName()); + Meter meter = GlobalMeterProvider.getMeter(MemoryPools.class.getName()); final LongUpDownSumObserver areaMetric = meter .longUpDownSumObserverBuilder("runtime.jvm.memory.area") @@ -76,7 +76,7 @@ public final class MemoryPools { /** Register only the "pool" observers. */ public static void registerMemoryPoolObservers() { List poolBeans = ManagementFactory.getMemoryPoolMXBeans(); - Meter meter = GlobalMetricsProvider.getMeter(MemoryPools.class.getName()); + Meter meter = GlobalMeterProvider.getMeter(MemoryPools.class.getName()); List usedLabelSets = new ArrayList<>(poolBeans.size()); List committedLabelSets = new ArrayList<>(poolBeans.size()); List maxLabelSets = new ArrayList<>(poolBeans.size()); diff --git a/javaagent-tooling/javaagent-tooling.gradle b/javaagent-tooling/javaagent-tooling.gradle index 8f42844853..eb1d51ae01 100644 --- a/javaagent-tooling/javaagent-tooling.gradle +++ b/javaagent-tooling/javaagent-tooling.gradle @@ -52,7 +52,7 @@ dependencies { implementation deps.autoservice implementation deps.slf4j - implementation group: 'io.grpc', name: 'grpc-netty', version: '1.34.1' + implementation group: 'io.grpc', name: 'grpc-netty', version: '1.35.1' testImplementation project(':testing-common') testImplementation deps.assertj diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java index 48f8aa4853..88b2446999 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.tooling; import com.google.auto.service.AutoService; -import io.opentelemetry.api.metrics.GlobalMetricsProvider; +import io.opentelemetry.api.metrics.GlobalMeterProvider; import io.opentelemetry.exporter.logging.LoggingSpanExporter; import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.javaagent.spi.exporter.MetricExporterFactory; @@ -128,8 +128,8 @@ public class AgentTracerProviderConfigurer implements SdkTracerProviderConfigure MetricExporter metricExporter = metricExporterFactory.fromConfig(config.asJavaProperties()); IntervalMetricReader.builder() .setMetricExporter(metricExporter) - .setMetricProducers(Collections.singleton((SdkMeterProvider) GlobalMetricsProvider.get())) - .build(); + .setMetricProducers(Collections.singleton((SdkMeterProvider) GlobalMeterProvider.get())) + .buildAndStart(); log.info("Installed metric exporter: " + metricExporter.getClass().getName()); } } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/InstrumentationModule.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/InstrumentationModule.java index dd9b5e888e..3b90b9b028 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/InstrumentationModule.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/InstrumentationModule.java @@ -47,7 +47,8 @@ import org.slf4j.LoggerFactory; * possible to extend and reuse them in vendor distributions. */ public abstract class InstrumentationModule { - private static final Logger log = LoggerFactory.getLogger(InstrumentationModule.class); + private static final TransformSafeLogger log = + TransformSafeLogger.getLogger(InstrumentationModule.class); private static final Logger muzzleLog = LoggerFactory.getLogger("muzzleMatcher"); private static final String[] EMPTY = new String[0]; @@ -233,7 +234,7 @@ public abstract class InstrumentationModule { } } } else { - if (muzzleLog.isDebugEnabled()) { + if (log.isDebugEnabled()) { log.debug( "Applying instrumentation: {} -- {} on {}", mainInstrumentationName(), diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/TransformSafeLogger.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/TransformSafeLogger.java index b1f9860809..4f48a33526 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/TransformSafeLogger.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/TransformSafeLogger.java @@ -7,6 +7,7 @@ package io.opentelemetry.javaagent.tooling; import static org.slf4j.event.Level.DEBUG; import static org.slf4j.event.Level.TRACE; +import static org.slf4j.event.Level.WARN; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; @@ -103,6 +104,30 @@ public class TransformSafeLogger { } } + public void warn(String format, Object arg) { + if (logMessageQueue != null) { + logMessageQueue.offer(new LogMessage(WARN, logger, format, arg)); + } else { + logger.warn(format, arg); + } + } + + public void warn(String format, Object arg1, Object arg2) { + if (logMessageQueue != null) { + logMessageQueue.offer(new LogMessage(WARN, logger, format, arg1, arg2)); + } else { + logger.warn(format, arg1, arg2); + } + } + + public void warn(String format, Object... arguments) { + if (logMessageQueue != null) { + logMessageQueue.offer(new LogMessage(WARN, logger, format, arguments)); + } else { + logger.warn(format, arguments); + } + } + public boolean isTraceEnabled() { return logger.isTraceEnabled(); } diff --git a/testing-common/src/main/java/io/opentelemetry/javaagent/testing/common/AgentTestingExporterAccess.java b/testing-common/src/main/java/io/opentelemetry/javaagent/testing/common/AgentTestingExporterAccess.java index e6d8868974..4beb8bf8c3 100644 --- a/testing-common/src/main/java/io/opentelemetry/javaagent/testing/common/AgentTestingExporterAccess.java +++ b/testing-common/src/main/java/io/opentelemetry/javaagent/testing/common/AgentTestingExporterAccess.java @@ -32,6 +32,7 @@ import io.opentelemetry.proto.common.v1.StringKeyValue; import io.opentelemetry.proto.metrics.v1.DoubleDataPoint; import io.opentelemetry.proto.metrics.v1.DoubleHistogramDataPoint; import io.opentelemetry.proto.metrics.v1.DoubleSum; +import io.opentelemetry.proto.metrics.v1.DoubleSummaryDataPoint; import io.opentelemetry.proto.metrics.v1.InstrumentationLibraryMetrics; import io.opentelemetry.proto.metrics.v1.IntDataPoint; import io.opentelemetry.proto.metrics.v1.IntSum; @@ -45,6 +46,8 @@ import io.opentelemetry.proto.trace.v1.Status; import io.opentelemetry.sdk.common.InstrumentationLibraryInfo; import io.opentelemetry.sdk.metrics.data.AggregationTemporality; import io.opentelemetry.sdk.metrics.data.DoubleGaugeData; +import io.opentelemetry.sdk.metrics.data.DoubleHistogramData; +import io.opentelemetry.sdk.metrics.data.DoubleHistogramPointData; import io.opentelemetry.sdk.metrics.data.DoublePointData; import io.opentelemetry.sdk.metrics.data.DoubleSumData; import io.opentelemetry.sdk.metrics.data.DoubleSummaryData; @@ -66,6 +69,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.regex.Pattern; +import java.util.stream.Collectors; import org.jetbrains.annotations.NotNull; public final class AgentTestingExporterAccess { @@ -306,6 +310,16 @@ public final class AgentTestingExporterAccess { getTemporality(doubleSum.getAggregationTemporality()), getDoublePointDatas(metric.getDoubleSum().getDataPointsList()))); case DOUBLE_HISTOGRAM: + return MetricData.createDoubleHistogram( + resource, + instrumentationLibraryInfo, + metric.getName(), + metric.getDescription(), + metric.getUnit(), + DoubleHistogramData.create( + getTemporality(metric.getDoubleHistogram().getAggregationTemporality()), + getDoubleHistogramDataPoints(metric.getDoubleHistogram().getDataPointsList()))); + case DOUBLE_SUMMARY: return MetricData.createDoubleSummary( resource, instrumentationLibraryInfo, @@ -313,7 +327,7 @@ public final class AgentTestingExporterAccess { metric.getDescription(), metric.getUnit(), DoubleSummaryData.create( - getDoubleHistogramDataPoints(metric.getDoubleHistogram().getDataPointsList()))); + getDoubleSummaryDataPoints(metric.getDoubleSummary().getDataPointsList()))); default: throw new AssertionError("Unexpected metric data: " + metric.getDataCase()); } @@ -351,8 +365,23 @@ public final class AgentTestingExporterAccess { .collect(toList()); } - private static Collection getDoubleHistogramDataPoints( + private static Collection getDoubleHistogramDataPoints( List dataPointsList) { + return dataPointsList.stream() + .map( + point -> + DoubleHistogramPointData.create( + point.getStartTimeUnixNano(), + point.getTimeUnixNano(), + createLabels(point.getLabelsList()), + point.getSum(), + point.getExplicitBoundsList(), + point.getBucketCountsList())) + .collect(toList()); + } + + private static Collection getDoubleSummaryDataPoints( + List dataPointsList) { return dataPointsList.stream() .map( point -> @@ -366,12 +395,10 @@ public final class AgentTestingExporterAccess { .collect(toList()); } - private static List getValues(DoubleHistogramDataPoint point) { - List values = new ArrayList<>(); - for (int i = 0; i < point.getExplicitBoundsCount(); i++) { - values.add(ValueAtPercentile.create(point.getExplicitBounds(i), point.getBucketCounts(i))); - } - return values; + private static List getValues(DoubleSummaryDataPoint point) { + return point.getQuantileValuesList().stream() + .map(v -> ValueAtPercentile.create(v.getQuantile(), v.getValue())) + .collect(Collectors.toList()); } private static AggregationTemporality getTemporality( diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/exporter/AgentTestingSdkCustomizer.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/exporter/AgentTestingSdkCustomizer.java index 94eace06df..2f782494ff 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/exporter/AgentTestingSdkCustomizer.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/exporter/AgentTestingSdkCustomizer.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.testing.exporter; import com.google.auto.service.AutoService; -import io.opentelemetry.api.metrics.GlobalMetricsProvider; +import io.opentelemetry.api.metrics.GlobalMeterProvider; import io.opentelemetry.sdk.autoconfigure.spi.SdkTracerProviderConfigurer; import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.metrics.export.IntervalMetricReader; @@ -34,7 +34,7 @@ public class AgentTestingSdkCustomizer implements SdkTracerProviderConfigurer { IntervalMetricReader.builder() .setExportIntervalMillis(100) .setMetricExporter(AgentTestingExporterFactory.metricExporter) - .setMetricProducers(Collections.singleton((SdkMeterProvider) GlobalMetricsProvider.get())) - .build(); + .setMetricProducers(Collections.singleton((SdkMeterProvider) GlobalMeterProvider.get())) + .buildAndStart(); } }