-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Expand file tree
/
Copy pathOpenTelemetryInstaller.java
More file actions
73 lines (62 loc) · 3.07 KB
/
Copy pathOpenTelemetryInstaller.java
File metadata and controls
73 lines (62 loc) · 3.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.tooling;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyMap;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.config.bridge.ConfigPropertiesBackedConfigProvider;
import io.opentelemetry.javaagent.bootstrap.OpenTelemetrySdkAccess;
import io.opentelemetry.javaagent.extension.instrumentation.internal.AgentDistributionConfig;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.SdkAutoconfigureAccess;
import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
import io.opentelemetry.sdk.common.CompletableResultCode;
public final class OpenTelemetryInstaller {
/**
* Install the {@link OpenTelemetrySdk} using autoconfigure, and return the {@link
* AutoConfiguredOpenTelemetrySdk}.
*
* @return the {@link AutoConfiguredOpenTelemetrySdk}
*/
public static AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk(
ClassLoader extensionClassLoader) {
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
AutoConfiguredOpenTelemetrySdk.builder()
// Don't use setResultAsGlobal() - we need to wrap the SDK before setting as global
.setServiceClassLoader(extensionClassLoader)
.build();
OpenTelemetrySdk sdk = autoConfiguredSdk.getOpenTelemetrySdk();
ConfigProperties configProperties = AutoConfigureUtil.getConfig(autoConfiguredSdk);
if (configProperties != null) {
// Provide a fake declarative configuration based on config properties
// so that declarative configuration API can be used everywhere
sdk =
new ExtendedOpenTelemetrySdkWrapper(
sdk, ConfigPropertiesBackedConfigProvider.create(configProperties));
AgentDistributionConfig.set(AgentDistributionConfig.fromConfigProperties(configProperties));
} else {
// Declarative config path: no ConfigProperties available, use empty defaults
configProperties = DefaultConfigProperties.createFromMap(emptyMap());
}
setForceFlush(sdk);
GlobalOpenTelemetry.set(sdk);
return SdkAutoconfigureAccess.create(
sdk, SdkAutoconfigureAccess.getResource(autoConfiguredSdk), configProperties);
}
private static void setForceFlush(OpenTelemetrySdk sdk) {
OpenTelemetrySdkAccess.internalSetForceFlush(
(timeout, unit) -> {
CompletableResultCode traceResult = sdk.getSdkTracerProvider().forceFlush();
CompletableResultCode metricsResult = sdk.getSdkMeterProvider().forceFlush();
CompletableResultCode logsResult = sdk.getSdkLoggerProvider().forceFlush();
CompletableResultCode.ofAll(asList(traceResult, metricsResult, logsResult))
.join(timeout, unit);
});
}
private OpenTelemetryInstaller() {}
}