19
19
import static com .splunk .rum .SplunkRum .ERROR_MESSAGE_KEY ;
20
20
import static com .splunk .rum .SplunkRum .ERROR_TYPE_KEY ;
21
21
import static io .opentelemetry .api .common .AttributeKey .stringKey ;
22
- import static io .opentelemetry .semconv .trace .attributes .SemanticAttributes .EXCEPTION_MESSAGE ;
23
- import static io .opentelemetry .semconv .trace .attributes .SemanticAttributes .EXCEPTION_STACKTRACE ;
24
- import static io .opentelemetry .semconv .trace .attributes .SemanticAttributes .EXCEPTION_TYPE ;
22
+ import static io .opentelemetry .semconv .SemanticAttributes .EXCEPTION_MESSAGE ;
23
+ import static io .opentelemetry .semconv .SemanticAttributes .EXCEPTION_STACKTRACE ;
24
+ import static io .opentelemetry .semconv .SemanticAttributes .EXCEPTION_TYPE ;
25
+ import static io .opentelemetry .semconv .SemanticAttributes .NETWORK_CARRIER_ICC ;
26
+ import static io .opentelemetry .semconv .SemanticAttributes .NETWORK_CARRIER_MCC ;
27
+ import static io .opentelemetry .semconv .SemanticAttributes .NETWORK_CARRIER_MNC ;
28
+ import static io .opentelemetry .semconv .SemanticAttributes .NETWORK_CARRIER_NAME ;
29
+ import static io .opentelemetry .semconv .SemanticAttributes .NETWORK_CONNECTION_SUBTYPE ;
30
+ import static io .opentelemetry .semconv .SemanticAttributes .NETWORK_CONNECTION_TYPE ;
31
+ import static io .opentelemetry .semconv .SemanticAttributes .NET_HOST_CARRIER_ICC ;
32
+ import static io .opentelemetry .semconv .SemanticAttributes .NET_HOST_CARRIER_MCC ;
33
+ import static io .opentelemetry .semconv .SemanticAttributes .NET_HOST_CARRIER_MNC ;
34
+ import static io .opentelemetry .semconv .SemanticAttributes .NET_HOST_CARRIER_NAME ;
35
+ import static io .opentelemetry .semconv .SemanticAttributes .NET_HOST_CONNECTION_SUBTYPE ;
36
+ import static io .opentelemetry .semconv .SemanticAttributes .NET_HOST_CONNECTION_TYPE ;
25
37
import static java .util .Arrays .asList ;
26
38
import static java .util .Collections .unmodifiableSet ;
27
39
35
47
import io .opentelemetry .sdk .trace .data .EventData ;
36
48
import io .opentelemetry .sdk .trace .data .SpanData ;
37
49
import io .opentelemetry .sdk .trace .export .SpanExporter ;
38
- import io .opentelemetry .semconv .resource . attributes . ResourceAttributes ;
39
- import io .opentelemetry .semconv .trace . attributes . SemanticAttributes ;
50
+ import io .opentelemetry .semconv .ResourceAttributes ;
51
+ import io .opentelemetry .semconv .SemanticAttributes ;
40
52
import java .util .ArrayList ;
41
53
import java .util .Collection ;
42
54
import java .util .HashSet ;
@@ -103,6 +115,10 @@ private SpanData modify(SpanData original) {
103
115
spanContext = original .getSpanContext ();
104
116
}
105
117
118
+ // Convert new net semconv to old
119
+ modifiedAttributes =
120
+ downgradeNetworkAttrNames (original .getAttributes (), modifiedAttributes );
121
+
106
122
// zipkin eats the event attributes that are recorded by default, so we need to convert
107
123
// the exception event to span attributes
108
124
for (EventData event : original .getEvents ()) {
@@ -129,6 +145,19 @@ private SpanData modify(SpanData original) {
129
145
return new SplunkSpan (original , spanContext , modifiedEvents , modifiedAttributes .build ());
130
146
}
131
147
148
+ // At least until we can leverage the new names...
149
+ private AttributesBuilder downgradeNetworkAttrNames (
150
+ Attributes originalAttributes , AttributesBuilder attributes ) {
151
+ return AttributeReplacer .with (originalAttributes , attributes )
152
+ .update (NETWORK_CONNECTION_TYPE , NET_HOST_CONNECTION_TYPE )
153
+ .update (NETWORK_CONNECTION_SUBTYPE , NET_HOST_CONNECTION_SUBTYPE )
154
+ .update (NETWORK_CARRIER_ICC , NET_HOST_CARRIER_ICC )
155
+ .update (NETWORK_CARRIER_MCC , NET_HOST_CARRIER_MCC )
156
+ .update (NETWORK_CARRIER_MNC , NET_HOST_CARRIER_MNC )
157
+ .update (NETWORK_CARRIER_NAME , NET_HOST_CARRIER_NAME )
158
+ .finish ();
159
+ }
160
+
132
161
private SpanContext extractReactNativeIdsIfPresent (SpanData original ) {
133
162
Attributes attributes = original .getAttributes ();
134
163
SpanContext originalSpanContext = original .getSpanContext ();
@@ -230,4 +259,31 @@ public int getTotalAttributeCount() {
230
259
return modifiedAttributes .size ();
231
260
}
232
261
}
262
+
263
+ private static class AttributeReplacer {
264
+ private final Attributes original ;
265
+ private final AttributesBuilder attributes ;
266
+
267
+ private static AttributeReplacer with (Attributes original , AttributesBuilder attributes ) {
268
+ return new AttributeReplacer (original , attributes );
269
+ }
270
+
271
+ private AttributeReplacer (Attributes original , AttributesBuilder attributes ) {
272
+ this .original = original ;
273
+ this .attributes = attributes ;
274
+ }
275
+
276
+ <T > AttributeReplacer update (AttributeKey <T > currentName , AttributeKey <T > replacementName ) {
277
+ T value = original .get (currentName );
278
+ if (value != null ) {
279
+ attributes .remove (currentName );
280
+ attributes .put (replacementName , value );
281
+ }
282
+ return this ;
283
+ }
284
+
285
+ AttributesBuilder finish () {
286
+ return attributes ;
287
+ }
288
+ }
233
289
}
0 commit comments