|
29 | 29 | import io.opentelemetry.sdk.metrics.internal.view.ViewRegistry; |
30 | 30 | import io.opentelemetry.sdk.resources.Resource; |
31 | 31 | import java.io.Closeable; |
| 32 | +import java.lang.reflect.InvocationTargetException; |
| 33 | +import java.lang.reflect.Method; |
32 | 34 | import java.util.ArrayList; |
33 | 35 | import java.util.Collection; |
34 | 36 | import java.util.Collections; |
@@ -99,7 +101,7 @@ public static SdkMeterProviderBuilder builder() { |
99 | 101 | reader.register(new SdkCollectionRegistration(readerMetricProducers, sharedState)); |
100 | 102 | registeredReader.setLastCollectEpochNanos(startEpochNanos); |
101 | 103 | if (reader instanceof PeriodicMetricReader) { |
102 | | - SdkMeterProviderUtil.setMeterProvider((PeriodicMetricReader) reader, this); |
| 104 | + setReaderMeterProvider((PeriodicMetricReader) reader, this); |
103 | 105 | } |
104 | 106 | } |
105 | 107 | } |
@@ -198,6 +200,18 @@ public String toString() { |
198 | 200 | + "}"; |
199 | 201 | } |
200 | 202 |
|
| 203 | + private static void setReaderMeterProvider( |
| 204 | + PeriodicMetricReader metricReader, SdkMeterProvider meterProvider) { |
| 205 | + try { |
| 206 | + Method method = |
| 207 | + PeriodicMetricReader.class.getDeclaredMethod("setMeterProvider", MeterProvider.class); |
| 208 | + method.setAccessible(true); |
| 209 | + method.invoke(metricReader, meterProvider); |
| 210 | + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { |
| 211 | + throw new IllegalStateException("Error calling setMeterProvider on PeriodicMetricReader", e); |
| 212 | + } |
| 213 | + } |
| 214 | + |
201 | 215 | /** Helper class to expose registered metric exports. */ |
202 | 216 | private static class LeasedMetricProducer implements MetricProducer { |
203 | 217 |
|
|
0 commit comments