Skip to content

Commit

Permalink
Rip out existing distributed tracing mechanisms
Browse files Browse the repository at this point in the history
The current approach is very invasive, and doesn't work very well. Two
good reasons to rip it out.

The plan is to move to straight OpenTracing, since OpenTelemtry isn't
available yet.
  • Loading branch information
shs96c committed Sep 9, 2019
1 parent 7f13e36 commit 9db0c6b
Show file tree
Hide file tree
Showing 43 changed files with 353 additions and 1,445 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,10 @@ java_library(
exports = [
# Exposed by tracing APIs
"//java/client/src/org/openqa/selenium/remote/http",
"//third_party/java/opentracing:opentracing-api",
],
deps = [
"//java/client/src/org/openqa/selenium/remote/http",
"//third_party/java/contrib:opentracing-tracerresolver",
"//third_party/java/guava",
"//third_party/java/opentracing:opentracing-api",
"//third_party/java/opentracing:opentracing-noop",
"//third_party/java/opentracing:opentracing-util",
],
)

This file was deleted.

This file was deleted.

64 changes: 38 additions & 26 deletions java/client/src/org/openqa/selenium/remote/tracing/HttpTracing.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,50 +17,62 @@

package org.openqa.selenium.remote.tracing;

import com.google.common.base.Strings;

import org.openqa.selenium.remote.http.HttpRequest;

import io.opentracing.Span;
import io.opentracing.SpanContext;
import io.opentracing.Tracer;
import io.opentracing.propagation.Format;
import io.opentracing.propagation.TextMapAdapter;
import io.opentracing.tag.Tags;
import org.openqa.selenium.remote.http.HttpRequest;

import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.TreeMap;
import java.util.function.Function;

public class HttpTracing {

private HttpTracing() {
// Utility classes
}

public static final Function<HttpRequest, Map<String, String>> AS_MAP = req -> {
Map<String, String> builder = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
for (String name : req.getHeaderNames()) {
if (Strings.isNullOrEmpty(name)) {
continue;
}

String value = req.getHeader(name);
if (Strings.isNullOrEmpty(value)) {
continue;
}

builder.put(name, value);
}
return Collections.unmodifiableMap(builder);
};
public static SpanContext extract(Tracer tracer, HttpRequest request) {
return tracer.extract(Format.Builtin.HTTP_HEADERS, new HttpRequestAdapter(request));
}

public static void inject(Span span, HttpRequest request) {
public static void inject(Tracer tracer, Span span, HttpRequest request) {
Objects.requireNonNull(request, "Request must be set.");
if (span == null) {
return;
}

span.addTag(Tags.HTTP_METHOD.getKey(), request.getMethod().toString());
span.addTag(Tags.HTTP_URL.getKey(), request.getUri());
span.setTag(Tags.HTTP_METHOD.getKey(), request.getMethod().toString());
span.setTag(Tags.HTTP_URL.getKey(), request.getUri());

span.inject(request::setHeader);
tracer.inject(span.context(), Format.Builtin.HTTP_HEADERS, new HttpRequestAdapter(request));
}

private static class HttpRequestAdapter extends TextMapAdapter {

public HttpRequestAdapter(HttpRequest request) {
super(asMap(request));
}

private static Map<String, String> asMap(HttpRequest request) {
Map<String, String> entries = new LinkedHashMap<>();
request.getHeaderNames().forEach(name ->
request.getHeaders(name).forEach(value -> {
if (value != null) {
entries.put(name, value);
}
})
);
return Collections.unmodifiableMap(entries);
}

@Override
public void put(String key, String value) {
super.put(key, value);
}
}
}

This file was deleted.

0 comments on commit 9db0c6b

Please sign in to comment.