55
66package io .opentelemetry .contrib .gcp .auth ;
77
8+ import static io .opentelemetry .contrib .gcp .auth .GcpAuthAutoConfigurationCustomizerProvider .SIGNAL_TYPE_TRACES ;
9+ import static io .opentelemetry .contrib .gcp .auth .GcpAuthAutoConfigurationCustomizerProvider .isSignalTargeted ;
10+
811import com .google .auth .oauth2 .GoogleCredentials ;
912import com .google .auto .service .AutoService ;
13+ import io .opentelemetry .contrib .sdk .autoconfigure .ConfigPropertiesUtil ;
14+ import io .opentelemetry .sdk .autoconfigure .spi .ConfigProperties ;
1015import io .opentelemetry .sdk .extension .incubator .fileconfig .DeclarativeConfigurationCustomizer ;
1116import io .opentelemetry .sdk .extension .incubator .fileconfig .DeclarativeConfigurationCustomizerProvider ;
12- import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .BatchLogRecordProcessorModel ;
1317import 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 ;
1718import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .MeterProviderModel ;
1819import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .MetricReaderModel ;
1920import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .NameStringValuePairModel ;
2324import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .OtlpHttpExporterModel ;
2425import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .OtlpHttpMetricExporterModel ;
2526import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .PushMetricExporterModel ;
26- import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .SimpleLogRecordProcessorModel ;
2727import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .SimpleSpanProcessorModel ;
2828import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .SpanExporterModel ;
2929import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .SpanProcessorModel ;
3030import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .TracerProviderModel ;
3131import java .util .ArrayList ;
3232import java .util .List ;
3333import java .util .Map ;
34+ import javax .annotation .Nullable ;
3435
3536@ AutoService (DeclarativeConfigurationCustomizerProvider .class )
3637public class GcpAuthCustomizerProvider implements DeclarativeConfigurationCustomizerProvider {
3738
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+
3848 @ Override
3949 public void customize (DeclarativeConfigurationCustomizer customizer ) {
4050 customizer .addModelCustomizer (
4151 model -> {
52+ ConfigProperties configProperties = ConfigPropertiesUtil .resolveModel (model );
4253 GoogleCredentials credentials =
4354 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 );
5156
5257 return model ;
5358 });
5459 }
5560
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 ) {
5873 MeterProviderModel meterProvider = model .getMeterProvider ();
5974 if (meterProvider == null ) {
6075 return ;
6176 }
6277
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+
6388 for (MetricReaderModel reader : meterProvider .getReaders ()) {
6489 if (reader .getPeriodic () != null ) {
6590 addAuth (meterModelHeaders (reader .getPeriodic ().getExporter ()), headerMap );
6691 }
6792 }
6893 }
6994
70- private List <List <NameStringValuePairModel >> meterModelHeaders (PushMetricExporterModel exporter ) {
95+ private static List <List <NameStringValuePairModel >> meterModelHeaders (
96+ @ Nullable PushMetricExporterModel exporter ) {
7197 ArrayList <List <NameStringValuePairModel >> list = new ArrayList <>();
7298 if (exporter == null ) {
7399 return list ;
@@ -83,62 +109,23 @@ private List<List<NameStringValuePairModel>> meterModelHeaders(PushMetricExporte
83109 return list ;
84110 }
85111
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 ) {
124115 TracerProviderModel tracerProvider = model .getTracerProvider ();
125116 if (tracerProvider == null ) {
126117 return ;
127118 }
128119
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+ }
142129
143130 for (SpanProcessorModel processor : tracerProvider .getProcessors ()) {
144131 BatchSpanProcessorModel batch = processor .getBatch ();
@@ -152,12 +139,8 @@ private void customizeTracer(
152139 }
153140 }
154141
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 ) {
161144 ArrayList <List <NameStringValuePairModel >> list = new ArrayList <>();
162145
163146 if (exporter == null ) {
@@ -174,12 +157,12 @@ private List<List<NameStringValuePairModel>> spanExporterModelHeaders(
174157 return list ;
175158 }
176159
177- private void addAuth (
160+ private static void addAuth (
178161 List <List <NameStringValuePairModel >> headerConsumers , Map <String , String > headerMap ) {
179162 headerConsumers .forEach (headers -> addHeaders (headers , headerMap ));
180163 }
181164
182- private void addHeaders (List <NameStringValuePairModel > headers , Map <String , String > add ) {
165+ private static void addHeaders (List <NameStringValuePairModel > headers , Map <String , String > add ) {
183166 add .forEach (
184167 (key , value ) -> {
185168 if (headers .stream ().noneMatch (header -> key .equals (header .getName ()))) {
0 commit comments