Split NetAttributesExtractor into NetClientAttributesExtractor and NetServerAttributesExtractor (#4287)
* Net Extractors * Either request or response but not both * Fix merge conflicts * Separate by OnStart/OnEnd * PeerServiceAttributes * Fix test * Restructure to client/server * Fix merge conflict in main * more * peer.service * Feedback * peer.service is only for clients * Fix merge conflict * rename * Armeria * peer.service is only for clients * rename * WIP * Sync Dubbo with Armeria * More Dubbo and Armeria * gRPC * Revert some Dubbo changes * more peer.service * Fix test * Fix merge * Fixes
This commit is contained in:
parent
581a5e3980
commit
63a2383905
|
@ -11,7 +11,7 @@ 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.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetServerAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.Collections;
|
||||
|
@ -120,13 +120,13 @@ public class InstrumenterBenchmark {
|
|||
}
|
||||
|
||||
static class ConstantNetAttributesExtractor
|
||||
extends InetSocketAddressNetAttributesExtractor<Void, Void> {
|
||||
extends InetSocketAddressNetServerAttributesExtractor<Void, Void> {
|
||||
|
||||
private static final InetSocketAddress ADDRESS =
|
||||
InetSocketAddress.createUnresolved("localhost", 8080);
|
||||
|
||||
@Override
|
||||
public @Nullable InetSocketAddress getAddress(Void unused, @Nullable Void unused2) {
|
||||
public @Nullable InetSocketAddress getAddress(Void unused) {
|
||||
return ADDRESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ import io.opentelemetry.api.common.AttributeKey;
|
|||
import io.opentelemetry.api.common.AttributesBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.db.DbAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
/**
|
||||
|
@ -22,7 +22,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||
*
|
||||
* @see DbAttributesExtractor
|
||||
* @see HttpClientAttributesExtractor
|
||||
* @see NetAttributesExtractor
|
||||
* @see NetServerAttributesExtractor
|
||||
*/
|
||||
public abstract class AttributesExtractor<REQUEST, RESPONSE> {
|
||||
/**
|
||||
|
@ -51,4 +51,13 @@ public abstract class AttributesExtractor<REQUEST, RESPONSE> {
|
|||
attributes.put(key, value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an {@link AttributesExtractor} implementation that always extracts the provided
|
||||
* constant value.
|
||||
*/
|
||||
public static <REQUEST, RESPONSE, T> AttributesExtractor<REQUEST, RESPONSE> constant(
|
||||
AttributeKey<T> attributeKey, T attributeValue) {
|
||||
return new ConstantAttributesExtractor<>(attributeKey, attributeValue);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.instrumentation.api.instrumenter;
|
||||
|
||||
import io.opentelemetry.api.common.AttributeKey;
|
||||
import io.opentelemetry.api.common.AttributesBuilder;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class ConstantAttributesExtractor<REQUEST, RESPONSE, T>
|
||||
extends AttributesExtractor<REQUEST, RESPONSE> {
|
||||
|
||||
private final AttributeKey<T> attributeKey;
|
||||
private final T attributeValue;
|
||||
|
||||
ConstantAttributesExtractor(AttributeKey<T> attributeKey, T attributeValue) {
|
||||
this.attributeKey = attributeKey;
|
||||
this.attributeValue = attributeValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart(AttributesBuilder attributes, REQUEST request) {
|
||||
attributes.put(attributeKey, attributeValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onEnd(
|
||||
AttributesBuilder attributes,
|
||||
REQUEST request,
|
||||
@Nullable RESPONSE response,
|
||||
@Nullable Throwable error) {}
|
||||
}
|
|
@ -7,7 +7,7 @@ package io.opentelemetry.instrumentation.api.instrumenter;
|
|||
|
||||
import io.opentelemetry.api.common.AttributesBuilder;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.util.Map;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
@ -27,14 +27,14 @@ public final class PeerServiceAttributesExtractor<REQUEST, RESPONSE>
|
|||
Config.get().getMap("otel.instrumentation.common.peer-service-mapping");
|
||||
|
||||
private final Map<String, String> peerServiceMapping;
|
||||
private final NetAttributesExtractor<REQUEST, RESPONSE> netAttributesExtractor;
|
||||
private final NetClientAttributesExtractor<REQUEST, RESPONSE> netClientAttributesExtractor;
|
||||
|
||||
// visible for tests
|
||||
PeerServiceAttributesExtractor(
|
||||
Map<String, String> peerServiceMapping,
|
||||
NetAttributesExtractor<REQUEST, RESPONSE> netAttributesExtractor) {
|
||||
NetClientAttributesExtractor<REQUEST, RESPONSE> netClientAttributesExtractor) {
|
||||
this.peerServiceMapping = peerServiceMapping;
|
||||
this.netAttributesExtractor = netAttributesExtractor;
|
||||
this.netClientAttributesExtractor = netClientAttributesExtractor;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -42,15 +42,13 @@ public final class PeerServiceAttributesExtractor<REQUEST, RESPONSE>
|
|||
* netAttributesExtractor} instance to determine the value of the {@code peer.service} attribute.
|
||||
*/
|
||||
public static <REQUEST, RESPONSE> PeerServiceAttributesExtractor<REQUEST, RESPONSE> create(
|
||||
NetAttributesExtractor<REQUEST, RESPONSE> netAttributesExtractor) {
|
||||
NetClientAttributesExtractor<REQUEST, RESPONSE> netAttributesExtractor) {
|
||||
return new PeerServiceAttributesExtractor<>(
|
||||
JAVAAGENT_PEER_SERVICE_MAPPING, netAttributesExtractor);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart(AttributesBuilder attributes, REQUEST request) {
|
||||
onEnd(attributes, request, null, null);
|
||||
}
|
||||
protected void onStart(AttributesBuilder attributes, REQUEST request) {}
|
||||
|
||||
@Override
|
||||
protected void onEnd(
|
||||
|
@ -58,10 +56,10 @@ public final class PeerServiceAttributesExtractor<REQUEST, RESPONSE>
|
|||
REQUEST request,
|
||||
@Nullable RESPONSE response,
|
||||
@Nullable Throwable error) {
|
||||
String peerName = netAttributesExtractor.peerName(request, response);
|
||||
String peerName = netClientAttributesExtractor.peerName(request, response);
|
||||
String peerService = mapToPeerService(peerName);
|
||||
if (peerService == null) {
|
||||
String peerIp = netAttributesExtractor.peerIp(request, response);
|
||||
String peerIp = netClientAttributesExtractor.peerIp(request, response);
|
||||
peerService = mapToPeerService(peerIp);
|
||||
}
|
||||
if (peerService != null) {
|
||||
|
|
|
@ -13,17 +13,12 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||
* Extractor of <a
|
||||
* href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/span-general.md#general-network-connection-attributes">Network
|
||||
* attributes</a> from a {@link InetSocketAddress}. Most network libraries will provide access to a
|
||||
* {@link InetSocketAddress} so this is a convenient alternative to {@link NetAttributesExtractor}.
|
||||
* There is no meaning to implement both in the same instrumentation.
|
||||
* {@link InetSocketAddress} so this is a convenient alternative to {@link
|
||||
* NetClientAttributesExtractor}. There is no meaning to implement both in the same instrumentation.
|
||||
*/
|
||||
public abstract class InetSocketAddressNetAttributesExtractor<REQUEST, RESPONSE>
|
||||
extends NetAttributesExtractor<REQUEST, RESPONSE> {
|
||||
public abstract class InetSocketAddressNetClientAttributesExtractor<REQUEST, RESPONSE>
|
||||
extends NetClientAttributesExtractor<REQUEST, RESPONSE> {
|
||||
|
||||
/**
|
||||
* This method will be called twice: both when the request starts ({@code response} is always null
|
||||
* then) and when the response ends. This way it is possible to capture net attributes in both
|
||||
* phases of processing.
|
||||
*/
|
||||
@Nullable
|
||||
public abstract InetSocketAddress getAddress(REQUEST request, @Nullable RESPONSE response);
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.instrumentation.api.instrumenter.net;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
/**
|
||||
* Extractor of <a
|
||||
* href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/span-general.md#general-network-connection-attributes">Network
|
||||
* attributes</a> from a {@link InetSocketAddress}. Most network libraries will provide access to a
|
||||
* {@link InetSocketAddress} so this is a convenient alternative to {@link
|
||||
* NetServerAttributesExtractor}. There is no meaning to implement both in the same instrumentation.
|
||||
*/
|
||||
public abstract class InetSocketAddressNetServerAttributesExtractor<REQUEST, RESPONSE>
|
||||
extends NetServerAttributesExtractor<REQUEST, RESPONSE> {
|
||||
|
||||
@Nullable
|
||||
public abstract InetSocketAddress getAddress(REQUEST request);
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public final String peerName(REQUEST request) {
|
||||
InetSocketAddress address = getAddress(request);
|
||||
if (address == null) {
|
||||
return null;
|
||||
}
|
||||
if (address.getAddress() != null) {
|
||||
return address.getAddress().getHostName();
|
||||
}
|
||||
return address.getHostString();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public final Integer peerPort(REQUEST request) {
|
||||
InetSocketAddress address = getAddress(request);
|
||||
if (address == null) {
|
||||
return null;
|
||||
}
|
||||
return address.getPort();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public final String peerIp(REQUEST request) {
|
||||
InetSocketAddress address = getAddress(request);
|
||||
if (address == null) {
|
||||
return null;
|
||||
}
|
||||
InetAddress remoteAddress = address.getAddress();
|
||||
if (remoteAddress != null) {
|
||||
return remoteAddress.getHostAddress();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -14,28 +14,13 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||
* Extractor of <a
|
||||
* href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/span-general.md#general-network-connection-attributes">Network
|
||||
* attributes</a>. It is common to have access to {@link java.net.InetSocketAddress}, in which case
|
||||
* it is more convenient to use {@link InetSocketAddressNetAttributesExtractor}.
|
||||
* it is more convenient to use {@link InetSocketAddressNetClientAttributesExtractor}.
|
||||
*/
|
||||
public abstract class NetAttributesExtractor<REQUEST, RESPONSE>
|
||||
public abstract class NetClientAttributesExtractor<REQUEST, RESPONSE>
|
||||
extends AttributesExtractor<REQUEST, RESPONSE> {
|
||||
|
||||
@Override
|
||||
protected final void onStart(AttributesBuilder attributes, REQUEST request) {
|
||||
set(attributes, SemanticAttributes.NET_TRANSPORT, transport(request));
|
||||
|
||||
String peerIp = peerIp(request, null);
|
||||
String peerName = peerName(request, null);
|
||||
|
||||
if (peerName != null && !peerName.equals(peerIp)) {
|
||||
set(attributes, SemanticAttributes.NET_PEER_NAME, peerName);
|
||||
}
|
||||
set(attributes, SemanticAttributes.NET_PEER_IP, peerIp);
|
||||
|
||||
Integer peerPort = peerPort(request, null);
|
||||
if (peerPort != null) {
|
||||
set(attributes, SemanticAttributes.NET_PEER_PORT, (long) peerPort);
|
||||
}
|
||||
}
|
||||
protected final void onStart(AttributesBuilder attributes, REQUEST request) {}
|
||||
|
||||
@Override
|
||||
protected final void onEnd(
|
||||
|
@ -44,6 +29,8 @@ public abstract class NetAttributesExtractor<REQUEST, RESPONSE>
|
|||
@Nullable RESPONSE response,
|
||||
@Nullable Throwable error) {
|
||||
|
||||
set(attributes, SemanticAttributes.NET_TRANSPORT, transport(request, response));
|
||||
|
||||
String peerIp = peerIp(request, response);
|
||||
String peerName = peerName(request, response);
|
||||
|
||||
|
@ -59,29 +46,14 @@ public abstract class NetAttributesExtractor<REQUEST, RESPONSE>
|
|||
}
|
||||
|
||||
@Nullable
|
||||
public abstract String transport(REQUEST request);
|
||||
public abstract String transport(REQUEST request, @Nullable RESPONSE response);
|
||||
|
||||
/**
|
||||
* This method will be called twice: both when the request starts ({@code response} is always null
|
||||
* then) and when the response ends. This way it is possible to capture net attributes in both
|
||||
* phases of processing.
|
||||
*/
|
||||
@Nullable
|
||||
public abstract String peerName(REQUEST request, @Nullable RESPONSE response);
|
||||
|
||||
/**
|
||||
* This method will be called twice: both when the request starts ({@code response} is always null
|
||||
* then) and when the response ends. This way it is possible to capture net attributes in both
|
||||
* phases of processing.
|
||||
*/
|
||||
@Nullable
|
||||
public abstract Integer peerPort(REQUEST request, @Nullable RESPONSE response);
|
||||
|
||||
/**
|
||||
* This method will be called twice: both when the request starts ({@code response} is always null
|
||||
* then) and when the response ends. This way it is possible to capture net attributes in both
|
||||
* phases of processing.
|
||||
*/
|
||||
@Nullable
|
||||
public abstract String peerIp(REQUEST request, @Nullable RESPONSE response);
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.instrumentation.api.instrumenter.net;
|
||||
|
||||
import io.opentelemetry.api.common.AttributesBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
/**
|
||||
* Extractor of <a
|
||||
* href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/span-general.md#general-network-connection-attributes">Network
|
||||
* attributes</a>. It is common to have access to {@link java.net.InetSocketAddress}, in which case
|
||||
* it is more convenient to use {@link InetSocketAddressNetServerAttributesExtractor}.
|
||||
*/
|
||||
public abstract class NetServerAttributesExtractor<REQUEST, RESPONSE>
|
||||
extends AttributesExtractor<REQUEST, RESPONSE> {
|
||||
|
||||
@Override
|
||||
protected final void onStart(AttributesBuilder attributes, REQUEST request) {
|
||||
set(attributes, SemanticAttributes.NET_TRANSPORT, transport(request));
|
||||
|
||||
String peerIp = peerIp(request);
|
||||
String peerName = peerName(request);
|
||||
|
||||
if (peerName != null && !peerName.equals(peerIp)) {
|
||||
set(attributes, SemanticAttributes.NET_PEER_NAME, peerName);
|
||||
}
|
||||
set(attributes, SemanticAttributes.NET_PEER_IP, peerIp);
|
||||
|
||||
Integer peerPort = peerPort(request);
|
||||
if (peerPort != null) {
|
||||
set(attributes, SemanticAttributes.NET_PEER_PORT, (long) peerPort);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void onEnd(
|
||||
AttributesBuilder attributes,
|
||||
REQUEST request,
|
||||
@Nullable RESPONSE response,
|
||||
@Nullable Throwable error) {}
|
||||
|
||||
@Nullable
|
||||
public abstract String transport(REQUEST request);
|
||||
|
||||
@Nullable
|
||||
public abstract String peerName(REQUEST request);
|
||||
|
||||
@Nullable
|
||||
public abstract Integer peerPort(REQUEST request);
|
||||
|
||||
@Nullable
|
||||
public abstract String peerIp(REQUEST request);
|
||||
}
|
|
@ -27,7 +27,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.messaging.MessageOperation;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.messaging.MessagingAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcAttributesExtractor;
|
||||
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
|
||||
import io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension;
|
||||
|
@ -154,7 +154,7 @@ class InstrumenterTest {
|
|||
MessagingAttributesExtractor<Map<String, String>, Map<String, String>> mockMessagingAttributes;
|
||||
|
||||
@Mock RpcAttributesExtractor<Map<String, String>, Map<String, String>> mockRpcAttributes;
|
||||
@Mock NetAttributesExtractor<Map<String, String>, Map<String, String>> mockNetAttributes;
|
||||
@Mock NetServerAttributesExtractor<Map<String, String>, Map<String, String>> mockNetAttributes;
|
||||
|
||||
@Test
|
||||
void server() {
|
||||
|
@ -668,7 +668,7 @@ class InstrumenterTest {
|
|||
}
|
||||
|
||||
private static final class ConstantNetPeerIpExtractor<REQUEST, RESPONSE>
|
||||
extends NetAttributesExtractor<REQUEST, RESPONSE> {
|
||||
extends NetServerAttributesExtractor<REQUEST, RESPONSE> {
|
||||
|
||||
private final String peerIp;
|
||||
|
||||
|
@ -682,17 +682,17 @@ class InstrumenterTest {
|
|||
}
|
||||
|
||||
@Override
|
||||
public String peerName(REQUEST request, RESPONSE response) {
|
||||
public String peerName(REQUEST request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer peerPort(REQUEST request, RESPONSE response) {
|
||||
public Integer peerPort(REQUEST request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String peerIp(REQUEST request, RESPONSE response) {
|
||||
public String peerIp(REQUEST request) {
|
||||
return peerIp;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ import static org.mockito.BDDMockito.given;
|
|||
|
||||
import io.opentelemetry.api.common.Attributes;
|
||||
import io.opentelemetry.api.common.AttributesBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
@ -25,7 +25,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
|||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class PeerServiceAttributesExtractorTest {
|
||||
@Mock NetAttributesExtractor<String, String> netAttributesExtractor;
|
||||
@Mock NetClientAttributesExtractor<String, String> netAttributesExtractor;
|
||||
|
||||
@Test
|
||||
void shouldNotSetAnyValueIfNetExtractorReturnsNulls() {
|
||||
|
@ -105,8 +105,7 @@ class PeerServiceAttributesExtractorTest {
|
|||
underTest.onEnd(endAttributes, "request", "response", null);
|
||||
|
||||
// then
|
||||
assertThat(startAttributes.build())
|
||||
.containsOnly(entry(SemanticAttributes.PEER_SERVICE, "myService"));
|
||||
assertThat(startAttributes.build()).isEmpty();
|
||||
assertThat(endAttributes.build())
|
||||
.containsOnly(entry(SemanticAttributes.PEER_SERVICE, "myService"));
|
||||
}
|
||||
|
@ -131,8 +130,7 @@ class PeerServiceAttributesExtractorTest {
|
|||
underTest.onEnd(endAttributes, "request", "response", null);
|
||||
|
||||
// then
|
||||
assertThat(startAttributes.build())
|
||||
.containsOnly(entry(SemanticAttributes.PEER_SERVICE, "someOtherService"));
|
||||
assertThat(startAttributes.build()).isEmpty();
|
||||
assertThat(endAttributes.build())
|
||||
.containsOnly(entry(SemanticAttributes.PEER_SERVICE, "someOtherService"));
|
||||
}
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.instrumentation.api.instrumenter.net;
|
||||
|
||||
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.entry;
|
||||
|
||||
import io.opentelemetry.api.common.Attributes;
|
||||
import io.opentelemetry.api.common.AttributesBuilder;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.net.InetSocketAddress;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class InetSocketAddressNetClientAttributesExtractorTest {
|
||||
|
||||
private final InetSocketAddressNetClientAttributesExtractor<InetSocketAddress, InetSocketAddress>
|
||||
extractor =
|
||||
new InetSocketAddressNetClientAttributesExtractor<
|
||||
InetSocketAddress, InetSocketAddress>() {
|
||||
@Override
|
||||
public InetSocketAddress getAddress(
|
||||
InetSocketAddress request, InetSocketAddress response) {
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String transport(InetSocketAddress request, InetSocketAddress response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
};
|
||||
|
||||
@Test
|
||||
void noInetSocketAddress() {
|
||||
AttributesBuilder attributes = Attributes.builder();
|
||||
extractor.onEnd(attributes, null, null, null);
|
||||
assertThat(attributes.build())
|
||||
.containsOnly(
|
||||
entry(SemanticAttributes.NET_TRANSPORT, SemanticAttributes.NetTransportValues.IP_TCP));
|
||||
}
|
||||
|
||||
@Test
|
||||
void fullAddress() {
|
||||
// given
|
||||
InetSocketAddress request = new InetSocketAddress("github.com", 123);
|
||||
assertThat(request.getAddress().getHostAddress()).isNotNull();
|
||||
|
||||
InetSocketAddress response = new InetSocketAddress("api.github.com", 456);
|
||||
assertThat(request.getAddress().getHostAddress()).isNotNull();
|
||||
|
||||
// when
|
||||
AttributesBuilder startAttributes = Attributes.builder();
|
||||
extractor.onStart(startAttributes, request);
|
||||
|
||||
AttributesBuilder endAttributes = Attributes.builder();
|
||||
extractor.onEnd(endAttributes, request, response, null);
|
||||
|
||||
// then
|
||||
assertThat(startAttributes.build()).isEmpty();
|
||||
|
||||
assertThat(endAttributes.build())
|
||||
.containsOnly(
|
||||
entry(SemanticAttributes.NET_TRANSPORT, SemanticAttributes.NetTransportValues.IP_TCP),
|
||||
entry(SemanticAttributes.NET_PEER_IP, response.getAddress().getHostAddress()),
|
||||
entry(SemanticAttributes.NET_PEER_NAME, "api.github.com"),
|
||||
entry(SemanticAttributes.NET_PEER_PORT, 456L));
|
||||
}
|
||||
|
||||
@Test
|
||||
void unresolved() {
|
||||
// given
|
||||
InetSocketAddress request = InetSocketAddress.createUnresolved("github.com", 123);
|
||||
assertThat(request.getAddress()).isNull();
|
||||
|
||||
InetSocketAddress response = InetSocketAddress.createUnresolved("api.github.com", 456);
|
||||
assertThat(request.getAddress()).isNull();
|
||||
|
||||
// when
|
||||
AttributesBuilder startAttributes = Attributes.builder();
|
||||
extractor.onStart(startAttributes, request);
|
||||
|
||||
AttributesBuilder endAttributes = Attributes.builder();
|
||||
extractor.onEnd(endAttributes, request, response, null);
|
||||
|
||||
// then
|
||||
assertThat(startAttributes.build()).isEmpty();
|
||||
|
||||
assertThat(endAttributes.build())
|
||||
.containsOnly(
|
||||
entry(SemanticAttributes.NET_TRANSPORT, SemanticAttributes.NetTransportValues.IP_TCP),
|
||||
entry(SemanticAttributes.NET_PEER_NAME, "api.github.com"),
|
||||
entry(SemanticAttributes.NET_PEER_PORT, 456L));
|
||||
}
|
||||
}
|
|
@ -17,19 +17,19 @@ import org.junit.jupiter.api.extension.ExtendWith;
|
|||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class InetSocketAddressNetAttributesExtractorTest {
|
||||
class InetSocketAddressNetServerAttributesExtractorTest {
|
||||
|
||||
private final InetSocketAddressNetAttributesExtractor<InetSocketAddress, InetSocketAddress>
|
||||
private final InetSocketAddressNetServerAttributesExtractor<InetSocketAddress, InetSocketAddress>
|
||||
extractor =
|
||||
new InetSocketAddressNetAttributesExtractor<InetSocketAddress, InetSocketAddress>() {
|
||||
new InetSocketAddressNetServerAttributesExtractor<
|
||||
InetSocketAddress, InetSocketAddress>() {
|
||||
@Override
|
||||
public InetSocketAddress getAddress(
|
||||
InetSocketAddress request, InetSocketAddress response) {
|
||||
return response != null ? response : request;
|
||||
public InetSocketAddress getAddress(InetSocketAddress request) {
|
||||
return request;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String transport(InetSocketAddress inetSocketAddress) {
|
||||
public String transport(InetSocketAddress request) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
};
|
||||
|
@ -38,7 +38,6 @@ class InetSocketAddressNetAttributesExtractorTest {
|
|||
void noInetSocketAddress() {
|
||||
AttributesBuilder attributes = Attributes.builder();
|
||||
extractor.onStart(attributes, null);
|
||||
extractor.onEnd(attributes, null, null, null);
|
||||
assertThat(attributes.build())
|
||||
.containsOnly(
|
||||
entry(SemanticAttributes.NET_TRANSPORT, SemanticAttributes.NetTransportValues.IP_TCP));
|
||||
|
@ -47,43 +46,45 @@ class InetSocketAddressNetAttributesExtractorTest {
|
|||
@Test
|
||||
void fullAddress() {
|
||||
// given
|
||||
InetSocketAddress address = new InetSocketAddress("github.com", 123);
|
||||
assertThat(address.getAddress().getHostAddress()).isNotNull();
|
||||
InetSocketAddress request = new InetSocketAddress("github.com", 123);
|
||||
assertThat(request.getAddress().getHostAddress()).isNotNull();
|
||||
|
||||
InetSocketAddress response = new InetSocketAddress("api.github.com", 456);
|
||||
assertThat(request.getAddress().getHostAddress()).isNotNull();
|
||||
|
||||
// when
|
||||
AttributesBuilder startAttributes = Attributes.builder();
|
||||
extractor.onStart(startAttributes, address);
|
||||
extractor.onStart(startAttributes, request);
|
||||
|
||||
AttributesBuilder endAttributes = Attributes.builder();
|
||||
extractor.onEnd(endAttributes, null, address, null);
|
||||
extractor.onEnd(endAttributes, request, response, null);
|
||||
|
||||
// then
|
||||
assertThat(startAttributes.build())
|
||||
.containsOnly(
|
||||
entry(SemanticAttributes.NET_TRANSPORT, SemanticAttributes.NetTransportValues.IP_TCP),
|
||||
entry(SemanticAttributes.NET_PEER_IP, address.getAddress().getHostAddress()),
|
||||
entry(SemanticAttributes.NET_PEER_IP, request.getAddress().getHostAddress()),
|
||||
entry(SemanticAttributes.NET_PEER_NAME, "github.com"),
|
||||
entry(SemanticAttributes.NET_PEER_PORT, 123L));
|
||||
|
||||
assertThat(endAttributes.build())
|
||||
.containsOnly(
|
||||
entry(SemanticAttributes.NET_PEER_IP, address.getAddress().getHostAddress()),
|
||||
entry(SemanticAttributes.NET_PEER_NAME, "github.com"),
|
||||
entry(SemanticAttributes.NET_PEER_PORT, 123L));
|
||||
assertThat(endAttributes.build()).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void unresolved() {
|
||||
// given
|
||||
InetSocketAddress address = InetSocketAddress.createUnresolved("github.com", 123);
|
||||
assertThat(address.getAddress()).isNull();
|
||||
InetSocketAddress request = InetSocketAddress.createUnresolved("github.com", 123);
|
||||
assertThat(request.getAddress()).isNull();
|
||||
|
||||
InetSocketAddress response = InetSocketAddress.createUnresolved("api.github.com", 456);
|
||||
assertThat(request.getAddress()).isNull();
|
||||
|
||||
// when
|
||||
AttributesBuilder startAttributes = Attributes.builder();
|
||||
extractor.onStart(startAttributes, address);
|
||||
extractor.onStart(startAttributes, request);
|
||||
|
||||
AttributesBuilder endAttributes = Attributes.builder();
|
||||
extractor.onEnd(endAttributes, null, address, null);
|
||||
extractor.onEnd(endAttributes, request, response, null);
|
||||
|
||||
// then
|
||||
assertThat(startAttributes.build())
|
||||
|
@ -92,9 +93,6 @@ class InetSocketAddressNetAttributesExtractorTest {
|
|||
entry(SemanticAttributes.NET_PEER_NAME, "github.com"),
|
||||
entry(SemanticAttributes.NET_PEER_PORT, 123L));
|
||||
|
||||
assertThat(endAttributes.build())
|
||||
.containsOnly(
|
||||
entry(SemanticAttributes.NET_PEER_NAME, "github.com"),
|
||||
entry(SemanticAttributes.NET_PEER_PORT, 123L));
|
||||
assertThat(endAttributes.build()).isEmpty();
|
||||
}
|
||||
}
|
|
@ -15,14 +15,14 @@ import java.util.HashMap;
|
|||
import java.util.Map;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class NetAttributesExtractorTest {
|
||||
class NetClientAttributesExtractorTest {
|
||||
|
||||
static class TestNetAttributesExtractor
|
||||
extends NetAttributesExtractor<Map<String, String>, Map<String, String>> {
|
||||
static class TestNetClientAttributesExtractor
|
||||
extends NetClientAttributesExtractor<Map<String, String>, Map<String, String>> {
|
||||
|
||||
@Override
|
||||
public String transport(Map<String, String> request) {
|
||||
return request.get("transport");
|
||||
public String transport(Map<String, String> request, Map<String, String> response) {
|
||||
return response.get("transport");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -30,7 +30,7 @@ class NetAttributesExtractorTest {
|
|||
if (response != null) {
|
||||
return response.get("peerName");
|
||||
}
|
||||
return request.get("peerName");
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -38,7 +38,7 @@ class NetAttributesExtractorTest {
|
|||
if (response != null) {
|
||||
return Integer.valueOf(response.get("peerPort"));
|
||||
}
|
||||
return Integer.valueOf(request.get("peerPort"));
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -46,7 +46,7 @@ class NetAttributesExtractorTest {
|
|||
if (response != null) {
|
||||
return response.get("peerIp");
|
||||
}
|
||||
return request.get("peerIp");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -64,7 +64,7 @@ class NetAttributesExtractorTest {
|
|||
response.put("peerPort", "42");
|
||||
response.put("peerIp", "4.3.2.1");
|
||||
|
||||
TestNetAttributesExtractor extractor = new TestNetAttributesExtractor();
|
||||
TestNetClientAttributesExtractor extractor = new TestNetClientAttributesExtractor();
|
||||
|
||||
// when
|
||||
AttributesBuilder startAttributes = Attributes.builder();
|
||||
|
@ -74,12 +74,7 @@ class NetAttributesExtractorTest {
|
|||
extractor.onEnd(endAttributes, request, response, null);
|
||||
|
||||
// then
|
||||
assertThat(startAttributes.build())
|
||||
.containsOnly(
|
||||
entry(SemanticAttributes.NET_TRANSPORT, "TCP"),
|
||||
entry(SemanticAttributes.NET_PEER_NAME, "github.com"),
|
||||
entry(SemanticAttributes.NET_PEER_PORT, 123L),
|
||||
entry(SemanticAttributes.NET_PEER_IP, "1.2.3.4"));
|
||||
assertThat(startAttributes.build()).isEmpty();
|
||||
|
||||
assertThat(endAttributes.build())
|
||||
.containsOnly(
|
||||
|
@ -102,7 +97,7 @@ class NetAttributesExtractorTest {
|
|||
response.put("peerPort", "42");
|
||||
response.put("peerIp", "4.3.2.1");
|
||||
|
||||
TestNetAttributesExtractor extractor = new TestNetAttributesExtractor();
|
||||
TestNetClientAttributesExtractor extractor = new TestNetClientAttributesExtractor();
|
||||
|
||||
// when
|
||||
AttributesBuilder startAttributes = Attributes.builder();
|
||||
|
@ -112,11 +107,7 @@ class NetAttributesExtractorTest {
|
|||
extractor.onEnd(endAttributes, request, response, null);
|
||||
|
||||
// then
|
||||
assertThat(startAttributes.build())
|
||||
.containsOnly(
|
||||
entry(SemanticAttributes.NET_TRANSPORT, "TCP"),
|
||||
entry(SemanticAttributes.NET_PEER_PORT, 123L),
|
||||
entry(SemanticAttributes.NET_PEER_IP, "1.2.3.4"));
|
||||
assertThat(startAttributes.build()).isEmpty();
|
||||
|
||||
assertThat(endAttributes.build())
|
||||
.containsOnly(
|
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.instrumentation.api.instrumenter.net;
|
||||
|
||||
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.entry;
|
||||
|
||||
import io.opentelemetry.api.common.Attributes;
|
||||
import io.opentelemetry.api.common.AttributesBuilder;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class NetServerAttributesExtractorTest {
|
||||
|
||||
static class TestNetServerAttributesExtractor
|
||||
extends NetServerAttributesExtractor<Map<String, String>, Map<String, String>> {
|
||||
|
||||
@Override
|
||||
public String transport(Map<String, String> request) {
|
||||
return request.get("transport");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String peerName(Map<String, String> request) {
|
||||
return request.get("peerName");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer peerPort(Map<String, String> request) {
|
||||
return Integer.valueOf(request.get("peerPort"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String peerIp(Map<String, String> request) {
|
||||
return request.get("peerIp");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void normal() {
|
||||
// given
|
||||
Map<String, String> request = new HashMap<>();
|
||||
request.put("transport", "TCP");
|
||||
request.put("peerName", "github.com");
|
||||
request.put("peerPort", "123");
|
||||
request.put("peerIp", "1.2.3.4");
|
||||
|
||||
Map<String, String> response = new HashMap<>();
|
||||
response.put("peerName", "opentelemetry.io");
|
||||
response.put("peerPort", "42");
|
||||
response.put("peerIp", "4.3.2.1");
|
||||
|
||||
TestNetServerAttributesExtractor extractor = new TestNetServerAttributesExtractor();
|
||||
|
||||
// when
|
||||
AttributesBuilder startAttributes = Attributes.builder();
|
||||
extractor.onStart(startAttributes, request);
|
||||
|
||||
AttributesBuilder endAttributes = Attributes.builder();
|
||||
extractor.onEnd(endAttributes, request, response, null);
|
||||
|
||||
// then
|
||||
assertThat(startAttributes.build())
|
||||
.containsOnly(
|
||||
entry(SemanticAttributes.NET_TRANSPORT, "TCP"),
|
||||
entry(SemanticAttributes.NET_PEER_NAME, "github.com"),
|
||||
entry(SemanticAttributes.NET_PEER_PORT, 123L),
|
||||
entry(SemanticAttributes.NET_PEER_IP, "1.2.3.4"));
|
||||
|
||||
assertThat(endAttributes.build()).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void doesNotSetDuplicateAttributes() {
|
||||
// given
|
||||
Map<String, String> request = new HashMap<>();
|
||||
request.put("transport", "TCP");
|
||||
request.put("peerName", "1.2.3.4");
|
||||
request.put("peerIp", "1.2.3.4");
|
||||
request.put("peerPort", "123");
|
||||
|
||||
Map<String, String> response = new HashMap<>();
|
||||
response.put("peerName", "4.3.2.1");
|
||||
response.put("peerPort", "42");
|
||||
response.put("peerIp", "4.3.2.1");
|
||||
|
||||
TestNetServerAttributesExtractor extractor = new TestNetServerAttributesExtractor();
|
||||
|
||||
// when
|
||||
AttributesBuilder startAttributes = Attributes.builder();
|
||||
extractor.onStart(startAttributes, request);
|
||||
|
||||
AttributesBuilder endAttributes = Attributes.builder();
|
||||
extractor.onEnd(endAttributes, request, response, null);
|
||||
|
||||
// then
|
||||
assertThat(startAttributes.build())
|
||||
.containsOnly(
|
||||
entry(SemanticAttributes.NET_TRANSPORT, "TCP"),
|
||||
entry(SemanticAttributes.NET_PEER_PORT, 123L),
|
||||
entry(SemanticAttributes.NET_PEER_IP, "1.2.3.4"));
|
||||
|
||||
assertThat(endAttributes.build()).isEmpty();
|
||||
}
|
||||
}
|
|
@ -7,8 +7,6 @@ package io.opentelemetry.javaagent.instrumentation.apachedubbo.v2_7;
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.apachedubbo.v2_7.DubboTracing;
|
||||
import io.opentelemetry.instrumentation.apachedubbo.v2_7.internal.DubboNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.PeerServiceAttributesExtractor;
|
||||
import org.apache.dubbo.common.extension.Activate;
|
||||
import org.apache.dubbo.rpc.Filter;
|
||||
import org.apache.dubbo.rpc.Invocation;
|
||||
|
@ -21,12 +19,7 @@ public class OpenTelemetryFilter implements Filter {
|
|||
private final Filter delegate;
|
||||
|
||||
public OpenTelemetryFilter() {
|
||||
DubboNetAttributesExtractor netAttributesExtractor = new DubboNetAttributesExtractor();
|
||||
delegate =
|
||||
DubboTracing.newBuilder(GlobalOpenTelemetry.get())
|
||||
.addAttributesExtractor(PeerServiceAttributesExtractor.create(netAttributesExtractor))
|
||||
.build()
|
||||
.newFilter();
|
||||
delegate = DubboTracing.create(GlobalOpenTelemetry.get()).newFilter();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -6,15 +6,20 @@
|
|||
package io.opentelemetry.instrumentation.apachedubbo.v2_7;
|
||||
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.apachedubbo.v2_7.internal.DubboNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.apachedubbo.v2_7.internal.DubboNetClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.apachedubbo.v2_7.internal.DubboNetServerAttributesExtractor;
|
||||
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.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcSpanNameExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
import org.apache.dubbo.rpc.Result;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
/** A builder of {@link DubboTracing}. */
|
||||
public final class DubboTracingBuilder {
|
||||
|
@ -22,6 +27,7 @@ public final class DubboTracingBuilder {
|
|||
private static final String INSTRUMENTATION_NAME = "io.opentelemetry.apache-dubbo-2.7";
|
||||
|
||||
private final OpenTelemetry openTelemetry;
|
||||
@Nullable private String peerService;
|
||||
private final List<AttributesExtractor<DubboRequest, Result>> attributesExtractors =
|
||||
new ArrayList<>();
|
||||
|
||||
|
@ -29,6 +35,11 @@ public final class DubboTracingBuilder {
|
|||
this.openTelemetry = openTelemetry;
|
||||
}
|
||||
|
||||
/** Sets the {@code peer.service} attribute for http client spans. */
|
||||
public void setPeerService(String peerService) {
|
||||
this.peerService = peerService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an additional {@link AttributesExtractor} to invoke to set attributes to instrumented
|
||||
* items.
|
||||
|
@ -42,19 +53,37 @@ public final class DubboTracingBuilder {
|
|||
/** Returns a new {@link DubboTracing} with the settings of this {@link DubboTracingBuilder}. */
|
||||
public DubboTracing build() {
|
||||
DubboRpcAttributesExtractor rpcAttributesExtractor = new DubboRpcAttributesExtractor();
|
||||
DubboNetAttributesExtractor netAttributesExtractor = new DubboNetAttributesExtractor();
|
||||
SpanNameExtractor<DubboRequest> spanNameExtractor =
|
||||
RpcSpanNameExtractor.create(rpcAttributesExtractor);
|
||||
|
||||
InstrumenterBuilder<DubboRequest, Result> builder =
|
||||
Instrumenter.<DubboRequest, Result>newBuilder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
.addAttributesExtractor(rpcAttributesExtractor)
|
||||
.addAttributesExtractor(netAttributesExtractor)
|
||||
.addAttributesExtractors(attributesExtractors);
|
||||
DubboNetClientAttributesExtractor netClientAttributesExtractor =
|
||||
new DubboNetClientAttributesExtractor();
|
||||
|
||||
InstrumenterBuilder<DubboRequest, Result> serverInstrumenterBuilder =
|
||||
Instrumenter.newBuilder(openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor);
|
||||
InstrumenterBuilder<DubboRequest, Result> clientInstrumenterBuilder =
|
||||
Instrumenter.newBuilder(openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor);
|
||||
|
||||
Stream.of(serverInstrumenterBuilder, clientInstrumenterBuilder)
|
||||
.forEach(
|
||||
instrumenter ->
|
||||
instrumenter
|
||||
.addAttributesExtractors(rpcAttributesExtractor)
|
||||
.addAttributesExtractors(attributesExtractors));
|
||||
|
||||
serverInstrumenterBuilder.addAttributesExtractor(new DubboNetServerAttributesExtractor());
|
||||
clientInstrumenterBuilder.addAttributesExtractor(netClientAttributesExtractor);
|
||||
|
||||
if (peerService != null) {
|
||||
clientInstrumenterBuilder.addAttributesExtractor(
|
||||
AttributesExtractor.constant(SemanticAttributes.PEER_SERVICE, peerService));
|
||||
} else {
|
||||
clientInstrumenterBuilder.addAttributesExtractor(
|
||||
PeerServiceAttributesExtractor.create(netClientAttributesExtractor));
|
||||
}
|
||||
|
||||
return new DubboTracing(
|
||||
builder.newServerInstrumenter(new DubboHeadersGetter()),
|
||||
builder.newClientInstrumenter(new DubboHeadersSetter()));
|
||||
serverInstrumenterBuilder.newServerInstrumenter(new DubboHeadersGetter()),
|
||||
clientInstrumenterBuilder.newClientInstrumenter(new DubboHeadersSetter()));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.instrumentation.apachedubbo.v2_7.internal;
|
||||
|
||||
import io.opentelemetry.instrumentation.apachedubbo.v2_7.DubboRequest;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesExtractor;
|
||||
import java.net.InetSocketAddress;
|
||||
import org.apache.dubbo.rpc.Result;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public final class DubboNetClientAttributesExtractor
|
||||
extends InetSocketAddressNetClientAttributesExtractor<DubboRequest, Result> {
|
||||
|
||||
@Override
|
||||
public @Nullable InetSocketAddress getAddress(DubboRequest request, @Nullable Result response) {
|
||||
return request.context().getRemoteAddress();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String transport(DubboRequest request, @Nullable Result response) {
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -6,16 +6,16 @@
|
|||
package io.opentelemetry.instrumentation.apachedubbo.v2_7.internal;
|
||||
|
||||
import io.opentelemetry.instrumentation.apachedubbo.v2_7.DubboRequest;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetServerAttributesExtractor;
|
||||
import java.net.InetSocketAddress;
|
||||
import org.apache.dubbo.rpc.Result;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public final class DubboNetAttributesExtractor
|
||||
extends InetSocketAddressNetAttributesExtractor<DubboRequest, Result> {
|
||||
public final class DubboNetServerAttributesExtractor
|
||||
extends InetSocketAddressNetServerAttributesExtractor<DubboRequest, Result> {
|
||||
|
||||
@Override
|
||||
public @Nullable InetSocketAddress getAddress(DubboRequest request, @Nullable Result result) {
|
||||
public @Nullable InetSocketAddress getAddress(DubboRequest request) {
|
||||
return request.context().getRemoteAddress();
|
||||
}
|
||||
|
|
@ -5,16 +5,16 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.apachehttpasyncclient;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class ApacheHttpAsyncClientNetAttributesExtractor
|
||||
extends NetAttributesExtractor<ApacheHttpClientRequest, HttpResponse> {
|
||||
extends NetClientAttributesExtractor<ApacheHttpClientRequest, HttpResponse> {
|
||||
|
||||
@Override
|
||||
public String transport(ApacheHttpClientRequest request) {
|
||||
public String transport(ApacheHttpClientRequest request, @Nullable HttpResponse response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,17 +5,17 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.apachehttpclient.v2_0;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.apache.commons.httpclient.HostConfiguration;
|
||||
import org.apache.commons.httpclient.HttpMethod;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class ApacheHttpClientNetAttributesExtractor
|
||||
extends NetAttributesExtractor<HttpMethod, HttpMethod> {
|
||||
extends NetClientAttributesExtractor<HttpMethod, HttpMethod> {
|
||||
|
||||
@Override
|
||||
public String transport(HttpMethod request) {
|
||||
public String transport(HttpMethod request, @Nullable HttpMethod response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,16 +5,16 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.apachehttpclient.v4_0;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class ApacheHttpClientNetAttributesExtractor
|
||||
extends NetAttributesExtractor<ApacheHttpClientRequest, HttpResponse> {
|
||||
extends NetClientAttributesExtractor<ApacheHttpClientRequest, HttpResponse> {
|
||||
|
||||
@Override
|
||||
public String transport(ApacheHttpClientRequest request) {
|
||||
public String transport(ApacheHttpClientRequest request, @Nullable HttpResponse response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,16 +5,16 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.apachehttpclient.v4_3;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class ApacheHttpClientNetAttributesExtractor
|
||||
extends NetAttributesExtractor<ApacheHttpClientRequest, HttpResponse> {
|
||||
extends NetClientAttributesExtractor<ApacheHttpClientRequest, HttpResponse> {
|
||||
|
||||
@Override
|
||||
public String transport(ApacheHttpClientRequest request) {
|
||||
public String transport(ApacheHttpClientRequest request, @Nullable HttpResponse response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.apachehttpclient.v5_0;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.apache.hc.core5.http.ClassicHttpRequest;
|
||||
import org.apache.hc.core5.http.HttpResponse;
|
||||
|
@ -14,13 +14,13 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
|
||||
final class ApacheHttpClientNetAttributesExtractor
|
||||
extends NetAttributesExtractor<ClassicHttpRequest, HttpResponse> {
|
||||
extends NetClientAttributesExtractor<ClassicHttpRequest, HttpResponse> {
|
||||
|
||||
private static final Logger logger =
|
||||
LoggerFactory.getLogger(ApacheHttpClientNetAttributesExtractor.class);
|
||||
|
||||
@Override
|
||||
public String transport(ClassicHttpRequest request) {
|
||||
public String transport(ClassicHttpRequest request, @Nullable HttpResponse response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,13 +6,9 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.armeria.v1_3;
|
||||
|
||||
import com.linecorp.armeria.client.HttpClient;
|
||||
import com.linecorp.armeria.common.RequestContext;
|
||||
import com.linecorp.armeria.common.logging.RequestLog;
|
||||
import com.linecorp.armeria.server.HttpService;
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.PeerServiceAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.armeria.v1_3.ArmeriaTracing;
|
||||
import io.opentelemetry.instrumentation.armeria.v1_3.internal.ArmeriaNetAttributesExtractor;
|
||||
import java.util.function.Function;
|
||||
|
||||
// Holds singleton references to decorators to match against during suppression.
|
||||
|
@ -23,13 +19,7 @@ public final class ArmeriaSingletons {
|
|||
public static final Function<? super HttpService, ? extends HttpService> SERVER_DECORATOR;
|
||||
|
||||
static {
|
||||
PeerServiceAttributesExtractor<RequestContext, RequestLog> peerServiceAttributesExtractor =
|
||||
PeerServiceAttributesExtractor.create(new ArmeriaNetAttributesExtractor());
|
||||
|
||||
ArmeriaTracing tracing =
|
||||
ArmeriaTracing.newBuilder(GlobalOpenTelemetry.get())
|
||||
.addAttributeExtractor(peerServiceAttributesExtractor)
|
||||
.build();
|
||||
ArmeriaTracing tracing = ArmeriaTracing.create(GlobalOpenTelemetry.get());
|
||||
|
||||
CLIENT_DECORATOR = tracing.newClientDecorator();
|
||||
SERVER_DECORATOR = tracing.newServiceDecorator();
|
||||
|
|
|
@ -14,23 +14,28 @@ 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.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.armeria.v1_3.internal.ArmeriaNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.armeria.v1_3.internal.ArmeriaNetClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.armeria.v1_3.internal.ArmeriaNetServerAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Stream;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public final class ArmeriaTracingBuilder {
|
||||
|
||||
private static final String INSTRUMENTATION_NAME = "io.opentelemetry.armeria-1.3";
|
||||
|
||||
private final OpenTelemetry openTelemetry;
|
||||
@Nullable private String peerService;
|
||||
private CapturedHttpHeaders capturedHttpClientHeaders = CapturedHttpHeaders.client(Config.get());
|
||||
private CapturedHttpHeaders capturedHttpServerHeaders = CapturedHttpHeaders.server(Config.get());
|
||||
|
||||
|
@ -65,6 +70,11 @@ public final class ArmeriaTracingBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets the {@code peer.service} attribute for http client spans. */
|
||||
public void setPeerService(String peerService) {
|
||||
this.peerService = peerService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the HTTP client instrumentation to capture chosen HTTP request and response headers
|
||||
* as span attributes.
|
||||
|
@ -92,18 +102,16 @@ public final class ArmeriaTracingBuilder {
|
|||
}
|
||||
|
||||
public ArmeriaTracing build() {
|
||||
ArmeriaHttpClientAttributesExtractor clientAttributesExtractor =
|
||||
ArmeriaHttpClientAttributesExtractor httpClientAttributesExtractor =
|
||||
new ArmeriaHttpClientAttributesExtractor(capturedHttpClientHeaders);
|
||||
ArmeriaHttpServerAttributesExtractor serverAttributesExtractor =
|
||||
new ArmeriaHttpServerAttributesExtractor(capturedHttpServerHeaders);
|
||||
|
||||
ArmeriaNetAttributesExtractor netAttributesExtractor = new ArmeriaNetAttributesExtractor();
|
||||
|
||||
InstrumenterBuilder<ClientRequestContext, RequestLog> clientInstrumenterBuilder =
|
||||
Instrumenter.newBuilder(
|
||||
openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
HttpSpanNameExtractor.create(clientAttributesExtractor));
|
||||
HttpSpanNameExtractor.create(httpClientAttributesExtractor));
|
||||
InstrumenterBuilder<ServiceRequestContext, RequestLog> serverInstrumenterBuilder =
|
||||
Instrumenter.newBuilder(
|
||||
openTelemetry,
|
||||
|
@ -111,25 +119,34 @@ public final class ArmeriaTracingBuilder {
|
|||
HttpSpanNameExtractor.create(serverAttributesExtractor));
|
||||
|
||||
Stream.of(clientInstrumenterBuilder, serverInstrumenterBuilder)
|
||||
.forEach(
|
||||
instrumenter ->
|
||||
instrumenter
|
||||
.addAttributesExtractor(netAttributesExtractor)
|
||||
.addAttributesExtractors(additionalExtractors));
|
||||
.forEach(instrumenter -> instrumenter.addAttributesExtractors(additionalExtractors));
|
||||
|
||||
ArmeriaNetClientAttributesExtractor netClientAttributesExtractor =
|
||||
new ArmeriaNetClientAttributesExtractor();
|
||||
|
||||
clientInstrumenterBuilder
|
||||
.setSpanStatusExtractor(
|
||||
statusExtractorTransformer.apply(
|
||||
HttpSpanStatusExtractor.create(clientAttributesExtractor)))
|
||||
.addAttributesExtractor(clientAttributesExtractor)
|
||||
HttpSpanStatusExtractor.create(httpClientAttributesExtractor)))
|
||||
.addAttributesExtractor(netClientAttributesExtractor)
|
||||
.addAttributesExtractor(httpClientAttributesExtractor)
|
||||
.addRequestMetrics(HttpClientMetrics.get());
|
||||
serverInstrumenterBuilder
|
||||
.setSpanStatusExtractor(
|
||||
statusExtractorTransformer.apply(
|
||||
HttpSpanStatusExtractor.create(serverAttributesExtractor)))
|
||||
.addAttributesExtractor(new ArmeriaNetServerAttributesExtractor())
|
||||
.addAttributesExtractor(serverAttributesExtractor)
|
||||
.addRequestMetrics(HttpServerMetrics.get());
|
||||
|
||||
if (peerService != null) {
|
||||
clientInstrumenterBuilder.addAttributesExtractor(
|
||||
AttributesExtractor.constant(SemanticAttributes.PEER_SERVICE, peerService));
|
||||
} else {
|
||||
clientInstrumenterBuilder.addAttributesExtractor(
|
||||
PeerServiceAttributesExtractor.create(netClientAttributesExtractor));
|
||||
}
|
||||
|
||||
return new ArmeriaTracing(
|
||||
clientInstrumenterBuilder.newClientInstrumenter(new ClientRequestContextSetter()),
|
||||
serverInstrumenterBuilder.newServerInstrumenter(new RequestContextGetter()));
|
||||
|
|
|
@ -7,17 +7,17 @@ package io.opentelemetry.instrumentation.armeria.v1_3.internal;
|
|||
|
||||
import com.linecorp.armeria.common.RequestContext;
|
||||
import com.linecorp.armeria.common.logging.RequestLog;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketAddress;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public final class ArmeriaNetAttributesExtractor
|
||||
extends InetSocketAddressNetAttributesExtractor<RequestContext, RequestLog> {
|
||||
public final class ArmeriaNetClientAttributesExtractor
|
||||
extends InetSocketAddressNetClientAttributesExtractor<RequestContext, RequestLog> {
|
||||
|
||||
@Override
|
||||
public String transport(RequestContext ctx) {
|
||||
public String transport(RequestContext ctx, @Nullable RequestLog requestLog) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.instrumentation.armeria.v1_3.internal;
|
||||
|
||||
import com.linecorp.armeria.common.RequestContext;
|
||||
import com.linecorp.armeria.common.logging.RequestLog;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetServerAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketAddress;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public final class ArmeriaNetServerAttributesExtractor
|
||||
extends InetSocketAddressNetServerAttributesExtractor<RequestContext, RequestLog> {
|
||||
|
||||
@Override
|
||||
public String transport(RequestContext ctx) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public InetSocketAddress getAddress(RequestContext ctx) {
|
||||
SocketAddress address = ctx.remoteAddress();
|
||||
if (address instanceof InetSocketAddress) {
|
||||
return (InetSocketAddress) address;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -7,15 +7,15 @@ package io.opentelemetry.javaagent.instrumentation.asynchttpclient.v1_9;
|
|||
|
||||
import com.ning.http.client.Request;
|
||||
import com.ning.http.client.Response;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class AsyncHttpClientNetAttributesExtractor
|
||||
extends NetAttributesExtractor<Request, Response> {
|
||||
extends NetClientAttributesExtractor<Request, Response> {
|
||||
|
||||
@Override
|
||||
public String transport(Request request) {
|
||||
public String transport(Request request, @Nullable Response response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,23 +5,23 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.asynchttpclient.v2_0;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.net.InetSocketAddress;
|
||||
import org.asynchttpclient.Response;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class AsyncHttpClientNetAttributesExtractor
|
||||
extends InetSocketAddressNetAttributesExtractor<RequestContext, Response> {
|
||||
extends InetSocketAddressNetClientAttributesExtractor<RequestContext, Response> {
|
||||
|
||||
@Override
|
||||
public String transport(RequestContext requestContext) {
|
||||
public String transport(RequestContext request, @Nullable Response response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable InetSocketAddress getAddress(
|
||||
RequestContext requestContext, @Nullable Response response) {
|
||||
RequestContext request, @Nullable Response response) {
|
||||
if (response != null && response.getRemoteAddress() instanceof InetSocketAddress) {
|
||||
return (InetSocketAddress) response.getRemoteAddress();
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import org.asynchttpclient.Response;
|
||||
|
||||
public final class AsyncHttpClientSingletons {
|
||||
|
@ -29,7 +29,7 @@ public final class AsyncHttpClientSingletons {
|
|||
HttpSpanNameExtractor.create(httpAttributesExtractor);
|
||||
SpanStatusExtractor<RequestContext, Response> spanStatusExtractor =
|
||||
HttpSpanStatusExtractor.create(httpAttributesExtractor);
|
||||
NetAttributesExtractor<RequestContext, Response> netAttributesExtractor =
|
||||
NetClientAttributesExtractor<RequestContext, Response> netAttributesExtractor =
|
||||
new AsyncHttpClientNetAttributesExtractor();
|
||||
|
||||
INSTRUMENTER =
|
||||
|
|
|
@ -6,16 +6,16 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.cassandra.v3_0;
|
||||
|
||||
import com.datastax.driver.core.ExecutionInfo;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesExtractor;
|
||||
import java.net.InetSocketAddress;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class CassandraNetAttributesExtractor
|
||||
extends InetSocketAddressNetAttributesExtractor<CassandraRequest, ExecutionInfo> {
|
||||
extends InetSocketAddressNetClientAttributesExtractor<CassandraRequest, ExecutionInfo> {
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String transport(CassandraRequest request) {
|
||||
public String transport(CassandraRequest request, @Nullable ExecutionInfo executionInfo) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,17 +7,17 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_0;
|
|||
|
||||
import com.datastax.oss.driver.api.core.cql.ExecutionInfo;
|
||||
import com.datastax.oss.driver.api.core.metadata.Node;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesExtractor;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketAddress;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class CassandraNetAttributesExtractor
|
||||
extends InetSocketAddressNetAttributesExtractor<CassandraRequest, ExecutionInfo> {
|
||||
extends InetSocketAddressNetClientAttributesExtractor<CassandraRequest, ExecutionInfo> {
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String transport(CassandraRequest request) {
|
||||
public String transport(CassandraRequest request, @Nullable ExecutionInfo executionInfo) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,27 +12,27 @@ import org.elasticsearch.client.Response;
|
|||
|
||||
final class ElasticsearchRestAttributesExtractor extends DbAttributesExtractor<String, Response> {
|
||||
@Override
|
||||
protected String system(String s) {
|
||||
protected String system(String operation) {
|
||||
return SemanticAttributes.DbSystemValues.ELASTICSEARCH;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected @Nullable String user(String s) {
|
||||
protected @Nullable String user(String operation) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected @Nullable String name(String s) {
|
||||
protected @Nullable String name(String operation) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected @Nullable String connectionString(String s) {
|
||||
protected @Nullable String connectionString(String operation) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected @Nullable String statement(String s) {
|
||||
protected @Nullable String statement(String operation) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,8 +19,8 @@ public final class ElasticsearchRestInstrumenterFactory {
|
|||
ElasticsearchRestAttributesExtractor attributesExtractor =
|
||||
new ElasticsearchRestAttributesExtractor();
|
||||
SpanNameExtractor<String> spanNameExtractor = DbSpanNameExtractor.create(attributesExtractor);
|
||||
ElasticsearchRestNetAttributesExtractor netAttributesExtractor =
|
||||
new ElasticsearchRestNetAttributesExtractor();
|
||||
ElasticsearchRestNetResponseAttributesExtractor netAttributesExtractor =
|
||||
new ElasticsearchRestNetResponseAttributesExtractor();
|
||||
|
||||
return Instrumenter.<String, Response>newBuilder(
|
||||
GlobalOpenTelemetry.get(), instrumentationName, spanNameExtractor)
|
||||
|
|
|
@ -5,20 +5,20 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.elasticsearch.rest;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.elasticsearch.client.Response;
|
||||
|
||||
final class ElasticsearchRestNetAttributesExtractor
|
||||
extends NetAttributesExtractor<String, Response> {
|
||||
final class ElasticsearchRestNetResponseAttributesExtractor
|
||||
extends NetClientAttributesExtractor<String, Response> {
|
||||
@Override
|
||||
public String transport(String s) {
|
||||
public String transport(String operation, Response response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerName(String s, @Nullable Response response) {
|
||||
public @Nullable String peerName(String operation, @Nullable Response response) {
|
||||
if (response != null) {
|
||||
return response.getHost().getHostName();
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ final class ElasticsearchRestNetAttributesExtractor
|
|||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Integer peerPort(String s, @Nullable Response response) {
|
||||
public @Nullable Integer peerPort(String operation, @Nullable Response response) {
|
||||
if (response != null) {
|
||||
return response.getHost().getPort();
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ final class ElasticsearchRestNetAttributesExtractor
|
|||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerIp(String s, @Nullable Response response) {
|
||||
public @Nullable String peerIp(String operation, @Nullable Response response) {
|
||||
if (response != null && response.getHost().getAddress() != null) {
|
||||
return response.getHost().getAddress().getHostAddress();
|
||||
}
|
|
@ -6,7 +6,7 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.elasticsearch.transport.v5_0;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.javaagent.instrumentation.elasticsearch.transport.ElasticTransportNetAttributesExtractor;
|
||||
import io.opentelemetry.javaagent.instrumentation.elasticsearch.transport.ElasticTransportNetResponseAttributesExtractor;
|
||||
import io.opentelemetry.javaagent.instrumentation.elasticsearch.transport.ElasticTransportRequest;
|
||||
import io.opentelemetry.javaagent.instrumentation.elasticsearch.transport.ElasticsearchTransportInstrumenterFactory;
|
||||
import org.elasticsearch.action.ActionResponse;
|
||||
|
@ -17,7 +17,7 @@ public final class Elasticsearch5TransportSingletons {
|
|||
ElasticsearchTransportInstrumenterFactory.create(
|
||||
"io.opentelemetry.elasticsearch-transport-5.0",
|
||||
new Elasticsearch5TransportExperimentalAttributesExtractor(),
|
||||
new ElasticTransportNetAttributesExtractor());
|
||||
new ElasticTransportNetResponseAttributesExtractor());
|
||||
|
||||
public static Instrumenter<ElasticTransportRequest, ActionResponse> instrumenter() {
|
||||
return INSTRUMENTER;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.elasticsearch.transport.v5_3;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.javaagent.instrumentation.elasticsearch.transport.ElasticTransportNetAttributesExtractor;
|
||||
import io.opentelemetry.javaagent.instrumentation.elasticsearch.transport.ElasticTransportNetResponseAttributesExtractor;
|
||||
import io.opentelemetry.javaagent.instrumentation.elasticsearch.transport.ElasticTransportRequest;
|
||||
import io.opentelemetry.javaagent.instrumentation.elasticsearch.transport.ElasticsearchTransportInstrumenterFactory;
|
||||
import org.elasticsearch.action.ActionResponse;
|
||||
|
@ -17,7 +17,7 @@ public final class Elasticsearch53TransportSingletons {
|
|||
ElasticsearchTransportInstrumenterFactory.create(
|
||||
"io.opentelemetry.elasticsearch-transport-5.3",
|
||||
new Elasticsearch53TransportExperimentalAttributesExtractor(),
|
||||
new ElasticTransportNetAttributesExtractor());
|
||||
new ElasticTransportNetResponseAttributesExtractor());
|
||||
|
||||
public static Instrumenter<ElasticTransportRequest, ActionResponse> instrumenter() {
|
||||
return INSTRUMENTER;
|
||||
|
|
|
@ -5,22 +5,23 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.elasticsearch.transport.v6_0;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesExtractor;
|
||||
import io.opentelemetry.javaagent.instrumentation.elasticsearch.transport.ElasticTransportRequest;
|
||||
import java.net.InetSocketAddress;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.elasticsearch.action.ActionResponse;
|
||||
|
||||
public class Elasticsearch6TransportNetAttributesExtractor
|
||||
extends InetSocketAddressNetAttributesExtractor<ElasticTransportRequest, ActionResponse> {
|
||||
extends InetSocketAddressNetClientAttributesExtractor<ElasticTransportRequest, ActionResponse> {
|
||||
@Override
|
||||
public @Nullable String transport(ElasticTransportRequest elasticTransportRequest) {
|
||||
public @Nullable String transport(
|
||||
ElasticTransportRequest request, @Nullable ActionResponse response) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable InetSocketAddress getAddress(
|
||||
ElasticTransportRequest elasticTransportRequest, @Nullable ActionResponse response) {
|
||||
ElasticTransportRequest request, @Nullable ActionResponse response) {
|
||||
if (response != null && response.remoteAddress() != null) {
|
||||
return response.remoteAddress().address();
|
||||
}
|
||||
|
|
|
@ -5,20 +5,21 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.elasticsearch.transport;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.elasticsearch.action.ActionResponse;
|
||||
|
||||
public class ElasticTransportNetAttributesExtractor
|
||||
extends NetAttributesExtractor<ElasticTransportRequest, ActionResponse> {
|
||||
public class ElasticTransportNetResponseAttributesExtractor
|
||||
extends NetClientAttributesExtractor<ElasticTransportRequest, ActionResponse> {
|
||||
@Override
|
||||
public @Nullable String transport(ElasticTransportRequest elasticTransportRequest) {
|
||||
public @Nullable String transport(
|
||||
ElasticTransportRequest request, @Nullable ActionResponse response) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerName(
|
||||
ElasticTransportRequest elasticTransportRequest, @Nullable ActionResponse response) {
|
||||
ElasticTransportRequest request, @Nullable ActionResponse response) {
|
||||
if (response != null && response.remoteAddress() != null) {
|
||||
return response.remoteAddress().getHost();
|
||||
}
|
||||
|
@ -27,7 +28,7 @@ public class ElasticTransportNetAttributesExtractor
|
|||
|
||||
@Override
|
||||
public @Nullable Integer peerPort(
|
||||
ElasticTransportRequest elasticTransportRequest, @Nullable ActionResponse response) {
|
||||
ElasticTransportRequest request, @Nullable ActionResponse response) {
|
||||
if (response != null && response.remoteAddress() != null) {
|
||||
return response.remoteAddress().getPort();
|
||||
}
|
||||
|
@ -36,7 +37,7 @@ public class ElasticTransportNetAttributesExtractor
|
|||
|
||||
@Override
|
||||
public @Nullable String peerIp(
|
||||
ElasticTransportRequest elasticTransportRequest, @Nullable ActionResponse response) {
|
||||
ElasticTransportRequest request, @Nullable ActionResponse response) {
|
||||
if (response != null && response.remoteAddress() != null) {
|
||||
return response.remoteAddress().getAddress();
|
||||
}
|
|
@ -12,7 +12,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.db.DbSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import org.elasticsearch.action.ActionResponse;
|
||||
|
||||
public final class ElasticsearchTransportInstrumenterFactory {
|
||||
|
@ -23,7 +22,7 @@ public final class ElasticsearchTransportInstrumenterFactory {
|
|||
public static Instrumenter<ElasticTransportRequest, ActionResponse> create(
|
||||
String instrumentationName,
|
||||
AttributesExtractor<ElasticTransportRequest, ActionResponse> experimentalAttributesExtractor,
|
||||
NetAttributesExtractor<ElasticTransportRequest, ActionResponse> netAttributesExtractor) {
|
||||
AttributesExtractor<ElasticTransportRequest, ActionResponse> netAttributesExtractor) {
|
||||
|
||||
ElasticsearchTransportAttributesExtractor attributesExtractor =
|
||||
new ElasticsearchTransportAttributesExtractor();
|
||||
|
|
|
@ -7,15 +7,15 @@ package io.opentelemetry.javaagent.instrumentation.googlehttpclient;
|
|||
|
||||
import com.google.api.client.http.HttpRequest;
|
||||
import com.google.api.client.http.HttpResponse;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class GoogleHttpClientNetAttributesExtractor
|
||||
extends NetAttributesExtractor<HttpRequest, HttpResponse> {
|
||||
extends NetClientAttributesExtractor<HttpRequest, HttpResponse> {
|
||||
|
||||
@Override
|
||||
public String transport(HttpRequest request) {
|
||||
public String transport(HttpRequest request, @Nullable HttpResponse response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -8,14 +8,10 @@ package io.opentelemetry.javaagent.instrumentation.grpc.v1_6;
|
|||
import io.grpc.ClientInterceptor;
|
||||
import io.grpc.Context;
|
||||
import io.grpc.ServerInterceptor;
|
||||
import io.grpc.Status;
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.PeerServiceAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.grpc.v1_6.GrpcRequest;
|
||||
import io.opentelemetry.instrumentation.grpc.v1_6.GrpcTracing;
|
||||
import io.opentelemetry.instrumentation.grpc.v1_6.internal.ContextStorageBridge;
|
||||
import io.opentelemetry.instrumentation.grpc.v1_6.internal.GrpcNetAttributesExtractor;
|
||||
|
||||
// Holds singleton references.
|
||||
public final class GrpcSingletons {
|
||||
|
@ -29,13 +25,10 @@ public final class GrpcSingletons {
|
|||
static {
|
||||
boolean experimentalSpanAttributes =
|
||||
Config.get().getBoolean("otel.instrumentation.grpc.experimental-span-attributes", false);
|
||||
PeerServiceAttributesExtractor<GrpcRequest, Status> peerServiceAttributesExtractor =
|
||||
PeerServiceAttributesExtractor.create(new GrpcNetAttributesExtractor());
|
||||
|
||||
GrpcTracing tracing =
|
||||
GrpcTracing.newBuilder(GlobalOpenTelemetry.get())
|
||||
.setCaptureExperimentalSpanAttributes(experimentalSpanAttributes)
|
||||
.addAttributeExtractor(peerServiceAttributesExtractor)
|
||||
.build();
|
||||
|
||||
CLIENT_INTERCEPTOR = tracing.newClientInterceptor();
|
||||
|
|
|
@ -10,10 +10,15 @@ import io.opentelemetry.api.OpenTelemetry;
|
|||
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.SpanKindExtractor;
|
||||
import io.opentelemetry.instrumentation.grpc.v1_6.internal.GrpcNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.grpc.v1_6.internal.GrpcNetClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.grpc.v1_6.internal.GrpcNetServerAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
/** A builder of {@link GrpcTracing}. */
|
||||
public final class GrpcTracingBuilder {
|
||||
|
@ -21,6 +26,7 @@ public final class GrpcTracingBuilder {
|
|||
private static final String INSTRUMENTATION_NAME = "io.opentelemetry.grpc-1.6";
|
||||
|
||||
private final OpenTelemetry openTelemetry;
|
||||
@Nullable private String peerService;
|
||||
|
||||
private final List<AttributesExtractor<? super GrpcRequest, ? super Status>>
|
||||
additionalExtractors = new ArrayList<>();
|
||||
|
@ -41,6 +47,11 @@ public final class GrpcTracingBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets the {@code peer.service} attribute for http client spans. */
|
||||
public void setPeerService(String peerService) {
|
||||
this.peerService = peerService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether experimental attributes should be set to spans. These attributes may be changed or
|
||||
* removed in the future, so only enable this if you know you do not require attributes filled by
|
||||
|
@ -54,20 +65,39 @@ public final class GrpcTracingBuilder {
|
|||
|
||||
/** Returns a new {@link GrpcTracing} with the settings of this {@link GrpcTracingBuilder}. */
|
||||
public GrpcTracing build() {
|
||||
InstrumenterBuilder<GrpcRequest, Status> instrumenterBuilder =
|
||||
InstrumenterBuilder<GrpcRequest, Status> clientInstrumenterBuilder =
|
||||
Instrumenter.newBuilder(openTelemetry, INSTRUMENTATION_NAME, new GrpcSpanNameExtractor());
|
||||
instrumenterBuilder
|
||||
.setSpanStatusExtractor(new GrpcSpanStatusExtractor())
|
||||
.addAttributesExtractors(
|
||||
new GrpcNetAttributesExtractor(),
|
||||
new GrpcRpcAttributesExtractor(),
|
||||
new GrpcAttributesExtractor())
|
||||
.addAttributesExtractors(additionalExtractors);
|
||||
InstrumenterBuilder<GrpcRequest, Status> serverInstrumenterBuilder =
|
||||
Instrumenter.newBuilder(openTelemetry, INSTRUMENTATION_NAME, new GrpcSpanNameExtractor());
|
||||
|
||||
Stream.of(clientInstrumenterBuilder, serverInstrumenterBuilder)
|
||||
.forEach(
|
||||
instrumenter ->
|
||||
instrumenter
|
||||
.setSpanStatusExtractor(new GrpcSpanStatusExtractor())
|
||||
.addAttributesExtractors(
|
||||
new GrpcRpcAttributesExtractor(), new GrpcAttributesExtractor())
|
||||
.addAttributesExtractors(additionalExtractors));
|
||||
|
||||
GrpcNetClientAttributesExtractor netClientAttributesExtractor =
|
||||
new GrpcNetClientAttributesExtractor();
|
||||
|
||||
clientInstrumenterBuilder.addAttributesExtractor(netClientAttributesExtractor);
|
||||
serverInstrumenterBuilder.addAttributesExtractor(new GrpcNetServerAttributesExtractor());
|
||||
|
||||
if (peerService != null) {
|
||||
clientInstrumenterBuilder.addAttributesExtractor(
|
||||
AttributesExtractor.constant(SemanticAttributes.PEER_SERVICE, peerService));
|
||||
} else {
|
||||
clientInstrumenterBuilder.addAttributesExtractor(
|
||||
PeerServiceAttributesExtractor.create(netClientAttributesExtractor));
|
||||
}
|
||||
|
||||
return new GrpcTracing(
|
||||
instrumenterBuilder.newServerInstrumenter(GrpcExtractAdapter.GETTER),
|
||||
serverInstrumenterBuilder.newServerInstrumenter(GrpcExtractAdapter.GETTER),
|
||||
// gRPC client interceptors require two phases, one to set up request and one to execute.
|
||||
// So we go ahead and inject manually in this instrumentation.
|
||||
instrumenterBuilder.newInstrumenter(SpanKindExtractor.alwaysClient()),
|
||||
clientInstrumenterBuilder.newInstrumenter(SpanKindExtractor.alwaysClient()),
|
||||
openTelemetry.getPropagators(),
|
||||
captureExperimentalSpanAttributes);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.instrumentation.grpc.v1_6.internal;
|
||||
|
||||
import io.grpc.Status;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.grpc.v1_6.GrpcRequest;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketAddress;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public final class GrpcNetClientAttributesExtractor
|
||||
extends InetSocketAddressNetClientAttributesExtractor<GrpcRequest, Status> {
|
||||
@Override
|
||||
@Nullable
|
||||
public InetSocketAddress getAddress(GrpcRequest request, @Nullable Status response) {
|
||||
SocketAddress address = request.getRemoteAddress();
|
||||
if (address instanceof InetSocketAddress) {
|
||||
return (InetSocketAddress) address;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String transport(GrpcRequest request, @Nullable Status response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
}
|
|
@ -6,18 +6,18 @@
|
|||
package io.opentelemetry.instrumentation.grpc.v1_6.internal;
|
||||
|
||||
import io.grpc.Status;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.grpc.v1_6.GrpcRequest;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketAddress;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public final class GrpcNetAttributesExtractor
|
||||
extends InetSocketAddressNetAttributesExtractor<GrpcRequest, Status> {
|
||||
public final class GrpcNetServerAttributesExtractor
|
||||
extends InetSocketAddressNetServerAttributesExtractor<GrpcRequest, Status> {
|
||||
@Override
|
||||
@Nullable
|
||||
public InetSocketAddress getAddress(GrpcRequest request, @Nullable Status status) {
|
||||
public InetSocketAddress getAddress(GrpcRequest request) {
|
||||
SocketAddress address = request.getRemoteAddress();
|
||||
if (address instanceof InetSocketAddress) {
|
||||
return (InetSocketAddress) address;
|
|
@ -5,29 +5,30 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.httpurlconnection;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.net.HttpURLConnection;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
class HttpUrlNetAttributesExtractor extends NetAttributesExtractor<HttpURLConnection, Integer> {
|
||||
class HttpUrlNetAttributesExtractor
|
||||
extends NetClientAttributesExtractor<HttpURLConnection, Integer> {
|
||||
@Override
|
||||
public @Nullable String transport(HttpURLConnection connection) {
|
||||
public @Nullable String transport(HttpURLConnection connection, @Nullable Integer status) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String peerName(HttpURLConnection connection, @Nullable Integer statusCode) {
|
||||
public String peerName(HttpURLConnection connection, @Nullable Integer status) {
|
||||
return connection.getURL().getHost();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer peerPort(HttpURLConnection connection, @Nullable Integer statusCode) {
|
||||
public Integer peerPort(HttpURLConnection connection, @Nullable Integer status) {
|
||||
return connection.getURL().getPort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerIp(HttpURLConnection connection, @Nullable Integer statusCode) {
|
||||
public @Nullable String peerIp(HttpURLConnection connection, @Nullable Integer status) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.httpclient;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
|
@ -14,24 +14,22 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class JdkHttpNetAttributesExtractor
|
||||
extends NetAttributesExtractor<HttpRequest, HttpResponse<?>> {
|
||||
extends NetClientAttributesExtractor<HttpRequest, HttpResponse<?>> {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(JdkHttpNetAttributesExtractor.class);
|
||||
|
||||
@Override
|
||||
public String transport(HttpRequest httpRequest) {
|
||||
public String transport(HttpRequest httpRequest, @Nullable HttpResponse<?> response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerName(
|
||||
HttpRequest httpRequest, @Nullable HttpResponse<?> httpResponse) {
|
||||
public @Nullable String peerName(HttpRequest httpRequest, @Nullable HttpResponse<?> response) {
|
||||
return httpRequest.uri().getHost();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Integer peerPort(
|
||||
HttpRequest httpRequest, @Nullable HttpResponse<?> httpResponse) {
|
||||
public @Nullable Integer peerPort(HttpRequest httpRequest, @Nullable HttpResponse<?> response) {
|
||||
int port = httpRequest.uri().getPort();
|
||||
if (port != -1) {
|
||||
return port;
|
||||
|
@ -52,7 +50,7 @@ public class JdkHttpNetAttributesExtractor
|
|||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerIp(HttpRequest httpRequest, @Nullable HttpResponse<?> httpResponse) {
|
||||
public @Nullable String peerIp(HttpRequest httpRequest, @Nullable HttpResponse<?> response) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,15 +7,15 @@ package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v1_1;
|
|||
|
||||
import com.sun.jersey.api.client.ClientRequest;
|
||||
import com.sun.jersey.api.client.ClientResponse;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class JaxRsClientNetAttributesExtractor
|
||||
extends NetAttributesExtractor<ClientRequest, ClientResponse> {
|
||||
extends NetClientAttributesExtractor<ClientRequest, ClientResponse> {
|
||||
|
||||
@Override
|
||||
public String transport(ClientRequest request) {
|
||||
public String transport(ClientRequest request, @Nullable ClientResponse response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,17 +5,17 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import javax.ws.rs.client.ClientRequestContext;
|
||||
import javax.ws.rs.client.ClientResponseContext;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class JaxRsClientNetAttributesExtractor
|
||||
extends NetAttributesExtractor<ClientRequestContext, ClientResponseContext> {
|
||||
extends NetClientAttributesExtractor<ClientRequestContext, ClientResponseContext> {
|
||||
|
||||
@Override
|
||||
public String transport(ClientRequestContext request) {
|
||||
public String transport(ClientRequestContext request, @Nullable ClientResponseContext response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,17 +5,17 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import javax.ws.rs.core.Response;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.jboss.resteasy.client.jaxrs.internal.ClientInvocation;
|
||||
|
||||
final class ResteasyClientNetAttributesExtractor
|
||||
extends NetAttributesExtractor<ClientInvocation, Response> {
|
||||
extends NetClientAttributesExtractor<ClientInvocation, Response> {
|
||||
|
||||
@Override
|
||||
public String transport(ClientInvocation request) {
|
||||
public String transport(ClientInvocation request, @Nullable Response response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,14 +5,15 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.jdbc.internal;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public final class JdbcNetAttributesExtractor extends NetAttributesExtractor<DbRequest, Void> {
|
||||
public final class JdbcNetAttributesExtractor
|
||||
extends NetClientAttributesExtractor<DbRequest, Void> {
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String transport(DbRequest request) {
|
||||
public String transport(DbRequest request, @Nullable Void unused) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,14 +5,14 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.jedis.v1_4;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class JedisNetAttributesExtractor extends NetAttributesExtractor<JedisRequest, Void> {
|
||||
final class JedisNetAttributesExtractor extends NetClientAttributesExtractor<JedisRequest, Void> {
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String transport(JedisRequest request) {
|
||||
public String transport(JedisRequest request, @Nullable Void unused) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,14 +5,14 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.jedis.v3_0;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class JedisNetAttributesExtractor
|
||||
extends InetSocketAddressNetAttributesExtractor<JedisRequest, Void> {
|
||||
extends InetSocketAddressNetClientAttributesExtractor<JedisRequest, Void> {
|
||||
|
||||
@Override
|
||||
public @Nullable InetSocketAddress getAddress(JedisRequest jedisRequest, @Nullable Void unused) {
|
||||
|
@ -24,7 +24,7 @@ final class JedisNetAttributesExtractor
|
|||
}
|
||||
|
||||
@Override
|
||||
public String transport(JedisRequest jedisRequest) {
|
||||
public String transport(JedisRequest jedisRequest, @Nullable Void unused) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,17 +5,17 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.jetty.httpclient.v9_2.internal;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.eclipse.jetty.client.api.Request;
|
||||
import org.eclipse.jetty.client.api.Response;
|
||||
|
||||
public class JettyHttpClientNetAttributesExtractor
|
||||
extends NetAttributesExtractor<Request, Response> {
|
||||
extends NetClientAttributesExtractor<Request, Response> {
|
||||
|
||||
@Override
|
||||
public String transport(Request request) {
|
||||
public String transport(Request request, @Nullable Response response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,29 +6,30 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.kubernetesclient;
|
||||
|
||||
import io.kubernetes.client.openapi.ApiResponse;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import okhttp3.Request;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
class KubernetesNetAttributesExtractor extends NetAttributesExtractor<Request, ApiResponse<?>> {
|
||||
class KubernetesNetAttributesExtractor
|
||||
extends NetClientAttributesExtractor<Request, ApiResponse<?>> {
|
||||
@Override
|
||||
public String transport(Request request) {
|
||||
public String transport(Request request, @Nullable ApiResponse<?> response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String peerName(Request request, @Nullable ApiResponse<?> apiResponse) {
|
||||
public String peerName(Request request, @Nullable ApiResponse<?> response) {
|
||||
return request.url().host();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer peerPort(Request request, @Nullable ApiResponse<?> apiResponse) {
|
||||
public Integer peerPort(Request request, @Nullable ApiResponse<?> response) {
|
||||
return request.url().port();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerIp(Request request, @Nullable ApiResponse<?> apiResponse) {
|
||||
public @Nullable String peerIp(Request request, @Nullable ApiResponse<?> response) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,14 +6,15 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.lettuce.v4_0;
|
||||
|
||||
import com.lambdaworks.redis.RedisURI;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class LettuceConnectNetAttributesExtractor extends NetAttributesExtractor<RedisURI, Void> {
|
||||
final class LettuceConnectNetAttributesExtractor
|
||||
extends NetClientAttributesExtractor<RedisURI, Void> {
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String transport(RedisURI redisUri) {
|
||||
public String transport(RedisURI redisUri, @Nullable Void unused) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,14 +6,15 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.lettuce.v5_0;
|
||||
|
||||
import io.lettuce.core.RedisURI;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class LettuceConnectNetAttributesExtractor extends NetAttributesExtractor<RedisURI, Void> {
|
||||
final class LettuceConnectNetAttributesExtractor
|
||||
extends NetClientAttributesExtractor<RedisURI, Void> {
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String transport(RedisURI redisUri) {
|
||||
public String transport(RedisURI redisUri, @Nullable Void unused) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -81,7 +81,6 @@ public class LibertyDispatcherLinkInstrumentation implements TypeInstrumentation
|
|||
scope.close();
|
||||
|
||||
LibertyResponse response = new LibertyResponse(httpDispatcherLink, statusCode);
|
||||
request.setCompleted();
|
||||
|
||||
Throwable t = failure != null ? failure : throwable;
|
||||
instrumenter().end(context, request, response, t);
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.liberty.dispatcher;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public class LibertyDispatcherNetAttributesExtractor
|
||||
extends NetAttributesExtractor<LibertyRequest, LibertyResponse> {
|
||||
extends NetServerAttributesExtractor<LibertyRequest, LibertyResponse> {
|
||||
|
||||
@Override
|
||||
public String transport(LibertyRequest libertyRequest) {
|
||||
|
@ -18,32 +18,17 @@ public class LibertyDispatcherNetAttributesExtractor
|
|||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerName(
|
||||
LibertyRequest libertyRequest, @Nullable LibertyResponse libertyResponse) {
|
||||
// condition limits calling peerName to onStart because in onEnd it may throw a NPE
|
||||
if (!libertyRequest.isCompleted()) {
|
||||
return libertyRequest.peerName();
|
||||
}
|
||||
return null;
|
||||
public @Nullable String peerName(LibertyRequest libertyRequest) {
|
||||
return libertyRequest.peerName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Integer peerPort(
|
||||
LibertyRequest libertyRequest, @Nullable LibertyResponse libertyResponse) {
|
||||
// condition limits calling getServerPort to onStart because in onEnd it may throw a NPE
|
||||
if (!libertyRequest.isCompleted()) {
|
||||
return libertyRequest.getServerPort();
|
||||
}
|
||||
return null;
|
||||
public @Nullable Integer peerPort(LibertyRequest libertyRequest) {
|
||||
return libertyRequest.getServerPort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerIp(
|
||||
LibertyRequest libertyRequest, @Nullable LibertyResponse libertyResponse) {
|
||||
// condition limits calling peerIp to onStart because in onEnd it may throw a NPE
|
||||
if (!libertyRequest.isCompleted()) {
|
||||
return libertyRequest.peerIp();
|
||||
}
|
||||
return null;
|
||||
public @Nullable String peerIp(LibertyRequest libertyRequest) {
|
||||
return libertyRequest.peerIp();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,14 +9,13 @@ import static io.opentelemetry.instrumentation.api.servlet.ServerSpanNaming.Sour
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.PeerServiceAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.servlet.ServerSpanNaming;
|
||||
|
||||
public final class LibertyDispatcherSingletons {
|
||||
|
@ -31,7 +30,7 @@ public final class LibertyDispatcherSingletons {
|
|||
HttpSpanNameExtractor.create(httpAttributesExtractor);
|
||||
SpanStatusExtractor<LibertyRequest, LibertyResponse> spanStatusExtractor =
|
||||
HttpSpanStatusExtractor.create(httpAttributesExtractor);
|
||||
NetAttributesExtractor<LibertyRequest, LibertyResponse> netAttributesExtractor =
|
||||
NetServerAttributesExtractor<LibertyRequest, LibertyResponse> netAttributesExtractor =
|
||||
new LibertyDispatcherNetAttributesExtractor();
|
||||
|
||||
INSTRUMENTER =
|
||||
|
@ -40,7 +39,6 @@ public final class LibertyDispatcherSingletons {
|
|||
.setSpanStatusExtractor(spanStatusExtractor)
|
||||
.addAttributesExtractor(httpAttributesExtractor)
|
||||
.addAttributesExtractor(netAttributesExtractor)
|
||||
.addAttributesExtractor(PeerServiceAttributesExtractor.create(netAttributesExtractor))
|
||||
.addContextCustomizer(
|
||||
(context, request, attributes) -> ServerSpanNaming.init(context, CONTAINER))
|
||||
.addRequestMetrics(HttpServerMetrics.get())
|
||||
|
|
|
@ -15,7 +15,6 @@ import java.util.List;
|
|||
public class LibertyRequest {
|
||||
private final HttpDispatcherLink httpDispatcherLink;
|
||||
private final HttpRequestMessage httpRequestMessage;
|
||||
private boolean completed;
|
||||
|
||||
public LibertyRequest(
|
||||
HttpDispatcherLink httpDispatcherLink, HttpRequestMessage httpRequestMessage) {
|
||||
|
@ -79,12 +78,4 @@ public class LibertyRequest {
|
|||
public String getProtocol() {
|
||||
return httpRequestMessage.getVersion();
|
||||
}
|
||||
|
||||
public boolean isCompleted() {
|
||||
return completed;
|
||||
}
|
||||
|
||||
public void setCompleted() {
|
||||
completed = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,13 +7,14 @@ package io.opentelemetry.javaagent.instrumentation.okhttp.v2_2;
|
|||
|
||||
import com.squareup.okhttp.Request;
|
||||
import com.squareup.okhttp.Response;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public final class OkHttp2NetAttributesExtractor extends NetAttributesExtractor<Request, Response> {
|
||||
public final class OkHttp2NetAttributesExtractor
|
||||
extends NetClientAttributesExtractor<Request, Response> {
|
||||
@Override
|
||||
public String transport(Request request) {
|
||||
public String transport(Request request, @Nullable Response response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
|
||||
public final class OkHttp2Singletons {
|
||||
private static final String INSTRUMENTATION_NAME = "io.opentelemetry.okhttp-2.2";
|
||||
|
@ -35,7 +35,7 @@ public final class OkHttp2Singletons {
|
|||
HttpSpanNameExtractor.create(httpAttributesExtractor);
|
||||
SpanStatusExtractor<Request, Response> spanStatusExtractor =
|
||||
HttpSpanStatusExtractor.create(httpAttributesExtractor);
|
||||
NetAttributesExtractor<Request, Response> netAttributesExtractor =
|
||||
NetClientAttributesExtractor<Request, Response> netAttributesExtractor =
|
||||
new OkHttp2NetAttributesExtractor();
|
||||
|
||||
OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
|
||||
|
|
|
@ -5,15 +5,16 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.okhttp.v3_0.internal;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public final class OkHttpNetAttributesExtractor extends NetAttributesExtractor<Request, Response> {
|
||||
public final class OkHttpNetAttributesExtractor
|
||||
extends NetClientAttributesExtractor<Request, Response> {
|
||||
@Override
|
||||
public String transport(Request request) {
|
||||
public String transport(Request request, @Nullable Response response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.playws;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.net.InetSocketAddress;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
@ -13,10 +13,10 @@ import play.shaded.ahc.org.asynchttpclient.Request;
|
|||
import play.shaded.ahc.org.asynchttpclient.Response;
|
||||
|
||||
final class PlayWsClientNetAttributesExtractor
|
||||
extends InetSocketAddressNetAttributesExtractor<Request, Response> {
|
||||
extends InetSocketAddressNetClientAttributesExtractor<Request, Response> {
|
||||
|
||||
@Override
|
||||
public String transport(Request request) {
|
||||
public String transport(Request request, @Nullable Response response) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,13 +5,14 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.ratpack.internal;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import ratpack.http.Request;
|
||||
import ratpack.http.Response;
|
||||
|
||||
public final class RatpackNetAttributesExtractor extends NetAttributesExtractor<Request, Response> {
|
||||
public final class RatpackNetAttributesExtractor
|
||||
extends NetServerAttributesExtractor<Request, Response> {
|
||||
@Override
|
||||
@Nullable
|
||||
public String transport(Request request) {
|
||||
|
@ -20,18 +21,18 @@ public final class RatpackNetAttributesExtractor extends NetAttributesExtractor<
|
|||
|
||||
@Override
|
||||
@Nullable
|
||||
public String peerName(Request request, @Nullable Response response) {
|
||||
public String peerName(Request request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer peerPort(Request request, @Nullable Response response) {
|
||||
public Integer peerPort(Request request) {
|
||||
return request.getRemoteAddress().getPort();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String peerIp(Request request, @Nullable Response response) {
|
||||
public String peerIp(Request request) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.redisson;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesExtractor;
|
||||
import java.net.InetSocketAddress;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class RedissonNetAttributesExtractor
|
||||
extends InetSocketAddressNetAttributesExtractor<RedissonRequest, Void> {
|
||||
extends InetSocketAddressNetClientAttributesExtractor<RedissonRequest, Void> {
|
||||
|
||||
@Override
|
||||
public InetSocketAddress getAddress(RedissonRequest request, @Nullable Void unused) {
|
||||
|
@ -19,7 +19,7 @@ final class RedissonNetAttributesExtractor
|
|||
|
||||
@Nullable
|
||||
@Override
|
||||
public String transport(RedissonRequest request) {
|
||||
public String transport(RedissonRequest request, @Nullable Void unused) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,30 +5,30 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.restlet.v1_0;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.restlet.data.Request;
|
||||
import org.restlet.data.Response;
|
||||
|
||||
final class RestletNetAttributesExtractor extends NetAttributesExtractor<Request, Response> {
|
||||
final class RestletNetAttributesExtractor extends NetServerAttributesExtractor<Request, Response> {
|
||||
@Override
|
||||
public String transport(Request request) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerName(Request request, @Nullable Response response) {
|
||||
public @Nullable String peerName(Request request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer peerPort(Request request, @Nullable Response response) {
|
||||
public Integer peerPort(Request request) {
|
||||
return request.getClientInfo().getPort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerIp(Request request, @Nullable Response response) {
|
||||
public @Nullable String peerIp(Request request) {
|
||||
return request.getClientInfo().getAddress();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.restlet.data.Request;
|
||||
|
@ -66,7 +66,7 @@ public final class RestletTracingBuilder {
|
|||
HttpSpanNameExtractor.create(httpAttributesExtractor);
|
||||
SpanStatusExtractor<Request, Response> spanStatusExtractor =
|
||||
HttpSpanStatusExtractor.create(httpAttributesExtractor);
|
||||
NetAttributesExtractor<Request, Response> netAttributesExtractor =
|
||||
NetServerAttributesExtractor<Request, Response> netAttributesExtractor =
|
||||
new RestletNetAttributesExtractor();
|
||||
|
||||
Instrumenter<Request, Response> instrumenter =
|
||||
|
|
|
@ -10,7 +10,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
|
||||
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.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
|
@ -73,7 +72,6 @@ public final class ServletInstrumenterBuilder<REQUEST, RESPONSE> {
|
|||
.setErrorCauseExtractor(errorCauseExtractor)
|
||||
.addAttributesExtractor(httpAttributesExtractor)
|
||||
.addAttributesExtractor(netAttributesExtractor)
|
||||
.addAttributesExtractor(PeerServiceAttributesExtractor.create(netAttributesExtractor))
|
||||
.addAttributesExtractor(additionalAttributesExtractor)
|
||||
.addRequestMetrics(HttpServerMetrics.get());
|
||||
for (ContextCustomizer<? super ServletRequestContext<REQUEST>> contextCustomizer :
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.servlet;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.servlet.ServletAccessor;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public class ServletNetAttributesExtractor<REQUEST, RESPONSE>
|
||||
extends NetAttributesExtractor<
|
||||
extends NetServerAttributesExtractor<
|
||||
ServletRequestContext<REQUEST>, ServletResponseContext<RESPONSE>> {
|
||||
private final ServletAccessor<REQUEST, RESPONSE> accessor;
|
||||
|
||||
|
@ -25,24 +25,18 @@ public class ServletNetAttributesExtractor<REQUEST, RESPONSE>
|
|||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerName(
|
||||
ServletRequestContext<REQUEST> requestContext,
|
||||
@Nullable ServletResponseContext<RESPONSE> responseContext) {
|
||||
public @Nullable String peerName(ServletRequestContext<REQUEST> requestContext) {
|
||||
// return accessor.getRequestRemoteHost(requestContext.request());
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Integer peerPort(
|
||||
ServletRequestContext<REQUEST> requestContext,
|
||||
@Nullable ServletResponseContext<RESPONSE> responseContext) {
|
||||
public @Nullable Integer peerPort(ServletRequestContext<REQUEST> requestContext) {
|
||||
return accessor.getRequestRemotePort(requestContext.request());
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerIp(
|
||||
ServletRequestContext<REQUEST> requestContext,
|
||||
@Nullable ServletResponseContext<RESPONSE> responseContext) {
|
||||
public @Nullable String peerIp(ServletRequestContext<REQUEST> requestContext) {
|
||||
return accessor.getRequestRemoteAddr(requestContext.request());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,34 +5,31 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.spring.web;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.springframework.http.HttpRequest;
|
||||
import org.springframework.http.client.ClientHttpResponse;
|
||||
|
||||
final class SpringWebNetAttributesExtractor
|
||||
extends NetAttributesExtractor<HttpRequest, ClientHttpResponse> {
|
||||
extends NetServerAttributesExtractor<HttpRequest, ClientHttpResponse> {
|
||||
@Override
|
||||
public String transport(HttpRequest httpRequest) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerName(
|
||||
HttpRequest httpRequest, @Nullable ClientHttpResponse clientHttpResponse) {
|
||||
public @Nullable String peerName(HttpRequest httpRequest) {
|
||||
return httpRequest.getURI().getHost();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer peerPort(
|
||||
HttpRequest httpRequest, @Nullable ClientHttpResponse clientHttpResponse) {
|
||||
public Integer peerPort(HttpRequest httpRequest) {
|
||||
return httpRequest.getURI().getPort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerIp(
|
||||
HttpRequest httpRequest, @Nullable ClientHttpResponse clientHttpResponse) {
|
||||
public @Nullable String peerIp(HttpRequest httpRequest) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,33 +5,31 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.spring.webmvc;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
final class SpringWebMvcNetAttributesExtractor
|
||||
extends NetAttributesExtractor<HttpServletRequest, HttpServletResponse> {
|
||||
extends NetServerAttributesExtractor<HttpServletRequest, HttpServletResponse> {
|
||||
@Override
|
||||
public String transport(HttpServletRequest request) {
|
||||
return SemanticAttributes.NetTransportValues.IP_TCP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerName(
|
||||
HttpServletRequest request, @Nullable HttpServletResponse response) {
|
||||
public @Nullable String peerName(HttpServletRequest request) {
|
||||
return request.getRemoteHost();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer peerPort(HttpServletRequest request, @Nullable HttpServletResponse response) {
|
||||
public Integer peerPort(HttpServletRequest request) {
|
||||
return request.getRemotePort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerIp(
|
||||
HttpServletRequest request, @Nullable HttpServletResponse response) {
|
||||
public @Nullable String peerIp(HttpServletRequest request) {
|
||||
return request.getRemoteAddr();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,14 +10,13 @@ import static io.opentelemetry.instrumentation.api.servlet.ServerSpanNaming.Sour
|
|||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.PeerServiceAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.servlet.AppServerBridge;
|
||||
import io.opentelemetry.instrumentation.api.servlet.ServerSpanNaming;
|
||||
import io.opentelemetry.instrumentation.servlet.ServletAccessor;
|
||||
|
@ -39,7 +38,7 @@ public final class TomcatInstrumenterBuilder {
|
|||
HttpSpanNameExtractor.create(httpAttributesExtractor);
|
||||
SpanStatusExtractor<Request, Response> spanStatusExtractor =
|
||||
HttpSpanStatusExtractor.create(httpAttributesExtractor);
|
||||
NetAttributesExtractor<Request, Response> netAttributesExtractor =
|
||||
NetServerAttributesExtractor<Request, Response> netAttributesExtractor =
|
||||
new TomcatNetAttributesExtractor();
|
||||
AttributesExtractor<Request, Response> additionalAttributeExtractor =
|
||||
new TomcatAdditionalAttributesExtractor<>(accessor, servletEntityProvider);
|
||||
|
@ -50,7 +49,6 @@ public final class TomcatInstrumenterBuilder {
|
|||
.setErrorCauseExtractor(new ServletErrorCauseExtractor<>(accessor))
|
||||
.addAttributesExtractor(httpAttributesExtractor)
|
||||
.addAttributesExtractor(netAttributesExtractor)
|
||||
.addAttributesExtractor(PeerServiceAttributesExtractor.create(netAttributesExtractor))
|
||||
.addAttributesExtractor(additionalAttributeExtractor)
|
||||
.addContextCustomizer(
|
||||
(context, request, attributes) -> {
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.tomcat.common;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
|
||||
import org.apache.coyote.ActionCode;
|
||||
import org.apache.coyote.Request;
|
||||
import org.apache.coyote.Response;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public class TomcatNetAttributesExtractor extends NetAttributesExtractor<Request, Response> {
|
||||
public class TomcatNetAttributesExtractor extends NetServerAttributesExtractor<Request, Response> {
|
||||
|
||||
@Override
|
||||
public @Nullable String transport(Request request) {
|
||||
|
@ -20,7 +20,7 @@ public class TomcatNetAttributesExtractor extends NetAttributesExtractor<Request
|
|||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerName(Request request, @Nullable Response response) {
|
||||
public @Nullable String peerName(Request request) {
|
||||
/*
|
||||
request.action(ActionCode.REQ_HOST_ATTRIBUTE, request);
|
||||
return request.remoteHost().toString();
|
||||
|
@ -29,13 +29,13 @@ public class TomcatNetAttributesExtractor extends NetAttributesExtractor<Request
|
|||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Integer peerPort(Request request, @Nullable Response response) {
|
||||
public @Nullable Integer peerPort(Request request) {
|
||||
request.action(ActionCode.REQ_REMOTEPORT_ATTRIBUTE, request);
|
||||
return request.getRemotePort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String peerIp(Request request, @Nullable Response response) {
|
||||
public @Nullable String peerIp(Request request) {
|
||||
request.action(ActionCode.REQ_HOST_ADDR_ATTRIBUTE, request);
|
||||
return request.remoteAddr().toString();
|
||||
}
|
||||
|
|
|
@ -5,18 +5,17 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.undertow;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetServerAttributesExtractor;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import io.undertow.server.HttpServerExchange;
|
||||
import java.net.InetSocketAddress;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public class UndertowNetAttributesExtractor
|
||||
extends InetSocketAddressNetAttributesExtractor<HttpServerExchange, HttpServerExchange> {
|
||||
extends InetSocketAddressNetServerAttributesExtractor<HttpServerExchange, HttpServerExchange> {
|
||||
|
||||
@Override
|
||||
public @Nullable InetSocketAddress getAddress(
|
||||
HttpServerExchange exchange, @Nullable HttpServerExchange unused) {
|
||||
public @Nullable InetSocketAddress getAddress(HttpServerExchange exchange) {
|
||||
return exchange.getConnection().getPeerAddress(InetSocketAddress.class);
|
||||
}
|
||||
|
||||
|
|
|
@ -9,14 +9,13 @@ import static io.opentelemetry.instrumentation.api.servlet.ServerSpanNaming.Sour
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.PeerServiceAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.servlet.AppServerBridge;
|
||||
import io.opentelemetry.instrumentation.api.servlet.ServerSpanNaming;
|
||||
import io.opentelemetry.javaagent.bootstrap.undertow.UndertowActiveHandlers;
|
||||
|
@ -34,7 +33,7 @@ public final class UndertowSingletons {
|
|||
HttpSpanNameExtractor.create(httpAttributesExtractor);
|
||||
SpanStatusExtractor<HttpServerExchange, HttpServerExchange> spanStatusExtractor =
|
||||
HttpSpanStatusExtractor.create(httpAttributesExtractor);
|
||||
NetAttributesExtractor<HttpServerExchange, HttpServerExchange> netAttributesExtractor =
|
||||
NetServerAttributesExtractor<HttpServerExchange, HttpServerExchange> netAttributesExtractor =
|
||||
new UndertowNetAttributesExtractor();
|
||||
|
||||
INSTRUMENTER =
|
||||
|
@ -43,7 +42,6 @@ public final class UndertowSingletons {
|
|||
.setSpanStatusExtractor(spanStatusExtractor)
|
||||
.addAttributesExtractor(httpAttributesExtractor)
|
||||
.addAttributesExtractor(netAttributesExtractor)
|
||||
.addAttributesExtractor(PeerServiceAttributesExtractor.create(netAttributesExtractor))
|
||||
.addContextCustomizer(
|
||||
(context, request, attributes) -> {
|
||||
context = ServerSpanNaming.init(context, CONTAINER);
|
||||
|
|
Loading…
Reference in New Issue