5
5
6
6
package io .opentelemetry .contrib .gcp .auth ;
7
7
8
+ import static io .opentelemetry .contrib .gcp .auth .GcpAuthAutoConfigurationCustomizerProvider .SIGNAL_TYPE_TRACES ;
9
+ import static io .opentelemetry .contrib .gcp .auth .GcpAuthAutoConfigurationCustomizerProvider .isSignalTargeted ;
10
+
8
11
import com .google .auth .oauth2 .GoogleCredentials ;
9
12
import com .google .auto .service .AutoService ;
13
+ import io .opentelemetry .contrib .sdk .autoconfigure .ConfigPropertiesUtil ;
14
+ import io .opentelemetry .sdk .autoconfigure .spi .ConfigProperties ;
10
15
import io .opentelemetry .sdk .extension .incubator .fileconfig .DeclarativeConfigurationCustomizer ;
11
16
import io .opentelemetry .sdk .extension .incubator .fileconfig .DeclarativeConfigurationCustomizerProvider ;
12
- import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .BatchLogRecordProcessorModel ;
13
17
import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .BatchSpanProcessorModel ;
14
- import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .LogRecordExporterModel ;
15
- import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .LogRecordProcessorModel ;
16
- import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .LoggerProviderModel ;
17
18
import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .MeterProviderModel ;
18
19
import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .MetricReaderModel ;
19
20
import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .NameStringValuePairModel ;
23
24
import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .OtlpHttpExporterModel ;
24
25
import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .OtlpHttpMetricExporterModel ;
25
26
import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .PushMetricExporterModel ;
26
- import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .SimpleLogRecordProcessorModel ;
27
27
import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .SimpleSpanProcessorModel ;
28
28
import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .SpanExporterModel ;
29
29
import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .SpanProcessorModel ;
30
30
import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .TracerProviderModel ;
31
31
import java .util .ArrayList ;
32
32
import java .util .List ;
33
33
import java .util .Map ;
34
+ import javax .annotation .Nullable ;
34
35
35
36
@ AutoService (DeclarativeConfigurationCustomizerProvider .class )
36
37
public class GcpAuthCustomizerProvider implements DeclarativeConfigurationCustomizerProvider {
37
38
39
+ // private static final String SIGNAL_TARGET_WARNING_FIX_SUGGESTION =
40
+ // String.format(
41
+ // "You may safely ignore this warning if it is intentional, otherwise please configure the '%s' by exporting valid values to environment variable: %s or by setting valid values in system property: %s.",
42
+ // ConfigurableOption.GOOGLE_OTEL_AUTH_TARGET_SIGNALS.getUserReadableName(),
43
+ // ConfigurableOption.GOOGLE_OTEL_AUTH_TARGET_SIGNALS.getEnvironmentVariable(),
44
+ // ConfigurableOption.GOOGLE_OTEL_AUTH_TARGET_SIGNALS.getSystemProperty());
45
+
46
+
47
+
38
48
@ Override
39
49
public void customize (DeclarativeConfigurationCustomizer customizer ) {
40
50
customizer .addModelCustomizer (
41
51
model -> {
52
+ ConfigProperties configProperties = ConfigPropertiesUtil .resolveModel (model );
42
53
GoogleCredentials credentials =
43
54
GcpAuthAutoConfigurationCustomizerProvider .getCredentials ();
44
- // todo pass config bridge
45
- Map <String , String > headerMap =
46
- GcpAuthAutoConfigurationCustomizerProvider .getRequiredHeaderMap (credentials , null );
47
- customizeMeter (model , headerMap );
48
- // todo are loggers supported now (not covered in old variant)?
49
- customizeLogger (model , headerMap );
50
- customizeTracer (model , headerMap );
55
+ customize (model , credentials , configProperties );
51
56
52
57
return model ;
53
58
});
54
59
}
55
60
56
- private void customizeMeter (
57
- OpenTelemetryConfigurationModel model , Map <String , String > headerMap ) {
61
+ static void customize (OpenTelemetryConfigurationModel model ,
62
+ GoogleCredentials credentials , ConfigProperties configProperties ) {
63
+ Map <String , String > headerMap =
64
+ GcpAuthAutoConfigurationCustomizerProvider .getRequiredHeaderMap (credentials ,
65
+ configProperties );
66
+ customizeMeter (model , headerMap , configProperties );
67
+ customizeTracer (model , headerMap , configProperties );
68
+ }
69
+
70
+ private static void customizeMeter (
71
+ OpenTelemetryConfigurationModel model , Map <String , String > headerMap ,
72
+ ConfigProperties configProperties ) {
58
73
MeterProviderModel meterProvider = model .getMeterProvider ();
59
74
if (meterProvider == null ) {
60
75
return ;
61
76
}
62
77
78
+ if (!isSignalTargeted (SIGNAL_TYPE_TRACES , configProperties )) {
79
+ // todo
80
+ // String[] params = {SIGNAL_TYPE_TRACES, SIGNAL_TARGET_WARNING_FIX_SUGGESTION};
81
+ // logger.log(
82
+ // Level.WARNING,
83
+ // "GCP Authentication Extension is not configured for signal type: {0}. {1}",
84
+ // params);
85
+ return ;
86
+ }
87
+
63
88
for (MetricReaderModel reader : meterProvider .getReaders ()) {
64
89
if (reader .getPeriodic () != null ) {
65
90
addAuth (meterModelHeaders (reader .getPeriodic ().getExporter ()), headerMap );
66
91
}
67
92
}
68
93
}
69
94
70
- private List <List <NameStringValuePairModel >> meterModelHeaders (PushMetricExporterModel exporter ) {
95
+ private static List <List <NameStringValuePairModel >> meterModelHeaders (
96
+ @ Nullable PushMetricExporterModel exporter ) {
71
97
ArrayList <List <NameStringValuePairModel >> list = new ArrayList <>();
72
98
if (exporter == null ) {
73
99
return list ;
@@ -83,62 +109,23 @@ private List<List<NameStringValuePairModel>> meterModelHeaders(PushMetricExporte
83
109
return list ;
84
110
}
85
111
86
- private void customizeLogger (
87
- OpenTelemetryConfigurationModel model , Map <String , String > headerMap ) {
88
- LoggerProviderModel loggerProvider = model .getLoggerProvider ();
89
- if (loggerProvider == null ) {
90
- return ;
91
- }
92
- for (LogRecordProcessorModel processor : loggerProvider .getProcessors ()) {
93
- BatchLogRecordProcessorModel batch = processor .getBatch ();
94
- if (batch != null ) {
95
- addAuth (logRecordModelHeaders (batch .getExporter ()), headerMap );
96
- }
97
- SimpleLogRecordProcessorModel simple = processor .getSimple ();
98
- if (simple != null ) {
99
- addAuth (logRecordModelHeaders (simple .getExporter ()), headerMap );
100
- }
101
- }
102
- }
103
-
104
- private List <List <NameStringValuePairModel >> logRecordModelHeaders (
105
- LogRecordExporterModel exporter ) {
106
- ArrayList <List <NameStringValuePairModel >> list = new ArrayList <>();
107
-
108
- if (exporter == null ) {
109
- return list ;
110
- }
111
- OtlpGrpcExporterModel grpc = exporter .getOtlpGrpc ();
112
- if (grpc != null ) {
113
- list .add (grpc .getHeaders ());
114
- }
115
- OtlpHttpExporterModel http = exporter .getOtlpHttp ();
116
- if (http != null ) {
117
- list .add (http .getHeaders ());
118
- }
119
- return list ;
120
- }
121
-
122
- private void customizeTracer (
123
- OpenTelemetryConfigurationModel model , Map <String , String > headerMap ) {
112
+ private static void customizeTracer (
113
+ OpenTelemetryConfigurationModel model , Map <String , String > headerMap ,
114
+ ConfigProperties configProperties ) {
124
115
TracerProviderModel tracerProvider = model .getTracerProvider ();
125
116
if (tracerProvider == null ) {
126
117
return ;
127
118
}
128
119
129
- // todo here we would want a simplified version of the declarative config bridge
130
- // https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/DeclarativeConfigPropertiesBridge.java
131
- // googleNode(model)
132
-
133
- // if (!isSignalTargeted(SIGNAL_TYPE_TRACES, configProperties)) {
134
- // todo
135
- // String[] params = {SIGNAL_TYPE_TRACES, SIGNAL_TARGET_WARNING_FIX_SUGGESTION};
136
- // logger.log(
137
- // Level.WARNING,
138
- // "GCP Authentication Extension is not configured for signal type: {0}. {1}",
139
- // params);
140
- // return;
141
- // }
120
+ if (!isSignalTargeted (SIGNAL_TYPE_TRACES , configProperties )) {
121
+ // todo
122
+ // String[] params = {SIGNAL_TYPE_TRACES, SIGNAL_TARGET_WARNING_FIX_SUGGESTION};
123
+ // logger.log(
124
+ // Level.WARNING,
125
+ // "GCP Authentication Extension is not configured for signal type: {0}. {1}",
126
+ // params);
127
+ return ;
128
+ }
142
129
143
130
for (SpanProcessorModel processor : tracerProvider .getProcessors ()) {
144
131
BatchSpanProcessorModel batch = processor .getBatch ();
@@ -152,12 +139,8 @@ private void customizeTracer(
152
139
}
153
140
}
154
141
155
- private void googleNode (OpenTelemetryConfigurationModel model ) {
156
- // todo use declarative config bridge
157
- }
158
-
159
- private List <List <NameStringValuePairModel >> spanExporterModelHeaders (
160
- SpanExporterModel exporter ) {
142
+ private static List <List <NameStringValuePairModel >> spanExporterModelHeaders (
143
+ @ Nullable SpanExporterModel exporter ) {
161
144
ArrayList <List <NameStringValuePairModel >> list = new ArrayList <>();
162
145
163
146
if (exporter == null ) {
@@ -174,12 +157,12 @@ private List<List<NameStringValuePairModel>> spanExporterModelHeaders(
174
157
return list ;
175
158
}
176
159
177
- private void addAuth (
160
+ private static void addAuth (
178
161
List <List <NameStringValuePairModel >> headerConsumers , Map <String , String > headerMap ) {
179
162
headerConsumers .forEach (headers -> addHeaders (headers , headerMap ));
180
163
}
181
164
182
- private void addHeaders (List <NameStringValuePairModel > headers , Map <String , String > add ) {
165
+ private static void addHeaders (List <NameStringValuePairModel > headers , Map <String , String > add ) {
183
166
add .forEach (
184
167
(key , value ) -> {
185
168
if (headers .stream ().noneMatch (header -> key .equals (header .getName ()))) {
0 commit comments