Skip to content

Commit

Permalink
Rely on configured filter to exclude WebSocket initialisation from tr…
Browse files Browse the repository at this point in the history
…acing.

Signed-off-by: Juergen Fickel <juergen.fickel@bosch.io>
  • Loading branch information
Juergen Fickel committed Oct 26, 2022
1 parent 9f2dadd commit 3d752da
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import java.net.URI;
import java.text.MessageFormat;
import java.util.Map;
import java.util.Set;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
Expand Down Expand Up @@ -56,24 +55,19 @@ public final class RequestTracingDirective {

private static final DittoLogger LOGGER = DittoLoggerFactory.getLogger(RequestTracingDirective.class);

private final Set<SpanOperationName> disabledSpanOperationNames;

private RequestTracingDirective(final Set<SpanOperationName> disabledSpanOperationNames) {
this.disabledSpanOperationNames = Set.copyOf(disabledSpanOperationNames);
private RequestTracingDirective() {
super();
}

/**
* Return new instance of {@code RequestTracingDirective} which disables tracing for operations with the specified
* set of operation names.
*
* @param disabledSpanOperationNames names of operations for which no tracing is performed at all.
* @return the new instance.
* @throws NullPointerException if {@code disabledSpanOperationNames} is {@code null}.
*/
public static RequestTracingDirective newInstanceWithDisabled(
final Set<SpanOperationName> disabledSpanOperationNames
) {
return new RequestTracingDirective(checkNotNull(disabledSpanOperationNames, "disabledSpanOperationNames"));
public static RequestTracingDirective newInstanceWithDisabled() {
return new RequestTracingDirective();
}

/**
Expand Down Expand Up @@ -141,8 +135,8 @@ private static String getRequestMethodName(final HttpRequest httpRequest) {
return httpMethod.name();
}

private boolean isTracingDisabledForOperationName(@Nullable final SpanOperationName traceOperationName) {
return null == traceOperationName || disabledSpanOperationNames.contains(traceOperationName);
private static boolean isTracingDisabledForOperationName(@Nullable final SpanOperationName traceOperationName) {
return null == traceOperationName;
}

private static Map<String, String> getHttpHeadersAsMap(final Iterable<HttpHeader> httpHeaders) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CompletionStage;
import java.util.function.Function;
Expand Down Expand Up @@ -57,7 +56,6 @@
import org.eclipse.ditto.gateway.service.util.config.endpoints.HttpConfig;
import org.eclipse.ditto.internal.utils.health.routes.StatusRoute;
import org.eclipse.ditto.internal.utils.protocol.ProtocolAdapterProvider;
import org.eclipse.ditto.internal.utils.tracing.span.SpanOperationName;
import org.eclipse.ditto.protocol.adapter.ProtocolAdapter;

import akka.http.javadsl.model.HttpHeader;
Expand Down Expand Up @@ -181,9 +179,7 @@ private Route buildRoute() {
}

private Route wrapWithRootDirectives(final Function<String, Route> rootRoute) {
final var requestTracingDirective = RequestTracingDirective.newInstanceWithDisabled(Set.of(
SpanOperationName.of("/ws/2 GET")
));
final var requestTracingDirective = RequestTracingDirective.newInstanceWithDisabled();

final Function<Function<String, Route>, Route> outerRouteProvider = innerRouteProvider ->
/* the outer handleExceptions is for handling exceptions in the directives wrapping the rootRoute
Expand Down
7 changes: 7 additions & 0 deletions gateway/service/src/main/resources/gateway.conf
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,13 @@ ditto {
]
}
}

tracing {
filter: {
includes = ["*"],
excludes = ["/ws/2 GET"]
}
}
}

# read docker secrets in /run/secrets if a "filebased" host environment is chosen
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

import java.time.Duration;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
Expand Down Expand Up @@ -91,49 +90,19 @@ public void assertImmutability() {
);
}

@Test
public void newInstanceWithDisabledWithNullThrowsNullPointerException() {
Assertions.assertThatNullPointerException()
.isThrownBy(() -> RequestTracingDirective.newInstanceWithDisabled(null))
.withMessage("The disabledSpanOperationNames must not be null!")
.withNoCause();
}

@Test
public void traceRequestWithNullInnerRouteSupplierThrowsNullPointerException() {
final var underTest = RequestTracingDirective.newInstanceWithDisabled(Set.of());
final var underTest = RequestTracingDirective.newInstanceWithDisabled();

Assertions.assertThatNullPointerException()
.isThrownBy(() -> underTest.traceRequest(null, null))
.withMessage("The innerRouteSupplier must not be null!")
.withNoCause();
}

@Test
public void traceRequestDoesNotCallDittoTracingIfTracingIsDisabledForResolvedSpanOperationName() {
final var underTest = RequestTracingDirective.newInstanceWithDisabled(Set.of(DISABLED_SPAN_OPERATION_NAME));

final var innerRoute = Mockito.mock(Route.class);
final var httpRequest = HttpRequest.create().withUri(Uri.create("/ws/2")).withMethod(HttpMethods.GET);

try (final var dittoTracingMockedStatic = Mockito.mockStatic(DittoTracing.class)) {
final var testRoute = testRoute(
extractRequestContext(
requestContext -> underTest.traceRequest(
() -> innerRoute,
testNameCorrelationId.getCorrelationId()
)
)
);

testRoute.run(httpRequest);
dittoTracingMockedStatic.verifyNoInteractions();
}
}

@Test
public void traceRequestCallsDittoTracingIfTracingIsEnabledForResolvedSpanOperationName() {
final var underTest = RequestTracingDirective.newInstanceWithDisabled(Set.of());
final var underTest = RequestTracingDirective.newInstanceWithDisabled();

final var headersMap = Map.ofEntries(
Map.entry(
Expand Down Expand Up @@ -177,7 +146,7 @@ public void traceRequestCallsDittoTracingIfTracingIsEnabledForResolvedSpanOperat

@Test
public void traceRequestWithExistingW3cTracingHeadersReplacesThoseHeadersWithCurrentSpanContextHeaders() {
final var underTest = RequestTracingDirective.newInstanceWithDisabled(Set.of(DISABLED_SPAN_OPERATION_NAME));
final var underTest = RequestTracingDirective.newInstanceWithDisabled();
final var expectedStatus = StatusCodes.NO_CONTENT;
final var effectiveHttpRequestHeader = new CompletableFuture<Map<String, String>>();
final var routeFactory = new AllDirectives() {
Expand Down

0 comments on commit 3d752da

Please sign in to comment.