Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make HttpServerAttributesGetter extend NetServerAttributesGetter #9088

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,19 @@ public final class HttpServerAttributesExtractor<REQUEST, RESPONSE>
implements SpanKeyProvider {

/** Creates the HTTP server attributes extractor with default configuration. */
public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(
HttpServerAttributesGetter<REQUEST, RESPONSE> httpAttributesGetter) {
return builder(httpAttributesGetter).build();
}

/**
* Creates the HTTP server attributes extractor with default configuration.
*
* @deprecated Make sure that your {@linkplain HttpServerAttributesGetter getter} implements all
* the network-related methods and use {@link #create(HttpServerAttributesGetter)} instead.
* This method will be removed in the 2.0 release.
*/
@Deprecated
public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(
HttpServerAttributesGetter<REQUEST, RESPONSE> httpAttributesGetter,
NetServerAttributesGetter<REQUEST, RESPONSE> netAttributesGetter) {
Expand All @@ -47,6 +60,20 @@ public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(
* Returns a new {@link HttpServerAttributesExtractorBuilder} that can be used to configure the
* HTTP client attributes extractor.
*/
public static <REQUEST, RESPONSE> HttpServerAttributesExtractorBuilder<REQUEST, RESPONSE> builder(
HttpServerAttributesGetter<REQUEST, RESPONSE> httpAttributesGetter) {
return new HttpServerAttributesExtractorBuilder<>(httpAttributesGetter, httpAttributesGetter);
}

/**
* Returns a new {@link HttpServerAttributesExtractorBuilder} that can be used to configure the
* HTTP client attributes extractor.
*
* @deprecated Make sure that your {@linkplain HttpServerAttributesGetter getter} implements all
* the network-related methods and use {@link #builder(HttpServerAttributesGetter)} instead.
* This method will be removed in the 2.0 release.
*/
@Deprecated
public static <REQUEST, RESPONSE> HttpServerAttributesExtractorBuilder<REQUEST, RESPONSE> builder(
HttpServerAttributesGetter<REQUEST, RESPONSE> httpAttributesGetter,
NetServerAttributesGetter<REQUEST, RESPONSE> netAttributesGetter) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@

package io.opentelemetry.instrumentation.api.instrumenter.http;

import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.network.ClientAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.network.NetworkAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.network.ServerAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.url.UrlAttributesGetter;
import javax.annotation.Nullable;

Expand All @@ -16,7 +20,12 @@
* various HTTP server attributes in a type-generic way.
*/
public interface HttpServerAttributesGetter<REQUEST, RESPONSE>
extends HttpCommonAttributesGetter<REQUEST, RESPONSE>, UrlAttributesGetter<REQUEST> {
extends HttpCommonAttributesGetter<REQUEST, RESPONSE>,
UrlAttributesGetter<REQUEST>,
NetServerAttributesGetter<REQUEST, RESPONSE>,
NetworkAttributesGetter<REQUEST, RESPONSE>,
ServerAttributesGetter<REQUEST, RESPONSE>,
ClientAttributesGetter<REQUEST, RESPONSE> {

/** {@inheritDoc} */
@Nullable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.util.HashMap;
import java.util.List;
Expand Down Expand Up @@ -83,10 +82,6 @@ public List<String> getHttpResponseHeader(
String values = (String) response.get("header." + name);
return values == null ? emptyList() : asList(values.split(","));
}
}

static class TestNetServerAttributesGetter
implements NetServerAttributesGetter<Map<String, Object>, Map<String, Object>> {

@Nullable
@Override
Expand Down Expand Up @@ -156,8 +151,7 @@ void normal() {
Function<Context, String> routeFromContext = ctx -> "/repositories/{repoId}";

AttributesExtractor<Map<String, Object>, Map<String, Object>> extractor =
HttpServerAttributesExtractor.builder(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter())
HttpServerAttributesExtractor.builder(new TestHttpServerAttributesGetter())
.setCapturedRequestHeaders(singletonList("Custom-Request-Header"))
.setCapturedResponseHeaders(singletonList("Custom-Response-Header"))
.setHttpRouteGetter(routeFromContext)
Expand Down Expand Up @@ -199,8 +193,7 @@ void extractClientIpFromX_Forwarded_For() {
request.put("header.x-forwarded-for", "1.1.1.1");

AttributesExtractor<Map<String, Object>, Map<String, Object>> extractor =
HttpServerAttributesExtractor.builder(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter())
HttpServerAttributesExtractor.builder(new TestHttpServerAttributesGetter())
.setCapturedRequestHeaders(emptyList())
.setCapturedResponseHeaders(emptyList())
.build();
Expand All @@ -221,8 +214,7 @@ void extractClientIpFromX_Forwarded_Proto() {
request.put("header.x-forwarded-proto", "https");

AttributesExtractor<Map<String, Object>, Map<String, Object>> extractor =
HttpServerAttributesExtractor.builder(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter())
HttpServerAttributesExtractor.builder(new TestHttpServerAttributesGetter())
.setCapturedRequestHeaders(emptyList())
.setCapturedResponseHeaders(emptyList())
.build();
Expand All @@ -241,8 +233,7 @@ void extractNetHostAndPortFromHostHeader() {
request.put("header.host", "thehost:777");

AttributesExtractor<Map<String, Object>, Map<String, Object>> extractor =
HttpServerAttributesExtractor.builder(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter())
HttpServerAttributesExtractor.builder(new TestHttpServerAttributesGetter())
.setCapturedRequestHeaders(emptyList())
.setCapturedResponseHeaders(emptyList())
.build();
Expand All @@ -263,8 +254,7 @@ void extractNetHostAndPortFromNetAttributesGetter() {
request.put("hostPort", 777);

AttributesExtractor<Map<String, Object>, Map<String, Object>> extractor =
HttpServerAttributesExtractor.builder(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter())
HttpServerAttributesExtractor.builder(new TestHttpServerAttributesGetter())
.setCapturedRequestHeaders(emptyList())
.setCapturedResponseHeaders(emptyList())
.build();
Expand All @@ -285,8 +275,7 @@ void defaultHostPort(int hostPort, String scheme) {
request.put("hostPort", hostPort);

AttributesExtractor<Map<String, Object>, Map<String, Object>> extractor =
HttpServerAttributesExtractor.builder(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter())
HttpServerAttributesExtractor.builder(new TestHttpServerAttributesGetter())
.setCapturedRequestHeaders(emptyList())
.setCapturedResponseHeaders(emptyList())
.build();
Expand All @@ -313,8 +302,7 @@ void computeTargetFromPathAndQuery(String path, String query, String expectedTar
request.put("query", query);

AttributesExtractor<Map<String, Object>, Map<String, Object>> extractor =
HttpServerAttributesExtractor.create(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter());
HttpServerAttributesExtractor.create(new TestHttpServerAttributesGetter());

AttributesBuilder attributes = Attributes.builder();
extractor.onStart(attributes, Context.root(), request);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.network.internal.NetworkAttributes;
import io.opentelemetry.instrumentation.api.instrumenter.url.internal.UrlAttributes;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
Expand Down Expand Up @@ -78,10 +77,6 @@ public List<String> getHttpResponseHeader(
String values = (String) response.get("header." + name);
return values == null ? emptyList() : asList(values.split(","));
}
}

static class TestNetServerAttributesGetter
implements NetServerAttributesGetter<Map<String, Object>, Map<String, Object>> {

@Nullable
@Override
Expand Down Expand Up @@ -151,8 +146,7 @@ void normal() {
Function<Context, String> routeFromContext = ctx -> "/repositories/{repoId}";

AttributesExtractor<Map<String, Object>, Map<String, Object>> extractor =
HttpServerAttributesExtractor.builder(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter())
HttpServerAttributesExtractor.builder(new TestHttpServerAttributesGetter())
.setCapturedRequestHeaders(singletonList("Custom-Request-Header"))
.setCapturedResponseHeaders(singletonList("Custom-Response-Header"))
.setHttpRouteGetter(routeFromContext)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.network.internal.NetworkAttributes;
import io.opentelemetry.instrumentation.api.instrumenter.url.internal.UrlAttributes;
import io.opentelemetry.instrumentation.api.internal.HttpConstants;
Expand Down Expand Up @@ -89,10 +88,6 @@ public List<String> getHttpResponseHeader(
String values = response.get("header." + name);
return values == null ? emptyList() : asList(values.split(","));
}
}

static class TestNetServerAttributesGetter
implements NetServerAttributesGetter<Map<String, String>, Map<String, String>> {

@Nullable
@Override
Expand Down Expand Up @@ -180,8 +175,7 @@ void normal() {
Function<Context, String> routeFromContext = ctx -> "/repositories/{repoId}";

AttributesExtractor<Map<String, String>, Map<String, String>> extractor =
HttpServerAttributesExtractor.builder(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter())
HttpServerAttributesExtractor.builder(new TestHttpServerAttributesGetter())
.setCapturedRequestHeaders(singletonList("Custom-Request-Header"))
.setCapturedResponseHeaders(singletonList("Custom-Response-Header"))
.setHttpRouteGetter(routeFromContext)
Expand Down Expand Up @@ -233,8 +227,7 @@ void skipNetworkTransportIfDefaultForProtocol(
request.put("transport", observedTransport);

AttributesExtractor<Map<String, String>, Map<String, String>> extractor =
HttpServerAttributesExtractor.create(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter());
HttpServerAttributesExtractor.create(new TestHttpServerAttributesGetter());

AttributesBuilder attributes = Attributes.builder();
extractor.onStart(attributes, Context.root(), request);
Expand Down Expand Up @@ -271,8 +264,7 @@ void shouldExtractKnownMethods(String requestMethod) {
request.put("method", requestMethod);

AttributesExtractor<Map<String, String>, Map<String, String>> extractor =
HttpServerAttributesExtractor.create(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter());
HttpServerAttributesExtractor.create(new TestHttpServerAttributesGetter());

AttributesBuilder attributes = Attributes.builder();
extractor.onStart(attributes, Context.root(), request);
Expand All @@ -290,8 +282,7 @@ void shouldTreatMethodsAsCaseSensitive(String requestMethod) {
request.put("method", requestMethod);

AttributesExtractor<Map<String, String>, Map<String, String>> extractor =
HttpServerAttributesExtractor.create(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter());
HttpServerAttributesExtractor.create(new TestHttpServerAttributesGetter());

AttributesBuilder attributes = Attributes.builder();
extractor.onStart(attributes, Context.root(), request);
Expand All @@ -309,8 +300,7 @@ void shouldUseOtherForUnknownMethods(String requestMethod) {
request.put("method", requestMethod);

AttributesExtractor<Map<String, String>, Map<String, String>> extractor =
HttpServerAttributesExtractor.create(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter());
HttpServerAttributesExtractor.create(new TestHttpServerAttributesGetter());

AttributesBuilder attributes = Attributes.builder();
extractor.onStart(attributes, Context.root(), request);
Expand All @@ -328,8 +318,7 @@ void shouldExtractKnownMethods_override(String requestMethod) {
request.put("method", requestMethod);

AttributesExtractor<Map<String, String>, Map<String, String>> extractor =
HttpServerAttributesExtractor.builder(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter())
HttpServerAttributesExtractor.builder(new TestHttpServerAttributesGetter())
.setKnownMethods(new HashSet<>(asList("only", "custom", "methods", "allowed")))
.build();

Expand All @@ -349,8 +338,7 @@ void shouldUseOtherForUnknownMethods_override(String requestMethod) {
request.put("method", requestMethod);

AttributesExtractor<Map<String, String>, Map<String, String>> extractor =
HttpServerAttributesExtractor.builder(
new TestHttpServerAttributesGetter(), new TestNetServerAttributesGetter())
HttpServerAttributesExtractor.builder(new TestHttpServerAttributesGetter())
.setKnownMethods(new HashSet<>(asList("only", "custom", "methods", "allowed")))
.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import akka.http.scaladsl.model.HttpRequest;
import akka.http.scaladsl.model.HttpResponse;
import akka.http.scaladsl.model.Uri;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesGetter;
import io.opentelemetry.javaagent.instrumentation.akkahttp.AkkaHttpUtil;
import java.util.List;
Expand Down Expand Up @@ -54,4 +55,29 @@ public String getUrlQuery(HttpRequest request) {
Option<String> queryString = request.uri().rawQueryString();
return queryString.isDefined() ? queryString.get() : null;
}

@Nullable
@Override
public String getNetworkProtocolName(HttpRequest request, @Nullable HttpResponse httpResponse) {
return AkkaHttpUtil.protocolName(request);
}

@Nullable
@Override
public String getNetworkProtocolVersion(
HttpRequest request, @Nullable HttpResponse httpResponse) {
return AkkaHttpUtil.protocolVersion(request);
}

@Nullable
@Override
public String getServerAddress(HttpRequest request) {
Uri.Host host = request.uri().authority().host();
return host.isEmpty() ? null : host.address();
}

@Override
public Integer getServerPort(HttpRequest request) {
return request.uri().authority().port();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ public final class AkkaHttpServerSingletons {
HttpSpanNameExtractor.create(httpAttributesGetter))
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
.addAttributesExtractor(
HttpServerAttributesExtractor.builder(
httpAttributesGetter, new AkkaNetServerAttributesGetter())
HttpServerAttributesExtractor.builder(httpAttributesGetter)
.setCapturedRequestHeaders(CommonConfig.get().getServerRequestHeaders())
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
Expand Down

This file was deleted.

Loading
Loading