77
88import io .netty .channel .Channel ;
99import io .netty .handler .codec .http .HttpResponse ;
10- import io .opentelemetry .api .OpenTelemetry ;
11- import io .opentelemetry .instrumentation .api .incubator .semconv .http .HttpClientExperimentalMetrics ;
1210import io .opentelemetry .instrumentation .api .incubator .semconv .http .HttpClientPeerServiceAttributesExtractor ;
13- import io .opentelemetry .instrumentation .api .incubator .semconv .http .HttpExperimentalAttributesExtractor ;
14- import io .opentelemetry .instrumentation .api .incubator .semconv .net .PeerServiceResolver ;
15- import io .opentelemetry .instrumentation .api .instrumenter .AttributesExtractor ;
1611import io .opentelemetry .instrumentation .api .instrumenter .Instrumenter ;
1712import io .opentelemetry .instrumentation .api .instrumenter .InstrumenterBuilder ;
1813import io .opentelemetry .instrumentation .api .instrumenter .SpanKindExtractor ;
19- import io .opentelemetry .instrumentation .api .instrumenter .SpanNameExtractor ;
2014import io .opentelemetry .instrumentation .api .semconv .http .HttpClientAttributesExtractor ;
21- import io .opentelemetry .instrumentation .api .semconv .http .HttpClientAttributesExtractorBuilder ;
22- import io .opentelemetry .instrumentation .api .semconv .http .HttpClientMetrics ;
23- import io .opentelemetry .instrumentation .api .semconv .http .HttpSpanNameExtractor ;
24- import io .opentelemetry .instrumentation .api .semconv .http .HttpSpanNameExtractorBuilder ;
25- import io .opentelemetry .instrumentation .api .semconv .http .HttpSpanStatusExtractor ;
2615import io .opentelemetry .instrumentation .api .semconv .network .NetworkAttributesExtractor ;
2716import io .opentelemetry .instrumentation .api .semconv .network .ServerAttributesExtractor ;
2817import io .opentelemetry .instrumentation .netty .common .internal .NettyConnectionRequest ;
2918import io .opentelemetry .instrumentation .netty .v4 .common .HttpRequestAndChannel ;
30- import java .util .List ;
31- import java .util .function .Consumer ;
32- import java .util .function .Function ;
3319
3420/**
3521 * This class is internal and is hence not for public use. Its APIs are unstable and can change at
3622 * any time.
3723 */
3824public final class NettyClientInstrumenterFactory {
3925
40- private final OpenTelemetry openTelemetry ;
41- private final String instrumentationName ;
26+ private final NettyClientInstrumenterBuilder builder ;
4227 private final NettyConnectionInstrumentationFlag connectionTelemetryState ;
4328 private final NettyConnectionInstrumentationFlag sslTelemetryState ;
44- private final PeerServiceResolver peerServiceResolver ;
45- private final boolean emitExperimentalHttpClientMetrics ;
4629
4730 public NettyClientInstrumenterFactory (
48- OpenTelemetry openTelemetry ,
49- String instrumentationName ,
31+ NettyClientInstrumenterBuilder builder ,
5032 NettyConnectionInstrumentationFlag connectionTelemetryState ,
51- NettyConnectionInstrumentationFlag sslTelemetryState ,
52- PeerServiceResolver peerServiceResolver ,
53- boolean emitExperimentalHttpClientMetrics ) {
54- this .openTelemetry = openTelemetry ;
55- this .instrumentationName = instrumentationName ;
33+ NettyConnectionInstrumentationFlag sslTelemetryState ) {
34+ this .builder = builder ;
5635 this .connectionTelemetryState = connectionTelemetryState ;
5736 this .sslTelemetryState = sslTelemetryState ;
58- this .peerServiceResolver = peerServiceResolver ;
59- this .emitExperimentalHttpClientMetrics = emitExperimentalHttpClientMetrics ;
6037 }
6138
62- public Instrumenter <HttpRequestAndChannel , HttpResponse > createHttpInstrumenter (
63- Consumer <HttpClientAttributesExtractorBuilder <HttpRequestAndChannel , HttpResponse >>
64- extractorConfigurer ,
65- Consumer <HttpSpanNameExtractorBuilder <HttpRequestAndChannel >> spanNameExtractorConfigurer ,
66- Function <
67- SpanNameExtractor <HttpRequestAndChannel >,
68- ? extends SpanNameExtractor <? super HttpRequestAndChannel >>
69- spanNameExtractorTransformer ,
70- List <AttributesExtractor <HttpRequestAndChannel , HttpResponse >>
71- additionalHttpAttributeExtractors ) {
72- NettyHttpClientAttributesGetter httpAttributesGetter = new NettyHttpClientAttributesGetter ();
73-
74- HttpClientAttributesExtractorBuilder <HttpRequestAndChannel , HttpResponse > extractorBuilder =
75- HttpClientAttributesExtractor .builder (httpAttributesGetter );
76- extractorConfigurer .accept (extractorBuilder );
77-
78- HttpSpanNameExtractorBuilder <HttpRequestAndChannel > httpSpanNameExtractorBuilder =
79- HttpSpanNameExtractor .builder (httpAttributesGetter );
80- spanNameExtractorConfigurer .accept (httpSpanNameExtractorBuilder );
81- SpanNameExtractor <? super HttpRequestAndChannel > spanNameExtractor =
82- spanNameExtractorTransformer .apply (httpSpanNameExtractorBuilder .build ());
83-
84- InstrumenterBuilder <HttpRequestAndChannel , HttpResponse > builder =
85- Instrumenter .<HttpRequestAndChannel , HttpResponse >builder (
86- openTelemetry , instrumentationName , spanNameExtractor )
87- .setSpanStatusExtractor (HttpSpanStatusExtractor .create (httpAttributesGetter ))
88- .addAttributesExtractor (extractorBuilder .build ())
89- .addAttributesExtractor (
90- HttpClientPeerServiceAttributesExtractor .create (
91- httpAttributesGetter , peerServiceResolver ))
92- .addAttributesExtractors (additionalHttpAttributeExtractors )
93- .addOperationMetrics (HttpClientMetrics .get ());
94- if (emitExperimentalHttpClientMetrics ) {
95- builder
96- .addAttributesExtractor (HttpExperimentalAttributesExtractor .create (httpAttributesGetter ))
97- .addOperationMetrics (HttpClientExperimentalMetrics .get ());
98- }
99- return builder .buildClientInstrumenter (HttpRequestHeadersSetter .INSTANCE );
39+ public Instrumenter <HttpRequestAndChannel , HttpResponse > instrumenter () {
40+ return builder .instrumenter ();
10041 }
10142
10243 public NettyConnectionInstrumenter createConnectionInstrumenter () {
@@ -110,9 +51,9 @@ public NettyConnectionInstrumenter createConnectionInstrumenter() {
11051
11152 InstrumenterBuilder <NettyConnectionRequest , Channel > builder =
11253 Instrumenter .<NettyConnectionRequest , Channel >builder (
113- openTelemetry , instrumentationName , NettyConnectionRequest ::spanName )
54+ this . builder . getOpenTelemetry (), this . builder . getInstrumentationName () , NettyConnectionRequest ::spanName )
11455 .addAttributesExtractor (
115- HttpClientPeerServiceAttributesExtractor .create (getter , peerServiceResolver ));
56+ HttpClientPeerServiceAttributesExtractor .create (getter , this . builder . getPeerServiceResolver () ));
11657
11758 if (connectionTelemetryFullyEnabled ) {
11859 // when the connection telemetry is fully enabled, CONNECT spans are created for every
@@ -147,7 +88,7 @@ public NettySslInstrumenter createSslInstrumenter() {
14788 NettySslNetAttributesGetter netAttributesGetter = new NettySslNetAttributesGetter ();
14889 Instrumenter <NettySslRequest , Void > instrumenter =
14990 Instrumenter .<NettySslRequest , Void >builder (
150- openTelemetry , instrumentationName , NettySslRequest ::spanName )
91+ builder . getOpenTelemetry (), builder . getInstrumentationName () , NettySslRequest ::spanName )
15192 .addAttributesExtractor (NetworkAttributesExtractor .create (netAttributesGetter ))
15293 .buildInstrumenter (
15394 sslTelemetryFullyEnabled
0 commit comments