Skip to content

Commit a9f646a

Browse files
Upgrade OpenTelemetry to 0.10.0 (#8889)
* Upgrade OpenTelemetry to 0.10.0. Update tracing.txt. * Update attribute key constants to use OpenTelemetry Semantic constants. Co-authored-by: David Burns <[email protected]>
1 parent c02cdd2 commit a9f646a

File tree

17 files changed

+446
-524
lines changed

17 files changed

+446
-524
lines changed

java/client/src/org/openqa/selenium/remote/tracing/AttributeKey.java

+15-13
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,21 @@
1717

1818
package org.openqa.selenium.remote.tracing;
1919

20+
import io.opentelemetry.api.trace.attributes.SemanticAttributes;
21+
2022
public enum AttributeKey {
2123

22-
EXCEPTION_EVENT("exception"),
23-
EXCEPTION_TYPE("exception.type"),
24-
EXCEPTION_MESSAGE("exception.message"),
25-
EXCEPTION_STACKTRACE("exception.stacktrace"),
24+
EXCEPTION_EVENT(SemanticAttributes.EXCEPTION_EVENT_NAME),
25+
EXCEPTION_TYPE(SemanticAttributes.EXCEPTION_TYPE.getKey()),
26+
EXCEPTION_MESSAGE(SemanticAttributes.EXCEPTION_MESSAGE.getKey()),
27+
EXCEPTION_STACKTRACE(SemanticAttributes.EXCEPTION_STACKTRACE.getKey()),
2628

2729
SPAN_KIND("span.kind"),
2830

29-
HTTP_METHOD("http.method"),
30-
HTTP_URL("http.url"),
31-
HTTP_STATUS_CODE("http.status_code"),
32-
HTTP_TARGET_HOST("http.target_host"),
31+
HTTP_METHOD(SemanticAttributes.HTTP_METHOD.getKey()),
32+
HTTP_URL(SemanticAttributes.HTTP_URL.getKey()),
33+
HTTP_STATUS_CODE(SemanticAttributes.HTTP_STATUS_CODE.getKey()),
34+
HTTP_TARGET_HOST(SemanticAttributes.HTTP_TARGET.getKey()),
3335
HTTP_CLIENT_CLASS("http.client_class"),
3436
HTTP_HANDLER_CLASS("http.handler_class"),
3537

@@ -44,11 +46,11 @@ public enum AttributeKey {
4446
SESSION_CAPABILITIES("session.capabilities"),
4547
SESSION_URI("session.uri"),
4648

47-
DATABASE_STATEMENT ("db.statement"),
48-
DATABASE_OPERATION ("db.operation"),
49-
DATABASE_USER ("db.user"),
50-
DATABASE_CONNECTION_STRING ("db.connection_string"),
51-
DATABASE_SYSTEM("db.system"),
49+
DATABASE_STATEMENT (SemanticAttributes.DB_STATEMENT.getKey()),
50+
DATABASE_OPERATION (SemanticAttributes.DB_OPERATION.getKey()),
51+
DATABASE_USER (SemanticAttributes.DB_USER.getKey()),
52+
DATABASE_CONNECTION_STRING (SemanticAttributes.DB_CONNECTION_STRING.getKey()),
53+
DATABASE_SYSTEM(SemanticAttributes.DB_SYSTEM.getKey()),
5254

5355
REQUEST_ID ("request.id");
5456

java/client/src/org/openqa/selenium/remote/tracing/BUILD.bazel

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ java_library(
2828
"//java/client/src/org/openqa/selenium:core",
2929
"//java/client/src/org/openqa/selenium/remote/http",
3030
artifact("io.opentelemetry:opentelemetry-api"),
31-
artifact("io.opentelemetry:opentelemetry-context-prop"),
31+
artifact("io.opentelemetry:opentelemetry-context"),
3232
],
3333
)

java/client/src/org/openqa/selenium/remote/tracing/opentelemetry/BUILD.bazel

+1-2
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ java_library(
1212
"//java/client/src/org/openqa/selenium:core",
1313
"//java/client/src/org/openqa/selenium/remote/tracing",
1414
artifact("com.google.guava:guava"),
15-
artifact("io.grpc:grpc-context"),
1615
artifact("io.opentelemetry:opentelemetry-api"),
17-
artifact("io.opentelemetry:opentelemetry-context-prop"),
16+
artifact("io.opentelemetry:opentelemetry-context"),
1817
artifact("io.opentelemetry:opentelemetry-sdk"),
1918
],
2019
)

java/client/src/org/openqa/selenium/remote/tracing/opentelemetry/OpenTelemetryContext.java

+6-7
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@
1818
package org.openqa.selenium.remote.tracing.opentelemetry;
1919

2020
import com.google.common.annotations.VisibleForTesting;
21-
import io.grpc.Context;
21+
import io.opentelemetry.context.Context;
2222
import io.opentelemetry.context.Scope;
23-
import io.opentelemetry.trace.Span;
24-
import io.opentelemetry.trace.SpanContext;
25-
import io.opentelemetry.trace.Tracer;
26-
import io.opentelemetry.trace.TracingContextUtils;
23+
import io.opentelemetry.api.trace.Span;
24+
import io.opentelemetry.api.trace.SpanContext;
25+
import io.opentelemetry.api.trace.Tracer;
2726

2827
import org.openqa.selenium.internal.Require;
2928
import org.openqa.selenium.remote.tracing.TraceContext;
@@ -40,7 +39,7 @@ public OpenTelemetryContext(Tracer tracer, Context context) {
4039
this.tracer = Require.nonNull("Tracer", tracer);
4140
this.context = Require.nonNull("Context", context);
4241

43-
spanContext = TracingContextUtils.getSpan(context).getContext();
42+
spanContext = Span.fromContext(context).getSpanContext();
4443
}
4544

4645
@Override
@@ -57,7 +56,7 @@ public OpenTelemetrySpan createSpan(String name) {
5756
Context prev = Context.current();
5857

5958
// Now update the context
60-
Scope scope = tracer.withSpan(span);
59+
Scope scope = span.makeCurrent();
6160

6261
if (prev.equals(Context.current())) {
6362
throw new IllegalStateException("Context has not been changed");

java/client/src/org/openqa/selenium/remote/tracing/opentelemetry/OpenTelemetryPropagator.java

+22-9
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,10 @@
1717

1818
package org.openqa.selenium.remote.tracing.opentelemetry;
1919

20-
import io.grpc.Context;
20+
import io.opentelemetry.context.Context;
2121
import io.opentelemetry.context.propagation.TextMapPropagator;
22-
import io.opentelemetry.trace.DefaultSpan;
23-
import io.opentelemetry.trace.Tracer;
24-
import io.opentelemetry.trace.TracingContextUtils;
22+
import io.opentelemetry.api.trace.Tracer;
23+
import io.opentelemetry.api.trace.Span;
2524
import org.openqa.selenium.internal.Require;
2625
import org.openqa.selenium.remote.tracing.Propagator;
2726
import org.openqa.selenium.remote.tracing.TraceContext;
@@ -45,8 +44,9 @@ public <C> void inject(TraceContext toInject, C carrier, Setter<C> setter) {
4544
Require.nonNull("Setter", setter);
4645
Require.argument("Trace context", toInject).instanceOf(OpenTelemetryContext.class);
4746

48-
httpTextFormat.inject(
49-
((OpenTelemetryContext) toInject).getContext(), carrier, setter::set);
47+
TextMapPropagator.Setter<C> propagatorSetter = setter::set;
48+
49+
httpTextFormat.inject(((OpenTelemetryContext) toInject).getContext(), carrier, propagatorSetter);
5050
}
5151

5252
@Override
@@ -57,14 +57,27 @@ public <C> OpenTelemetryContext extractContext(
5757
Require.nonNull("Getter", getter);
5858
Require.argument("Trace context", existing).instanceOf(OpenTelemetryContext.class);
5959

60+
TextMapPropagator.Getter<C> propagatorGetter = new TextMapPropagator.Getter<C>() {
61+
62+
@Override
63+
public Iterable<String> keys(C carrier) {
64+
return null;
65+
}
66+
67+
@Override
68+
public String get(C carrier, String key) {
69+
return getter.apply(carrier, key);
70+
}
71+
};
72+
6073
Context extracted =
6174
httpTextFormat.extract(
62-
((OpenTelemetryContext) existing).getContext(), carrier, getter::apply);
75+
((OpenTelemetryContext) existing).getContext(), carrier, propagatorGetter);
6376

6477
// If the extracted context is the root context, then we continue to be a
6578
// child span of the existing context.
66-
String id = TracingContextUtils.getSpan(extracted).getContext().getSpanIdAsHexString();
67-
if (DefaultSpan.getInvalid().getContext().getSpanIdAsHexString().equals(id)) {
79+
String id = Span.fromContext(extracted).getSpanContext().getSpanIdAsHexString();
80+
if (Span.getInvalid().getSpanContext().getSpanIdAsHexString().equals(id)) {
6881
return (OpenTelemetryContext) existing;
6982
}
7083

java/client/src/org/openqa/selenium/remote/tracing/opentelemetry/OpenTelemetrySpan.java

+39-39
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919

2020
import com.google.common.collect.ImmutableMap;
2121
import com.google.common.primitives.Primitives;
22-
import io.grpc.Context;
23-
import io.opentelemetry.common.Attributes;
22+
import io.opentelemetry.api.common.Attributes;
2423
import io.opentelemetry.context.Scope;
25-
import io.opentelemetry.trace.SpanContext;
26-
import io.opentelemetry.trace.StatusCanonicalCode;
27-
import io.opentelemetry.trace.Tracer;
24+
import io.opentelemetry.context.Context;
25+
import io.opentelemetry.api.trace.SpanContext;
26+
import io.opentelemetry.api.trace.StatusCode;
27+
import io.opentelemetry.api.trace.Tracer;
2828
import org.openqa.selenium.internal.Require;
2929
import org.openqa.selenium.remote.tracing.EventAttributeValue;
3030
import org.openqa.selenium.remote.tracing.Span;
@@ -35,10 +35,10 @@
3535

3636
class OpenTelemetrySpan extends OpenTelemetryContext implements AutoCloseable, Span {
3737

38-
private final io.opentelemetry.trace.Span span;
38+
private final io.opentelemetry.api.trace.Span span;
3939
private final Scope scope;
4040

41-
public OpenTelemetrySpan(Tracer tracer, Context context, io.opentelemetry.trace.Span span, Scope scope) {
41+
public OpenTelemetrySpan(Tracer tracer, Context context, io.opentelemetry.api.trace.Span span, Scope scope) {
4242
super(tracer, context);
4343
this.span = Require.nonNull("Span", span);
4444
this.scope = Require.nonNull("Scope", scope);
@@ -90,42 +90,42 @@ public Span addEvent(String name) {
9090
public Span addEvent(String name, Map<String, EventAttributeValue> attributeMap) {
9191
Require.nonNull("Name", name);
9292
Require.nonNull("Event Attribute Map", attributeMap);
93-
Attributes.Builder otAttributes = Attributes.newBuilder();
93+
Attributes.Builder otAttributes = Attributes.builder();
9494

9595
attributeMap.forEach(
9696
(key, value) -> {
9797
Require.nonNull("Event Attribute Value", value);
9898
switch (value.getAttributeType()) {
9999
case BOOLEAN:
100-
otAttributes.setAttribute(key, value.getBooleanValue());
100+
otAttributes.put(key, value.getBooleanValue());
101101
break;
102102

103103
case BOOLEAN_ARRAY:
104-
otAttributes.setAttribute(key, value.getBooleanArrayValue());
104+
otAttributes.put(key, value.getBooleanArrayValue());
105105
break;
106106

107107
case DOUBLE:
108-
otAttributes.setAttribute(key, value.getNumberValue().doubleValue());
108+
otAttributes.put(key, value.getNumberValue().doubleValue());
109109
break;
110110

111111
case DOUBLE_ARRAY:
112-
otAttributes.setAttribute(key, value.getDoubleArrayValue());
112+
otAttributes.put(key, value.getDoubleArrayValue());
113113
break;
114114

115115
case LONG:
116-
otAttributes.setAttribute(key, value.getNumberValue().longValue());
116+
otAttributes.put(key, value.getNumberValue().longValue());
117117
break;
118118

119119
case LONG_ARRAY:
120-
otAttributes.setAttribute(key, value.getLongArrayValue());
120+
otAttributes.put(key, value.getLongArrayValue());
121121
break;
122122

123123
case STRING:
124-
otAttributes.setAttribute(key, value.getStringValue());
124+
otAttributes.put(key, value.getStringValue());
125125
break;
126126

127127
case STRING_ARRAY:
128-
otAttributes.setAttribute(key, value.getStringArrayValue());
128+
otAttributes.put(key, value.getStringArrayValue());
129129
break;
130130

131131
default:
@@ -139,35 +139,35 @@ public Span addEvent(String name, Map<String, EventAttributeValue> attributeMap)
139139
return this;
140140
}
141141

142-
private static final Map<Status.Kind, StatusCanonicalCode> statuses
143-
= new ImmutableMap.Builder<Status.Kind, StatusCanonicalCode>()
144-
.put(Status.Kind.ABORTED, StatusCanonicalCode.ERROR)
145-
.put(Status.Kind.CANCELLED, StatusCanonicalCode.ERROR)
146-
.put(Status.Kind.NOT_FOUND, StatusCanonicalCode.ERROR)
147-
.put(Status.Kind.OK, StatusCanonicalCode.OK)
148-
.put(Status.Kind.RESOURCE_EXHAUSTED, StatusCanonicalCode.ERROR)
149-
.put(Status.Kind.UNKNOWN, StatusCanonicalCode.ERROR)
150-
.put(Status.Kind.INVALID_ARGUMENT, StatusCanonicalCode.ERROR)
151-
.put(Status.Kind.DEADLINE_EXCEEDED, StatusCanonicalCode.ERROR)
152-
.put(Status.Kind.ALREADY_EXISTS, StatusCanonicalCode.ERROR)
153-
.put(Status.Kind.PERMISSION_DENIED, StatusCanonicalCode.ERROR)
154-
.put(Status.Kind.OUT_OF_RANGE, StatusCanonicalCode.ERROR)
155-
.put(Status.Kind.UNIMPLEMENTED, StatusCanonicalCode.ERROR)
156-
.put(Status.Kind.INTERNAL, StatusCanonicalCode.ERROR)
157-
.put(Status.Kind.UNAVAILABLE, StatusCanonicalCode.ERROR)
158-
.put(Status.Kind.UNAUTHENTICATED, StatusCanonicalCode.ERROR)
142+
private static final Map<Status.Kind, StatusCode> statuses
143+
= new ImmutableMap.Builder<Status.Kind, StatusCode>()
144+
.put(Status.Kind.ABORTED, StatusCode.ERROR)
145+
.put(Status.Kind.CANCELLED, StatusCode.ERROR)
146+
.put(Status.Kind.NOT_FOUND, StatusCode.ERROR)
147+
.put(Status.Kind.OK, StatusCode.OK)
148+
.put(Status.Kind.RESOURCE_EXHAUSTED, StatusCode.ERROR)
149+
.put(Status.Kind.UNKNOWN, StatusCode.ERROR)
150+
.put(Status.Kind.INVALID_ARGUMENT, StatusCode.ERROR)
151+
.put(Status.Kind.DEADLINE_EXCEEDED, StatusCode.ERROR)
152+
.put(Status.Kind.ALREADY_EXISTS, StatusCode.ERROR)
153+
.put(Status.Kind.PERMISSION_DENIED, StatusCode.ERROR)
154+
.put(Status.Kind.OUT_OF_RANGE, StatusCode.ERROR)
155+
.put(Status.Kind.UNIMPLEMENTED, StatusCode.ERROR)
156+
.put(Status.Kind.INTERNAL, StatusCode.ERROR)
157+
.put(Status.Kind.UNAVAILABLE, StatusCode.ERROR)
158+
.put(Status.Kind.UNAUTHENTICATED, StatusCode.ERROR)
159159
.build();
160160

161161
@Override
162162
public Span setStatus(Status status) {
163163
Require.nonNull("Status", status);
164164

165-
StatusCanonicalCode statusCanonicalCode = statuses.get(status.getKind());
166-
if (statusCanonicalCode == null) {
165+
StatusCode statusCode = statuses.get(status.getKind());
166+
if (statusCode == null) {
167167
throw new IllegalArgumentException("Unrecognized status kind: " + status.getKind());
168168
}
169169

170-
span.setStatus(statusCanonicalCode,
170+
span.setStatus(statusCode,
171171
"Kind: " + status.getKind().toString()
172172
+ " Description:"
173173
+ status.getDescription());
@@ -183,7 +183,7 @@ public void close() {
183183

184184
@Override
185185
public String toString() {
186-
SpanContext context = span.getContext();
186+
SpanContext context = span.getSpanContext();
187187

188188
return "OpenTelemetrySpan{traceId=" +
189189
context.getTraceIdAsHexString() +
@@ -203,8 +203,8 @@ public boolean equals(Object o) {
203203
}
204204

205205
OpenTelemetrySpan that = (OpenTelemetrySpan) o;
206-
SpanContext thisContext = this.span.getContext();
207-
SpanContext thatContext = that.span.getContext();
206+
SpanContext thisContext = this.span.getSpanContext();
207+
SpanContext thatContext = that.span.getSpanContext();
208208

209209
return Objects.equals(thisContext.getSpanIdAsHexString(), thatContext.getSpanIdAsHexString()) &&
210210
Objects.equals(thisContext.getTraceIdAsHexString(), thatContext.getTraceIdAsHexString());

java/client/src/org/openqa/selenium/remote/tracing/opentelemetry/OpenTelemetryTracer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717

1818
package org.openqa.selenium.remote.tracing.opentelemetry;
1919

20-
import io.grpc.Context;
20+
import io.opentelemetry.context.Context;
2121
import io.opentelemetry.context.propagation.TextMapPropagator;
22-
import io.opentelemetry.trace.Tracer;
22+
import io.opentelemetry.api.trace.Tracer;
2323
import org.openqa.selenium.internal.Require;
2424
import org.openqa.selenium.remote.tracing.Propagator;
2525
import org.openqa.selenium.remote.tracing.TraceContext;

java/client/test/org/openqa/selenium/remote/tracing/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@ java_library(
1313
"//java/client/src/org/openqa/selenium/remote/tracing",
1414
"//java/client/src/org/openqa/selenium/remote/tracing/opentelemetry",
1515
artifact("io.opentelemetry:opentelemetry-api"),
16+
artifact("io.opentelemetry:opentelemetry-context"),
1617
],
1718
)

java/client/test/org/openqa/selenium/remote/tracing/DefaultTestTracer.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,18 @@
1717

1818
package org.openqa.selenium.remote.tracing;
1919

20-
import io.opentelemetry.OpenTelemetry;
20+
import io.opentelemetry.api.OpenTelemetry;
21+
import io.opentelemetry.context.propagation.ContextPropagators;
22+
import io.opentelemetry.context.propagation.DefaultContextPropagators;
2123
import org.openqa.selenium.remote.tracing.opentelemetry.OpenTelemetryTracer;
2224

2325
public class DefaultTestTracer {
2426

2527
public static Tracer createTracer() {
28+
ContextPropagators propagators = DefaultContextPropagators.builder().build();
29+
2630
return new OpenTelemetryTracer(
27-
OpenTelemetry.getTracerProvider().get("default"),
28-
OpenTelemetry.getPropagators().getTextMapPropagator());
31+
OpenTelemetry.getGlobalTracer("default"),
32+
propagators.getTextMapPropagator());
2933
}
3034
}

java/client/test/org/openqa/selenium/remote/tracing/opentelemetry/BUILD.bazel

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ java_test_suite(
1313
artifact("io.opentelemetry:opentelemetry-sdk"),
1414
artifact("io.opentelemetry:opentelemetry-sdk-common"),
1515
artifact("io.opentelemetry:opentelemetry-sdk-tracing"),
16-
artifact("io.opentelemetry:opentelemetry-context-prop"),
16+
artifact("io.opentelemetry:opentelemetry-context"),
1717
artifact("junit:junit"),
1818
artifact("org.assertj:assertj-core"),
1919
],

0 commit comments

Comments
 (0)