Pārlūkot izejas kodu

Make AggregationTemporality configurable for OtlpInMemoryMetricExporter (#7904)

References
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7902.

Not sure if system property name is the most appropriate or if any tests
are required for these changes.
Domantas Petrauskas 2 gadi atpakaļ
vecāks
revīzija
2a20f5e5db

+ 24 - 1
testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/exporter/OtlpInMemoryMetricExporter.java

@@ -5,6 +5,8 @@
 
 package io.opentelemetry.javaagent.testing.exporter;
 
+import static java.util.logging.Level.CONFIG;
+
 import io.opentelemetry.exporter.internal.otlp.metrics.MetricsRequestMarshaler;
 import io.opentelemetry.sdk.common.CompletableResultCode;
 import io.opentelemetry.sdk.metrics.InstrumentType;
@@ -17,13 +19,34 @@ import java.io.UncheckedIOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Locale;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.logging.Logger;
 
 class OtlpInMemoryMetricExporter implements MetricExporter {
 
+  private static final Logger logger = Logger.getLogger(OtlpInMemoryMetricExporter.class.getName());
+
   private final Queue<byte[]> collectedRequests = new ConcurrentLinkedQueue<>();
 
+  private static final AggregationTemporality aggregationTemporality = initAggregationTemporality();
+
+  private static AggregationTemporality initAggregationTemporality() {
+    // this configuration setting is for external users
+    // see https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7902
+    String temporalityProperty = System.getProperty("otel.javaagent.testing.exporter.temporality");
+    AggregationTemporality aggregationTemporality;
+    if (temporalityProperty == null) {
+      aggregationTemporality = AggregationTemporality.DELTA;
+    } else {
+      aggregationTemporality =
+          AggregationTemporality.valueOf(temporalityProperty.toUpperCase(Locale.ROOT));
+    }
+    logger.log(CONFIG, "Setting aggregation temporality to {0}", aggregationTemporality.toString());
+    return aggregationTemporality;
+  }
+
   List<byte[]> getCollectedExportRequests() {
     return new ArrayList<>(collectedRequests);
   }
@@ -34,7 +57,7 @@ class OtlpInMemoryMetricExporter implements MetricExporter {
 
   @Override
   public AggregationTemporality getAggregationTemporality(InstrumentType instrumentType) {
-    return AggregationTemporality.DELTA;
+    return aggregationTemporality;
   }
 
   @Override