28
28
import com .google .cloud .opentelemetry .detection .AttributeKeys ;
29
29
import com .google .cloud .opentelemetry .detection .DetectedPlatform ;
30
30
import 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 ;
34
31
import com .google .common .hash .HashFunction ;
35
32
import com .google .common .hash .Hashing ;
36
33
import io .opentelemetry .api .OpenTelemetry ;
49
46
import java .util .logging .Logger ;
50
47
import javax .annotation .Nullable ;
51
48
52
- final class BuiltInOpenTelemetryMetricsProvider {
49
+ final class BuiltInMetricsProvider {
53
50
54
- public static BuiltInOpenTelemetryMetricsProvider INSTANCE =
55
- new BuiltInOpenTelemetryMetricsProvider ();
51
+ static BuiltInMetricsProvider INSTANCE = new BuiltInMetricsProvider ();
56
52
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 ());
62
54
63
55
private static String taskId ;
64
56
65
57
private OpenTelemetry openTelemetry ;
66
58
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 () {}
80
60
61
+ OpenTelemetry getOrCreateOpenTelemetry (
62
+ String projectId , @ Nullable Credentials credentials , @ Nullable String monitoringHost ) {
81
63
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 ));
88
72
}
89
- } catch (Exception ex ) {
73
+ return this .openTelemetry ;
74
+ } catch (IOException ex ) {
90
75
logger .log (
91
76
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" ,
93
78
ex );
79
+ return null ;
94
80
}
95
81
}
96
82
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 ) {
127
84
Map <String , String > clientAttributes = new HashMap <>();
128
85
clientAttributes .put (LOCATION_ID_KEY .getKey (), detectClientLocation ());
129
86
clientAttributes .put (PROJECT_ID_KEY .getKey (), projectId );
@@ -135,20 +92,6 @@ private Map<String, String> createClientAttributes(String projectId, String clie
135
92
return clientAttributes ;
136
93
}
137
94
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
-
152
95
/**
153
96
* Generates a 6-digit zero-padded all lower case hexadecimal representation of hash of the
154
97
* accounting group. The hash utilizes the 10 most significant bits of the value returned by
0 commit comments