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
5753 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 ();
54+ Logger .getLogger (BuiltInMetricsProvider .class .getName ());
6255
6356 private static String taskId ;
6457
6558 private OpenTelemetry openTelemetry ;
6659
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 ) {
60+ private BuiltInMetricsProvider () {}
8061
62+ OpenTelemetry getOrCreateOpenTelemetry (
63+ String projectId , @ Nullable Credentials credentials , @ Nullable String monitoringHost ) {
8164 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 ;
65+ if (this .openTelemetry == null ) {
66+ SdkMeterProviderBuilder sdkMeterProviderBuilder = SdkMeterProvider .builder ();
67+ BuiltInOpenTelemetryMetricsView .registerBuiltinMetrics (
68+ SpannerCloudMonitoringExporter .create (projectId , credentials , monitoringHost ),
69+ sdkMeterProviderBuilder );
70+ SdkMeterProvider sdkMeterProvider = sdkMeterProviderBuilder .build ();
71+ this .openTelemetry = OpenTelemetrySdk .builder ().setMeterProvider (sdkMeterProvider ).build ();
72+ Runtime .getRuntime ().addShutdownHook (new Thread (sdkMeterProvider ::close ));
8873 }
89- } catch (Exception ex ) {
74+ return this .openTelemetry ;
75+ } catch (IOException ex ) {
9076 logger .log (
9177 Level .WARNING ,
92- "Unable to initialize OpenTelemetry object or attributes for client side metrics, will skip exporting client side metrics" ,
78+ "Unable to get OpenTelemetry object for client side metrics, will skip exporting client side metrics" ,
9379 ex );
80+ return null ;
9481 }
9582 }
9683
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 ) {
84+ Map <String , String > createClientAttributes (String projectId , String client_name ) {
12785 Map <String , String > clientAttributes = new HashMap <>();
12886 clientAttributes .put (LOCATION_ID_KEY .getKey (), detectClientLocation ());
12987 clientAttributes .put (PROJECT_ID_KEY .getKey (), projectId );
@@ -135,20 +93,6 @@ private Map<String, String> createClientAttributes(String projectId, String clie
13593 return clientAttributes ;
13694 }
13795
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-
15296 /**
15397 * Generates a 6-digit zero-padded all lower case hexadecimal representation of hash of the
15498 * accounting group. The hash utilizes the 10 most significant bits of the value returned by
0 commit comments