Deprecate CapturedHttpHeaders and replace it with builder methods (#5533)
This commit is contained in:
parent
c461d22d83
commit
f6cca58f1f
|
@ -7,7 +7,6 @@ package io.opentelemetry.instrumentation.api.instrumenter;
|
|||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
|
@ -43,9 +42,7 @@ public class InstrumenterBenchmark {
|
|||
"benchmark",
|
||||
HttpSpanNameExtractor.create(ConstantHttpAttributesGetter.INSTANCE))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(ConstantHttpAttributesGetter.INSTANCE)
|
||||
.captureHttpHeaders(CapturedHttpHeaders.empty())
|
||||
.build())
|
||||
HttpClientAttributesExtractor.create(ConstantHttpAttributesGetter.INSTANCE))
|
||||
.addAttributesExtractor(
|
||||
NetServerAttributesExtractor.create(new ConstantNetAttributesGetter()))
|
||||
.newInstrumenter();
|
||||
|
|
|
@ -23,8 +23,16 @@ import java.util.stream.Collectors;
|
|||
* attribute key. The HTTP response header values will be captured under the {@code
|
||||
* http.response.header.<name>} attribute key. The {@code <name>} part in the attribute key is the
|
||||
* normalized header name: lowercase, with dashes replaced by underscores.
|
||||
*
|
||||
* @deprecated This class should no longer be used directly. Use the {@link
|
||||
* HttpClientAttributesExtractorBuilder#setCapturedRequestHeaders(List)}, {@link
|
||||
* HttpClientAttributesExtractorBuilder#setCapturedResponseHeaders(List)}, {@link
|
||||
* HttpServerAttributesExtractorBuilder#setCapturedRequestHeaders(List)} and {@link
|
||||
* HttpServerAttributesExtractorBuilder#setCapturedResponseHeaders(List)} methods instead.
|
||||
*/
|
||||
@Deprecated
|
||||
@AutoValue
|
||||
@AutoValue.CopyAnnotations
|
||||
public abstract class CapturedHttpHeaders {
|
||||
|
||||
private static final CapturedHttpHeaders EMPTY = create(emptyList(), emptyList());
|
||||
|
|
|
@ -19,6 +19,7 @@ import javax.annotation.Nullable;
|
|||
* return {@code null} from the protected attribute methods, but implement as many as possible for
|
||||
* best compliance with the OpenTelemetry specification.
|
||||
*/
|
||||
@SuppressWarnings("deprecation") // suppress CapturedHttpHeaders deprecation
|
||||
public final class HttpClientAttributesExtractor<REQUEST, RESPONSE>
|
||||
extends HttpCommonAttributesExtractor<
|
||||
REQUEST, RESPONSE, HttpClientAttributesGetter<REQUEST, RESPONSE>> {
|
||||
|
|
|
@ -6,8 +6,10 @@
|
|||
package io.opentelemetry.instrumentation.api.instrumenter.http;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import java.util.List;
|
||||
|
||||
/** A builder of {@link HttpClientAttributesExtractor}. */
|
||||
@SuppressWarnings("deprecation") // suppress CapturedHttpHeaders deprecation
|
||||
public final class HttpClientAttributesExtractorBuilder<REQUEST, RESPONSE> {
|
||||
|
||||
final HttpClientAttributesGetter<REQUEST, RESPONSE> getter;
|
||||
|
@ -22,13 +24,40 @@ public final class HttpClientAttributesExtractorBuilder<REQUEST, RESPONSE> {
|
|||
*
|
||||
* @param capturedHttpHeaders A configuration object specifying which HTTP request and response
|
||||
* headers should be captured as span attributes.
|
||||
* @deprecated Use {@link #setCapturedRequestHeaders(List)} and {@link
|
||||
* #setCapturedResponseHeaders(List)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public HttpClientAttributesExtractorBuilder<REQUEST, RESPONSE> captureHttpHeaders(
|
||||
CapturedHttpHeaders capturedHttpHeaders) {
|
||||
this.capturedHttpHeaders = capturedHttpHeaders;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public HttpClientAttributesExtractorBuilder<REQUEST, RESPONSE> setCapturedRequestHeaders(
|
||||
List<String> requestHeaders) {
|
||||
this.capturedHttpHeaders =
|
||||
CapturedHttpHeaders.create(requestHeaders, capturedHttpHeaders.responseHeaders());
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public HttpClientAttributesExtractorBuilder<REQUEST, RESPONSE> setCapturedResponseHeaders(
|
||||
List<String> responseHeaders) {
|
||||
this.capturedHttpHeaders =
|
||||
CapturedHttpHeaders.create(capturedHttpHeaders.requestHeaders(), responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link HttpClientAttributesExtractor} with the settings of this {@link
|
||||
* HttpClientAttributesExtractorBuilder}.
|
||||
|
|
|
@ -20,6 +20,7 @@ import javax.annotation.Nullable;
|
|||
* href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/http.md#common-attributes">HTTP
|
||||
* attributes</a> that are common to client and server instrumentations.
|
||||
*/
|
||||
@SuppressWarnings("deprecation") // suppress CapturedHttpHeaders deprecation
|
||||
abstract class HttpCommonAttributesExtractor<
|
||||
REQUEST, RESPONSE, GETTER extends HttpCommonAttributesGetter<REQUEST, RESPONSE>>
|
||||
implements AttributesExtractor<REQUEST, RESPONSE> {
|
||||
|
|
|
@ -25,6 +25,7 @@ import javax.annotation.Nullable;
|
|||
* return {@code null} from the protected attribute methods, but implement as many as possible for
|
||||
* best compliance with the OpenTelemetry specification.
|
||||
*/
|
||||
@SuppressWarnings("deprecation") // suppress CapturedHttpHeaders deprecation
|
||||
public final class HttpServerAttributesExtractor<REQUEST, RESPONSE>
|
||||
extends HttpCommonAttributesExtractor<
|
||||
REQUEST, RESPONSE, HttpServerAttributesGetter<REQUEST, RESPONSE>> {
|
||||
|
|
|
@ -6,8 +6,10 @@
|
|||
package io.opentelemetry.instrumentation.api.instrumenter.http;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import java.util.List;
|
||||
|
||||
/** A builder of {@link HttpServerAttributesExtractor}. */
|
||||
@SuppressWarnings("deprecation") // suppress CapturedHttpHeaders deprecation
|
||||
public final class HttpServerAttributesExtractorBuilder<REQUEST, RESPONSE> {
|
||||
|
||||
final HttpServerAttributesGetter<REQUEST, RESPONSE> getter;
|
||||
|
@ -22,13 +24,40 @@ public final class HttpServerAttributesExtractorBuilder<REQUEST, RESPONSE> {
|
|||
*
|
||||
* @param capturedHttpHeaders A configuration object specifying which HTTP request and response
|
||||
* headers should be captured as span attributes.
|
||||
* @deprecated Use {@link #setCapturedRequestHeaders(List)} and {@link
|
||||
* #setCapturedResponseHeaders(List)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public HttpServerAttributesExtractorBuilder<REQUEST, RESPONSE> captureHttpHeaders(
|
||||
CapturedHttpHeaders capturedHttpHeaders) {
|
||||
this.capturedHttpHeaders = capturedHttpHeaders;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public HttpServerAttributesExtractorBuilder<REQUEST, RESPONSE> setCapturedRequestHeaders(
|
||||
List<String> requestHeaders) {
|
||||
this.capturedHttpHeaders =
|
||||
CapturedHttpHeaders.create(requestHeaders, capturedHttpHeaders.responseHeaders());
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public HttpServerAttributesExtractorBuilder<REQUEST, RESPONSE> setCapturedResponseHeaders(
|
||||
List<String> responseHeaders) {
|
||||
this.capturedHttpHeaders =
|
||||
CapturedHttpHeaders.create(capturedHttpHeaders.requestHeaders(), responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link HttpServerAttributesExtractor} with the settings of this {@link
|
||||
* HttpServerAttributesExtractorBuilder}.
|
||||
|
|
|
@ -105,10 +105,8 @@ class HttpClientAttributesExtractorTest {
|
|||
|
||||
HttpClientAttributesExtractor<Map<String, String>, Map<String, String>> extractor =
|
||||
HttpClientAttributesExtractor.builder(new TestHttpClientAttributesGetter())
|
||||
.captureHttpHeaders(
|
||||
CapturedHttpHeaders.create(
|
||||
singletonList("Custom-Request-Header"),
|
||||
singletonList("Custom-Response-Header")))
|
||||
.setCapturedRequestHeaders(singletonList("Custom-Request-Header"))
|
||||
.setCapturedResponseHeaders(singletonList("Custom-Response-Header"))
|
||||
.build();
|
||||
|
||||
AttributesBuilder attributes = Attributes.builder();
|
||||
|
@ -151,7 +149,8 @@ class HttpClientAttributesExtractorTest {
|
|||
|
||||
HttpClientAttributesExtractor<Map<String, String>, Map<String, String>> extractor =
|
||||
HttpClientAttributesExtractor.builder(new TestHttpClientAttributesGetter())
|
||||
.captureHttpHeaders(CapturedHttpHeaders.empty())
|
||||
.setCapturedRequestHeaders(emptyList())
|
||||
.setCapturedResponseHeaders(emptyList())
|
||||
.build();
|
||||
|
||||
AttributesBuilder attributes = Attributes.builder();
|
||||
|
|
|
@ -22,6 +22,7 @@ import java.util.Map;
|
|||
import java.util.function.Function;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@SuppressWarnings("deprecation") // suppress CapturedHttpHeaders deprecation
|
||||
class HttpServerAttributesExtractorTest {
|
||||
|
||||
static class TestHttpServerAttributesExtractor
|
||||
|
@ -185,7 +186,8 @@ class HttpServerAttributesExtractorTest {
|
|||
|
||||
HttpServerAttributesExtractor<Map<String, String>, Map<String, String>> extractor =
|
||||
HttpServerAttributesExtractor.builder(new TestHttpServerAttributesExtractor())
|
||||
.captureHttpHeaders(CapturedHttpHeaders.empty())
|
||||
.setCapturedRequestHeaders(emptyList())
|
||||
.setCapturedResponseHeaders(emptyList())
|
||||
.build();
|
||||
|
||||
AttributesBuilder attributes = Attributes.builder();
|
||||
|
@ -205,7 +207,8 @@ class HttpServerAttributesExtractorTest {
|
|||
|
||||
HttpServerAttributesExtractor<Map<String, String>, Map<String, String>> extractor =
|
||||
HttpServerAttributesExtractor.builder(new TestHttpServerAttributesExtractor())
|
||||
.captureHttpHeaders(CapturedHttpHeaders.empty())
|
||||
.setCapturedRequestHeaders(emptyList())
|
||||
.setCapturedResponseHeaders(emptyList())
|
||||
.build();
|
||||
|
||||
AttributesBuilder attributes = Attributes.builder();
|
||||
|
|
|
@ -12,8 +12,9 @@ import java.util.List;
|
|||
import javax.annotation.Nullable;
|
||||
import org.apache.http.HttpResponse;
|
||||
|
||||
final class ApacheHttpClientHttpAttributesGetter
|
||||
enum ApacheHttpClientHttpAttributesGetter
|
||||
implements HttpClientAttributesGetter<ApacheHttpClientRequest, HttpResponse> {
|
||||
INSTANCE;
|
||||
|
||||
@Override
|
||||
public String method(ApacheHttpClientRequest request) {
|
||||
|
|
|
@ -6,12 +6,11 @@
|
|||
package io.opentelemetry.instrumentation.apachehttpclient.v4_3;
|
||||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
|
@ -28,7 +27,9 @@ public final class ApacheHttpClientTracingBuilder {
|
|||
|
||||
private final List<AttributesExtractor<? super ApacheHttpClientRequest, ? super HttpResponse>>
|
||||
additionalExtractors = new ArrayList<>();
|
||||
private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.client(Config.get());
|
||||
private final HttpClientAttributesExtractorBuilder<ApacheHttpClientRequest, HttpResponse>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpClientAttributesExtractor.builder(ApacheHttpClientHttpAttributesGetter.INSTANCE);
|
||||
|
||||
ApacheHttpClientTracingBuilder(OpenTelemetry openTelemetry) {
|
||||
this.openTelemetry = openTelemetry;
|
||||
|
@ -49,12 +50,37 @@ public final class ApacheHttpClientTracingBuilder {
|
|||
* Configure the instrumentation to capture chosen HTTP request and response headers as span
|
||||
* attributes.
|
||||
*
|
||||
* @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured
|
||||
* HTTP request and response names.
|
||||
* @param capturedHttpHeaders An instance of {@link
|
||||
* io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
* @deprecated Use {@link #setCapturedRequestHeaders(List)} and {@link
|
||||
* #setCapturedResponseHeaders(List)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public ApacheHttpClientTracingBuilder captureHttpHeaders(
|
||||
CapturedHttpHeaders capturedHttpHeaders) {
|
||||
this.capturedHttpHeaders = capturedHttpHeaders;
|
||||
io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
capturedHttpHeaders) {
|
||||
httpAttributesExtractorBuilder.captureHttpHeaders(capturedHttpHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public ApacheHttpClientTracingBuilder setCapturedRequestHeaders(List<String> requestHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public ApacheHttpClientTracingBuilder setCapturedResponseHeaders(List<String> responseHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -64,7 +90,7 @@ public final class ApacheHttpClientTracingBuilder {
|
|||
*/
|
||||
public ApacheHttpClientTracing build() {
|
||||
ApacheHttpClientHttpAttributesGetter httpAttributesGetter =
|
||||
new ApacheHttpClientHttpAttributesGetter();
|
||||
ApacheHttpClientHttpAttributesGetter.INSTANCE;
|
||||
ApacheHttpClientNetAttributesGetter netAttributesGetter =
|
||||
new ApacheHttpClientNetAttributesGetter();
|
||||
|
||||
|
@ -74,10 +100,7 @@ public final class ApacheHttpClientTracingBuilder {
|
|||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
.captureHttpHeaders(capturedHttpHeaders)
|
||||
.build())
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter))
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
// We manually inject because we need to inject internal requests for redirects.
|
||||
|
|
|
@ -15,8 +15,9 @@ import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
|||
import java.util.List;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
final class ArmeriaHttpClientAttributesGetter
|
||||
enum ArmeriaHttpClientAttributesGetter
|
||||
implements HttpClientAttributesGetter<RequestContext, RequestLog> {
|
||||
INSTANCE;
|
||||
|
||||
@Override
|
||||
public String method(RequestContext ctx) {
|
||||
|
|
|
@ -16,8 +16,9 @@ import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
|||
import java.util.List;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
final class ArmeriaHttpServerAttributesGetter
|
||||
enum ArmeriaHttpServerAttributesGetter
|
||||
implements HttpServerAttributesGetter<RequestContext, RequestLog> {
|
||||
INSTANCE;
|
||||
|
||||
@Override
|
||||
public String method(RequestContext ctx) {
|
||||
|
|
|
@ -10,17 +10,17 @@ import com.linecorp.armeria.common.RequestContext;
|
|||
import com.linecorp.armeria.common.logging.RequestLog;
|
||||
import com.linecorp.armeria.server.ServiceRequestContext;
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.PeerServiceAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
|
@ -39,12 +39,17 @@ public final class ArmeriaTracingBuilder {
|
|||
|
||||
private final OpenTelemetry openTelemetry;
|
||||
@Nullable private String peerService;
|
||||
private CapturedHttpHeaders capturedHttpClientHeaders = CapturedHttpHeaders.client(Config.get());
|
||||
private CapturedHttpHeaders capturedHttpServerHeaders = CapturedHttpHeaders.server(Config.get());
|
||||
|
||||
private final List<AttributesExtractor<? super RequestContext, ? super RequestLog>>
|
||||
additionalExtractors = new ArrayList<>();
|
||||
|
||||
private final HttpClientAttributesExtractorBuilder<RequestContext, RequestLog>
|
||||
httpClientAttributesExtractorBuilder =
|
||||
HttpClientAttributesExtractor.builder(ArmeriaHttpClientAttributesGetter.INSTANCE);
|
||||
private final HttpServerAttributesExtractorBuilder<RequestContext, RequestLog>
|
||||
httpServerAttributesExtractorBuilder =
|
||||
HttpServerAttributesExtractor.builder(ArmeriaHttpServerAttributesGetter.INSTANCE);
|
||||
|
||||
private Function<
|
||||
SpanStatusExtractor<RequestContext, RequestLog>,
|
||||
? extends SpanStatusExtractor<? super RequestContext, ? super RequestLog>>
|
||||
|
@ -74,20 +79,46 @@ public final class ArmeriaTracingBuilder {
|
|||
}
|
||||
|
||||
/** Sets the {@code peer.service} attribute for http client spans. */
|
||||
public void setPeerService(String peerService) {
|
||||
public ArmeriaTracingBuilder setPeerService(String peerService) {
|
||||
this.peerService = peerService;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the HTTP client instrumentation to capture chosen HTTP request and response headers
|
||||
* as span attributes.
|
||||
*
|
||||
* @param capturedHttpClientHeaders An instance of {@link CapturedHttpHeaders} containing the
|
||||
* @param capturedHttpClientHeaders An instance of {@link
|
||||
* io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
* @deprecated Use {@link #setCapturedClientRequestHeaders(List)} and {@link
|
||||
* #setCapturedClientResponseHeaders(List)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public ArmeriaTracingBuilder captureHttpClientHeaders(
|
||||
CapturedHttpHeaders capturedHttpClientHeaders) {
|
||||
this.capturedHttpClientHeaders = capturedHttpClientHeaders;
|
||||
io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
capturedHttpClientHeaders) {
|
||||
httpClientAttributesExtractorBuilder.captureHttpHeaders(capturedHttpClientHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP client request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public ArmeriaTracingBuilder setCapturedClientRequestHeaders(List<String> requestHeaders) {
|
||||
httpClientAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP client response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public ArmeriaTracingBuilder setCapturedClientResponseHeaders(List<String> responseHeaders) {
|
||||
httpClientAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -95,20 +126,45 @@ public final class ArmeriaTracingBuilder {
|
|||
* Configure the HTTP server instrumentation to capture chosen HTTP request and response headers
|
||||
* as span attributes.
|
||||
*
|
||||
* @param capturedHttpServerHeaders An instance of {@link CapturedHttpHeaders} containing the
|
||||
* @param capturedHttpServerHeaders An instance of {@link
|
||||
* io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
* @deprecated Use {@link #setCapturedServerRequestHeaders(List)} and {@link
|
||||
* #setCapturedServerResponseHeaders(List)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public ArmeriaTracingBuilder captureHttpServerHeaders(
|
||||
CapturedHttpHeaders capturedHttpServerHeaders) {
|
||||
this.capturedHttpServerHeaders = capturedHttpServerHeaders;
|
||||
io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
capturedHttpServerHeaders) {
|
||||
httpServerAttributesExtractorBuilder.captureHttpHeaders(capturedHttpServerHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP server request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public ArmeriaTracingBuilder setCapturedServerRequestHeaders(List<String> requestHeaders) {
|
||||
httpServerAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP server response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public ArmeriaTracingBuilder setCapturedServerResponseHeaders(List<String> responseHeaders) {
|
||||
httpServerAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ArmeriaTracing build() {
|
||||
ArmeriaHttpClientAttributesGetter clientAttributesGetter =
|
||||
new ArmeriaHttpClientAttributesGetter();
|
||||
ArmeriaHttpClientAttributesGetter.INSTANCE;
|
||||
ArmeriaHttpServerAttributesGetter serverAttributesGetter =
|
||||
new ArmeriaHttpServerAttributesGetter();
|
||||
ArmeriaHttpServerAttributesGetter.INSTANCE;
|
||||
|
||||
InstrumenterBuilder<ClientRequestContext, RequestLog> clientInstrumenterBuilder =
|
||||
Instrumenter.builder(
|
||||
|
@ -134,10 +190,7 @@ public final class ArmeriaTracingBuilder {
|
|||
statusExtractorTransformer.apply(
|
||||
HttpSpanStatusExtractor.create(clientAttributesGetter)))
|
||||
.addAttributesExtractor(netClientAttributesExtractor)
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(clientAttributesGetter)
|
||||
.captureHttpHeaders(capturedHttpClientHeaders)
|
||||
.build())
|
||||
.addAttributesExtractor(httpClientAttributesExtractorBuilder.build())
|
||||
.addRequestMetrics(HttpClientMetrics.get());
|
||||
serverInstrumenterBuilder
|
||||
.setSpanStatusExtractor(
|
||||
|
@ -145,10 +198,7 @@ public final class ArmeriaTracingBuilder {
|
|||
HttpSpanStatusExtractor.create(serverAttributesGetter)))
|
||||
.addAttributesExtractor(
|
||||
NetServerAttributesExtractor.create(new ArmeriaNetServerAttributesGetter()))
|
||||
.addAttributesExtractor(
|
||||
HttpServerAttributesExtractor.builder(serverAttributesGetter)
|
||||
.captureHttpHeaders(capturedHttpServerHeaders)
|
||||
.build())
|
||||
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
|
||||
.addRequestMetrics(HttpServerMetrics.get())
|
||||
.addContextCustomizer(HttpRouteHolder.get());
|
||||
|
||||
|
|
|
@ -7,12 +7,14 @@ package io.opentelemetry.instrumentation.armeria.v1_3
|
|||
|
||||
import com.linecorp.armeria.server.ServerBuilder
|
||||
import io.opentelemetry.instrumentation.test.LibraryTestTrait
|
||||
import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest
|
||||
|
||||
class ArmeriaHttpServerTest extends AbstractArmeriaHttpServerTest implements LibraryTestTrait {
|
||||
@Override
|
||||
ServerBuilder configureServer(ServerBuilder sb) {
|
||||
return sb.decorator(ArmeriaTracing.builder(getOpenTelemetry())
|
||||
.captureHttpServerHeaders(capturedHttpHeadersForTesting())
|
||||
.setCapturedServerRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER])
|
||||
.setCapturedServerResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER])
|
||||
.build()
|
||||
.newServiceDecorator())
|
||||
}
|
||||
|
|
|
@ -7,8 +7,8 @@ package io.opentelemetry.instrumentation.jetty.httpclient.v9_2;
|
|||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.jetty.httpclient.v9_2.internal.JettyClientInstrumenterBuilder;
|
||||
import java.util.List;
|
||||
import org.eclipse.jetty.client.HttpClientTransport;
|
||||
import org.eclipse.jetty.client.api.Request;
|
||||
import org.eclipse.jetty.client.api.Response;
|
||||
|
@ -49,11 +49,39 @@ public final class JettyClientTracingBuilder {
|
|||
* Configure the instrumentation to capture chosen HTTP request and response headers as span
|
||||
* attributes.
|
||||
*
|
||||
* @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured
|
||||
* HTTP request and response names.
|
||||
* @param capturedHttpHeaders An instance of {@link
|
||||
* io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
* @deprecated Use {@link #setCapturedRequestHeaders(List)} and {@link
|
||||
* #setCapturedResponseHeaders(List)} instead.
|
||||
*/
|
||||
public JettyClientTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) {
|
||||
instrumenterBuilder.captureHttpHeaders(capturedHttpHeaders);
|
||||
@Deprecated
|
||||
public JettyClientTracingBuilder captureHttpHeaders(
|
||||
io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
capturedHttpHeaders) {
|
||||
instrumenterBuilder
|
||||
.setCapturedRequestHeaders(capturedHttpHeaders.requestHeaders())
|
||||
.setCapturedResponseHeaders(capturedHttpHeaders.responseHeaders());
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public JettyClientTracingBuilder setCapturedRequestHeaders(List<String> requestHeaders) {
|
||||
instrumenterBuilder.setCapturedRequestHeaders(requestHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public JettyClientTracingBuilder setCapturedResponseHeaders(List<String> responseHeaders) {
|
||||
instrumenterBuilder.setCapturedResponseHeaders(responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,8 +20,8 @@ import org.eclipse.jetty.http.HttpVersion;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
final class JettyClientHttpAttributesGetter
|
||||
implements HttpClientAttributesGetter<Request, Response> {
|
||||
enum JettyClientHttpAttributesGetter implements HttpClientAttributesGetter<Request, Response> {
|
||||
INSTANCE;
|
||||
|
||||
private static final Logger logger =
|
||||
LoggerFactory.getLogger(JettyClientHttpAttributesGetter.class);
|
||||
|
|
|
@ -6,11 +6,10 @@
|
|||
package io.opentelemetry.instrumentation.jetty.httpclient.v9_2.internal;
|
||||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
|
@ -32,7 +31,9 @@ public final class JettyClientInstrumenterBuilder {
|
|||
|
||||
private final List<AttributesExtractor<? super Request, ? super Response>> additionalExtractors =
|
||||
new ArrayList<>();
|
||||
private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.client(Config.get());
|
||||
private final HttpClientAttributesExtractorBuilder<Request, Response>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpClientAttributesExtractor.builder(JettyClientHttpAttributesGetter.INSTANCE);
|
||||
|
||||
public JettyClientInstrumenterBuilder(OpenTelemetry openTelemetry) {
|
||||
this.openTelemetry = openTelemetry;
|
||||
|
@ -44,14 +45,18 @@ public final class JettyClientInstrumenterBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
public JettyClientInstrumenterBuilder captureHttpHeaders(
|
||||
CapturedHttpHeaders capturedHttpHeaders) {
|
||||
this.capturedHttpHeaders = capturedHttpHeaders;
|
||||
public JettyClientInstrumenterBuilder setCapturedRequestHeaders(List<String> requestHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
public JettyClientInstrumenterBuilder setCapturedResponseHeaders(List<String> responseHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Instrumenter<Request, Response> build() {
|
||||
JettyClientHttpAttributesGetter httpAttributesGetter = new JettyClientHttpAttributesGetter();
|
||||
JettyClientHttpAttributesGetter httpAttributesGetter = JettyClientHttpAttributesGetter.INSTANCE;
|
||||
JettyHttpClientNetAttributesGetter netAttributesGetter =
|
||||
new JettyHttpClientNetAttributesGetter();
|
||||
|
||||
|
@ -60,10 +65,7 @@ public final class JettyClientInstrumenterBuilder {
|
|||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
.captureHttpHeaders(capturedHttpHeaders)
|
||||
.build())
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter))
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
.addRequestMetrics(HttpClientMetrics.get())
|
||||
|
|
|
@ -11,8 +11,9 @@ import io.ktor.response.*
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesGetter
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes
|
||||
|
||||
internal class KtorHttpServerAttributesGetter :
|
||||
internal enum class KtorHttpServerAttributesGetter :
|
||||
HttpServerAttributesGetter<ApplicationRequest, ApplicationResponse> {
|
||||
INSTANCE;
|
||||
|
||||
override fun method(request: ApplicationRequest): String {
|
||||
return request.httpMethod.value
|
||||
|
|
|
@ -14,11 +14,9 @@ import io.ktor.util.pipeline.*
|
|||
import io.opentelemetry.api.OpenTelemetry
|
||||
import io.opentelemetry.context.Context
|
||||
import io.opentelemetry.extension.kotlin.asContextElement
|
||||
import io.opentelemetry.instrumentation.api.config.Config
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor
|
||||
|
@ -35,10 +33,10 @@ class KtorServerTracing private constructor(
|
|||
class Configuration {
|
||||
internal lateinit var openTelemetry: OpenTelemetry
|
||||
|
||||
internal var capturedHttpHeaders = CapturedHttpHeaders.server(Config.get())
|
||||
|
||||
internal val additionalExtractors = mutableListOf<AttributesExtractor<in ApplicationRequest, in ApplicationResponse>>()
|
||||
|
||||
internal val httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE)
|
||||
|
||||
internal var statusExtractor:
|
||||
(SpanStatusExtractor<ApplicationRequest, ApplicationResponse>) -> SpanStatusExtractor<in ApplicationRequest, in ApplicationResponse> = { a -> a }
|
||||
|
||||
|
@ -54,8 +52,17 @@ class KtorServerTracing private constructor(
|
|||
additionalExtractors.add(extractor)
|
||||
}
|
||||
|
||||
fun captureHttpHeaders(capturedHttpHeaders: CapturedHttpHeaders) {
|
||||
this.capturedHttpHeaders = capturedHttpHeaders
|
||||
@Deprecated("Use the new setCapturedRequestHeaders() and setCapturedResponseHeaders() methods instead")
|
||||
fun captureHttpHeaders(capturedHttpHeaders: io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders) {
|
||||
httpAttributesExtractorBuilder.captureHttpHeaders(capturedHttpHeaders)
|
||||
}
|
||||
|
||||
fun setCapturedRequestHeaders(requestHeaders: List<String>) {
|
||||
httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders)
|
||||
}
|
||||
|
||||
fun setCapturedResponseHeaders(responseHeaders: List<String>) {
|
||||
httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders)
|
||||
}
|
||||
|
||||
internal fun isOpenTelemetryInitialized(): Boolean = this::openTelemetry.isInitialized
|
||||
|
@ -89,7 +96,7 @@ class KtorServerTracing private constructor(
|
|||
throw IllegalArgumentException("OpenTelemetry must be set")
|
||||
}
|
||||
|
||||
val httpAttributesGetter = KtorHttpServerAttributesGetter()
|
||||
val httpAttributesGetter = KtorHttpServerAttributesGetter.INSTANCE
|
||||
|
||||
val instrumenterBuilder = Instrumenter.builder<ApplicationRequest, ApplicationResponse>(
|
||||
configuration.openTelemetry,
|
||||
|
@ -102,7 +109,7 @@ class KtorServerTracing private constructor(
|
|||
with(instrumenterBuilder) {
|
||||
setSpanStatusExtractor(configuration.statusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)))
|
||||
addAttributesExtractor(NetServerAttributesExtractor.create(KtorNetServerAttributesGetter()))
|
||||
addAttributesExtractor(HttpServerAttributesExtractor.builder(httpAttributesGetter).captureHttpHeaders(configuration.capturedHttpHeaders).build())
|
||||
addAttributesExtractor(configuration.httpAttributesExtractorBuilder.build())
|
||||
addRequestMetrics(HttpServerMetrics.get())
|
||||
addContextCustomizer(HttpRouteHolder.get())
|
||||
}
|
||||
|
|
|
@ -7,14 +7,15 @@ package io.opentelemetry.instrumentation.ktor.v1_0
|
|||
|
||||
import io.ktor.application.*
|
||||
import io.opentelemetry.api.OpenTelemetry
|
||||
import io.opentelemetry.instrumentation.test.base.HttpServerTest
|
||||
import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest
|
||||
|
||||
class KtorTestUtil {
|
||||
companion object {
|
||||
fun installOpenTelemetry(application: Application, openTelemetry: OpenTelemetry) {
|
||||
application.install(KtorServerTracing) {
|
||||
setOpenTelemetry(openTelemetry)
|
||||
captureHttpHeaders(HttpServerTest.capturedHttpHeadersForTesting())
|
||||
setCapturedRequestHeaders(listOf(AbstractHttpServerTest.TEST_REQUEST_HEADER))
|
||||
setCapturedResponseHeaders(listOf(AbstractHttpServerTest.TEST_RESPONSE_HEADER))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,8 @@ import javax.annotation.Nullable;
|
|||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
|
||||
final class OkHttpAttributesGetter implements HttpClientAttributesGetter<Request, Response> {
|
||||
enum OkHttpAttributesGetter implements HttpClientAttributesGetter<Request, Response> {
|
||||
INSTANCE;
|
||||
|
||||
@Override
|
||||
public String method(Request request) {
|
||||
|
|
|
@ -8,11 +8,10 @@ package io.opentelemetry.instrumentation.okhttp.v3_0;
|
|||
import static io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor.alwaysClient;
|
||||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
|
@ -30,7 +29,9 @@ public final class OkHttpTracingBuilder {
|
|||
private final OpenTelemetry openTelemetry;
|
||||
private final List<AttributesExtractor<Request, Response>> additionalExtractors =
|
||||
new ArrayList<>();
|
||||
private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.client(Config.get());
|
||||
private final HttpClientAttributesExtractorBuilder<Request, Response>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpClientAttributesExtractor.builder(OkHttpAttributesGetter.INSTANCE);
|
||||
|
||||
OkHttpTracingBuilder(OpenTelemetry openTelemetry) {
|
||||
this.openTelemetry = openTelemetry;
|
||||
|
@ -50,17 +51,43 @@ public final class OkHttpTracingBuilder {
|
|||
* Configure the instrumentation to capture chosen HTTP request and response headers as span
|
||||
* attributes.
|
||||
*
|
||||
* @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured
|
||||
* HTTP request and response names.
|
||||
* @param capturedHttpHeaders An instance of {@link
|
||||
* io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
* @deprecated Use {@link #setCapturedRequestHeaders(List)} and {@link
|
||||
* #setCapturedResponseHeaders(List)} instead.
|
||||
*/
|
||||
public OkHttpTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) {
|
||||
this.capturedHttpHeaders = capturedHttpHeaders;
|
||||
@Deprecated
|
||||
public OkHttpTracingBuilder captureHttpHeaders(
|
||||
io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
capturedHttpHeaders) {
|
||||
httpAttributesExtractorBuilder.captureHttpHeaders(capturedHttpHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public OkHttpTracingBuilder setCapturedRequestHeaders(List<String> requestHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public OkHttpTracingBuilder setCapturedResponseHeaders(List<String> responseHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Returns a new {@link OkHttpTracing} with the settings of this {@link OkHttpTracingBuilder}. */
|
||||
public OkHttpTracing build() {
|
||||
OkHttpAttributesGetter httpAttributesGetter = new OkHttpAttributesGetter();
|
||||
OkHttpAttributesGetter httpAttributesGetter = OkHttpAttributesGetter.INSTANCE;
|
||||
OkHttpNetAttributesGetter attributesGetter = new OkHttpNetAttributesGetter();
|
||||
|
||||
Instrumenter<Request, Response> instrumenter =
|
||||
|
@ -69,10 +96,7 @@ public final class OkHttpTracingBuilder {
|
|||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
.captureHttpHeaders(capturedHttpHeaders)
|
||||
.build())
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractor(NetClientAttributesExtractor.create(attributesGetter))
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
.addRequestMetrics(HttpClientMetrics.get())
|
||||
|
|
|
@ -14,7 +14,8 @@ import ratpack.http.Request;
|
|||
import ratpack.http.Response;
|
||||
import ratpack.server.PublicAddress;
|
||||
|
||||
final class RatpackHttpAttributesGetter implements HttpServerAttributesGetter<Request, Response> {
|
||||
enum RatpackHttpAttributesGetter implements HttpServerAttributesGetter<Request, Response> {
|
||||
INSTANCE;
|
||||
|
||||
@Override
|
||||
public String method(Request request) {
|
||||
|
|
|
@ -12,8 +12,9 @@ import javax.annotation.Nullable;
|
|||
import ratpack.http.client.HttpResponse;
|
||||
import ratpack.http.client.RequestSpec;
|
||||
|
||||
final class RatpackHttpClientAttributesGetter
|
||||
enum RatpackHttpClientAttributesGetter
|
||||
implements HttpClientAttributesGetter<RequestSpec, HttpResponse> {
|
||||
INSTANCE;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
|
@ -21,7 +22,6 @@ final class RatpackHttpClientAttributesGetter
|
|||
return requestSpec.getUri().toString();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String flavor(RequestSpec requestSpec, @Nullable HttpResponse httpResponse) {
|
||||
return SemanticAttributes.HttpFlavorValues.HTTP_1_1;
|
||||
|
|
|
@ -6,12 +6,12 @@
|
|||
package io.opentelemetry.instrumentation.ratpack;
|
||||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
|
@ -35,8 +35,12 @@ public final class RatpackTracingBuilder {
|
|||
|
||||
private final List<AttributesExtractor<? super Request, ? super Response>> additionalExtractors =
|
||||
new ArrayList<>();
|
||||
private CapturedHttpHeaders capturedHttpClientHeaders = CapturedHttpHeaders.client(Config.get());
|
||||
private CapturedHttpHeaders capturedHttpServerHeaders = CapturedHttpHeaders.server(Config.get());
|
||||
private final HttpClientAttributesExtractorBuilder<RequestSpec, HttpResponse>
|
||||
httpClientAttributesExtractorBuilder =
|
||||
HttpClientAttributesExtractor.builder(RatpackHttpClientAttributesGetter.INSTANCE);
|
||||
private final HttpServerAttributesExtractorBuilder<Request, Response>
|
||||
httpServerAttributesExtractorBuilder =
|
||||
HttpServerAttributesExtractor.builder(RatpackHttpAttributesGetter.INSTANCE);
|
||||
|
||||
private final List<AttributesExtractor<? super RequestSpec, ? super HttpResponse>>
|
||||
additionalHttpClientExtractors = new ArrayList<>();
|
||||
|
@ -65,55 +69,106 @@ public final class RatpackTracingBuilder {
|
|||
* Configure the instrumentation to capture chosen HTTP request and response headers as span
|
||||
* attributes.
|
||||
*
|
||||
* @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured
|
||||
* HTTP request and response names.
|
||||
* @deprecated Use {@link #captureHttpServerHeaders(CapturedHttpHeaders)} instead.
|
||||
* @param capturedHttpHeaders An instance of {@link
|
||||
* io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
* @deprecated Use {@link #setCapturedServerRequestHeaders(List)} and {@link
|
||||
* #setCapturedServerResponseHeaders(List)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public RatpackTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) {
|
||||
return captureHttpServerHeaders(capturedHttpServerHeaders);
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the HTTP client instrumentation to capture chosen HTTP request and response headers
|
||||
* as span attributes.
|
||||
*
|
||||
* @param capturedHttpClientHeaders An instance of {@link CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
*/
|
||||
public RatpackTracingBuilder captureHttpClientHeaders(
|
||||
CapturedHttpHeaders capturedHttpClientHeaders) {
|
||||
this.capturedHttpClientHeaders = capturedHttpClientHeaders;
|
||||
return this;
|
||||
public RatpackTracingBuilder captureHttpHeaders(
|
||||
io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
capturedHttpHeaders) {
|
||||
return captureHttpServerHeaders(capturedHttpHeaders);
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the HTTP server instrumentation to capture chosen HTTP request and response headers
|
||||
* as span attributes.
|
||||
*
|
||||
* @param capturedHttpServerHeaders An instance of {@link CapturedHttpHeaders} containing the
|
||||
* @param capturedHttpServerHeaders An instance of {@link
|
||||
* io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
* @deprecated Use {@link #setCapturedServerRequestHeaders(List)} and {@link
|
||||
* #setCapturedServerResponseHeaders(List)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public RatpackTracingBuilder captureHttpServerHeaders(
|
||||
CapturedHttpHeaders capturedHttpServerHeaders) {
|
||||
this.capturedHttpServerHeaders = capturedHttpServerHeaders;
|
||||
io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
capturedHttpServerHeaders) {
|
||||
httpServerAttributesExtractorBuilder.captureHttpHeaders(capturedHttpServerHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP server request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public RatpackTracingBuilder setCapturedServerRequestHeaders(List<String> requestHeaders) {
|
||||
httpServerAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP server response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public RatpackTracingBuilder setCapturedServerResponseHeaders(List<String> responseHeaders) {
|
||||
httpServerAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the HTTP client instrumentation to capture chosen HTTP request and response headers
|
||||
* as span attributes.
|
||||
*
|
||||
* @param capturedHttpClientHeaders An instance of {@link
|
||||
* io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
* @deprecated Use {@link #setCapturedClientRequestHeaders(List)} and {@link
|
||||
* #setCapturedClientResponseHeaders(List)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public RatpackTracingBuilder captureHttpClientHeaders(
|
||||
io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
capturedHttpClientHeaders) {
|
||||
httpClientAttributesExtractorBuilder.captureHttpHeaders(capturedHttpClientHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP client request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public RatpackTracingBuilder setCapturedClientRequestHeaders(List<String> requestHeaders) {
|
||||
httpClientAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP client response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public RatpackTracingBuilder setCapturedClientResponseHeaders(List<String> responseHeaders) {
|
||||
httpClientAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Returns a new {@link RatpackTracing} with the configuration of this builder. */
|
||||
public RatpackTracing build() {
|
||||
RatpackNetAttributesGetter netAttributes = new RatpackNetAttributesGetter();
|
||||
RatpackHttpAttributesGetter httpAttributes = new RatpackHttpAttributesGetter();
|
||||
RatpackHttpAttributesGetter httpAttributes = RatpackHttpAttributesGetter.INSTANCE;
|
||||
|
||||
Instrumenter<Request, Response> instrumenter =
|
||||
Instrumenter.<Request, Response>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(httpAttributes))
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes))
|
||||
.addAttributesExtractor(NetServerAttributesExtractor.create(netAttributes))
|
||||
.addAttributesExtractor(
|
||||
HttpServerAttributesExtractor.builder(httpAttributes)
|
||||
.captureHttpHeaders(capturedHttpServerHeaders)
|
||||
.build())
|
||||
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
.addRequestMetrics(HttpServerMetrics.get())
|
||||
.newServerInstrumenter(RatpackGetter.INSTANCE);
|
||||
|
@ -123,16 +178,13 @@ public final class RatpackTracingBuilder {
|
|||
|
||||
private Instrumenter<RequestSpec, HttpResponse> httpClientInstrumenter() {
|
||||
RatpackHttpNetAttributesGetter netAttributes = new RatpackHttpNetAttributesGetter();
|
||||
RatpackHttpClientAttributesGetter httpAttributes = new RatpackHttpClientAttributesGetter();
|
||||
RatpackHttpClientAttributesGetter httpAttributes = RatpackHttpClientAttributesGetter.INSTANCE;
|
||||
|
||||
return Instrumenter.<RequestSpec, HttpResponse>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(httpAttributes))
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes))
|
||||
.addAttributesExtractor(NetClientAttributesExtractor.create(netAttributes))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributes)
|
||||
.captureHttpHeaders(capturedHttpClientHeaders)
|
||||
.build())
|
||||
.addAttributesExtractor(httpClientAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalHttpClientExtractors)
|
||||
.addRequestMetrics(HttpServerMetrics.get())
|
||||
.newClientInstrumenter(RequestHeaderSetter.INSTANCE);
|
||||
|
|
|
@ -7,6 +7,7 @@ package io.opentelemetry.instrumentation.ratpack.server
|
|||
|
||||
import io.opentelemetry.instrumentation.ratpack.RatpackTracing
|
||||
import io.opentelemetry.instrumentation.test.LibraryTestTrait
|
||||
import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest
|
||||
import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint
|
||||
import ratpack.server.RatpackServerSpec
|
||||
|
||||
|
@ -14,7 +15,8 @@ class RatpackAsyncHttpServerTest extends AbstractRatpackAsyncHttpServerTest impl
|
|||
@Override
|
||||
void configure(RatpackServerSpec serverSpec) {
|
||||
RatpackTracing tracing = RatpackTracing.builder(openTelemetry)
|
||||
.captureHttpServerHeaders(capturedHttpHeadersForTesting())
|
||||
.setCapturedServerRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER])
|
||||
.setCapturedServerResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER])
|
||||
.build()
|
||||
serverSpec.registryOf {
|
||||
tracing.configureServerRegistry(it)
|
||||
|
|
|
@ -7,6 +7,7 @@ package io.opentelemetry.instrumentation.ratpack.server
|
|||
|
||||
import io.opentelemetry.instrumentation.ratpack.RatpackTracing
|
||||
import io.opentelemetry.instrumentation.test.LibraryTestTrait
|
||||
import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest
|
||||
import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint
|
||||
import ratpack.server.RatpackServerSpec
|
||||
|
||||
|
@ -14,7 +15,8 @@ class RatpackForkedHttpServerTest extends AbstractRatpackForkedHttpServerTest im
|
|||
@Override
|
||||
void configure(RatpackServerSpec serverSpec) {
|
||||
RatpackTracing tracing = RatpackTracing.builder(openTelemetry)
|
||||
.captureHttpServerHeaders(capturedHttpHeadersForTesting())
|
||||
.setCapturedServerRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER])
|
||||
.setCapturedServerResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER])
|
||||
.build()
|
||||
serverSpec.registryOf {
|
||||
tracing.configureServerRegistry(it)
|
||||
|
|
|
@ -7,6 +7,7 @@ package io.opentelemetry.instrumentation.ratpack.server
|
|||
|
||||
import io.opentelemetry.instrumentation.ratpack.RatpackTracing
|
||||
import io.opentelemetry.instrumentation.test.LibraryTestTrait
|
||||
import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest
|
||||
import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint
|
||||
import ratpack.server.RatpackServerSpec
|
||||
|
||||
|
@ -14,7 +15,8 @@ class RatpackHttpServerTest extends AbstractRatpackHttpServerTest implements Lib
|
|||
@Override
|
||||
void configure(RatpackServerSpec serverSpec) {
|
||||
RatpackTracing tracing = RatpackTracing.builder(openTelemetry)
|
||||
.captureHttpServerHeaders(capturedHttpHeadersForTesting())
|
||||
.setCapturedServerRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER])
|
||||
.setCapturedServerResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER])
|
||||
.build()
|
||||
serverSpec.registryOf {
|
||||
tracing.configureServerRegistry(it)
|
||||
|
|
|
@ -20,7 +20,8 @@ import org.restlet.data.Request;
|
|||
import org.restlet.data.Response;
|
||||
import org.restlet.util.Series;
|
||||
|
||||
final class RestletHttpAttributesGetter implements HttpServerAttributesGetter<Request, Response> {
|
||||
enum RestletHttpAttributesGetter implements HttpServerAttributesGetter<Request, Response> {
|
||||
INSTANCE;
|
||||
|
||||
@Override
|
||||
public String method(Request request) {
|
||||
|
|
|
@ -6,11 +6,10 @@
|
|||
package io.opentelemetry.instrumentation.restlet.v1_0;
|
||||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
|
@ -28,7 +27,9 @@ public final class RestletTracingBuilder {
|
|||
private final OpenTelemetry openTelemetry;
|
||||
private final List<AttributesExtractor<Request, Response>> additionalExtractors =
|
||||
new ArrayList<>();
|
||||
private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.server(Config.get());
|
||||
private final HttpServerAttributesExtractorBuilder<Request, Response>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpServerAttributesExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||
|
||||
RestletTracingBuilder(OpenTelemetry openTelemetry) {
|
||||
this.openTelemetry = openTelemetry;
|
||||
|
@ -48,11 +49,37 @@ public final class RestletTracingBuilder {
|
|||
* Configure the instrumentation to capture chosen HTTP request and response headers as span
|
||||
* attributes.
|
||||
*
|
||||
* @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured
|
||||
* HTTP request and response names.
|
||||
* @param capturedHttpHeaders An instance of {@link
|
||||
* io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
* @deprecated Use {@link #setCapturedRequestHeaders(List)} and {@link
|
||||
* #setCapturedResponseHeaders(List)} instead.
|
||||
*/
|
||||
public RestletTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) {
|
||||
this.capturedHttpHeaders = capturedHttpHeaders;
|
||||
@Deprecated
|
||||
public RestletTracingBuilder captureHttpHeaders(
|
||||
io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
capturedHttpHeaders) {
|
||||
httpAttributesExtractorBuilder.captureHttpHeaders(capturedHttpHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public RestletTracingBuilder setCapturedRequestHeaders(List<String> requestHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public RestletTracingBuilder setCapturedResponseHeaders(List<String> responseHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -60,7 +87,7 @@ public final class RestletTracingBuilder {
|
|||
* Returns a new {@link RestletTracing} with the settings of this {@link RestletTracingBuilder}.
|
||||
*/
|
||||
public RestletTracing build() {
|
||||
RestletHttpAttributesGetter httpAttributesGetter = new RestletHttpAttributesGetter();
|
||||
RestletHttpAttributesGetter httpAttributesGetter = RestletHttpAttributesGetter.INSTANCE;
|
||||
RestletNetAttributesGetter netAttributesGetter = new RestletNetAttributesGetter();
|
||||
|
||||
Instrumenter<Request, Response> instrumenter =
|
||||
|
@ -69,10 +96,7 @@ public final class RestletTracingBuilder {
|
|||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
||||
.captureHttpHeaders(capturedHttpHeaders)
|
||||
.build())
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractor(NetServerAttributesExtractor.create(netAttributesGetter))
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
.addRequestMetrics(HttpServerMetrics.get())
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.noelios.restlet.StatusFilter
|
|||
import io.opentelemetry.instrumentation.restlet.v1_0.AbstractRestletServerTest
|
||||
import io.opentelemetry.instrumentation.restlet.v1_0.RestletTracing
|
||||
import io.opentelemetry.instrumentation.test.LibraryTestTrait
|
||||
import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest
|
||||
import org.restlet.Restlet
|
||||
|
||||
class RestletServerTest extends AbstractRestletServerTest implements LibraryTestTrait {
|
||||
|
@ -16,7 +17,8 @@ class RestletServerTest extends AbstractRestletServerTest implements LibraryTest
|
|||
@Override
|
||||
Restlet wrapRestlet(Restlet restlet, String path) {
|
||||
RestletTracing tracing = RestletTracing.builder(openTelemetry)
|
||||
.captureHttpHeaders(capturedHttpHeadersForTesting())
|
||||
.setCapturedRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER])
|
||||
.setCapturedResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER])
|
||||
.build()
|
||||
|
||||
def tracingFilter = tracing.newFilter(path)
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.noelios.restlet.StatusFilter
|
|||
import io.opentelemetry.instrumentation.restlet.v1_0.RestletTracing
|
||||
import io.opentelemetry.instrumentation.restlet.v1_0.spring.AbstractSpringServerTest
|
||||
import io.opentelemetry.instrumentation.test.LibraryTestTrait
|
||||
import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest
|
||||
import org.restlet.Restlet
|
||||
import org.restlet.Route
|
||||
import org.restlet.Router
|
||||
|
@ -19,7 +20,8 @@ abstract class AbstractSpringServerLibraryTest extends AbstractSpringServerTest
|
|||
Restlet wrapRestlet(Restlet restlet, String path) {
|
||||
|
||||
RestletTracing tracing = RestletTracing.builder(openTelemetry)
|
||||
.captureHttpHeaders(capturedHttpHeadersForTesting())
|
||||
.setCapturedRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER])
|
||||
.setCapturedResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER])
|
||||
.build()
|
||||
|
||||
def tracingFilter = tracing.newFilter(path)
|
||||
|
|
|
@ -6,10 +6,11 @@
|
|||
package io.opentelemetry.instrumentation.restlet.v2_0;
|
||||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletHttpAttributesGetter;
|
||||
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletInstrumenterFactory;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -22,7 +23,9 @@ public final class RestletTracingBuilder {
|
|||
private final OpenTelemetry openTelemetry;
|
||||
private final List<AttributesExtractor<Request, Response>> additionalExtractors =
|
||||
new ArrayList<>();
|
||||
private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.server(Config.get());
|
||||
private final HttpServerAttributesExtractorBuilder<Request, Response>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpServerAttributesExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||
|
||||
RestletTracingBuilder(OpenTelemetry openTelemetry) {
|
||||
this.openTelemetry = openTelemetry;
|
||||
|
@ -42,11 +45,37 @@ public final class RestletTracingBuilder {
|
|||
* Configure the instrumentation to capture chosen HTTP request and response headers as span
|
||||
* attributes.
|
||||
*
|
||||
* @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured
|
||||
* HTTP request and response names.
|
||||
* @param capturedHttpHeaders An instance of {@link
|
||||
* io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
* @deprecated Use {@link #setCapturedRequestHeaders(List)} and {@link
|
||||
* #setCapturedResponseHeaders(List)} instead.
|
||||
*/
|
||||
public RestletTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) {
|
||||
this.capturedHttpHeaders = capturedHttpHeaders;
|
||||
@Deprecated
|
||||
public RestletTracingBuilder captureHttpHeaders(
|
||||
io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
capturedHttpHeaders) {
|
||||
httpAttributesExtractorBuilder.captureHttpHeaders(capturedHttpHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public RestletTracingBuilder setCapturedRequestHeaders(List<String> requestHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public RestletTracingBuilder setCapturedResponseHeaders(List<String> responseHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -54,10 +83,9 @@ public final class RestletTracingBuilder {
|
|||
* Returns a new {@link RestletTracing} with the settings of this {@link RestletTracingBuilder}.
|
||||
*/
|
||||
public RestletTracing build() {
|
||||
|
||||
Instrumenter<Request, Response> serverInstrumenter =
|
||||
RestletInstrumenterFactory.newServerInstrumenter(
|
||||
openTelemetry, capturedHttpHeaders, additionalExtractors);
|
||||
openTelemetry, httpAttributesExtractorBuilder.build(), additionalExtractors);
|
||||
|
||||
return new RestletTracing(serverInstrumenter);
|
||||
}
|
||||
|
|
|
@ -18,7 +18,12 @@ import org.restlet.Response;
|
|||
import org.restlet.data.Reference;
|
||||
import org.restlet.util.Series;
|
||||
|
||||
final class RestletHttpAttributesGetter implements HttpServerAttributesGetter<Request, Response> {
|
||||
/**
|
||||
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
|
||||
* any time.
|
||||
*/
|
||||
public enum RestletHttpAttributesGetter implements HttpServerAttributesGetter<Request, Response> {
|
||||
INSTANCE;
|
||||
|
||||
@Override
|
||||
public String method(Request request) {
|
||||
|
|
|
@ -6,10 +6,8 @@
|
|||
package io.opentelemetry.instrumentation.restlet.v2_0.internal;
|
||||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
|
@ -30,24 +28,23 @@ public class RestletInstrumenterFactory {
|
|||
|
||||
public static Instrumenter<Request, Response> newServerInstrumenter(OpenTelemetry openTelemetry) {
|
||||
return newServerInstrumenter(
|
||||
openTelemetry, CapturedHttpHeaders.server(Config.get()), Collections.emptyList());
|
||||
openTelemetry,
|
||||
HttpServerAttributesExtractor.create(RestletHttpAttributesGetter.INSTANCE),
|
||||
Collections.emptyList());
|
||||
}
|
||||
|
||||
public static Instrumenter<Request, Response> newServerInstrumenter(
|
||||
OpenTelemetry openTelemetry,
|
||||
CapturedHttpHeaders capturedHttpHeaders,
|
||||
HttpServerAttributesExtractor<Request, Response> httpServerAttributesExtractor,
|
||||
List<AttributesExtractor<Request, Response>> additionalExtractors) {
|
||||
|
||||
RestletHttpAttributesGetter httpAttributesGetter = new RestletHttpAttributesGetter();
|
||||
RestletHttpAttributesGetter httpAttributesGetter = RestletHttpAttributesGetter.INSTANCE;
|
||||
RestletNetAttributesGetter netAttributesGetter = new RestletNetAttributesGetter();
|
||||
|
||||
return Instrumenter.<Request, Response>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
||||
.captureHttpHeaders(capturedHttpHeaders)
|
||||
.build())
|
||||
.addAttributesExtractor(httpServerAttributesExtractor)
|
||||
.addAttributesExtractor(NetServerAttributesExtractor.create(netAttributesGetter))
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
.addRequestMetrics(HttpServerMetrics.get())
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
package io.opentelemetry.instrumentation.restlet.v2_0
|
||||
|
||||
import io.opentelemetry.instrumentation.test.LibraryTestTrait
|
||||
import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest
|
||||
import org.restlet.Restlet
|
||||
import org.restlet.engine.application.StatusFilter
|
||||
import org.restlet.service.StatusService
|
||||
|
@ -16,7 +17,8 @@ class RestletServerTest extends AbstractRestletServerTest implements LibraryTest
|
|||
Restlet wrapRestlet(Restlet restlet, String path) {
|
||||
|
||||
RestletTracing tracing = RestletTracing.builder(openTelemetry)
|
||||
.captureHttpHeaders(capturedHttpHeadersForTesting())
|
||||
.setCapturedRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER])
|
||||
.setCapturedResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER])
|
||||
.build()
|
||||
|
||||
def tracingFilter = tracing.newFilter(path)
|
||||
|
|
|
@ -7,6 +7,7 @@ package io.opentelemetry.instrumentation.restlet.v2_0.spring
|
|||
|
||||
import io.opentelemetry.instrumentation.restlet.v2_0.RestletTracing
|
||||
import io.opentelemetry.instrumentation.test.LibraryTestTrait
|
||||
import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest
|
||||
import org.restlet.Request
|
||||
import org.restlet.Response
|
||||
import org.restlet.Restlet
|
||||
|
@ -25,7 +26,8 @@ abstract class AbstractSpringServerLibraryTest extends AbstractSpringServerTest
|
|||
Restlet wrapRestlet(Restlet restlet, String path) {
|
||||
|
||||
RestletTracing tracing = RestletTracing.builder(openTelemetry)
|
||||
.captureHttpHeaders(capturedHttpHeadersForTesting())
|
||||
.setCapturedRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER])
|
||||
.setCapturedResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER])
|
||||
.build()
|
||||
|
||||
def tracingFilter = tracing.newFilter(path)
|
||||
|
|
|
@ -15,8 +15,9 @@ import org.springframework.http.HttpRequest;
|
|||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.client.ClientHttpResponse;
|
||||
|
||||
final class SpringWebHttpAttributesGetter
|
||||
enum SpringWebHttpAttributesGetter
|
||||
implements HttpClientAttributesGetter<HttpRequest, ClientHttpResponse> {
|
||||
INSTANCE;
|
||||
|
||||
@Override
|
||||
public String method(HttpRequest httpRequest) {
|
||||
|
|
|
@ -6,11 +6,10 @@
|
|||
package io.opentelemetry.instrumentation.spring.web;
|
||||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
|
@ -27,7 +26,9 @@ public final class SpringWebTracingBuilder {
|
|||
private final OpenTelemetry openTelemetry;
|
||||
private final List<AttributesExtractor<HttpRequest, ClientHttpResponse>> additionalExtractors =
|
||||
new ArrayList<>();
|
||||
private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.client(Config.get());
|
||||
private final HttpClientAttributesExtractorBuilder<HttpRequest, ClientHttpResponse>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpClientAttributesExtractor.builder(SpringWebHttpAttributesGetter.INSTANCE);
|
||||
|
||||
SpringWebTracingBuilder(OpenTelemetry openTelemetry) {
|
||||
this.openTelemetry = openTelemetry;
|
||||
|
@ -47,11 +48,37 @@ public final class SpringWebTracingBuilder {
|
|||
* Configure the instrumentation to capture chosen HTTP request and response headers as span
|
||||
* attributes.
|
||||
*
|
||||
* @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured
|
||||
* HTTP request and response names.
|
||||
* @param capturedHttpHeaders An instance of {@link
|
||||
* io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
* @deprecated Use {@link #setCapturedRequestHeaders(List)} and {@link
|
||||
* #setCapturedResponseHeaders(List)} instead.
|
||||
*/
|
||||
public SpringWebTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) {
|
||||
this.capturedHttpHeaders = capturedHttpHeaders;
|
||||
@Deprecated
|
||||
public SpringWebTracingBuilder captureHttpHeaders(
|
||||
io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
capturedHttpHeaders) {
|
||||
httpAttributesExtractorBuilder.captureHttpHeaders(capturedHttpHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public SpringWebTracingBuilder setCapturedRequestHeaders(List<String> requestHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public SpringWebTracingBuilder setCapturedResponseHeaders(List<String> responseHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -60,7 +87,7 @@ public final class SpringWebTracingBuilder {
|
|||
* SpringWebTracingBuilder}.
|
||||
*/
|
||||
public SpringWebTracing build() {
|
||||
SpringWebHttpAttributesGetter httpAttributeGetter = new SpringWebHttpAttributesGetter();
|
||||
SpringWebHttpAttributesGetter httpAttributeGetter = SpringWebHttpAttributesGetter.INSTANCE;
|
||||
SpringWebNetAttributesGetter netAttributesGetter = new SpringWebNetAttributesGetter();
|
||||
|
||||
Instrumenter<HttpRequest, ClientHttpResponse> instrumenter =
|
||||
|
@ -69,10 +96,7 @@ public final class SpringWebTracingBuilder {
|
|||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributeGetter))
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributeGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributeGetter)
|
||||
.captureHttpHeaders(capturedHttpHeaders)
|
||||
.build())
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter))
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
.addRequestMetrics(HttpClientMetrics.get())
|
||||
|
|
|
@ -16,8 +16,9 @@ import javax.annotation.Nullable;
|
|||
import org.springframework.web.reactive.function.client.ClientRequest;
|
||||
import org.springframework.web.reactive.function.client.ClientResponse;
|
||||
|
||||
final class SpringWebfluxHttpAttributesGetter
|
||||
enum SpringWebfluxHttpAttributesGetter
|
||||
implements HttpClientAttributesGetter<ClientRequest, ClientResponse> {
|
||||
INSTANCE;
|
||||
|
||||
private static final MethodHandle RAW_STATUS_CODE = findRawStatusCode();
|
||||
|
||||
|
|
|
@ -8,13 +8,12 @@ package io.opentelemetry.instrumentation.spring.webflux.client;
|
|||
import static io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor.alwaysClient;
|
||||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.PeerServiceAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
|
@ -30,7 +29,9 @@ public final class SpringWebfluxTracingBuilder {
|
|||
private final OpenTelemetry openTelemetry;
|
||||
private final List<AttributesExtractor<ClientRequest, ClientResponse>> additionalExtractors =
|
||||
new ArrayList<>();
|
||||
private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.client(Config.get());
|
||||
private final HttpClientAttributesExtractorBuilder<ClientRequest, ClientResponse>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpClientAttributesExtractor.builder(SpringWebfluxHttpAttributesGetter.INSTANCE);
|
||||
|
||||
SpringWebfluxTracingBuilder(OpenTelemetry openTelemetry) {
|
||||
this.openTelemetry = openTelemetry;
|
||||
|
@ -50,11 +51,37 @@ public final class SpringWebfluxTracingBuilder {
|
|||
* Configure the instrumentation to capture chosen HTTP request and response headers as span
|
||||
* attributes.
|
||||
*
|
||||
* @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured
|
||||
* HTTP request and response names.
|
||||
* @param capturedHttpHeaders An instance of {@link
|
||||
* io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
* @deprecated Use {@link #setCapturedRequestHeaders(List)} and {@link
|
||||
* #setCapturedResponseHeaders(List)} instead.
|
||||
*/
|
||||
public SpringWebfluxTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) {
|
||||
this.capturedHttpHeaders = capturedHttpHeaders;
|
||||
@Deprecated
|
||||
public SpringWebfluxTracingBuilder captureHttpHeaders(
|
||||
io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
capturedHttpHeaders) {
|
||||
httpAttributesExtractorBuilder.captureHttpHeaders(capturedHttpHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public SpringWebfluxTracingBuilder setCapturedRequestHeaders(List<String> requestHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public SpringWebfluxTracingBuilder setCapturedResponseHeaders(List<String> responseHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -64,7 +91,7 @@ public final class SpringWebfluxTracingBuilder {
|
|||
*/
|
||||
public SpringWebfluxTracing build() {
|
||||
SpringWebfluxHttpAttributesGetter httpAttributesGetter =
|
||||
new SpringWebfluxHttpAttributesGetter();
|
||||
SpringWebfluxHttpAttributesGetter.INSTANCE;
|
||||
SpringWebfluxNetAttributesGetter attributesGetter = new SpringWebfluxNetAttributesGetter();
|
||||
NetClientAttributesExtractor<ClientRequest, ClientResponse> attributesExtractor =
|
||||
NetClientAttributesExtractor.create(attributesGetter);
|
||||
|
@ -75,10 +102,7 @@ public final class SpringWebfluxTracingBuilder {
|
|||
"io.opentelemetry.spring-webflux-5.0",
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||
.captureHttpHeaders(capturedHttpHeaders)
|
||||
.build())
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractor(attributesExtractor)
|
||||
.addAttributesExtractor(PeerServiceAttributesExtractor.create(attributesGetter))
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
|
@ -15,8 +15,9 @@ import javax.annotation.Nullable;
|
|||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
final class SpringWebMvcHttpAttributesGetter
|
||||
enum SpringWebMvcHttpAttributesGetter
|
||||
implements HttpServerAttributesGetter<HttpServletRequest, HttpServletResponse> {
|
||||
INSTANCE;
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
|
|
|
@ -6,12 +6,11 @@
|
|||
package io.opentelemetry.instrumentation.spring.webmvc;
|
||||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
|
@ -29,7 +28,9 @@ public final class SpringWebMvcTracingBuilder {
|
|||
private final OpenTelemetry openTelemetry;
|
||||
private final List<AttributesExtractor<HttpServletRequest, HttpServletResponse>>
|
||||
additionalExtractors = new ArrayList<>();
|
||||
private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.server(Config.get());
|
||||
private final HttpServerAttributesExtractorBuilder<HttpServletRequest, HttpServletResponse>
|
||||
httpAttributesExtractorBuilder =
|
||||
HttpServerAttributesExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
||||
|
||||
SpringWebMvcTracingBuilder(OpenTelemetry openTelemetry) {
|
||||
this.openTelemetry = openTelemetry;
|
||||
|
@ -49,11 +50,37 @@ public final class SpringWebMvcTracingBuilder {
|
|||
* Configure the instrumentation to capture chosen HTTP request and response headers as span
|
||||
* attributes.
|
||||
*
|
||||
* @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured
|
||||
* HTTP request and response names.
|
||||
* @param capturedHttpHeaders An instance of {@link
|
||||
* io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders} containing the
|
||||
* configured HTTP request and response names.
|
||||
* @deprecated Use {@link #setCapturedRequestHeaders(List)} and {@link
|
||||
* #setCapturedResponseHeaders(List)} instead.
|
||||
*/
|
||||
public SpringWebMvcTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) {
|
||||
this.capturedHttpHeaders = capturedHttpHeaders;
|
||||
@Deprecated
|
||||
public SpringWebMvcTracingBuilder captureHttpHeaders(
|
||||
io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
capturedHttpHeaders) {
|
||||
this.httpAttributesExtractorBuilder.captureHttpHeaders(capturedHttpHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP request headers that will be captured as span attributes.
|
||||
*
|
||||
* @param requestHeaders A list of HTTP header names.
|
||||
*/
|
||||
public SpringWebMvcTracingBuilder setCapturedRequestHeaders(List<String> requestHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the HTTP response headers that will be captured as span attributes.
|
||||
*
|
||||
* @param responseHeaders A list of HTTP header names.
|
||||
*/
|
||||
public SpringWebMvcTracingBuilder setCapturedResponseHeaders(List<String> responseHeaders) {
|
||||
httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -62,7 +89,8 @@ public final class SpringWebMvcTracingBuilder {
|
|||
* SpringWebMvcTracingBuilder}.
|
||||
*/
|
||||
public SpringWebMvcTracing build() {
|
||||
SpringWebMvcHttpAttributesGetter httpAttributesGetter = new SpringWebMvcHttpAttributesGetter();
|
||||
SpringWebMvcHttpAttributesGetter httpAttributesGetter =
|
||||
SpringWebMvcHttpAttributesGetter.INSTANCE;
|
||||
|
||||
Instrumenter<HttpServletRequest, HttpServletResponse> instrumenter =
|
||||
Instrumenter.<HttpServletRequest, HttpServletResponse>builder(
|
||||
|
@ -70,10 +98,7 @@ public final class SpringWebMvcTracingBuilder {
|
|||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(
|
||||
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
||||
.captureHttpHeaders(capturedHttpHeaders)
|
||||
.build())
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractor(new StatusCodeExtractor())
|
||||
.addAttributesExtractor(
|
||||
NetServerAttributesExtractor.create(new SpringWebMvcNetAttributesGetter()))
|
||||
|
|
|
@ -9,7 +9,6 @@ import io.opentelemetry.api.common.AttributeKey
|
|||
import io.opentelemetry.api.trace.Span
|
||||
import io.opentelemetry.api.trace.SpanId
|
||||
import io.opentelemetry.api.trace.SpanKind
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders
|
||||
import io.opentelemetry.instrumentation.test.InstrumentationSpecification
|
||||
import io.opentelemetry.instrumentation.test.asserts.TraceAssert
|
||||
import io.opentelemetry.instrumentation.testing.GlobalTraceUtil
|
||||
|
@ -47,10 +46,6 @@ abstract class HttpServerTest<SERVER> extends InstrumentationSpecification imple
|
|||
cleanupServer()
|
||||
}
|
||||
|
||||
static CapturedHttpHeaders capturedHttpHeadersForTesting() {
|
||||
return AbstractHttpServerTest.capturedHttpHeadersForTesting()
|
||||
}
|
||||
|
||||
String expectedServerSpanName(ServerEndpoint endpoint, String method) {
|
||||
def route = expectedHttpRoute(endpoint)
|
||||
return route == null ? "HTTP $method" : route
|
||||
|
@ -219,13 +214,13 @@ abstract class HttpServerTest<SERVER> extends InstrumentationSpecification imple
|
|||
// the main trace assertion method to groovy to be able to call these assertions.
|
||||
@Override
|
||||
void assertTheTraces(
|
||||
int size,
|
||||
String traceId,
|
||||
String parentId,
|
||||
String method,
|
||||
ServerEndpoint endpoint,
|
||||
String errorMessage,
|
||||
AggregatedHttpResponse response) {
|
||||
int size,
|
||||
String traceId,
|
||||
String parentId,
|
||||
String method,
|
||||
ServerEndpoint endpoint,
|
||||
String errorMessage,
|
||||
AggregatedHttpResponse response) {
|
||||
HttpServerTest.this.assertTheTraces(size, traceId, parentId, method, endpoint, errorMessage, response)
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint
|
|||
import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT;
|
||||
import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS;
|
||||
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
|
||||
import static java.util.Collections.singletonList;
|
||||
import static org.junit.jupiter.api.Assumptions.assumeTrue;
|
||||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
|
@ -26,7 +25,6 @@ import io.opentelemetry.api.trace.SpanKind;
|
|||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.propagation.TextMapPropagator;
|
||||
import io.opentelemetry.context.propagation.TextMapSetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.testing.InstrumentationTestRunner;
|
||||
import io.opentelemetry.sdk.testing.assertj.SpanDataAssert;
|
||||
import io.opentelemetry.sdk.testing.assertj.TraceAssert;
|
||||
|
@ -68,8 +66,8 @@ import org.slf4j.LoggerFactory;
|
|||
public abstract class AbstractHttpServerTest<SERVER> {
|
||||
private static final Logger logger = LoggerFactory.getLogger(AbstractHttpServerTest.class);
|
||||
|
||||
private static final String TEST_REQUEST_HEADER = "X-Test-Request";
|
||||
private static final String TEST_RESPONSE_HEADER = "X-Test-Response";
|
||||
public static final String TEST_REQUEST_HEADER = "X-Test-Request";
|
||||
public static final String TEST_RESPONSE_HEADER = "X-Test-Response";
|
||||
|
||||
public static final String TEST_CLIENT_IP = "1.1.1.1";
|
||||
public static final String TEST_USER_AGENT = "test-user-agent";
|
||||
|
@ -135,11 +133,6 @@ public abstract class AbstractHttpServerTest<SERVER> {
|
|||
}
|
||||
}
|
||||
|
||||
public static CapturedHttpHeaders capturedHttpHeadersForTesting() {
|
||||
return CapturedHttpHeaders.create(
|
||||
singletonList(TEST_REQUEST_HEADER), singletonList(TEST_RESPONSE_HEADER));
|
||||
}
|
||||
|
||||
String resolveAddress(ServerEndpoint uri) {
|
||||
String url = uri.resolvePath(address).toString();
|
||||
// Force HTTP/1 via h1c so upgrade requests don't show up as traces
|
||||
|
|
Loading…
Reference in New Issue