You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2024/10/03 08:33:19 UTC
(camel) branch camel-4.4.x updated (2444e123569 -> 8fb98294a4d)
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a change to branch camel-4.4.x
in repository https://gitbox.apache.org/repos/asf/camel.git
from 2444e123569 Regen
new b25310e6344 OpenTelemetry testing improvements (#15182)
new 8fb98294a4d Reduce OTEL logging messages volume (#15262)
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
components/camel-opentelemetry/pom.xml | 16 ++
.../src/main/docs/opentelemetry.adoc | 8 +-
.../camel/opentelemetry/OpenTelemetryTracer.java | 6 +-
.../opentelemetry/CamelOpenTelemetryExtension.java | 195 +++++++++++++++++++++
.../CamelOpenTelemetryTestSupport.java | 133 +++++++-------
.../OpenTelemetryPropagateContextTest.java | 29 +--
...lemetryTracingStrategyPropagateContextTest.java | 6 +-
.../OpenTelemetryTracingStrategyTest.java | 4 +-
.../apache/camel/opentelemetry/SpanTestData.java | 16 +-
.../camel/opentelemetry/SpanTreePrinter.java | 99 +++++++++++
.../src/test/resources/log4j2.properties | 22 ++-
.../apache/camel/tracing/ActiveSpanManager.java | 14 +-
.../org/apache/camel/tracing/InjectAdapter.java | 7 +
.../java/org/apache/camel/tracing/SpanAdapter.java | 25 ++-
.../org/apache/camel/tracing/SpanDecorator.java | 8 +-
.../main/java/org/apache/camel/tracing/Tag.java | 5 +
.../propagation/CamelHeadersExtractAdapter.java | 2 +-
.../CamelMessagingHeadersExtractAdapter.java | 6 +-
.../CamelMessagingHeadersInjectAdapter.java | 6 +-
.../camel/tracing/ActiveSpanManagerTest.java | 26 +--
.../org/apache/camel/tracing/MockSpanAdapter.java | 18 +-
.../decorators/AbstractHttpSpanDecoratorTest.java | 4 -
.../AbstractMessagingSpanDecoratorTest.java | 3 -
.../decorators/AbstractSpanDecoratorTest.java | 4 +-
.../tracing/decorators/CqlSpanDecoratorTest.java | 10 +-
.../decorators/ElasticsearchSpanDecoratorTest.java | 3 -
.../tracing/decorators/JdbcSpanDecoratorTest.java | 3 -
.../decorators/MongoDBSpanDecoratorTest.java | 4 -
.../tracing/decorators/SqlSpanDecoratorTest.java | 3 -
parent/pom.xml | 2 +
30 files changed, 493 insertions(+), 194 deletions(-)
create mode 100644 components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CamelOpenTelemetryExtension.java
create mode 100644 components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/SpanTreePrinter.java
(camel) 01/02: OpenTelemetry testing improvements (#15182)
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.4.x
in repository https://gitbox.apache.org/repos/asf/camel.git
commit b25310e634470d26bd0e5e7201bb5fe8f69a3698
Author: Adriano Machado <60...@users.noreply.github.com>
AuthorDate: Wed Aug 21 00:18:06 2024 -0400
OpenTelemetry testing improvements (#15182)
* [WIP] Improving test framework to show traceId and spanId and capture log records
* [WIP] Other improvements
* WIP
* Remove unused import
* Removing duplicated log4j appender configuration from OTEL test support
* Reverting `ExchangePropertyKey` change.
* Fix unit tests
* Revert log4j2 xml format to properties
* Do not run OTEL tests in parallel.
---
components/camel-opentelemetry/pom.xml | 16 ++
.../src/main/docs/opentelemetry.adoc | 8 +-
.../camel/opentelemetry/OpenTelemetryTracer.java | 6 +-
.../opentelemetry/CamelOpenTelemetryExtension.java | 195 +++++++++++++++++++++
.../CamelOpenTelemetryTestSupport.java | 133 +++++++-------
.../OpenTelemetryPropagateContextTest.java | 29 +--
...lemetryTracingStrategyPropagateContextTest.java | 6 +-
.../OpenTelemetryTracingStrategyTest.java | 4 +-
.../apache/camel/opentelemetry/SpanTestData.java | 16 +-
.../camel/opentelemetry/SpanTreePrinter.java | 99 +++++++++++
.../src/test/resources/log4j2.properties | 21 ++-
.../apache/camel/tracing/ActiveSpanManager.java | 14 +-
.../org/apache/camel/tracing/InjectAdapter.java | 7 +
.../java/org/apache/camel/tracing/SpanAdapter.java | 25 ++-
.../org/apache/camel/tracing/SpanDecorator.java | 8 +-
.../main/java/org/apache/camel/tracing/Tag.java | 5 +
.../propagation/CamelHeadersExtractAdapter.java | 2 +-
.../CamelMessagingHeadersExtractAdapter.java | 6 +-
.../CamelMessagingHeadersInjectAdapter.java | 6 +-
.../camel/tracing/ActiveSpanManagerTest.java | 26 +--
.../org/apache/camel/tracing/MockSpanAdapter.java | 18 +-
.../decorators/AbstractHttpSpanDecoratorTest.java | 4 -
.../AbstractMessagingSpanDecoratorTest.java | 3 -
.../decorators/AbstractSpanDecoratorTest.java | 4 +-
.../tracing/decorators/CqlSpanDecoratorTest.java | 10 +-
.../decorators/ElasticsearchSpanDecoratorTest.java | 3 -
.../tracing/decorators/JdbcSpanDecoratorTest.java | 3 -
.../decorators/MongoDBSpanDecoratorTest.java | 4 -
.../tracing/decorators/SqlSpanDecoratorTest.java | 3 -
parent/pom.xml | 2 +
30 files changed, 491 insertions(+), 195 deletions(-)
diff --git a/components/camel-opentelemetry/pom.xml b/components/camel-opentelemetry/pom.xml
index 012128f744f..cfebf1f6551 100644
--- a/components/camel-opentelemetry/pom.xml
+++ b/components/camel-opentelemetry/pom.xml
@@ -50,6 +50,10 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-support</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-base-engine</artifactId>
+ </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-tracing</artifactId>
@@ -91,6 +95,18 @@
<version>${opentelemetry-version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>io.opentelemetry</groupId>
+ <artifactId>opentelemetry-sdk-extension-incubator</artifactId>
+ <version>${opentelemetry-incubator-version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.opentelemetry.instrumentation</groupId>
+ <artifactId>opentelemetry-log4j-appender-2.17</artifactId>
+ <version>${opentelemetry-log4j2-version}</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
diff --git a/components/camel-opentelemetry/src/main/docs/opentelemetry.adoc b/components/camel-opentelemetry/src/main/docs/opentelemetry.adoc
index 078e69672c6..e47cfa96bdc 100644
--- a/components/camel-opentelemetry/src/main/docs/opentelemetry.adoc
+++ b/components/camel-opentelemetry/src/main/docs/opentelemetry.adoc
@@ -72,8 +72,8 @@ NOTE: You would still need OpenTelemetry to instrument your code, which can be d
== Spring Boot
-If you are using Spring Boot then you can add
-the `camel-opentelemetry-starter` dependency, and turn on OpenTracing by annotating
+If you are using Spring Boot, then you can add
+the `camel-opentelemetry-starter` dependency, and turn on OpenTelemetry by annotating
the main class with `@CamelOpenTelemetry`.
The `OpenTelemetryTracer` will be implicitly obtained from the camel context's `Registry`, unless
@@ -95,7 +95,7 @@ java -javaagent:path/to/opentelemetry-javaagent.jar \
-jar myapp.jar
----
-By default, the OpenTelemetry Java agent uses https://github.com/open-telemetry/opentelemetry-java/tree/main/exporters/otlp[OTLP exporter] configured to send data to https://github.com/open-telemetry/opentelemetry-collector/blob/main/receiver/otlpreceiver/README.md[OpenTelemetry collector] at `http://localhost:4317`.
+By default, the OpenTelemetry Java agent uses https://github.com/open-telemetry/opentelemetry-java/tree/main/exporters/otlp[OTLP exporter] configured to send data to https://github.com/open-telemetry/opentelemetry-collector/blob/main/receiver/otlpreceiver/README.md[OpenTelemetry collector] at `http://localhost:4318`.
Configuration parameters are passed as Java system properties (`-D` flags) or as environment variables. See https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/agent-config.md[the configuration documentation] for the full list of configuration items. For example:
@@ -103,7 +103,7 @@ Configuration parameters are passed as Java system properties (`-D` flags) or as
----
java -javaagent:path/to/opentelemetry-javaagent.jar \
-Dotel.service.name=your-service-name \
- -Dotel.traces.exporter=jaeger \
+ -Dotel.traces.exporter=otlp \
-jar myapp.jar
----
diff --git a/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/OpenTelemetryTracer.java b/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/OpenTelemetryTracer.java
index 0b6b9b4614b..cdf98014a3e 100644
--- a/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/OpenTelemetryTracer.java
+++ b/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/OpenTelemetryTracer.java
@@ -188,11 +188,9 @@ public class OpenTelemetryTracer extends org.apache.camel.tracing.Tracer {
protected void inject(SpanAdapter span, InjectAdapter adapter) {
OpenTelemetrySpanAdapter spanFromExchange = (OpenTelemetrySpanAdapter) span;
Span otelSpan = spanFromExchange.getOpenTelemetrySpan();
- Context ctx;
+ Context ctx = Context.current().with(otelSpan);
if (spanFromExchange.getBaggage() != null) {
- ctx = Context.current().with(otelSpan).with(spanFromExchange.getBaggage());
- } else {
- ctx = Context.current().with(otelSpan);
+ ctx = ctx.with(spanFromExchange.getBaggage());
}
getContextPropagators().getTextMapPropagator().inject(ctx, adapter, new OpenTelemetrySetter());
}
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CamelOpenTelemetryExtension.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CamelOpenTelemetryExtension.java
new file mode 100644
index 00000000000..f298d8d8a9b
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CamelOpenTelemetryExtension.java
@@ -0,0 +1,195 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.opentelemetry;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.opentelemetry.api.GlobalOpenTelemetry;
+import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
+import io.opentelemetry.context.Context;
+import io.opentelemetry.context.propagation.ContextPropagators;
+import io.opentelemetry.instrumentation.log4j.appender.v2_17.OpenTelemetryAppender;
+import io.opentelemetry.sdk.OpenTelemetrySdk;
+import io.opentelemetry.sdk.extension.incubator.trace.LeakDetectingSpanProcessor;
+import io.opentelemetry.sdk.logs.SdkLoggerProvider;
+import io.opentelemetry.sdk.logs.data.LogRecordData;
+import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
+import io.opentelemetry.sdk.metrics.SdkMeterProvider;
+import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
+import io.opentelemetry.sdk.metrics.data.MetricData;
+import io.opentelemetry.sdk.metrics.internal.SdkMeterProviderUtil;
+import io.opentelemetry.sdk.testing.exporter.InMemoryLogRecordExporter;
+import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader;
+import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter;
+import io.opentelemetry.sdk.trace.ReadWriteSpan;
+import io.opentelemetry.sdk.trace.ReadableSpan;
+import io.opentelemetry.sdk.trace.SdkTracerProvider;
+import io.opentelemetry.sdk.trace.SpanProcessor;
+import io.opentelemetry.sdk.trace.data.SpanData;
+import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
+import org.junit.jupiter.api.extension.AfterEachCallback;
+import org.junit.jupiter.api.extension.BeforeEachCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+
+/**
+ * Adapted from
+ * https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/junit5/OpenTelemetryExtension.java
+ */
+final class CamelOpenTelemetryExtension implements BeforeEachCallback, AfterEachCallback {
+
+ /**
+ * Returns an extension with a default SDK initialized with an in-memory span exporter and W3C trace context
+ * propagation.
+ */
+ static CamelOpenTelemetryExtension create() {
+ InMemorySpanExporter spanExporter = InMemorySpanExporter.create();
+ SdkTracerProvider tracerProvider = SdkTracerProvider.builder()
+ .addSpanProcessor(LeakDetectingSpanProcessor.create())
+ .addSpanProcessor(new LoggingSpanProcessor())
+ .addSpanProcessor(SimpleSpanProcessor.create(spanExporter))
+ .build();
+
+ InMemoryMetricReader metricReader = InMemoryMetricReader.create();
+ SdkMeterProvider meterProvider = SdkMeterProvider.builder().registerMetricReader(metricReader).build();
+
+ InMemoryLogRecordExporter logRecordExporter = InMemoryLogRecordExporter.create();
+ SdkLoggerProvider loggerProvider = SdkLoggerProvider.builder()
+ .addLogRecordProcessor(SimpleLogRecordProcessor.create(logRecordExporter))
+ .build();
+
+ OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder()
+ .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
+ .setTracerProvider(tracerProvider)
+ .setMeterProvider(meterProvider)
+ .setLoggerProvider(loggerProvider)
+ .build();
+
+ return new CamelOpenTelemetryExtension(openTelemetry, spanExporter, metricReader, logRecordExporter);
+ }
+
+ private final OpenTelemetrySdk openTelemetry;
+ private final InMemorySpanExporter spanExporter;
+ private final InMemoryMetricReader metricReader;
+ private final InMemoryLogRecordExporter logRecordExporter;
+
+ private CamelOpenTelemetryExtension(OpenTelemetrySdk openTelemetry, InMemorySpanExporter spanExporter,
+ InMemoryMetricReader metricReader, InMemoryLogRecordExporter logRecordExporter) {
+ this.openTelemetry = openTelemetry;
+ this.spanExporter = spanExporter;
+ this.metricReader = metricReader;
+ this.logRecordExporter = logRecordExporter;
+ }
+
+ /**
+ * Returns the {@link OpenTelemetrySdk} created by this extension.
+ */
+ public OpenTelemetry getOpenTelemetry() {
+ return openTelemetry;
+ }
+
+ /**
+ * Returns all the exported {@link SpanData} so far.
+ */
+ public List<SpanData> getSpans() {
+ return spanExporter.getFinishedSpanItems();
+ }
+
+ /**
+ * Returns the current {@link MetricData} in {@link AggregationTemporality#CUMULATIVE} format.
+ */
+ public List<MetricData> getMetrics() {
+ return new ArrayList<>(metricReader.collectAllMetrics());
+ }
+
+ /**
+ * Returns all the exported {@link LogRecordData} so far.
+ */
+ public List<LogRecordData> getLogRecords() {
+ return new ArrayList<>(logRecordExporter.getFinishedLogRecordItems());
+ }
+
+ /**
+ * Clears the collected exported {@link SpanData}. Consider making your test smaller instead of manually clearing
+ * state using this method.
+ */
+ public void clearSpans() {
+ spanExporter.reset();
+ }
+
+ /**
+ * Clears all registered metric instruments, such that {@link #getMetrics()} is empty.
+ */
+ public void clearMetrics() {
+ SdkMeterProviderUtil.resetForTest(openTelemetry.getSdkMeterProvider());
+ }
+
+ /**
+ * Clears the collected exported {@link LogRecordData}. Consider making your test smaller instead of manually
+ * clearing state using this method.
+ */
+ public void clearLogRecords() {
+ logRecordExporter.reset();
+ }
+
+ @Override
+ public void beforeEach(ExtensionContext context) {
+ GlobalOpenTelemetry.resetForTest();
+ GlobalOpenTelemetry.set(openTelemetry);
+ OpenTelemetryAppender.install(openTelemetry);
+ }
+
+ @Override
+ public void afterEach(ExtensionContext context) {
+ GlobalOpenTelemetry.resetForTest();
+ openTelemetry.close();
+ }
+
+ static class LoggingSpanProcessor implements SpanProcessor {
+ private static final Logger LOG = LoggerFactory.getLogger(LoggingSpanProcessor.class);
+ private static final Marker OTEL_MARKER = MarkerFactory.getMarker("OTEL");
+
+ @Override
+ public void onStart(Context context, ReadWriteSpan readWriteSpan) {
+ LOG.debug(OTEL_MARKER, "Span started: name - '{}', kind - '{}', id - '{}-{}", readWriteSpan.getName(),
+ readWriteSpan.getKind(),
+ readWriteSpan.getSpanContext().getTraceId(), readWriteSpan.getSpanContext().getSpanId());
+ }
+
+ @Override
+ public boolean isStartRequired() {
+ return true;
+ }
+
+ @Override
+ public void onEnd(ReadableSpan readableSpan) {
+ LOG.debug(OTEL_MARKER, "Span ended: name - '{}', kind - '{}', id - '{}-{}", readableSpan.getName(),
+ readableSpan.getKind(),
+ readableSpan.getSpanContext().getTraceId(), readableSpan.getSpanContext().getSpanId());
+ }
+
+ @Override
+ public boolean isEndRequired() {
+ return true;
+ }
+ }
+}
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CamelOpenTelemetryTestSupport.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CamelOpenTelemetryTestSupport.java
index 572f67c8f0f..26977d6d8f8 100644
--- a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CamelOpenTelemetryTestSupport.java
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CamelOpenTelemetryTestSupport.java
@@ -22,31 +22,34 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import io.opentelemetry.api.common.AttributeKey;
+import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.context.Context;
-import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter;
-import io.opentelemetry.sdk.trace.ReadWriteSpan;
-import io.opentelemetry.sdk.trace.ReadableSpan;
-import io.opentelemetry.sdk.trace.SdkTracerProvider;
-import io.opentelemetry.sdk.trace.SpanProcessor;
+import io.opentelemetry.sdk.logs.data.LogRecordData;
import io.opentelemetry.sdk.trace.data.SpanData;
-import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
import org.apache.camel.spi.InterceptStrategy;
import org.apache.camel.test.junit5.CamelTestSupport;
import org.awaitility.Awaitility;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Tags;
+import org.junit.jupiter.api.extension.RegisterExtension;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
+@Tags({ @Tag("not-parallel") })
class CamelOpenTelemetryTestSupport extends CamelTestSupport {
static final AttributeKey<String> CAMEL_URI_KEY = AttributeKey.stringKey("camel-uri");
static final AttributeKey<String> COMPONENT_KEY = AttributeKey.stringKey("component");
@@ -57,11 +60,12 @@ class CamelOpenTelemetryTestSupport extends CamelTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(CamelOpenTelemetryTestSupport.class);
- InMemorySpanExporter inMemorySpanExporter = InMemorySpanExporter.create();
+ @RegisterExtension
+ public final CamelOpenTelemetryExtension otelExtension = CamelOpenTelemetryExtension.create();
+
SpanTestData[] expected;
Tracer tracer;
- OpenTelemetryTracer ottracer;
- SdkTracerProvider tracerFactory;
+ OpenTelemetryTracer otTracer;
CamelOpenTelemetryTestSupport(SpanTestData[] expected) {
this.expected = expected;
@@ -73,18 +77,20 @@ class CamelOpenTelemetryTestSupport extends CamelTestSupport {
}
protected void initTracer(CamelContext context) {
- ottracer = new OpenTelemetryTracer();
-
- tracerFactory = SdkTracerProvider.builder()
- .addSpanProcessor(new LoggingSpanProcessor())
- .addSpanProcessor(SimpleSpanProcessor.create(inMemorySpanExporter)).build();
-
- tracer = tracerFactory.get("tracerTest");
- ottracer.setTracer(tracer);
- ottracer.setExcludePatterns(getExcludePatterns());
- ottracer.addDecorator(new TestSEDASpanDecorator());
- ottracer.setTracingStrategy(getTracingStrategy().apply(ottracer));
- ottracer.init(context);
+ otTracer = new OpenTelemetryTracer();
+ CamelContextAware.trySetCamelContext(otTracer, context);
+
+ tracer = otelExtension.getOpenTelemetry().getTracer("tracerTest");
+ otTracer.setTracer(tracer);
+ otTracer.setExcludePatterns(getExcludePatterns());
+ otTracer.addDecorator(new TestSEDASpanDecorator());
+ if (isTraceProcessor()) {
+ otTracer.setTraceProcessors(true);
+ otTracer.initTracer();
+ } else {
+ otTracer.setTracingStrategy(getTracingStrategy().apply(otTracer));
+ }
+ otTracer.init(context);
}
@Override
@@ -94,12 +100,16 @@ class CamelOpenTelemetryTestSupport extends CamelTestSupport {
return context;
}
+ protected boolean isTraceProcessor() {
+ return false;
+ }
+
protected String getExcludePatterns() {
return null;
}
- protected OpenTelemetryTracer getOttracer() {
- return ottracer;
+ protected OpenTelemetryTracer getOtTracer() {
+ return otTracer;
}
protected void verify() {
@@ -111,15 +121,27 @@ class CamelOpenTelemetryTestSupport extends CamelTestSupport {
}
protected List<SpanData> verify(SpanTestData[] expected, boolean async) {
- List<SpanData> spans = inMemorySpanExporter.getFinishedSpanItems();
+ List<SpanData> spans = otelExtension.getSpans();
+ SpanTreePrinter.printSpanTree(spans);
spans.forEach(mockSpan -> {
LOG.info("Span: {}", mockSpan);
- LOG.info("Component: {}", mockSpan.getAttributes().get(COMPONENT_KEY));
- LOG.info("Tags: {}", mockSpan.getAttributes());
- LOG.info("Logs: ");
-
+ LOG.info("\tComponent: {}", mockSpan.getAttributes().get(COMPONENT_KEY));
+ LOG.info("\tTags: {}", mockSpan.getAttributes());
});
+
+ List<LogRecordData> logRecords = otelExtension.getLogRecords();
+ if (!logRecords.isEmpty()) {
+ LOG.info("Log records:");
+ logRecords.forEach(logRecord -> {
+ SpanContext spanContext = logRecord.getSpanContext();
+ LOG.info("\tLog: [{},{}] {}", spanContext.getTraceId(), spanContext.getSpanId(), logRecord);
+ });
+ }
+
assertEquals(expected.length, spans.size(), "Incorrect number of spans");
+ int numberOfLogs = spans.size() * 2;
+ assertEquals(numberOfLogs, logRecords.size(), "Incorrect number of log records");
+
verifySameTrace();
if (async) {
@@ -140,7 +162,7 @@ class CamelOpenTelemetryTestSupport extends CamelTestSupport {
return spans.stream().filter(s -> {
boolean matched = s.getName().equals(testdata.getOperation());
if (s.getAttributes().get(CAMEL_URI_KEY) != null) {
- matched = matched && s.getAttributes().get(CAMEL_URI_KEY).equals(testdata.getUri());
+ matched = matched && Objects.equals(s.getAttributes().get(CAMEL_URI_KEY), testdata.getUri());
}
matched = matched && s.getKind().equals(testdata.getKind());
return matched;
@@ -158,13 +180,13 @@ class CamelOpenTelemetryTestSupport extends CamelTestSupport {
.atMost(5, TimeUnit.SECONDS)
.pollInterval(10, TimeUnit.MILLISECONDS)
.pollDelay(0, TimeUnit.MILLISECONDS)
- .until(() -> inMemorySpanExporter.getFinishedSpanItems().size() >= (numOfTraces * numSpansPerTrace));
+ .until(() -> otelExtension.getSpans().size() >= (numOfTraces * numSpansPerTrace));
- List<SpanData> finishedSpans = inMemorySpanExporter.getFinishedSpanItems();
+ List<SpanData> finishedSpans = otelExtension.getSpans();
// Sort spans into separate traces
- for (int i = 0; i < finishedSpans.size(); i++) {
- List<SpanData> spans = traces.computeIfAbsent(finishedSpans.get(i).getTraceId(), k -> new ArrayList<>());
- spans.add(finishedSpans.get(i));
+ for (SpanData finishedSpan : finishedSpans) {
+ List<SpanData> spans = traces.computeIfAbsent(finishedSpan.getTraceId(), k -> new ArrayList<>());
+ spans.add(finishedSpan);
}
LOG.info("Found traces: {}", traces);
@@ -178,19 +200,19 @@ class CamelOpenTelemetryTestSupport extends CamelTestSupport {
protected void verifySpan(int index, SpanTestData[] testdata, List<SpanData> spans) {
SpanData span = spans.get(index);
SpanTestData td = testdata[index];
-
- String component = span.getAttributes().get(COMPONENT_KEY);
+ Attributes attributes = span.getAttributes();
+ String component = attributes.get(COMPONENT_KEY);
assertNotNull(component);
- String scheme = span.getAttributes().get(CAMEL_SCHEME_KEY);
+ String scheme = attributes.get(CAMEL_SCHEME_KEY);
if (td.getUri() != null) {
assertEquals(URI.create(td.getUri()).getScheme(), scheme);
}
if ("camel-seda".equals(component)) {
- assertNotNull(span.getAttributes().get(PRE_KEY));
- assertNotNull(span.getAttributes().get(POST_KEY));
+ assertNotNull(attributes.get(PRE_KEY));
+ assertNotNull(attributes.get(POST_KEY));
}
assertEquals(td.getOperation(), span.getName(), td.getLabel());
@@ -209,43 +231,16 @@ class CamelOpenTelemetryTestSupport extends CamelTestSupport {
}
if (!td.getTags().isEmpty()) {
for (Map.Entry<String, String> entry : td.getTags().entrySet()) {
- assertEquals(entry.getValue(), span.getAttributes().get(AttributeKey.stringKey(entry.getKey())));
+ assertEquals(entry.getValue(), attributes.get(AttributeKey.stringKey(entry.getKey())));
}
}
-
}
protected void verifySameTrace() {
- assertEquals(1, inMemorySpanExporter.getFinishedSpanItems().stream().map(s -> s.getTraceId()).distinct().count());
+ assertEquals(1, otelExtension.getSpans().stream().map(SpanData::getTraceId).distinct().count());
}
protected Function<OpenTelemetryTracer, InterceptStrategy> getTracingStrategy() {
- return ottracer -> new NoopTracingStrategy();
- }
-
- static class LoggingSpanProcessor implements SpanProcessor {
- private static final Logger LOG = LoggerFactory.getLogger(LoggingSpanProcessor.class);
-
- @Override
- public void onStart(Context context, ReadWriteSpan readWriteSpan) {
- LOG.debug("Span started: name - '{}', kind - '{}', id - '{}-{}", readWriteSpan.getName(), readWriteSpan.getKind(),
- readWriteSpan.getSpanContext().getTraceId(), readWriteSpan.getSpanContext().getSpanId());
- }
-
- @Override
- public boolean isStartRequired() {
- return true;
- }
-
- @Override
- public void onEnd(ReadableSpan readableSpan) {
- LOG.debug("Span ended: name - '{}', kind - '{}', id - '{}-{}", readableSpan.getName(), readableSpan.getKind(),
- readableSpan.getSpanContext().getTraceId(), readableSpan.getSpanContext().getSpanId());
- }
-
- @Override
- public boolean isEndRequired() {
- return true;
- }
+ return openTelemetryTracer -> new NoopTracingStrategy();
}
}
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/OpenTelemetryPropagateContextTest.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/OpenTelemetryPropagateContextTest.java
index 557117d9d04..d4b215475b9 100644
--- a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/OpenTelemetryPropagateContextTest.java
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/OpenTelemetryPropagateContextTest.java
@@ -26,9 +26,6 @@ import io.opentelemetry.api.trace.SpanBuilder;
import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
-import io.opentelemetry.sdk.trace.SdkTracerProvider;
-import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
-import org.apache.camel.CamelContext;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.NotifyBuilder;
import org.apache.camel.builder.RouteBuilder;
@@ -57,35 +54,23 @@ public class OpenTelemetryPropagateContextTest extends CamelOpenTelemetryTestSup
super(testdata);
}
- @Override
- protected void initTracer(CamelContext context) {
- ottracer = new OpenTelemetryTracer();
-
- tracerFactory = SdkTracerProvider.builder()
- .addSpanProcessor(new LoggingSpanProcessor())
- .addSpanProcessor(SimpleSpanProcessor.create(inMemorySpanExporter)).build();
-
- tracer = tracerFactory.get("tracerTest");
- ottracer.setTracer(tracer);
- ottracer.setExcludePatterns(getExcludePatterns());
- ottracer.addDecorator(new TestSEDASpanDecorator());
- ottracer.setTraceProcessors(true);
- ottracer.initTracer();
- ottracer.init(context);
- }
-
@BeforeAll
public static void createFile() throws IOException {
Files.createFile(tempDirectory.resolve("file.txt"));
}
@Test
- void testTracingOfProcessors() throws IOException, InterruptedException {
+ void testTracingOfProcessors() {
NotifyBuilder notify = new NotifyBuilder(context).whenDone(1).create();
assertTrue(notify.matches(30, TimeUnit.SECONDS));
verify(true);
}
+ @Override
+ protected boolean isTraceProcessor() {
+ return true;
+ }
+
@Override
protected String getExcludePatterns() {
return "longRunningProcess";
@@ -120,7 +105,7 @@ public class OpenTelemetryPropagateContextTest extends CamelOpenTelemetryTestSup
// The Context should be propagated
Assertions.assertNotSame(Context.root(), Context.current(), "OpenTelemetry was not propagated !");
// build and start a custom Span similar to what @WithSpan would do
- SpanBuilder builder = getOttracer().getTracer().spanBuilder("WithSpan.secondMethod");
+ SpanBuilder builder = getOtTracer().getTracer().spanBuilder("WithSpan.secondMethod");
Span span = builder.setParent(Context.current())
.setAttribute(COMPONENT_KEY, "custom")
.startSpan();
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/OpenTelemetryTracingStrategyPropagateContextTest.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/OpenTelemetryTracingStrategyPropagateContextTest.java
index bcf27705ab4..46999ca3d32 100644
--- a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/OpenTelemetryTracingStrategyPropagateContextTest.java
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/OpenTelemetryTracingStrategyPropagateContextTest.java
@@ -44,7 +44,7 @@ public class OpenTelemetryTracingStrategyPropagateContextTest extends CamelOpenT
@TempDir
private static Path tempDirectory;
- private final static SpanTestData[] testdata = {
+ private static final SpanTestData[] testdata = {
new SpanTestData().setLabel("camel-process").setOperation("delayed")
.setParentId(2),
new SpanTestData().setLabel("camel-process").setOperation("WithSpan.secondMethod")
@@ -62,7 +62,7 @@ public class OpenTelemetryTracingStrategyPropagateContextTest extends CamelOpenT
}
@Test
- void testTracingOfProcessors() throws IOException, InterruptedException {
+ void testTracingOfProcessors() {
NotifyBuilder notify = new NotifyBuilder(context).whenDone(1).create();
assertTrue(notify.matches(30, TimeUnit.SECONDS));
verify(true);
@@ -102,7 +102,7 @@ public class OpenTelemetryTracingStrategyPropagateContextTest extends CamelOpenT
// The Context should be propagated
Assertions.assertNotSame(Context.root(), Context.current(), "OpenTelemetry was not propagated !");
// build and start a custom Span similar to what @WithSpan would do
- SpanBuilder builder = getOttracer().getTracer().spanBuilder("WithSpan.secondMethod");
+ SpanBuilder builder = getOtTracer().getTracer().spanBuilder("WithSpan.secondMethod");
Span span = builder.setParent(Context.current())
.setAttribute(COMPONENT_KEY, "custom")
.startSpan();
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/OpenTelemetryTracingStrategyTest.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/OpenTelemetryTracingStrategyTest.java
index 4701e65eef8..aac8c4ab954 100644
--- a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/OpenTelemetryTracingStrategyTest.java
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/OpenTelemetryTracingStrategyTest.java
@@ -28,7 +28,7 @@ import org.junit.jupiter.api.Test;
class OpenTelemetryTracingStrategyTest extends CamelOpenTelemetryTestSupport {
- private static SpanTestData[] testdata = {
+ private static final SpanTestData[] testdata = {
new SpanTestData().setLabel("camel-process").setOperation("third-party-span")
.setParentId(1),
new SpanTestData().setLabel("camel-process").setOperation("third-party-processor")
@@ -76,7 +76,7 @@ class OpenTelemetryTracingStrategyTest extends CamelOpenTelemetryTestSupport {
}).id("direct-processor");
}
- private void callThirdPartyInstrumentation() throws InterruptedException {
+ private void callThirdPartyInstrumentation() {
Span span = getTracer().spanBuilder("third-party-span").startSpan();
try (Scope ignored = span.makeCurrent()) {
span.setAttribute(COMPONENT_KEY, "third-party-component");
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/SpanTestData.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/SpanTestData.java
index 3c5fccd500f..60870dbe406 100644
--- a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/SpanTestData.java
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/SpanTestData.java
@@ -31,10 +31,10 @@ public class SpanTestData {
private String operation;
private SpanKind kind = SpanKind.INTERNAL;
private int parentId = -1;
- private List<String> logMessages = new ArrayList<>();
- private Map<String, String> tags = new HashMap<>();
- private ArrayList<SpanTestData> childs = new ArrayList<>();
- private Map<String, String> baggage = new HashMap<>();
+ private final List<String> logMessages = new ArrayList<>();
+ private final Map<String, String> tags = new HashMap<>();
+ private final ArrayList<SpanTestData> children = new ArrayList<>();
+ private final Map<String, String> baggage = new HashMap<>();
public String getLabel() {
return label;
@@ -81,8 +81,8 @@ public class SpanTestData {
return this;
}
- public SpanTestData addLogMessage(String mesg) {
- logMessages.add(mesg);
+ public SpanTestData addLogMessage(String logMessage) {
+ logMessages.add(logMessage);
return this;
}
@@ -99,8 +99,8 @@ public class SpanTestData {
return tags;
}
- public SpanTestData setChilds(SpanTestData[] childs) {
- Collections.addAll(this.childs, childs);
+ public SpanTestData setChildren(SpanTestData[] children) {
+ Collections.addAll(this.children, children);
return this;
}
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/SpanTreePrinter.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/SpanTreePrinter.java
new file mode 100644
index 00000000000..5fba7864b98
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/SpanTreePrinter.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.opentelemetry;
+
+import java.time.Duration;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import io.opentelemetry.api.common.AttributeKey;
+import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.trace.SpanContext;
+import io.opentelemetry.api.trace.SpanId;
+import io.opentelemetry.sdk.trace.data.SpanData;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+final class SpanTreePrinter {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(SpanTreePrinter.class);
+ private static final AttributeKey<String> CAMEL_URI_ATTRIBUTE = AttributeKey.stringKey("camel.uri");
+
+ private SpanTreePrinter() {
+ }
+
+ // Method to print the spans in a tree view
+ public static void printSpanTree(List<SpanData> spans) {
+ if (!LOGGER.isInfoEnabled()) {
+ return;
+ }
+
+ // Map to hold child spans against their parent span id
+ Map<String, List<SpanData>> spanMap = new LinkedHashMap<>();
+ SpanData rootSpan = null;
+
+ // Populate the spanMap with the spans
+ for (SpanData span : spans) {
+ SpanContext context = span.getParentSpanContext();
+ String parentSpanId = context.getSpanId();
+
+ if (parentSpanId.isEmpty() || parentSpanId.equals(SpanId.getInvalid())) {
+ rootSpan = span; // Identify the root span (no parent span or invalid parent)
+ } else {
+ spanMap.computeIfAbsent(parentSpanId, k -> new ArrayList<>()).add(span);
+ }
+ }
+
+ // Print the tree starting from the root span
+ if (rootSpan != null) {
+ LOGGER.info("Span tree:");
+ printSpan(rootSpan, spanMap, "", true);
+ } else {
+ LOGGER.warn("No root span found!");
+ }
+ }
+
+ // Recursive method to print each span and its children
+ private static void printSpan(SpanData span, Map<String, List<SpanData>> spanMap, String indent, boolean last) {
+ SpanContext context = span.getSpanContext();
+ Attributes attributes = span.getAttributes();
+ String routeDescription = " span: %s (%s) - %s (%s) %s".formatted(
+ context.getSpanId(),
+ span.getKind(),
+ span.getName(),
+ attributes.get(CAMEL_URI_ATTRIBUTE),
+ humanReadableFormat(Duration.ofNanos(span.getEndEpochNanos() - span.getStartEpochNanos())));
+
+ LOGGER.info("{}{}{}", indent, last ? "└─ " : "├─ ", routeDescription);
+
+ List<SpanData> children = spanMap.get(context.getSpanId());
+ if (children != null) {
+ for (int i = 0; i < children.size(); i++) {
+ printSpan(children.get(i), spanMap, indent + (last ? " " : "│ "), i == children.size() - 1);
+ }
+ }
+ }
+
+ private static String humanReadableFormat(Duration duration) {
+ return duration.toString()
+ .substring(2)
+ .replaceAll("(\\d[HMS])(?!$)", "$1 ")
+ .toLowerCase();
+ }
+}
diff --git a/components/camel-opentelemetry/src/test/resources/log4j2.properties b/components/camel-opentelemetry/src/test/resources/log4j2.properties
index 08423f8d76e..23467a1e1f1 100644
--- a/components/camel-opentelemetry/src/test/resources/log4j2.properties
+++ b/components/camel-opentelemetry/src/test/resources/log4j2.properties
@@ -19,13 +19,24 @@ appender.file.name=file
appender.file.fileName=target/camel-opentelemetry-test.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
+
appender.out.type=Console
appender.out.name=out
appender.out.layout.type=PatternLayout
appender.out.layout.pattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
-logger.opentelemetry.name=org.apache.camel.opentelemetry
-logger.opentelemetry.level=INFO
-logger.tracing.name=org.apache.camel.tracing
-logger.tracing.level=INFO
-rootLogger.level=INFO
+
+appender.opentelemetry.type=OpenTelemetry
+appender.opentelemetry.name=opentelemetry
+appender.opentelemetry.filter.marker.type=MarkerFilter
+appender.opentelemetry.filter.marker.onMatch=ACCEPT
+appender.opentelemetry.filter.marker.onMismatch=DENY
+appender.opentelemetry.filter.marker.marker=OTEL
+appender.opentelemetry.layout.type=PatternLayout
+appender.opentelemetry.layout.pattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
+
+rootLogger.level=DEBUG
+rootLogger.appenderRefs=file,out,opentelemetry
rootLogger.appenderRef.file.ref=file
+rootLogger.appenderRef.out.ref=out
+rootLogger.appenderRef.out.level=INFO
+rootLogger.appenderRef.opentelemetry.ref=opentelemetry
diff --git a/components/camel-tracing/src/main/java/org/apache/camel/tracing/ActiveSpanManager.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/ActiveSpanManager.java
index c6f6b188cab..0969217289a 100644
--- a/components/camel-tracing/src/main/java/org/apache/camel/tracing/ActiveSpanManager.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/ActiveSpanManager.java
@@ -109,19 +109,20 @@ public final class ActiveSpanManager {
* Simple holder for the currently active span and an optional reference to the parent holder. This will be used to
* maintain a stack for spans, built up during the execution of a series of chained camel exchanges, and then
* unwound when the responses are processed.
- *
*/
public static class Holder {
private Holder parent;
private SpanAdapter span;
private AutoCloseable scope;
+ private boolean closed;
public Holder(Holder parent, SpanAdapter span) {
this.parent = parent;
this.span = span;
this.scope = span.makeCurrent();
+ this.closed = false;
if (LOG.isTraceEnabled()) {
- LOG.trace("Tracing: started scope={}", this.scope);
+ LOG.trace("Tracing: started scope: {}", this.scope);
}
}
@@ -133,14 +134,19 @@ public final class ActiveSpanManager {
return span;
}
+ public boolean isClosed() {
+ return closed;
+ }
+
private void closeScope() {
try {
if (LOG.isTraceEnabled()) {
- LOG.trace("Tracing: closing scope={}", this.scope);
+ LOG.trace("Tracing: closing scope: {}", this.scope);
}
scope.close();
+ this.closed = true;
} catch (Exception e) {
- LOG.debug("Failed to close span scope", e);
+ LOG.debug("Failed to close span scope. This exception is ignored.", e);
}
}
}
diff --git a/components/camel-tracing/src/main/java/org/apache/camel/tracing/InjectAdapter.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/InjectAdapter.java
index 72f27dad39e..c7f0069f029 100644
--- a/components/camel-tracing/src/main/java/org/apache/camel/tracing/InjectAdapter.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/InjectAdapter.java
@@ -17,5 +17,12 @@
package org.apache.camel.tracing;
public interface InjectAdapter {
+
+ /**
+ * Inject a tag into the current tracing span, for context propagation.
+ *
+ * @param key the tag key
+ * @param value the tag value
+ */
void put(String key, String value);
}
diff --git a/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanAdapter.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanAdapter.java
index 6767bbdfd7a..e3239ce9126 100644
--- a/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanAdapter.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanAdapter.java
@@ -19,15 +19,26 @@ package org.apache.camel.tracing;
import java.util.Map;
public interface SpanAdapter {
+
void setComponent(String component);
void setError(boolean error);
+ /**
+ * @deprecated use {@link #setTag(String, String)} instead.
+ */
@Deprecated
- void setTag(Tag key, String value);
+ default void setTag(Tag key, String value) {
+ setTag(key.getAttribute(), value);
+ }
+ /**
+ * @deprecated use {@link #setTag(String, Number)} instead.
+ */
@Deprecated
- void setTag(Tag key, Number value);
+ default void setTag(Tag key, Number value) {
+ setTag(key.getAttribute(), value);
+ }
void setTag(String key, String value);
@@ -35,14 +46,20 @@ public interface SpanAdapter {
void setTag(String key, Boolean value);
+ /**
+ * @deprecated use {@link #setLowCardinalityTag(String, String)} instead.
+ */
@Deprecated
default void setLowCardinalityTag(Tag key, String value) {
- setTag(key, value);
+ setLowCardinalityTag(key.getAttribute(), value);
}
+ /**
+ * @deprecated use {@link #setLowCardinalityTag(String, Number)} instead.
+ */
@Deprecated
default void setLowCardinalityTag(Tag key, Number value) {
- setTag(key, value);
+ setLowCardinalityTag(key.getAttribute(), value);
}
default void setLowCardinalityTag(String key, String value) {
diff --git a/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanDecorator.java
index 37314d17f5e..39cfe2bf045 100644
--- a/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanDecorator.java
@@ -76,7 +76,7 @@ public interface SpanDecorator {
String getOperationName(Exchange exchange, Endpoint endpoint);
/**
- * This method adds appropriate details (tags/logs) to the supplied span based on the pre processing of the
+ * This method adds appropriate details (tags/logs) to the supplied span based on the pre-processing of the
* exchange.
*
* @param span The span
@@ -86,7 +86,7 @@ public interface SpanDecorator {
void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint);
/**
- * This method adds appropriate details (tags/logs) to the supplied span based on the post processing of the
+ * This method adds appropriate details (tags/logs) to the supplied span based on the post-processing of the
* exchange.
*
* @param span The span
@@ -110,7 +110,7 @@ public interface SpanDecorator {
SpanKind getReceiverSpanKind();
/**
- * This method returns the map to be used for headers extraction when the component is receiving a communication.
+ * This method returns the map to be used for header extraction when the component is receiving a communication.
*
* @param map a map containing the objects
* @param encoding whether the headers are encoded
@@ -119,7 +119,7 @@ public interface SpanDecorator {
ExtractAdapter getExtractAdapter(Map<String, Object> map, boolean encoding);
/**
- * This method returns the map to be used for headers injection when the component is receiving a communication.
+ * This method returns the map to be used for header injection when the component is receiving a communication.
*
* @param map a map containing the objects
* @param encoding whether the headers are encoded
diff --git a/components/camel-tracing/src/main/java/org/apache/camel/tracing/Tag.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/Tag.java
index c8adf6f87d0..fe2d4922f5a 100644
--- a/components/camel-tracing/src/main/java/org/apache/camel/tracing/Tag.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/Tag.java
@@ -16,6 +16,11 @@
*/
package org.apache.camel.tracing;
+/**
+ * This enum represents the tags that can be used to decorate spans.
+ *
+ * @deprecated Use one of the constants available in {@link TagConstants} instead.
+ */
@Deprecated
public enum Tag {
COMPONENT(TagConstants.COMPONENT),
diff --git a/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelHeadersExtractAdapter.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelHeadersExtractAdapter.java
index aa824bdb030..2e9007b0279 100644
--- a/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelHeadersExtractAdapter.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelHeadersExtractAdapter.java
@@ -29,7 +29,7 @@ public final class CamelHeadersExtractAdapter implements ExtractAdapter {
public CamelHeadersExtractAdapter(final Map<String, Object> map) {
// Extract string valued map entries
map.entrySet().stream().filter(e -> e.getValue() instanceof String)
- .forEach(e -> this.map.put(e.getKey(), (String) e.getValue()));
+ .forEach(e -> this.map.put(e.getKey(), e.getValue()));
}
@Override
diff --git a/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersExtractAdapter.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersExtractAdapter.java
index a415cd44ba0..b80c5164c38 100644
--- a/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersExtractAdapter.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersExtractAdapter.java
@@ -33,10 +33,10 @@ public final class CamelMessagingHeadersExtractAdapter implements ExtractAdapter
// Extract string valued map entries
this.jmsEncoding = jmsEncoding;
map.entrySet().stream().filter(e -> e.getValue() instanceof String || e.getValue() instanceof byte[]).forEach(e -> {
- if (e.getValue() instanceof byte[]) {
- this.map.put(decodeDash(e.getKey()), new String((byte[]) e.getValue(), StandardCharsets.UTF_8));
+ if (e.getValue() instanceof byte[] bytes) {
+ this.map.put(decodeDash(e.getKey()), new String(bytes, StandardCharsets.UTF_8));
} else {
- this.map.put(decodeDash(e.getKey()), (String) e.getValue());
+ this.map.put(decodeDash(e.getKey()), e.getValue());
}
});
}
diff --git a/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersInjectAdapter.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersInjectAdapter.java
index e6f6add3930..37a9e603231 100644
--- a/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersInjectAdapter.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersInjectAdapter.java
@@ -24,8 +24,8 @@ public final class CamelMessagingHeadersInjectAdapter implements InjectAdapter {
// As per the JMS specs, header names must be valid Java identifier part
// characters.
- // This means that any header names that contain illegal characters (- for
- // example) should be handled correctly
+ // This means that any header names that contain illegal characters ("-", for
+ // example) should be handled correctly,
// Opentracing java-jms does it as follows.
static final String JMS_DASH = "_$dash$_";
@@ -47,7 +47,7 @@ public final class CamelMessagingHeadersInjectAdapter implements InjectAdapter {
}
/**
- * Encode all dashes because JMS specification doesn't allow them in property name
+ * Encode all dashes because JMS specification doesn't allow them in property names
*/
private String encodeDash(String key) {
if (key == null || key.isEmpty() || !jmsEncoding) {
diff --git a/components/camel-tracing/src/test/java/org/apache/camel/tracing/ActiveSpanManagerTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/ActiveSpanManagerTest.java
index b6669d4a3bb..b19798d812a 100644
--- a/components/camel-tracing/src/test/java/org/apache/camel/tracing/ActiveSpanManagerTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/ActiveSpanManagerTest.java
@@ -26,10 +26,10 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
-public class ActiveSpanManagerTest extends ExchangeTestSupport {
+class ActiveSpanManagerTest extends ExchangeTestSupport {
@Test
- public void testNoSpan() {
+ void testNoSpan() {
Exchange exchange = createExchange();
assertNull(ActiveSpanManager.getSpan(exchange));
@@ -38,7 +38,7 @@ public class ActiveSpanManagerTest extends ExchangeTestSupport {
}
@Test
- public void testCurrentSpan() {
+ void testCurrentSpan() {
Exchange exchange = createExchange();
MockSpanAdapter span = MockSpanAdapter.buildSpan("test");
ActiveSpanManager.activate(exchange, span);
@@ -51,7 +51,7 @@ public class ActiveSpanManagerTest extends ExchangeTestSupport {
}
@Test
- public void testSEndScope() {
+ void testSEndScope() {
Exchange exchange = createExchange();
MockSpanAdapter span = MockSpanAdapter.buildSpan("test");
ActiveSpanManager.activate(exchange, span);
@@ -65,7 +65,7 @@ public class ActiveSpanManagerTest extends ExchangeTestSupport {
}
@Test
- public void testCreateChild() {
+ void testCreateChild() {
Exchange exchange = createExchange();
SpanAdapter parent = MockSpanAdapter.buildSpan("parent");
ActiveSpanManager.activate(exchange, parent);
@@ -78,7 +78,7 @@ public class ActiveSpanManagerTest extends ExchangeTestSupport {
}
@Test
- public void testIsolatedConcurrentExchanges() {
+ void testIsolatedConcurrentExchanges() {
Exchange exchange = createExchange();
SpanAdapter parent = MockSpanAdapter.buildSpan("parent");
ActiveSpanManager.activate(exchange, parent);
@@ -104,13 +104,13 @@ public class ActiveSpanManagerTest extends ExchangeTestSupport {
}
@Test
- public void testMDCSupport() {
+ void testMDCSupport() {
Exchange exchange = createExchange();
exchange.getContext().setUseMDCLogging(true);
- SpanAdapter parent = MockSpanAdapter.buildSpan("parent");
- ((MockSpanAdapter) parent).setTraceId("0");
- ((MockSpanAdapter) parent).setSpanId("1");
+ MockSpanAdapter parent = MockSpanAdapter.buildSpan("parent");
+ parent.setTraceId("0");
+ parent.setSpanId("1");
// no MDC entries before
// 0 and 1 after activating parent
@@ -121,9 +121,9 @@ public class ActiveSpanManagerTest extends ExchangeTestSupport {
assertEquals("1", MDC.get(ActiveSpanManager.MDC_SPAN_ID));
// 1 and 2 after activating child1
- SpanAdapter child1 = MockSpanAdapter.buildSpan("child1");
- ((MockSpanAdapter) child1).setTraceId("1");
- ((MockSpanAdapter) child1).setSpanId("2");
+ MockSpanAdapter child1 = MockSpanAdapter.buildSpan("child1");
+ child1.setTraceId("1");
+ child1.setSpanId("2");
ActiveSpanManager.activate(exchange, child1);
assertEquals("1", MDC.get(ActiveSpanManager.MDC_TRACE_ID));
assertEquals("2", MDC.get(ActiveSpanManager.MDC_SPAN_ID));
diff --git a/components/camel-tracing/src/test/java/org/apache/camel/tracing/MockSpanAdapter.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/MockSpanAdapter.java
index df5019304de..383e7b91b47 100644
--- a/components/camel-tracing/src/test/java/org/apache/camel/tracing/MockSpanAdapter.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/MockSpanAdapter.java
@@ -23,8 +23,8 @@ import java.util.Map;
public class MockSpanAdapter implements SpanAdapter {
- private List<LogEntry> logEntries = new ArrayList<>();
- private Map<String, Object> tags = new HashMap<>();
+ private final List<LogEntry> logEntries = new ArrayList<>();
+ private final Map<String, Object> tags = new HashMap<>();
private String traceId;
private String spanId;
private boolean isCurrent;
@@ -43,28 +43,14 @@ public class MockSpanAdapter implements SpanAdapter {
@Override
public void setComponent(String component) {
- this.tags.put(Tag.COMPONENT.name(), component);
this.tags.put(TagConstants.COMPONENT, component);
}
@Override
public void setError(boolean error) {
- this.tags.put(Tag.ERROR.name(), error);
this.tags.put(TagConstants.ERROR, error);
}
- @Override
- public void setTag(Tag key, String value) {
- this.tags.put(key.name(), value);
- this.tags.put(key.getAttribute(), value);
- }
-
- @Override
- public void setTag(Tag key, Number value) {
- this.tags.put(key.name(), value);
- this.tags.put(key.getAttribute(), value);
- }
-
@Override
public void setTag(String key, String value) {
this.tags.put(key, value);
diff --git a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractHttpSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractHttpSpanDecoratorTest.java
index 3da98531b9b..fc04663312f 100644
--- a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractHttpSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractHttpSpanDecoratorTest.java
@@ -21,7 +21,6 @@ import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.tracing.MockSpanAdapter;
import org.apache.camel.tracing.SpanDecorator;
-import org.apache.camel.tracing.Tag;
import org.apache.camel.tracing.TagConstants;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -160,9 +159,7 @@ public class AbstractHttpSpanDecoratorTest {
decorator.pre(span, exchange, endpoint);
- assertEquals(TEST_URI, span.tags().get(Tag.HTTP_URL.name()));
assertEquals(TEST_URI, span.tags().get(TagConstants.HTTP_URL));
- assertTrue(span.tags().containsKey(Tag.HTTP_METHOD.name()));
assertTrue(span.tags().containsKey(TagConstants.HTTP_METHOD));
}
@@ -289,7 +286,6 @@ public class AbstractHttpSpanDecoratorTest {
decorator.post(span, exchange, null);
- assertEquals(200, span.tags().get(Tag.HTTP_STATUS.name()));
assertEquals(200, span.tags().get(TagConstants.HTTP_STATUS));
}
diff --git a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractMessagingSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractMessagingSpanDecoratorTest.java
index 54c1f401e4f..b5a3a9374ed 100644
--- a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractMessagingSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractMessagingSpanDecoratorTest.java
@@ -20,7 +20,6 @@ import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.tracing.MockSpanAdapter;
import org.apache.camel.tracing.SpanDecorator;
-import org.apache.camel.tracing.Tag;
import org.apache.camel.tracing.TagConstants;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -72,7 +71,6 @@ public class AbstractMessagingSpanDecoratorTest {
decorator.pre(span, null, endpoint);
- assertEquals("MyQueue", span.tags().get(Tag.MESSAGE_BUS_DESTINATION.name()));
assertEquals("MyQueue", span.tags().get(TagConstants.MESSAGE_BUS_DESTINATION));
}
@@ -105,7 +103,6 @@ public class AbstractMessagingSpanDecoratorTest {
decorator.pre(span, exchange, endpoint);
- assertEquals(messageId, span.tags().get(AbstractMessagingSpanDecorator.MESSAGE_BUS_ID));
assertEquals(messageId, span.tags().get(TagConstants.MESSAGE_ID));
}
diff --git a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractSpanDecoratorTest.java
index 7b25e4eff16..d017a210cb6 100644
--- a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractSpanDecoratorTest.java
@@ -20,7 +20,6 @@ import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.tracing.MockSpanAdapter;
import org.apache.camel.tracing.SpanDecorator;
-import org.apache.camel.tracing.Tag;
import org.apache.camel.tracing.TagConstants;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -59,6 +58,7 @@ public class AbstractSpanDecoratorTest {
Endpoint endpoint = Mockito.mock(Endpoint.class);
Mockito.when(endpoint.getEndpointUri()).thenReturn(TEST_URI);
+ Mockito.when(endpoint.toString()).thenReturn(TEST_URI);
SpanDecorator decorator = new AbstractSpanDecorator() {
@Override
@@ -76,7 +76,6 @@ public class AbstractSpanDecoratorTest {
decorator.pre(span, null, endpoint);
- assertEquals("camel-test", span.tags().get(Tag.COMPONENT.name()));
assertEquals("camel-test", span.tags().get(TagConstants.COMPONENT));
assertEquals("test", span.tags().get(TagConstants.URL_SCHEME));
assertEquals("uri", span.tags().get(TagConstants.URL_PATH));
@@ -108,7 +107,6 @@ public class AbstractSpanDecoratorTest {
decorator.post(span, exchange, null);
- assertEquals(true, span.tags().get(Tag.ERROR.name()));
assertEquals(true, span.tags().get(TagConstants.ERROR));
assertEquals(1, span.logEntries().size());
assertEquals("error", span.logEntries().get(0).fields().get("event"));
diff --git a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/CqlSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/CqlSpanDecoratorTest.java
index a8513853be8..0dcf9ad3c83 100644
--- a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/CqlSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/CqlSpanDecoratorTest.java
@@ -21,7 +21,6 @@ import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.tracing.MockSpanAdapter;
import org.apache.camel.tracing.SpanDecorator;
-import org.apache.camel.tracing.Tag;
import org.apache.camel.tracing.TagConstants;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -50,11 +49,8 @@ public class CqlSpanDecoratorTest {
decorator.pre(span, exchange, endpoint);
- assertEquals(CqlSpanDecorator.CASSANDRA_DB_TYPE, span.tags().get(Tag.DB_TYPE.name()));
assertEquals(CqlSpanDecorator.CASSANDRA_DB_TYPE, span.tags().get(TagConstants.DB_SYSTEM));
- assertEquals(cql, span.tags().get(Tag.DB_STATEMENT.name()));
assertEquals(cql, span.tags().get(TagConstants.DB_STATEMENT));
- assertEquals(keyspace, span.tags().get(Tag.DB_INSTANCE.name()));
assertEquals(keyspace, span.tags().get(TagConstants.DB_NAME));
}
@@ -76,9 +72,9 @@ public class CqlSpanDecoratorTest {
decorator.pre(span, exchange, endpoint);
- assertEquals(CqlSpanDecorator.CASSANDRA_DB_TYPE, span.tags().get(Tag.DB_TYPE.name()));
- assertEquals(cql, span.tags().get(Tag.DB_STATEMENT.name()));
- assertNull(span.tags().get(Tag.DB_INSTANCE.name()));
+ assertEquals(CqlSpanDecorator.CASSANDRA_DB_TYPE, span.tags().get(TagConstants.DB_SYSTEM));
+ assertEquals(cql, span.tags().get(TagConstants.DB_STATEMENT));
+ assertNull(span.tags().get(TagConstants.DB_NAME));
}
}
diff --git a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/ElasticsearchSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/ElasticsearchSpanDecoratorTest.java
index f1ff120d43f..3cc75c91d87 100644
--- a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/ElasticsearchSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/ElasticsearchSpanDecoratorTest.java
@@ -21,7 +21,6 @@ import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.tracing.MockSpanAdapter;
import org.apache.camel.tracing.SpanDecorator;
-import org.apache.camel.tracing.Tag;
import org.apache.camel.tracing.TagConstants;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -62,9 +61,7 @@ public class ElasticsearchSpanDecoratorTest {
decorator.pre(span, exchange, endpoint);
- assertEquals(ElasticsearchSpanDecorator.ELASTICSEARCH_DB_TYPE, span.tags().get(Tag.DB_TYPE.name()));
assertEquals(ElasticsearchSpanDecorator.ELASTICSEARCH_DB_TYPE, span.tags().get(TagConstants.DB_SYSTEM));
- assertEquals(indexName, span.tags().get(Tag.DB_INSTANCE.name()));
assertEquals(indexName, span.tags().get(TagConstants.DB_NAME));
assertEquals(cluster, span.tags().get(ElasticsearchSpanDecorator.ELASTICSEARCH_CLUSTER_TAG));
assertEquals(cluster, span.tags().get(TagConstants.SERVER_ADDRESS));
diff --git a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/JdbcSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/JdbcSpanDecoratorTest.java
index 0d5e7d0f15a..ac24d49ac98 100644
--- a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/JdbcSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/JdbcSpanDecoratorTest.java
@@ -21,7 +21,6 @@ import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.tracing.MockSpanAdapter;
import org.apache.camel.tracing.SpanDecorator;
-import org.apache.camel.tracing.Tag;
import org.apache.camel.tracing.TagConstants;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -48,9 +47,7 @@ public class JdbcSpanDecoratorTest {
decorator.pre(span, exchange, endpoint);
- assertEquals("sql", span.tags().get(Tag.DB_TYPE.name()));
assertEquals("sql", span.tags().get(TagConstants.DB_SYSTEM));
- assertEquals(SQL_STATEMENT, span.tags().get(Tag.DB_STATEMENT.name()));
assertEquals(SQL_STATEMENT, span.tags().get(TagConstants.DB_STATEMENT));
}
diff --git a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/MongoDBSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/MongoDBSpanDecoratorTest.java
index d53f0013fe2..a6982d6e335 100644
--- a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/MongoDBSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/MongoDBSpanDecoratorTest.java
@@ -21,7 +21,6 @@ import java.util.Map;
import org.apache.camel.Endpoint;
import org.apache.camel.tracing.MockSpanAdapter;
import org.apache.camel.tracing.SpanDecorator;
-import org.apache.camel.tracing.Tag;
import org.apache.camel.tracing.TagConstants;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -65,11 +64,8 @@ public class MongoDBSpanDecoratorTest {
decorator.pre(span, null, endpoint);
- assertEquals("mongodb", span.tags().get(Tag.DB_TYPE.name()));
assertEquals("mongodb", span.tags().get(TagConstants.DB_SYSTEM));
- assertEquals("flights", span.tags().get(Tag.DB_INSTANCE.name()));
assertEquals("flights", span.tags().get(TagConstants.DB_NAME));
- assertTrue(span.tags().containsKey(Tag.DB_STATEMENT.name()));
assertTrue(span.tags().containsKey(TagConstants.DB_STATEMENT));
}
diff --git a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/SqlSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/SqlSpanDecoratorTest.java
index acbf0c98584..b9f0bf5252c 100644
--- a/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/SqlSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/SqlSpanDecoratorTest.java
@@ -21,7 +21,6 @@ import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.tracing.MockSpanAdapter;
import org.apache.camel.tracing.SpanDecorator;
-import org.apache.camel.tracing.Tag;
import org.apache.camel.tracing.TagConstants;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -48,9 +47,7 @@ public class SqlSpanDecoratorTest {
decorator.pre(span, exchange, endpoint);
- assertEquals("sql", span.tags().get(Tag.DB_TYPE.name()));
assertEquals("sql", span.tags().get(TagConstants.DB_SYSTEM));
- assertEquals(SQL_STATEMENT, span.tags().get(Tag.DB_STATEMENT.name()));
assertEquals(SQL_STATEMENT, span.tags().get(TagConstants.DB_STATEMENT));
}
diff --git a/parent/pom.xml b/parent/pom.xml
index eb94227919b..21ccc79622a 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -373,7 +373,9 @@
<opensearch-testcontainers-version>2.0.1</opensearch-testcontainers-version>
<openstack4j-version>3.11</openstack4j-version>
<opentelemetry-version>1.34.1</opentelemetry-version>
+ <opentelemetry-log4j2-version>2.7.0-alpha</opentelemetry-log4j2-version>
<opentelemetry-alpha-version>1.23.1-alpha</opentelemetry-alpha-version>
+ <opentelemetry-incubator-version>1.41.0-alpha</opentelemetry-incubator-version>
<optaplanner-version>9.44.0.Final</optaplanner-version>
<os-maven-plugin-version>1.7.1</os-maven-plugin-version>
<paho-version>1.2.5</paho-version>
(camel) 02/02: Reduce OTEL logging messages volume (#15262)
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.4.x
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 8fb98294a4d2c2f199ce86e43d8db88a206474a2
Author: Adriano Machado <60...@users.noreply.github.com>
AuthorDate: Wed Aug 21 14:07:38 2024 -0400
Reduce OTEL logging messages volume (#15262)
---
.../apache/camel/opentelemetry/CamelOpenTelemetryExtension.java | 4 ++--
.../camel-opentelemetry/src/test/resources/log4j2.properties | 7 +++++--
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CamelOpenTelemetryExtension.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CamelOpenTelemetryExtension.java
index f298d8d8a9b..dd7ec503c43 100644
--- a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CamelOpenTelemetryExtension.java
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CamelOpenTelemetryExtension.java
@@ -170,7 +170,7 @@ final class CamelOpenTelemetryExtension implements BeforeEachCallback, AfterEach
@Override
public void onStart(Context context, ReadWriteSpan readWriteSpan) {
- LOG.debug(OTEL_MARKER, "Span started: name - '{}', kind - '{}', id - '{}-{}", readWriteSpan.getName(),
+ LOG.info(OTEL_MARKER, "Span started: name - '{}', kind - '{}', id - '{}-{}", readWriteSpan.getName(),
readWriteSpan.getKind(),
readWriteSpan.getSpanContext().getTraceId(), readWriteSpan.getSpanContext().getSpanId());
}
@@ -182,7 +182,7 @@ final class CamelOpenTelemetryExtension implements BeforeEachCallback, AfterEach
@Override
public void onEnd(ReadableSpan readableSpan) {
- LOG.debug(OTEL_MARKER, "Span ended: name - '{}', kind - '{}', id - '{}-{}", readableSpan.getName(),
+ LOG.info(OTEL_MARKER, "Span ended: name - '{}', kind - '{}', id - '{}-{}", readableSpan.getName(),
readableSpan.getKind(),
readableSpan.getSpanContext().getTraceId(), readableSpan.getSpanContext().getSpanId());
}
diff --git a/components/camel-opentelemetry/src/test/resources/log4j2.properties b/components/camel-opentelemetry/src/test/resources/log4j2.properties
index 23467a1e1f1..22e48fdcb17 100644
--- a/components/camel-opentelemetry/src/test/resources/log4j2.properties
+++ b/components/camel-opentelemetry/src/test/resources/log4j2.properties
@@ -25,6 +25,10 @@ appender.out.name=out
appender.out.layout.type=PatternLayout
appender.out.layout.pattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
+# The CamelOpenTelemetryExtension relies on logs with the marker "OTEL" to identify which logs were actually sent
+# to trace.
+# If the rootLogger level is changed, the logging calls on `CamelOpenTelemetryExtension.LoggingSpanProcessor`
+# may need to be adjusted.
appender.opentelemetry.type=OpenTelemetry
appender.opentelemetry.name=opentelemetry
appender.opentelemetry.filter.marker.type=MarkerFilter
@@ -34,9 +38,8 @@ appender.opentelemetry.filter.marker.marker=OTEL
appender.opentelemetry.layout.type=PatternLayout
appender.opentelemetry.layout.pattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
-rootLogger.level=DEBUG
+rootLogger.level=INFO
rootLogger.appenderRefs=file,out,opentelemetry
rootLogger.appenderRef.file.ref=file
rootLogger.appenderRef.out.ref=out
-rootLogger.appenderRef.out.level=INFO
rootLogger.appenderRef.opentelemetry.ref=opentelemetry