2020import io .opentelemetry .context .Scope ;
2121import io .opentelemetry .exporter .otlp .http .trace .OtlpHttpSpanExporter ;
2222import io .opentelemetry .exporter .otlp .http .trace .OtlpHttpSpanExporterBuilder ;
23+ import io .opentelemetry .exporter .otlp .trace .OtlpGrpcSpanExporter ;
24+ import io .opentelemetry .exporter .otlp .trace .OtlpGrpcSpanExporterBuilder ;
2325import io .opentelemetry .sdk .OpenTelemetrySdk ;
2426import io .opentelemetry .sdk .autoconfigure .AutoConfiguredOpenTelemetrySdk ;
2527import io .opentelemetry .sdk .common .CompletableResultCode ;
2628import io .opentelemetry .sdk .trace .export .SpanExporter ;
27- import java .io .*;
2829import java .io .IOException ;
2930import java .util .Random ;
3031import java .util .concurrent .TimeUnit ;
@@ -48,6 +49,8 @@ private static OpenTelemetrySdk setupTraceExporter() throws IOException {
4849 }
4950
5051 // Modifies the span exporter initially auto-configured using environment variables
52+ // Note: This adds static authorization headers which are set only at initialization time.
53+ // This will stop working after the token expires, since the token is not refreshed.
5154 private static SpanExporter addAuthorizationHeaders (
5255 SpanExporter exporter , GoogleCredentials credentials ) {
5356 if (exporter instanceof OtlpHttpSpanExporter ) {
@@ -63,6 +66,18 @@ private static SpanExporter addAuthorizationHeaders(
6366 } catch (IOException e ) {
6467 System .out .println ("error:" + e .getMessage ());
6568 }
69+ } else if (exporter instanceof OtlpGrpcSpanExporter ) {
70+ try {
71+ credentials .refreshIfExpired ();
72+ OtlpGrpcSpanExporterBuilder builder =
73+ ((OtlpGrpcSpanExporter ) exporter )
74+ .toBuilder ()
75+ .addHeader (
76+ "Authorization" , "Bearer " + credentials .getAccessToken ().getTokenValue ());
77+ return builder .build ();
78+ } catch (IOException e ) {
79+ throw new RuntimeException (e );
80+ }
6681 }
6782 return exporter ;
6883 }
0 commit comments