20
20
import io .opentelemetry .context .Scope ;
21
21
import io .opentelemetry .exporter .otlp .http .trace .OtlpHttpSpanExporter ;
22
22
import io .opentelemetry .exporter .otlp .http .trace .OtlpHttpSpanExporterBuilder ;
23
+ import io .opentelemetry .exporter .otlp .trace .OtlpGrpcSpanExporter ;
24
+ import io .opentelemetry .exporter .otlp .trace .OtlpGrpcSpanExporterBuilder ;
23
25
import io .opentelemetry .sdk .OpenTelemetrySdk ;
24
26
import io .opentelemetry .sdk .autoconfigure .AutoConfiguredOpenTelemetrySdk ;
25
27
import io .opentelemetry .sdk .common .CompletableResultCode ;
26
28
import io .opentelemetry .sdk .trace .export .SpanExporter ;
27
- import java .io .*;
28
29
import java .io .IOException ;
29
30
import java .util .Random ;
30
31
import java .util .concurrent .TimeUnit ;
@@ -48,6 +49,8 @@ private static OpenTelemetrySdk setupTraceExporter() throws IOException {
48
49
}
49
50
50
51
// 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.
51
54
private static SpanExporter addAuthorizationHeaders (
52
55
SpanExporter exporter , GoogleCredentials credentials ) {
53
56
if (exporter instanceof OtlpHttpSpanExporter ) {
@@ -63,6 +66,18 @@ private static SpanExporter addAuthorizationHeaders(
63
66
} catch (IOException e ) {
64
67
System .out .println ("error:" + e .getMessage ());
65
68
}
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
+ }
66
81
}
67
82
return exporter ;
68
83
}
0 commit comments