2828import com .google .cloud .opentelemetry .detection .AttributeKeys ;
2929import com .google .cloud .opentelemetry .detection .DetectedPlatform ;
3030import com .google .cloud .opentelemetry .detection .GCPPlatformDetector ;
31- import com .google .common .annotations .VisibleForTesting ;
32- import com .google .common .cache .Cache ;
33- import com .google .common .cache .CacheBuilder ;
3431import com .google .common .hash .HashFunction ;
3532import com .google .common .hash .Hashing ;
3633import io .opentelemetry .api .OpenTelemetry ;
4946import java .util .logging .Logger ;
5047import javax .annotation .Nullable ;
5148
52- final class BuiltInOpenTelemetryMetricsProvider {
49+ final class BuiltInMetricsProvider {
5350
54- public static BuiltInOpenTelemetryMetricsProvider INSTANCE =
55- new BuiltInOpenTelemetryMetricsProvider ();
51+ static BuiltInMetricsProvider INSTANCE = new BuiltInMetricsProvider ();
5652
57- private static final Logger logger =
58- Logger .getLogger (BuiltInOpenTelemetryMetricsProvider .class .getName ());
59-
60- private final Cache <String , Map <String , String >> clientAttributesCache =
61- CacheBuilder .newBuilder ().maximumSize (1000 ).build ();
53+ private static final Logger logger = Logger .getLogger (BuiltInMetricsProvider .class .getName ());
6254
6355 private static String taskId ;
6456
6557 private OpenTelemetry openTelemetry ;
6658
67- private Map <String , String > clientAttributes ;
68-
69- private boolean isInitialized ;
70-
71- private BuiltInOpenTelemetryMetricsRecorder builtInOpenTelemetryMetricsRecorder ;
72-
73- private BuiltInOpenTelemetryMetricsProvider () {};
74-
75- void initialize (
76- String projectId ,
77- String client_name ,
78- @ Nullable Credentials credentials ,
79- @ Nullable String monitoringHost ) {
59+ private BuiltInMetricsProvider () {}
8060
61+ OpenTelemetry getOrCreateOpenTelemetry (
62+ String projectId , @ Nullable Credentials credentials , @ Nullable String monitoringHost ) {
8163 try {
82- if (!isInitialized ) {
83- this .openTelemetry = createOpenTelemetry (projectId , credentials , monitoringHost );
84- this .clientAttributes = createClientAttributes (projectId , client_name );
85- this .builtInOpenTelemetryMetricsRecorder =
86- new BuiltInOpenTelemetryMetricsRecorder (openTelemetry , clientAttributes );
87- isInitialized = true ;
64+ if (this .openTelemetry == null ) {
65+ SdkMeterProviderBuilder sdkMeterProviderBuilder = SdkMeterProvider .builder ();
66+ BuiltInMetricsView .registerBuiltinMetrics (
67+ SpannerCloudMonitoringExporter .create (projectId , credentials , monitoringHost ),
68+ sdkMeterProviderBuilder );
69+ SdkMeterProvider sdkMeterProvider = sdkMeterProviderBuilder .build ();
70+ this .openTelemetry = OpenTelemetrySdk .builder ().setMeterProvider (sdkMeterProvider ).build ();
71+ Runtime .getRuntime ().addShutdownHook (new Thread (sdkMeterProvider ::close ));
8872 }
89- } catch (Exception ex ) {
73+ return this .openTelemetry ;
74+ } catch (IOException ex ) {
9075 logger .log (
9176 Level .WARNING ,
92- "Unable to initialize OpenTelemetry object or attributes for client side metrics, will skip exporting client side metrics" ,
77+ "Unable to get OpenTelemetry object for client side metrics, will skip exporting client side metrics" ,
9378 ex );
79+ return null ;
9480 }
9581 }
9682
97- @ VisibleForTesting
98- void initialize (
99- OpenTelemetry openTelemetry ,
100- String projectId ,
101- String client_name ,
102- @ Nullable Credentials credentials ,
103- @ Nullable String monitoringHost ) {
104- initialize (projectId , client_name , credentials , monitoringHost );
105- this .builtInOpenTelemetryMetricsRecorder =
106- new BuiltInOpenTelemetryMetricsRecorder (openTelemetry , clientAttributes );
107- }
108-
109- OpenTelemetry getOpenTelemetry () {
110- return this .openTelemetry ;
111- }
112-
113- Map <String , String > getClientAttributes () {
114- return this .clientAttributes ;
115- }
116-
117- BuiltInOpenTelemetryMetricsRecorder getBuiltInOpenTelemetryMetricsRecorder () {
118- return this .builtInOpenTelemetryMetricsRecorder ;
119- }
120-
121- @ VisibleForTesting
122- void reset () {
123- isInitialized = false ;
124- }
125-
126- private Map <String , String > createClientAttributes (String projectId , String client_name ) {
83+ Map <String , String > createClientAttributes (String projectId , String client_name ) {
12784 Map <String , String > clientAttributes = new HashMap <>();
12885 clientAttributes .put (LOCATION_ID_KEY .getKey (), detectClientLocation ());
12986 clientAttributes .put (PROJECT_ID_KEY .getKey (), projectId );
@@ -135,20 +92,6 @@ private Map<String, String> createClientAttributes(String projectId, String clie
13592 return clientAttributes ;
13693 }
13794
138- private OpenTelemetry createOpenTelemetry (
139- String projectId , @ Nullable Credentials credentials , @ Nullable String monitoringHost )
140- throws IOException {
141- OpenTelemetry openTelemetry ;
142- SdkMeterProviderBuilder sdkMeterProviderBuilder = SdkMeterProvider .builder ();
143- BuiltInOpenTelemetryMetricsView .registerBuiltinMetrics (
144- SpannerCloudMonitoringExporter .create (projectId , credentials , monitoringHost ),
145- sdkMeterProviderBuilder );
146- SdkMeterProvider sdkMeterProvider = sdkMeterProviderBuilder .build ();
147- openTelemetry = OpenTelemetrySdk .builder ().setMeterProvider (sdkMeterProvider ).build ();
148- Runtime .getRuntime ().addShutdownHook (new Thread (sdkMeterProvider ::close ));
149- return openTelemetry ;
150- }
151-
15295 /**
15396 * Generates a 6-digit zero-padded all lower case hexadecimal representation of hash of the
15497 * accounting group. The hash utilizes the 10 most significant bits of the value returned by
0 commit comments