diff --git a/apache-camel/src/main/descriptors/common-bin.xml b/apache-camel/src/main/descriptors/common-bin.xml
index c6efc3f6f4b82..3f907061cef04 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -284,6 +284,7 @@
org.apache.camel:camel-olingo4-apiorg.apache.camel:camel-openapi-javaorg.apache.camel:camel-openstack
+ org.apache.camel:camel-opentelemetryorg.apache.camel:camel-opentracingorg.apache.camel:camel-optaplannerorg.apache.camel:camel-paho
@@ -370,6 +371,7 @@
org.apache.camel:camel-thriftorg.apache.camel:camel-tikaorg.apache.camel:camel-timer
+ org.apache.camel:camel-tracingorg.apache.camel:camel-twilioorg.apache.camel:camel-twitterorg.apache.camel:camel-undertow
diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index 6df1f0559b298..a5c1517e6f5dc 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -1343,6 +1343,11 @@
camel-openstack${project.version}
+
+ org.apache.camel
+ camel-opentelemetry
+ ${project.version}
+ org.apache.camelcamel-opentracing
@@ -1813,6 +1818,11 @@
camel-tooling-util${project.version}
+
+ org.apache.camel
+ camel-tracing
+ ${project.version}
+ org.apache.camelcamel-twilio
diff --git a/camel-dependencies/pom.xml b/camel-dependencies/pom.xml
index bc6cb9c329530..7e62ff9615bdf 100644
--- a/camel-dependencies/pom.xml
+++ b/camel-dependencies/pom.xml
@@ -459,6 +459,7 @@
4.7.13.1.23.0.2
+ 0.6.00.1.80.33.01.7.3
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/opentelemetry.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/opentelemetry.json
new file mode 100644
index 0000000000000..05097fc25345b
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/opentelemetry.json
@@ -0,0 +1,15 @@
+{
+ "other": {
+ "kind": "other",
+ "name": "opentelemetry",
+ "title": "OpenTelemetry",
+ "description": "Distributed tracing using OpenTelemetry",
+ "deprecated": false,
+ "firstVersion": "3.5.0",
+ "label": "monitoring,microservice",
+ "supportLevel": "Preview",
+ "groupId": "org.apache.camel",
+ "artifactId": "camel-opentelemetry",
+ "version": "3.5.0-SNAPSHOT"
+ }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/tracing.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/tracing.json
new file mode 100644
index 0000000000000..6b36673be3b7a
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/tracing.json
@@ -0,0 +1,14 @@
+{
+ "other": {
+ "kind": "other",
+ "name": "tracing",
+ "title": "Tracing",
+ "description": "Distributed tracing common interfaces",
+ "deprecated": false,
+ "firstVersion": "3.5.0",
+ "supportLevel": "Preview",
+ "groupId": "org.apache.camel",
+ "artifactId": "camel-tracing",
+ "version": "3.5.0-SNAPSHOT"
+ }
+}
diff --git a/components/camel-opentelemetry/pom.xml b/components/camel-opentelemetry/pom.xml
new file mode 100644
index 0000000000000..0e9ee1e8e620e
--- /dev/null
+++ b/components/camel-opentelemetry/pom.xml
@@ -0,0 +1,89 @@
+
+
+
+ 4.0.0
+
+
+ org.apache.camel
+ components
+ 3.5.0-SNAPSHOT
+
+
+
+ camel-opentelemetry
+ jar
+ Camel :: OpenTelemetry
+ Distributed tracing using OpenTelemetry
+
+
+ 3.5.0
+
+ OpenTelemetry
+ ${project.build.directory}/lib
+
+
+
+
+ org.apache.camel
+ camel-support
+
+
+ org.apache.camel
+ camel-tracing
+
+
+ io.grpc
+ grpc-netty-shaded
+ ${grpc-version}
+
+
+ io.opentelemetry
+ opentelemetry-sdk
+ ${opentelemetry-version}
+
+
+ io.opentelemetry
+ opentelemetry-api
+ ${opentelemetry-version}
+
+
+ io.opentelemetry
+ opentelemetry-exporters-otlp
+ ${opentelemetry-version}
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+ test
+
+
+ org.apache.camel
+ camel-test-spring-junit5
+ test
+
+
+ io.opentelemetry
+ opentelemetry-exporters-inmemory
+ ${opentelemetry-version}
+
+
+
+
+
\ No newline at end of file
diff --git a/components/camel-opentelemetry/src/generated/resources/META-INF/services/org/apache/camel/other.properties b/components/camel-opentelemetry/src/generated/resources/META-INF/services/org/apache/camel/other.properties
new file mode 100644
index 0000000000000..05406cb22e93b
--- /dev/null
+++ b/components/camel-opentelemetry/src/generated/resources/META-INF/services/org/apache/camel/other.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+name=opentelemetry
+groupId=org.apache.camel
+artifactId=camel-opentelemetry
+version=3.5.0-SNAPSHOT
+projectName=Camel :: OpenTelemetry
+projectDescription=Distributed tracing using OpenTelemetry
diff --git a/components/camel-opentelemetry/src/generated/resources/opentelemetry.json b/components/camel-opentelemetry/src/generated/resources/opentelemetry.json
new file mode 100644
index 0000000000000..05097fc25345b
--- /dev/null
+++ b/components/camel-opentelemetry/src/generated/resources/opentelemetry.json
@@ -0,0 +1,15 @@
+{
+ "other": {
+ "kind": "other",
+ "name": "opentelemetry",
+ "title": "OpenTelemetry",
+ "description": "Distributed tracing using OpenTelemetry",
+ "deprecated": false,
+ "firstVersion": "3.5.0",
+ "label": "monitoring,microservice",
+ "supportLevel": "Preview",
+ "groupId": "org.apache.camel",
+ "artifactId": "camel-opentelemetry",
+ "version": "3.5.0-SNAPSHOT"
+ }
+}
diff --git a/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/OpenTelemetrySpanAdapter.java b/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/OpenTelemetrySpanAdapter.java
new file mode 100644
index 0000000000000..63228995f0766
--- /dev/null
+++ b/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/OpenTelemetrySpanAdapter.java
@@ -0,0 +1,120 @@
+/*
+ * 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.EnumMap;
+import java.util.Map;
+
+import io.opentelemetry.common.AttributeValue;
+import io.opentelemetry.common.Attributes;
+import io.opentelemetry.trace.attributes.SemanticAttributes;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.Tag;
+
+public class OpenTelemetrySpanAdapter implements SpanAdapter {
+ private static final String DEFAULT_EVENT_NAME = "log";
+
+ private static EnumMap tagMap = new EnumMap<>(Tag.class);
+
+ static {
+ tagMap.put(Tag.COMPONENT, "component");
+ tagMap.put(Tag.DB_TYPE, SemanticAttributes.DB_TYPE.key());
+ tagMap.put(Tag.DB_STATEMENT, SemanticAttributes.DB_STATEMENT.key());
+ tagMap.put(Tag.DB_INSTANCE, SemanticAttributes.DB_INSTANCE.key());
+ tagMap.put(Tag.HTTP_METHOD, SemanticAttributes.HTTP_METHOD.key());
+ tagMap.put(Tag.HTTP_STATUS, SemanticAttributes.HTTP_STATUS_CODE.key());
+ tagMap.put(Tag.HTTP_URL, SemanticAttributes.HTTP_URL.key());
+ tagMap.put(Tag.MESSAGE_BUS_DESTINATION, "message_bus.destination");
+ }
+
+
+ io.opentelemetry.trace.Span span;
+
+ OpenTelemetrySpanAdapter(io.opentelemetry.trace.Span span) {
+ this.span = span;
+ }
+
+ io.opentelemetry.trace.Span getOpenTelemetrySpan() {
+ return this.span;
+ }
+
+ @Override public void setComponent(String component) {
+ this.span.setAttribute("component", component);
+ }
+
+ @Override public void setError(boolean error) {
+ this.span.setAttribute("error", error);
+ }
+
+ @Override public void setTag(Tag key, String value) {
+ this.span.setAttribute(tagMap.get(key), value);
+ }
+
+ @Override public void setTag(Tag key, Number value) {
+ this.span.setAttribute(tagMap.get(key), value.intValue());
+ }
+
+ @Override public void setTag(String key, String value) {
+ this.span.setAttribute(key, value);
+ }
+
+ @Override public void setTag(String key, Number value) {
+ this.span.setAttribute(key, value.intValue());
+ }
+
+ @Override public void setTag(String key, Boolean value) {
+ this.span.setAttribute(key, value);
+ }
+
+ @Override public void log(Map fields) {
+ span.addEvent(getEventNameFromFields(fields), convertToAttributes(fields));
+ }
+
+ String getEventNameFromFields(Map fields) {
+ Object eventValue = fields == null ? null : fields.get("event");
+ if (eventValue != null) {
+ return eventValue.toString();
+ }
+
+ return DEFAULT_EVENT_NAME;
+ }
+
+ Attributes convertToAttributes(Map fields) {
+ Attributes.Builder attributesBuilder = Attributes.newBuilder();
+
+ for (Map.Entry entry : fields.entrySet()) {
+ String key = entry.getKey();
+ Object value = entry.getValue();
+ if (value == null) {
+ continue;
+ }
+ if (value instanceof Byte
+ || value instanceof Short
+ || value instanceof Integer
+ || value instanceof Long) {
+ attributesBuilder.setAttribute(key, AttributeValue.longAttributeValue(((Number) value).longValue()));
+ } else if (value instanceof Float || value instanceof Double) {
+ attributesBuilder.setAttribute(key, AttributeValue.doubleAttributeValue(((Number) value).doubleValue()));
+ } else if (value instanceof Boolean) {
+ attributesBuilder.setAttribute(key, AttributeValue.booleanAttributeValue((Boolean) value));
+ } else {
+ attributesBuilder.setAttribute(key, AttributeValue.stringAttributeValue(value.toString()));
+ }
+ }
+ return attributesBuilder.build();
+ }
+}
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
new file mode 100644
index 0000000000000..3decb8f403e4f
--- /dev/null
+++ b/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/OpenTelemetryTracer.java
@@ -0,0 +1,100 @@
+/*
+ * 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.Set;
+
+import io.grpc.Context;
+import io.opentelemetry.OpenTelemetry;
+import io.opentelemetry.trace.DefaultTracer;
+import io.opentelemetry.trace.Span;
+import io.opentelemetry.trace.Tracer;
+import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.opentelemetry.propagators.OpenTelemetrySetter;
+import org.apache.camel.tracing.InjectAdapter;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.SpanKind;
+
+@ManagedResource(description = "OpenTelemetryTracer")
+public class OpenTelemetryTracer extends org.apache.camel.tracing.Tracer {
+
+ private Tracer tracer;
+
+ public Tracer getTracer() {
+ return tracer;
+ }
+
+ public void setTracer(Tracer tracer) {
+ this.tracer = tracer;
+ }
+
+ private Span.Kind mapToSpanKind(SpanKind kind) {
+ if (kind == SpanKind.SPAN_KIND_CLIENT) {
+ return Span.Kind.CLIENT;
+ }
+ return Span.Kind.SERVER;
+ }
+
+ @Override
+ protected void initTracer() {
+ if (tracer == null) {
+ Set tracers = getCamelContext().getRegistry().findByType(Tracer.class);
+ if (tracers.size() == 1) {
+ tracer = tracers.iterator().next();
+ }
+ }
+
+ if (tracer == null) {
+ // No tracer is available, so setup NoopTracer
+ tracer = DefaultTracer.getInstance();
+ }
+ }
+
+ @Override
+ protected SpanAdapter startSendingEventSpan(String operationName, SpanKind kind, SpanAdapter parent) {
+ Span.Builder builder = tracer.spanBuilder(operationName).setSpanKind(mapToSpanKind(kind));
+ if (parent != null) {
+ OpenTelemetrySpanAdapter oTelSpanWrapper = (OpenTelemetrySpanAdapter) parent;
+ Span parentSpan = oTelSpanWrapper.getOpenTelemetrySpan();
+ builder = builder.setParent(parentSpan);
+ }
+ return new OpenTelemetrySpanAdapter(builder.startSpan());
+ }
+
+ @Override
+ protected SpanAdapter startExchangeBeginSpan(String operationName, SpanKind kind, SpanAdapter parent) {
+ Span.Builder builder = tracer.spanBuilder(operationName);
+ if (parent != null) {
+ OpenTelemetrySpanAdapter oTelSpanWrapper = (OpenTelemetrySpanAdapter) parent;
+ builder = builder.setParent(((OpenTelemetrySpanAdapter) parent).getOpenTelemetrySpan());
+ }
+
+ return new OpenTelemetrySpanAdapter(builder.startSpan());
+ }
+
+ @Override
+ protected void finishSpan(SpanAdapter span) {
+ OpenTelemetrySpanAdapter openTracingSpanWrapper = (OpenTelemetrySpanAdapter) span;
+ openTracingSpanWrapper.getOpenTelemetrySpan().end();
+ }
+
+ @Override
+ protected void inject(SpanAdapter span, InjectAdapter adapter) {
+ OpenTelemetry.getPropagators().getHttpTextFormat().inject(Context.current(), adapter, new OpenTelemetrySetter());
+ }
+
+}
diff --git a/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/propagators/OpenTelemetryGetter.java b/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/propagators/OpenTelemetryGetter.java
new file mode 100644
index 0000000000000..3cf8abe7203af
--- /dev/null
+++ b/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/propagators/OpenTelemetryGetter.java
@@ -0,0 +1,27 @@
+/*
+ * 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.propagators;
+
+import io.opentelemetry.context.propagation.HttpTextFormat;
+import org.apache.camel.tracing.ExtractAdapter;
+
+public class OpenTelemetryGetter implements HttpTextFormat.Getter {
+
+ @Override public String get(ExtractAdapter adapter, String key) {
+ return (String) adapter.get(key);
+ }
+}
diff --git a/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/propagators/OpenTelemetrySetter.java b/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/propagators/OpenTelemetrySetter.java
new file mode 100644
index 0000000000000..1ad5a5f981af8
--- /dev/null
+++ b/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/propagators/OpenTelemetrySetter.java
@@ -0,0 +1,28 @@
+/*
+ * 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.propagators;
+
+import javax.annotation.Nullable;
+
+import io.opentelemetry.context.propagation.HttpTextFormat;
+import org.apache.camel.tracing.InjectAdapter;
+
+public class OpenTelemetrySetter implements HttpTextFormat.Setter {
+ @Override public void set(@Nullable InjectAdapter adapter, String key, String value) {
+ adapter.put(key, value);
+ }
+}
diff --git a/components/camel-opentelemetry/src/main/resources/META-INF/services/org.apache.camel.tracing.SpanDecorator b/components/camel-opentelemetry/src/main/resources/META-INF/services/org.apache.camel.tracing.SpanDecorator
new file mode 100644
index 0000000000000..2d8ec83446e1e
--- /dev/null
+++ b/components/camel-opentelemetry/src/main/resources/META-INF/services/org.apache.camel.tracing.SpanDecorator
@@ -0,0 +1,55 @@
+#
+# 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.
+#
+
+org.apache.camel.tracing.decorators.AhcSpanDecorator
+org.apache.camel.tracing.decorators.AmqpSpanDecorator
+org.apache.camel.tracing.decorators.AwsSqsSpanDecorator
+org.apache.camel.tracing.decorators.AwsSnsSpanDecorator
+org.apache.camel.tracing.decorators.CometdSpanDecorator
+org.apache.camel.tracing.decorators.CometdsSpanDecorator
+org.apache.camel.tracing.decorators.CqlSpanDecorator
+org.apache.camel.tracing.decorators.DirectSpanDecorator
+org.apache.camel.tracing.decorators.DirectvmSpanDecorator
+org.apache.camel.tracing.decorators.DisruptorSpanDecorator
+org.apache.camel.tracing.decorators.DisruptorvmSpanDecorator
+org.apache.camel.tracing.decorators.ElasticsearchSpanDecorator
+org.apache.camel.tracing.decorators.HttpSpanDecorator
+org.apache.camel.tracing.decorators.HttpsSpanDecorator
+org.apache.camel.tracing.decorators.IronmqSpanDecorator
+org.apache.camel.tracing.decorators.JdbcSpanDecorator
+org.apache.camel.tracing.decorators.JettySpanDecorator
+org.apache.camel.tracing.decorators.JmsSpanDecorator
+org.apache.camel.tracing.decorators.KafkaSpanDecorator
+org.apache.camel.tracing.decorators.LogSpanDecorator
+org.apache.camel.tracing.decorators.MongoDBSpanDecorator
+org.apache.camel.tracing.decorators.NettyHttpSpanDecorator
+org.apache.camel.tracing.decorators.NatsSpanDecorator
+org.apache.camel.tracing.decorators.NsqSpanDecorator
+org.apache.camel.tracing.decorators.PahoSpanDecorator
+org.apache.camel.tracing.decorators.PlatformHttpSpanDecorator
+org.apache.camel.tracing.decorators.RabbitmqSpanDecorator
+org.apache.camel.tracing.decorators.RestSpanDecorator
+org.apache.camel.tracing.decorators.SedaSpanDecorator
+org.apache.camel.tracing.decorators.ServletSpanDecorator
+org.apache.camel.tracing.decorators.SjmsSpanDecorator
+org.apache.camel.tracing.decorators.Sjms2SpanDecorator
+org.apache.camel.tracing.decorators.SqlSpanDecorator
+org.apache.camel.tracing.decorators.StompSpanDecorator
+org.apache.camel.tracing.decorators.TimerSpanDecorator
+org.apache.camel.tracing.decorators.UndertowSpanDecorator
+org.apache.camel.tracing.decorators.VmSpanDecorator
+
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/ABCRouteTest.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/ABCRouteTest.java
new file mode 100644
index 0000000000000..7498323e21389
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/ABCRouteTest.java
@@ -0,0 +1,69 @@
+/*
+ * 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 io.opentelemetry.trace.SpanId;
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+public class ABCRouteTest extends CamelOpenTelemetryTestSupport {
+ private static SpanTestData[] testdata = {
+ new SpanTestData().setLabel("seda:b server").setUri("seda://b").setOperation("b")
+ .setParentId(2).addLogMessage("routing at b"),
+ new SpanTestData().setLabel("seda:c server").setUri("seda://c").setOperation("c")
+ .setParentId(2).addLogMessage("Exchange[ExchangePattern: InOut, BodyType: String, Body: Hello]"),
+ new SpanTestData().setLabel("seda:a server").setUri("seda://a").setOperation("a")
+ .setParentId(3).addLogMessage("routing at a").addLogMessage("End of routing"),
+ new SpanTestData().setLabel("direct:start server").setUri("direct://start").setOperation("start")
+ };
+
+ public ABCRouteTest() {
+ super(testdata);
+ }
+
+ @Test
+ public void testRoute() throws Exception {
+ template.requestBody("direct:start", "Hello");
+ verify();
+ }
+
+ @Override
+ protected RoutesBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start").to("seda:a").routeId("start");
+
+ from("seda:a").routeId("a")
+ .log("routing at ${routeId}")
+ .to("seda:b")
+ .delay(2000)
+ .to("seda:c")
+ .log("End of routing");
+
+ from("seda:b").routeId("b")
+ .log("routing at ${routeId}")
+ .delay(simple("${random(1000,2000)}"));
+
+ from("seda:c").routeId("c")
+ .to("log:test")
+ .delay(simple("${random(0,100)}"));
+ }
+ };
+ }
+}
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
new file mode 100644
index 0000000000000..44b987a85e639
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CamelOpenTelemetryTestSupport.java
@@ -0,0 +1,178 @@
+/*
+ * 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.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import io.opentelemetry.exporters.inmemory.InMemoryTracing;
+import io.opentelemetry.sdk.OpenTelemetrySdk;
+import io.opentelemetry.sdk.trace.TracerSdkProvider;
+import io.opentelemetry.sdk.trace.data.SpanData;
+import io.opentelemetry.trace.TraceId;
+import io.opentelemetry.trace.Tracer;
+import org.apache.camel.CamelContext;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.apache.camel.tracing.SpanDecorator;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+public class CamelOpenTelemetryTestSupport extends CamelTestSupport {
+
+ InMemoryTracing inMemorytracing;
+ private SpanTestData[] testdata;
+ private Tracer tracer;
+ private OpenTelemetryTracer ottracer;
+
+ public CamelOpenTelemetryTestSupport(SpanTestData[] testdata) {
+ this.testdata = testdata;
+ }
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext context = super.createCamelContext();
+ ottracer = new OpenTelemetryTracer();
+ TracerSdkProvider provider = OpenTelemetrySdk.getTracerProvider().builder().build();
+ inMemorytracing = InMemoryTracing.builder().setTracerProvider(provider).build();
+ tracer = provider.get("tracerTest");
+ ottracer.setTracer(tracer);
+ ottracer.setExcludePatterns(getExcludePatterns());
+ ottracer.addDecorator(new TestSEDASpanDecorator());
+ ottracer.init(context);
+ return context;
+ }
+
+ protected Set getExcludePatterns() {
+ return new HashSet<>();
+ }
+
+ protected void verify() {
+ verify(false);
+ }
+
+ protected void verify(boolean async) {
+ List spans = inMemorytracing.getSpanExporter().getFinishedSpanItems();
+ spans.forEach(mockSpan -> {
+ System.out.println("Span: " + mockSpan);
+ System.out.println("\tComponent: " + mockSpan.getAttributes().get("component"));
+ System.out.println("\tTags: " + mockSpan.getAttributes());
+ System.out.println("\tLogs: ");
+
+ });
+ assertEquals(testdata.length, spans.size(), "Incorrect number of spans");
+ verifySameTrace();
+
+ if (async) {
+ final List unsortedSpans = spans;
+ spans = Arrays.stream(testdata)
+ .map(td -> findSpan(td, unsortedSpans)).distinct().collect(Collectors.toList());
+ assertEquals(testdata.length, spans.size(), "Incorrect number of spans after sorting");
+ }
+
+ for (int i = 0; i < testdata.length; i++) {
+ verifySpan(i, testdata, spans);
+ }
+ }
+
+ protected SpanData findSpan(SpanTestData testdata, List spans) {
+ return spans.stream().filter(s -> {
+ boolean matched = s.getName().equals(testdata.getOperation());
+ if (s.getAttributes().get("camel-uri") != null) {
+ matched = matched && s.getAttributes().get("camel.uri").equals(testdata.getUri());
+ }
+ matched = matched && s.getKind().equals(testdata.getKind());
+ return matched;
+ }).findFirst().orElse(null);
+ }
+
+ protected Tracer getTracer() {
+ return tracer;
+ }
+
+ protected void verifyTraceSpanNumbers(int numOfTraces, int numSpansPerTrace) {
+ Map> traces = new HashMap<>();
+
+ List finishedSpans = inMemorytracing.getSpanExporter().getFinishedSpanItems();
+ // Sort spans into separate traces
+ for (int i = 0; i < finishedSpans.size(); i++) {
+ List spans = traces.get(finishedSpans.get(i).getTraceId());
+ if (spans == null) {
+ spans = new ArrayList<>();
+ traces.put(finishedSpans.get(i).getTraceId(), spans);
+ }
+ spans.add(finishedSpans.get(i));
+ }
+
+ assertEquals(numOfTraces, traces.size());
+
+ for (Map.Entry> spans : traces.entrySet()) {
+ assertEquals(numSpansPerTrace, spans.getValue().size());
+ }
+ }
+
+ protected void verifySpan(int index, SpanTestData[] testdata, List spans) {
+ SpanData span = spans.get(index);
+ SpanTestData td = testdata[index];
+
+ String component = span.getAttributes().get("component").getStringValue();
+ assertNotNull(component);
+
+ if (td.getUri() != null) {
+ assertEquals(SpanDecorator.CAMEL_COMPONENT + URI.create(td.getUri()).getScheme(), component, td.getLabel());
+ }
+
+ if ("camel-seda".equals(component)) {
+ assertNotNull(span.getAttributes().get("pre"));
+ assertNotNull(span.getAttributes().get("post"));
+ }
+
+ assertEquals(td.getOperation(), span.getName(), td.getLabel());
+
+ assertEquals(td.getKind(), span.getKind(), td.getLabel());
+
+ if (!td.getLogMessages().isEmpty()) {
+ assertEquals(td.getLogMessages().size(), span.getEvents().size(), td.getLabel());
+ for (int i = 0; i < td.getLogMessages().size(); i++) {
+ assertEquals(td.getLogMessages().get(i), span.getEvents().get(i).getAttributes().get("message").getStringValue());
+ }
+ }
+
+ if (td.getParentId() != -1) {
+ assertEquals(spans.get(td.getParentId()).getSpanId(), span.getParentSpanId(), td.getLabel());
+ }
+ if (!td.getTags().isEmpty()) {
+ for (Map.Entry entry : td.getTags().entrySet()) {
+ assertEquals(entry.getValue(), span.getAttributes().get(entry.getKey()));
+ }
+ }
+
+ }
+
+ protected void verifySameTrace() {
+ assertEquals(1, inMemorytracing.getSpanExporter().getFinishedSpanItems().stream().map(s -> s.getTraceId()).distinct().count());
+ }
+
+
+}
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/ClientRecipientListRouteTest.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/ClientRecipientListRouteTest.java
new file mode 100644
index 0000000000000..bb9b22cade2ca
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/ClientRecipientListRouteTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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 org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+public class ClientRecipientListRouteTest extends CamelOpenTelemetryTestSupport {
+
+ private static SpanTestData[] testdata = {
+ new SpanTestData().setLabel("seda:a server").setUri("seda://a").setOperation("a")
+ .setParentId(3),
+ new SpanTestData().setLabel("seda:b server").setUri("seda://b").setOperation("b")
+ .setParentId(3),
+ new SpanTestData().setLabel("seda:c server").setUri("seda://c").setOperation("c")
+ .setParentId(3),
+ new SpanTestData().setLabel("direct:start server").setUri("direct://start").setOperation("start")
+ };
+
+ public ClientRecipientListRouteTest() {
+ super(testdata);
+ }
+
+ @Test
+ public void testRoute() throws Exception {
+ template.requestBody("direct:start", "Hello");
+
+ verify();
+ }
+
+ @Override
+ protected RoutesBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start").recipientList(constant("seda:a,seda:b,seda:c")).routeId("start");
+
+ from("seda:a").routeId("a")
+ .log("routing at ${routeId}");
+
+ from("seda:b").routeId("b")
+ .log("routing at ${routeId}")
+ .delay(simple("${random(1000,2000)}"));
+
+ from("seda:c").routeId("c")
+ .log("routing at ${routeId}")
+ .delay(simple("${random(0,100)}"));
+ }
+ };
+ }
+}
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CustomComponentNameRouteTest.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CustomComponentNameRouteTest.java
new file mode 100644
index 0000000000000..1ab6012d3b5ee
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/CustomComponentNameRouteTest.java
@@ -0,0 +1,72 @@
+/*
+ * 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 org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+public class CustomComponentNameRouteTest extends CamelOpenTelemetryTestSupport {
+
+ private static SpanTestData[] testdata = {
+ new SpanTestData().setLabel("myseda:b server").setUri("myseda://b").setOperation("b")
+ .setParentId(2).addLogMessage("routing at b"),
+ new SpanTestData().setLabel("myseda:c server").setUri("myseda://c").setOperation("c")
+ .setParentId(2).addLogMessage("Exchange[ExchangePattern: InOut, BodyType: String, Body: Hello]"),
+ new SpanTestData().setLabel("myseda:a server").setUri("myseda://a").setOperation("a")
+ .setParentId(3).addLogMessage("routing at a").addLogMessage("End of routing"),
+ new SpanTestData().setLabel("direct:start server").setUri("direct://start").setOperation("start")
+ };
+
+ public CustomComponentNameRouteTest() {
+ super(testdata);
+ }
+
+ @Test
+ public void testRoute() throws Exception {
+ template.requestBody("direct:start", "Hello");
+
+ verify();
+ }
+
+ @Override
+ protected RoutesBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ context.addComponent("myseda", context.getComponent("seda"));
+
+ from("direct:start").to("myseda:a").routeId("start");
+
+ from("myseda:a").routeId("a")
+ .log("routing at ${routeId}")
+ .to("myseda:b")
+ .delay(2000)
+ .to("myseda:c")
+ .log("End of routing");
+
+ from("myseda:b").routeId("b")
+ .log("routing at ${routeId}")
+ .delay(simple("${random(1000,2000)}"));
+
+ from("myseda:c").routeId("c")
+ .to("log:test")
+ .delay(simple("${random(0,100)}"));
+ }
+ };
+ }
+}
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/MulticastParallelRouteTest.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/MulticastParallelRouteTest.java
new file mode 100644
index 0000000000000..c74a5d4fb8e5f
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/MulticastParallelRouteTest.java
@@ -0,0 +1,69 @@
+/*
+ * 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 org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+public class MulticastParallelRouteTest extends CamelOpenTelemetryTestSupport {
+
+ private static SpanTestData[] testdata = {
+ new SpanTestData().setLabel("seda:b server").setUri("seda://b").setOperation("b")
+ .setParentId(2).addLogMessage("routing at b"),
+ new SpanTestData().setLabel("seda:c server").setUri("seda://c").setOperation("c")
+ .setParentId(2).addLogMessage("routing at c"),
+ new SpanTestData().setLabel("seda:a server").setUri("seda://a").setOperation("a")
+ .setParentId(3).addLogMessage("routing at a").addLogMessage("End of routing"),
+ new SpanTestData().setLabel("direct:start server").setUri("direct://start").setOperation("start")
+ };
+
+ public MulticastParallelRouteTest() {
+ super(testdata);
+ }
+
+ @Test
+ public void testRoute() throws Exception {
+ template.requestBody("direct:start", "Hello");
+ verify(true);
+ }
+
+ @Override
+ protected RoutesBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start").to("seda:a").routeId("start");
+
+ from("seda:a").routeId("a")
+ .log("routing at ${routeId}")
+ .multicast().parallelProcessing()
+ .to("seda:b", "seda:c")
+ .end()
+ .log("End of routing");
+
+ from("seda:b").routeId("b")
+ .log("routing at ${routeId}")
+ .delay(simple("${random(1000,2000)}"));
+
+ from("seda:c").routeId("c")
+ .log("routing at ${routeId}")
+ .delay(simple("${random(0,100)}"));
+ }
+ };
+ }
+}
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/MulticastRouteTest.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/MulticastRouteTest.java
new file mode 100644
index 0000000000000..2562e0999c9b4
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/MulticastRouteTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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 org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+public class MulticastRouteTest extends CamelOpenTelemetryTestSupport {
+
+ private static SpanTestData[] testdata = {
+ new SpanTestData().setLabel("seda:b server").setUri("seda://b").setOperation("b")
+ .setParentId(2),
+ new SpanTestData().setLabel("seda:c server").setUri("seda://c").setOperation("c")
+ .setParentId(2),
+ new SpanTestData().setLabel("seda:a server").setUri("seda://a").setOperation("a")
+ .setParentId(3),
+ new SpanTestData().setLabel("direct:start server").setUri("direct://start").setOperation("start")
+ };
+
+ public MulticastRouteTest() {
+ super(testdata);
+ }
+
+ @Test
+ public void testRoute() throws Exception {
+ template.requestBody("direct:start", "Hello");
+
+ verify();
+ }
+
+ @Override
+ protected RoutesBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start").to("seda:a").routeId("start");
+
+ from("seda:a").routeId("a")
+ .log("routing at ${routeId}")
+ .multicast()
+ .to("seda:b")
+ .to("seda:c")
+ .end()
+ .log("End of routing");
+
+ from("seda:b").routeId("b")
+ .log("routing at ${routeId}")
+ .delay(simple("${random(1000,2000)}"));
+
+ from("seda:c").routeId("c")
+ .log("routing at ${routeId}")
+ .delay(simple("${random(0,100)}"));
+ }
+ };
+ }
+}
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/RouteConcurrentTest.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/RouteConcurrentTest.java
new file mode 100644
index 0000000000000..28b350c6e928d
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/RouteConcurrentTest.java
@@ -0,0 +1,80 @@
+/*
+ * 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.concurrent.TimeUnit;
+
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.NotifyBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class RouteConcurrentTest extends CamelOpenTelemetryTestSupport {
+
+ private static SpanTestData[] testdata = {
+ new SpanTestData().setLabel("seda:foo server").setUri("seda://foo?concurrentConsumers=5").setOperation("foo"),
+ new SpanTestData().setLabel("seda:bar server").setUri("seda://bar?concurrentConsumers=5").setOperation("bar")
+ .setParentId(0)
+ };
+
+ public RouteConcurrentTest() {
+ super(testdata);
+ }
+
+ @Test
+ public void testSingleInvocationsOfRoute() throws Exception {
+ NotifyBuilder notify = new NotifyBuilder(context).whenDone(2).create();
+
+ template.sendBody("seda:foo", "Hello World");
+
+ assertTrue(notify.matches(30, TimeUnit.SECONDS));
+
+ verify();
+ }
+
+ @Test
+ public void testConcurrentInvocationsOfRoute() throws Exception {
+ NotifyBuilder notify = new NotifyBuilder(context).whenDone(10).create();
+
+ for (int i = 0; i < 5; i++) {
+ template.sendBody("seda:foo", "Hello World");
+ }
+
+ assertTrue(notify.matches(30, TimeUnit.SECONDS));
+
+ verifyTraceSpanNumbers(5, testdata.length);
+ }
+
+ @Override
+ protected RoutesBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("seda:foo?concurrentConsumers=5").routeId("foo")
+ .log("routing at ${routeId}")
+ .delay(simple("${random(1000,2000)}"))
+ .to("seda:bar");
+
+ from("seda:bar?concurrentConsumers=5").routeId("bar")
+ .log("routing at ${routeId}")
+ .delay(simple("${random(0,500)}"));
+ }
+ };
+ }
+}
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
new file mode 100644
index 0000000000000..937e87ba2840c
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/SpanTestData.java
@@ -0,0 +1,105 @@
+/*
+ * 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.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import io.opentelemetry.trace.Span;
+
+public class SpanTestData {
+
+ private String label;
+ private String uri;
+ private String operation;
+ private Span.Kind kind = Span.Kind.INTERNAL;
+ private int parentId = -1;
+ private List logMessages = new ArrayList<>();
+ private Map tags = new HashMap<>();
+ private ArrayList childs = new ArrayList<>();
+
+ public String getLabel() {
+ return label;
+ }
+
+ public SpanTestData setLabel(String label) {
+ this.label = label;
+ return this;
+ }
+
+ public String getUri() {
+ return uri;
+ }
+
+ public SpanTestData setUri(String uri) {
+ this.uri = uri;
+ return this;
+ }
+
+ public String getOperation() {
+ return operation;
+ }
+
+ public SpanTestData setOperation(String operation) {
+ this.operation = operation;
+ return this;
+ }
+
+ public Span.Kind getKind() {
+ return kind;
+ }
+
+ public SpanTestData setKind(Span.Kind kind) {
+ this.kind = kind;
+ return this;
+ }
+
+ public int getParentId() {
+ return parentId;
+ }
+
+ public SpanTestData setParentId(int parentId) {
+ this.parentId = parentId;
+ return this;
+ }
+
+ public SpanTestData addLogMessage(String mesg) {
+ logMessages.add(mesg);
+ return this;
+ }
+
+ public List getLogMessages() {
+ return logMessages;
+ }
+
+ public SpanTestData addTag(String key, String val) {
+ tags.put(key, val);
+ return this;
+ }
+
+ public Map getTags() {
+ return tags;
+ }
+
+ public SpanTestData setChilds(SpanTestData[] childs) {
+ Collections.addAll(this.childs, childs);
+ return this;
+ }
+}
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/TestSEDASpanDecorator.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/TestSEDASpanDecorator.java
new file mode 100644
index 0000000000000..5d02fde26d073
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/TestSEDASpanDecorator.java
@@ -0,0 +1,38 @@
+/*
+ * 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 org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.decorators.SedaSpanDecorator;
+
+public class TestSEDASpanDecorator extends SedaSpanDecorator {
+
+ @Override
+ public void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
+ super.pre(span, exchange, endpoint);
+ span.setTag("pre", "test");
+ }
+
+ @Override
+ public void post(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
+ super.post(span, exchange, endpoint);
+ span.setTag("post", "test");
+ }
+
+}
\ No newline at end of file
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/TwoServiceTest.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/TwoServiceTest.java
new file mode 100644
index 0000000000000..3b04ea777e6f6
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/TwoServiceTest.java
@@ -0,0 +1,59 @@
+/*
+ * 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 org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+public class TwoServiceTest extends CamelOpenTelemetryTestSupport {
+
+ private static SpanTestData[] testdata = {
+ new SpanTestData().setLabel("ServiceB server").setUri("direct://ServiceB").setOperation("ServiceB")
+ .setParentId(1),
+ new SpanTestData().setLabel("ServiceA server").setUri("direct://ServiceA").setOperation("ServiceA")
+ };
+
+ public TwoServiceTest() {
+ super(testdata);
+ }
+
+ @Test
+ public void testRoute() throws Exception {
+ template.requestBody("direct:ServiceA", "Hello");
+
+ verify();
+ }
+
+ @Override
+ protected RoutesBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:ServiceA")
+ .log("ServiceA has been called")
+ .delay(simple("${random(1000,2000)}"))
+ .to("direct:ServiceB");
+
+ from("direct:ServiceB")
+ .log("ServiceB has been called")
+ .delay(simple("${random(0,500)}"));
+ }
+ };
+ }
+}
+
diff --git a/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/TwoServiceWithExcludeTest.java b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/TwoServiceWithExcludeTest.java
new file mode 100644
index 0000000000000..3dfe12c0e7f47
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/TwoServiceWithExcludeTest.java
@@ -0,0 +1,64 @@
+/*
+ * 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.Collections;
+import java.util.Set;
+
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+public class TwoServiceWithExcludeTest extends CamelOpenTelemetryTestSupport {
+
+ private static SpanTestData[] testdata = {
+ new SpanTestData().setLabel("ServiceA server").setUri("direct://ServiceA").setOperation("ServiceA")
+ };
+
+ public TwoServiceWithExcludeTest() {
+ super(testdata);
+ }
+
+ @Override
+ protected Set getExcludePatterns() {
+ return Collections.singleton("direct:ServiceB");
+ }
+
+ @Test
+ public void testRoute() throws Exception {
+ template.requestBody("direct:ServiceA", "Hello");
+
+ verify();
+ }
+
+ @Override
+ protected RoutesBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:ServiceA")
+ .log("ServiceA has been called")
+ .delay(simple("${random(1000,2000)}"))
+ .to("direct:ServiceB");
+
+ from("direct:ServiceB")
+ .log("ServiceB has been called")
+ .delay(simple("${random(0,500)}"));
+ }
+ };
+ }
+}
diff --git a/components/camel-opentelemetry/src/test/resources/log4j2.properties b/components/camel-opentelemetry/src/test/resources/log4j2.properties
new file mode 100644
index 0000000000000..89ff53a8dd57b
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/resources/log4j2.properties
@@ -0,0 +1,29 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+appender.file.type=File
+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
+rootLogger.level=INFO
+rootLogger.appenderRef.file.ref=file
diff --git a/components/camel-opentelemetry/src/test/resources/org/apache/camel/opentelemetry/OpenTelemetrySimpleRouteTest.xml b/components/camel-opentelemetry/src/test/resources/org/apache/camel/opentelemetry/OpenTelemetrySimpleRouteTest.xml
new file mode 100644
index 0000000000000..953fbd293fdab
--- /dev/null
+++ b/components/camel-opentelemetry/src/test/resources/org/apache/camel/opentelemetry/OpenTelemetrySimpleRouteTest.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${random(1000,2000)}
+
+
+
+
+
+
+
+ ${random(1000,2000)}
+
+
+
+
+
diff --git a/components/camel-opentracing/pom.xml b/components/camel-opentracing/pom.xml
index df3e2e600cf05..f8907963a419b 100644
--- a/components/camel-opentracing/pom.xml
+++ b/components/camel-opentracing/pom.xml
@@ -52,6 +52,10 @@
provided
+
+ org.apache.camel
+ camel-tracing
+ io.opentracing
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/GetBaggageProcessor.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/GetBaggageProcessor.java
index 5878be9b2574b..ce0cdcc387386 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/GetBaggageProcessor.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/GetBaggageProcessor.java
@@ -19,11 +19,11 @@
import io.opentracing.Span;
import org.apache.camel.AsyncCallback;
import org.apache.camel.Exchange;
-import org.apache.camel.Expression;
import org.apache.camel.Traceable;
import org.apache.camel.spi.IdAware;
import org.apache.camel.spi.RouteIdAware;
import org.apache.camel.support.AsyncProcessorSupport;
+import org.apache.camel.tracing.ActiveSpanManager;
import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,7 +50,8 @@ public GetBaggageProcessor(String baggageName, String headerName) {
@Override
public boolean process(Exchange exchange, AsyncCallback callback) {
try {
- Span span = ActiveSpanManager.getSpan(exchange);
+ OpenTracingSpanAdapter camelSpan = (OpenTracingSpanAdapter) ActiveSpanManager.getSpan(exchange);
+ Span span = camelSpan.getOpenTracingSpan();
if (span != null) {
String item = span.getBaggageItem(baggageName);
exchange.getMessage().setHeader(headerName, item);
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingExtractAdapter.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingExtractAdapter.java
new file mode 100644
index 0000000000000..d1bd9950acca5
--- /dev/null
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingExtractAdapter.java
@@ -0,0 +1,38 @@
+/*
+ * 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.opentracing;
+
+import java.util.*;
+
+import io.opentracing.propagation.TextMap;
+import org.apache.camel.tracing.ExtractAdapter;
+
+public class OpenTracingExtractAdapter implements TextMap {
+ ExtractAdapter adapter;
+
+ OpenTracingExtractAdapter(ExtractAdapter adapter) {
+ this.adapter = adapter;
+ }
+
+ @Override public Iterator> iterator() {
+ return this.adapter.iterator();
+ }
+
+ @Override public void put(String s, String s1) {
+ throw new UnsupportedOperationException("OpenTracingExtractAdapter should only be used with Tracer.extract()");
+ }
+}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingInjectAdapter.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingInjectAdapter.java
new file mode 100644
index 0000000000000..f29b4a420b71e
--- /dev/null
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingInjectAdapter.java
@@ -0,0 +1,38 @@
+/*
+ * 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.opentracing;
+
+import java.util.*;
+
+import io.opentracing.propagation.TextMap;
+import org.apache.camel.tracing.InjectAdapter;
+
+public class OpenTracingInjectAdapter implements TextMap {
+ private final InjectAdapter adapter;
+
+ OpenTracingInjectAdapter(final InjectAdapter adapter) {
+ this.adapter = adapter;
+ }
+
+ @Override public Iterator> iterator() {
+ throw new UnsupportedOperationException("CamelHeadersInjectAdapter should only be used with Tracer.inject()");
+ }
+
+ @Override public void put(String key, String value) {
+ this.adapter.put(key, value);
+ }
+}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingSpanAdapter.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingSpanAdapter.java
new file mode 100644
index 0000000000000..d15a9cfa559e9
--- /dev/null
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingSpanAdapter.java
@@ -0,0 +1,85 @@
+/*
+ * 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.opentracing;
+
+import java.util.EnumMap;
+import java.util.Map;
+
+import io.opentracing.tag.AbstractTag;
+import io.opentracing.tag.Tags;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.Tag;
+
+public class OpenTracingSpanAdapter implements SpanAdapter {
+
+ static EnumMap tagMap = new EnumMap<>(Tag.class);
+
+ static {
+ tagMap.put(Tag.COMPONENT, Tags.COMPONENT);
+ tagMap.put(Tag.DB_TYPE, Tags.DB_TYPE);
+ tagMap.put(Tag.DB_STATEMENT, Tags.DB_STATEMENT);
+ tagMap.put(Tag.DB_INSTANCE, Tags.DB_INSTANCE);
+ tagMap.put(Tag.HTTP_METHOD, Tags.HTTP_METHOD);
+ tagMap.put(Tag.HTTP_STATUS, Tags.HTTP_STATUS);
+ tagMap.put(Tag.HTTP_URL, Tags.HTTP_URL);
+ tagMap.put(Tag.ERROR, Tags.ERROR);
+ tagMap.put(Tag.MESSAGE_BUS_DESTINATION, Tags.MESSAGE_BUS_DESTINATION);
+ }
+
+ private io.opentracing.Span span;
+
+ OpenTracingSpanAdapter(io.opentracing.Span span) {
+ this.span = span;
+ }
+
+ public io.opentracing.Span getOpenTracingSpan() {
+ return this.span;
+ }
+
+ @Override public void setComponent(String component) {
+ span.setTag(Tags.COMPONENT.getKey(), component);
+ }
+
+ @Override public void setError(boolean error) {
+ span.setTag(Tags.ERROR, error);
+ }
+
+ @Override public void setTag(Tag key, String value) {
+ span.setTag(tagMap.get(key), value);
+ }
+
+ @Override public void setTag(Tag key, Number value) {
+ span.setTag(tagMap.get(key), value);
+ }
+
+ @Override public void setTag(String key, String value) {
+ span.setTag(key, value);
+ }
+
+ @Override public void setTag(String key, Number value) {
+ span.setTag(key, value);
+ }
+
+ @Override public void setTag(String key, Boolean value) {
+ span.setTag(key, value);
+ }
+
+ @Override public void log(Map fields) {
+ this.span.log(fields);
+ }
+
+}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracer.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracer.java
index 5e3b259241129..c15efced145c9 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracer.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracer.java
@@ -16,47 +16,20 @@
*/
package org.apache.camel.opentracing;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.ServiceLoader;
import java.util.Set;
-import io.opentracing.Span;
import io.opentracing.Tracer;
import io.opentracing.Tracer.SpanBuilder;
import io.opentracing.contrib.tracerresolver.TracerResolver;
import io.opentracing.noop.NoopTracerFactory;
import io.opentracing.propagation.Format;
import io.opentracing.tag.Tags;
-import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
-import org.apache.camel.Component;
-import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.NamedNode;
-import org.apache.camel.Route;
-import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.StaticService;
import org.apache.camel.api.management.ManagedResource;
-import org.apache.camel.opentracing.decorators.AbstractInternalSpanDecorator;
-import org.apache.camel.spi.CamelEvent;
-import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
-import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
-import org.apache.camel.spi.CamelLogger;
-import org.apache.camel.spi.InterceptStrategy;
-import org.apache.camel.spi.LogListener;
import org.apache.camel.spi.RoutePolicy;
-import org.apache.camel.spi.RoutePolicyFactory;
-import org.apache.camel.support.DefaultEndpoint;
-import org.apache.camel.support.EndpointHelper;
-import org.apache.camel.support.EventNotifierSupport;
-import org.apache.camel.support.RoutePolicySupport;
-import org.apache.camel.support.service.ServiceHelper;
-import org.apache.camel.support.service.ServiceSupport;
-import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.StringHelper;
+import org.apache.camel.tracing.InjectAdapter;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.SpanKind;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -72,143 +45,26 @@
* {@link org.apache.camel.spi.EventNotifier}.
*/
@ManagedResource(description = "OpenTracingTracer")
-public class OpenTracingTracer extends ServiceSupport implements RoutePolicyFactory, StaticService, CamelContextAware {
+public class OpenTracingTracer extends org.apache.camel.tracing.Tracer {
private static final Logger LOG = LoggerFactory.getLogger(OpenTracingTracer.class);
- private static final Map DECORATORS = new HashMap<>();
- private final OpenTracingEventNotifier eventNotifier = new OpenTracingEventNotifier();
- private final OpenTracingLogListener logListener = new OpenTracingLogListener();
- private Tracer tracer;
- private CamelContext camelContext;
- private Set excludePatterns = new HashSet<>(0);
- private InterceptStrategy tracingStrategy;
- private boolean encoding;
-
- static {
- ServiceLoader.load(SpanDecorator.class).forEach(d -> {
- SpanDecorator existing = DECORATORS.get(d.getComponent());
- // Add span decorator if no existing decorator for the component,
- // or if derived from the existing decorator's class, allowing
- // custom decorators to be added if they extend the standard
- // decorators
- if (existing == null || existing.getClass().isInstance(d)) {
- DECORATORS.put(d.getComponent(), d);
- }
- });
- }
+ Tracer tracer;
public OpenTracingTracer() {
}
- /**
- * To add a custom decorator that does not come out of the box with camel-opentracing.
- */
- public void addDecorator(SpanDecorator decorator) {
- DECORATORS.put(decorator.getComponent(), decorator);
- }
-
- @Override
- public RoutePolicy createRoutePolicy(CamelContext camelContext, String routeId, NamedNode route) {
- // ensure this opentracing tracer gets initialized when Camel starts
- init(camelContext);
- return new OpenTracingRoutePolicy(routeId);
- }
-
- /**
- * Registers this {@link OpenTracingTracer} on the {@link CamelContext} if
- * not already registered.
- */
- public void init(CamelContext camelContext) {
- if (!camelContext.hasService(this)) {
- try {
- // start this service eager so we init before Camel is starting up
- camelContext.addService(this, true, true);
- } catch (Exception e) {
- throw RuntimeCamelException.wrapRuntimeCamelException(e);
- }
+ private String mapToSpanKind(SpanKind kind) {
+ if (kind == SpanKind.SPAN_KIND_CLIENT) {
+ return Tags.SPAN_KIND_CLIENT;
}
+ return Tags.SPAN_KIND_SERVER;
}
- @Override
- public CamelContext getCamelContext() {
- return camelContext;
- }
-
- @Override
- public void setCamelContext(CamelContext camelContext) {
- this.camelContext = camelContext;
- }
-
- /**
- * Returns the currently used tracing strategy which is responsible for tracking invoked EIP or
- * beans.
- *
- * @return The currently used tracing strategy
- */
- public InterceptStrategy getTracingStrategy() {
- return tracingStrategy;
- }
-
- /**
- * Specifies the instance responsible for tracking invoked EIP and beans with OpenTracing.
- *
- * @param tracingStrategy The instance which tracks invoked EIP and beans
- */
- public void setTracingStrategy(InterceptStrategy tracingStrategy) {
- this.tracingStrategy = tracingStrategy;
- }
-
- public Set getExcludePatterns() {
- return excludePatterns;
- }
-
- public void setExcludePatterns(Set excludePatterns) {
- this.excludePatterns = excludePatterns;
- }
-
- public boolean isEncoding() {
- return encoding;
- }
-
- public void setEncoding(boolean encoding) {
- this.encoding = encoding;
- }
-
- /**
- * Adds an exclude pattern that will disable tracing for Camel messages that
- * matches the pattern.
- *
- * @param pattern the pattern such as route id, endpoint url
- */
- public void addExcludePattern(String pattern) {
- excludePatterns.add(pattern);
- }
-
- public Tracer getTracer() {
- return tracer;
- }
-
- public void setTracer(Tracer tracer) {
- this.tracer = tracer;
- }
-
- @Override
- protected void doInit() throws Exception {
- ObjectHelper.notNull(camelContext, "CamelContext", this);
-
- camelContext.getManagementStrategy().addEventNotifier(eventNotifier);
- if (!camelContext.getRoutePolicyFactories().contains(this)) {
- camelContext.addRoutePolicyFactory(this);
- }
- camelContext.adapt(ExtendedCamelContext.class).addLogListener(logListener);
-
- if (tracingStrategy != null) {
- camelContext.adapt(ExtendedCamelContext.class).addInterceptStrategy(tracingStrategy);
- }
+ protected void initTracer() {
if (tracer == null) {
- Set tracers = camelContext.getRegistry().findByType(Tracer.class);
+ Set tracers = getCamelContext().getRegistry().findByType(Tracer.class);
if (tracers.size() == 1) {
tracer = tracers.iterator().next();
}
@@ -223,8 +79,6 @@ protected void doInit() throws Exception {
tracer = NoopTracerFactory.create();
}
- ServiceHelper.startService(eventNotifier);
-
if (tracer != null) {
try { // Take care NOT to import GlobalTracer as it is an optional dependency and may not be on the classpath.
io.opentracing.util.GlobalTracer.registerIfAbsent(tracer);
@@ -234,188 +88,38 @@ protected void doInit() throws Exception {
}
}
- @Override
- protected void doShutdown() throws Exception {
- // stop event notifier
- camelContext.getManagementStrategy().removeEventNotifier(eventNotifier);
- ServiceHelper.stopService(eventNotifier);
-
- // remove route policy
- camelContext.getRoutePolicyFactories().remove(this);
- }
-
- protected SpanDecorator getSpanDecorator(Endpoint endpoint) {
- SpanDecorator sd = null;
-
- String uri = endpoint.getEndpointUri();
- String splitURI[] = StringHelper.splitOnCharacter(uri, ":", 2);
- if (splitURI[1] != null) {
- String scheme = splitURI[0];
- sd = DECORATORS.get(scheme);
- }
- if (sd == null) {
- // okay there was no decorator found via component name (scheme), then try FQN
- if (endpoint instanceof DefaultEndpoint) {
- Component comp = ((DefaultEndpoint) endpoint).getComponent();
- String fqn = comp.getClass().getName();
- // lookup via FQN
- sd = DECORATORS.values().stream().filter(d -> fqn.equals(d.getComponentClassName())).findFirst().orElse(null);
- }
- }
- if (sd == null) {
- sd = SpanDecorator.DEFAULT;
+ @Override protected SpanAdapter startSendingEventSpan(String operationName, SpanKind kind, SpanAdapter parent) {
+ SpanBuilder spanBuilder = tracer.buildSpan(operationName).withTag(Tags.SPAN_KIND.getKey(), mapToSpanKind(kind));
+ if (parent != null) {
+ io.opentracing.Span parentSpan = ((OpenTracingSpanAdapter) parent).getOpenTracingSpan();
+ spanBuilder.asChildOf(parentSpan);
}
-
- return sd;
+ return new OpenTracingSpanAdapter(spanBuilder.start());
}
- private boolean isExcluded(Exchange exchange, Endpoint endpoint) {
- String url = endpoint.getEndpointUri();
- if (url != null && !excludePatterns.isEmpty()) {
- for (String pattern : excludePatterns) {
- if (EndpointHelper.matchEndpoint(exchange.getContext(), url, pattern)) {
- return true;
- }
- }
+ @Override protected SpanAdapter startExchangeBeginSpan(String operationName, SpanKind kind, SpanAdapter parent) {
+ SpanBuilder spanBuilder = tracer.buildSpan(operationName);
+ if (parent != null) {
+ spanBuilder.asChildOf(((OpenTracingSpanAdapter) parent).getOpenTracingSpan());
}
- return false;
+ return new OpenTracingSpanAdapter(spanBuilder.start());
}
- private final class OpenTracingEventNotifier extends EventNotifierSupport {
-
- @Override
- public void notify(CamelEvent event) throws Exception {
- try {
- if (event instanceof ExchangeSendingEvent) {
- ExchangeSendingEvent ese = (ExchangeSendingEvent)event;
- SpanDecorator sd = getSpanDecorator(ese.getEndpoint());
- if (sd instanceof AbstractInternalSpanDecorator || !sd.newSpan() || isExcluded(ese.getExchange(), ese.getEndpoint())) {
- return;
- }
- Span parent = ActiveSpanManager.getSpan(ese.getExchange());
- SpanBuilder spanBuilder = tracer.buildSpan(sd.getOperationName(ese.getExchange(), ese.getEndpoint())).withTag(Tags.SPAN_KIND.getKey(),
- sd.getInitiatorSpanKind());
- // Temporary workaround to avoid adding 'null' span as a
- // parent
- if (parent != null) {
- spanBuilder.asChildOf(parent);
- }
- Span span = spanBuilder.start();
- sd.pre(span, ese.getExchange(), ese.getEndpoint());
- tracer.inject(span.context(), Format.Builtin.TEXT_MAP, sd.getInjectAdapter(ese.getExchange().getIn().getHeaders(), encoding));
- ActiveSpanManager.activate(ese.getExchange(), span);
-
- if (LOG.isTraceEnabled()) {
- LOG.trace("OpenTracing: start client span={}", span);
- }
- } else if (event instanceof ExchangeSentEvent) {
- ExchangeSentEvent ese = (ExchangeSentEvent)event;
- SpanDecorator sd = getSpanDecorator(ese.getEndpoint());
- if (sd instanceof AbstractInternalSpanDecorator || !sd.newSpan() || isExcluded(ese.getExchange(), ese.getEndpoint())) {
- return;
- }
- Span span = ActiveSpanManager.getSpan(ese.getExchange());
- if (span != null) {
- if (LOG.isTraceEnabled()) {
- LOG.trace("OpenTracing: start client span={}", span);
- }
- sd.post(span, ese.getExchange(), ese.getEndpoint());
- span.finish();
- ActiveSpanManager.deactivate(ese.getExchange());
- } else {
- LOG.warn("OpenTracing: could not find managed span for exchange={}", ese.getExchange());
- }
- }
- } catch (Throwable t) {
- // This exception is ignored
- LOG.warn("OpenTracing: Failed to capture tracing data", t);
- }
- }
-
- @Override
- public boolean isEnabled(CamelEvent event) {
- return event instanceof ExchangeSendingEvent || event instanceof ExchangeSentEvent;
- }
-
- @Override
- public String toString() {
- return "OpenTracingEventNotifier";
- }
+ public Tracer getTracer() {
+ return tracer;
}
- private final class OpenTracingRoutePolicy extends RoutePolicySupport {
-
- OpenTracingRoutePolicy(String routeId) {
- }
-
- @Override
- public void onExchangeBegin(Route route, Exchange exchange) {
- try {
- if (isExcluded(exchange, route.getEndpoint())) {
- return;
- }
- SpanDecorator sd = getSpanDecorator(route.getEndpoint());
- Span parent = ActiveSpanManager.getSpan(exchange);
- Span span = tracer.buildSpan(sd.getOperationName(exchange, route.getEndpoint()))
- .asChildOf(parent)
- .start();
-
- if (parent == null && !(sd instanceof AbstractInternalSpanDecorator)) {
- span.setTag(Tags.SPAN_KIND.getKey(), sd.getReceiverSpanKind());
- }
-
- sd.pre(span, exchange, route.getEndpoint());
- ActiveSpanManager.activate(exchange, span);
- if (LOG.isTraceEnabled()) {
- LOG.trace("OpenTracing: start server span={}", span);
- }
- } catch (Throwable t) {
- // This exception is ignored
- LOG.warn("OpenTracing: Failed to capture tracing data", t);
- }
- }
-
- @Override
- public void onExchangeDone(Route route, Exchange exchange) {
- try {
- if (isExcluded(exchange, route.getEndpoint())) {
- return;
- }
- Span span = ActiveSpanManager.getSpan(exchange);
- if (span != null) {
- if (LOG.isTraceEnabled()) {
- LOG.trace("OpenTracing: finish server span={}", span);
- }
- SpanDecorator sd = getSpanDecorator(route.getEndpoint());
- sd.post(span, exchange, route.getEndpoint());
- span.finish();
- ActiveSpanManager.deactivate(exchange);
- } else {
- LOG.warn("OpenTracing: could not find managed span for exchange={}", exchange);
- }
- } catch (Throwable t) {
- // This exception is ignored
- LOG.warn("OpenTracing: Failed to capture tracing data", t);
- }
- }
+ public void setTracer(Tracer tracer) {
+ this.tracer = tracer;
}
- private final class OpenTracingLogListener implements LogListener {
+ protected void finishSpan(SpanAdapter span) {
+ OpenTracingSpanAdapter openTracingSpanWrapper = (OpenTracingSpanAdapter) span;
+ openTracingSpanWrapper.getOpenTracingSpan().finish();
+ }
- @Override
- public String onLog(Exchange exchange, CamelLogger camelLogger, String message) {
- try {
- Span span = ActiveSpanManager.getSpan(exchange);
- if (span != null) {
- Map fields = new HashMap<>();
- fields.put("message", message);
- span.log(fields);
- }
- } catch (Throwable t) {
- // This exception is ignored
- LOG.warn("OpenTracing: Failed to capture tracing data", t);
- }
- return message;
- }
+ protected void inject(SpanAdapter span, InjectAdapter adapter) {
+ OpenTracingSpanAdapter openTracingSpanWrapper = (OpenTracingSpanAdapter) span;
+ tracer.inject(openTracingSpanWrapper.getOpenTracingSpan().context(), Format.Builtin.TEXT_MAP, new OpenTracingInjectAdapter(adapter));
}
}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracingStrategy.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracingStrategy.java
index 2112e4c66e229..16aa69653d48e 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracingStrategy.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracingStrategy.java
@@ -30,6 +30,8 @@
import org.apache.camel.spi.InterceptStrategy;
import org.apache.camel.support.PatternHelper;
import org.apache.camel.support.processor.DelegateAsyncProcessor;
+import org.apache.camel.tracing.ActiveSpanManager;
+import org.apache.camel.tracing.SpanDecorator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,7 +54,8 @@ public Processor wrapProcessorInInterceptors(CamelContext camelContext,
}
return new DelegateAsyncProcessor((Exchange exchange) -> {
- Span span = ActiveSpanManager.getSpan(exchange);
+ OpenTracingSpanAdapter spanWrapper = (OpenTracingSpanAdapter) ActiveSpanManager.getSpan(exchange);
+ Span span = spanWrapper.getOpenTracingSpan();
if (span == null) {
target.process(exchange);
return;
@@ -69,7 +72,7 @@ public Processor wrapProcessorInInterceptors(CamelContext camelContext,
|| target instanceof SetBaggageProcessor);
if (activateExchange) {
- ActiveSpanManager.activate(exchange, processorSpan);
+ ActiveSpanManager.activate(exchange, new OpenTracingSpanAdapter(processorSpan));
}
try (final Scope inScope = tracer.getTracer().activateSpan(processorSpan)) {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SetBaggageProcessor.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SetBaggageProcessor.java
index 84658dde406b7..4c0bbdbad70d6 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SetBaggageProcessor.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SetBaggageProcessor.java
@@ -24,6 +24,7 @@
import org.apache.camel.spi.IdAware;
import org.apache.camel.spi.RouteIdAware;
import org.apache.camel.support.AsyncProcessorSupport;
+import org.apache.camel.tracing.ActiveSpanManager;
import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,7 +51,8 @@ public SetBaggageProcessor(String baggageName, Expression expression) {
@Override
public boolean process(Exchange exchange, AsyncCallback callback) {
try {
- Span span = ActiveSpanManager.getSpan(exchange);
+ OpenTracingSpanAdapter camelSpan = (OpenTracingSpanAdapter) ActiveSpanManager.getSpan(exchange);
+ Span span = camelSpan.getOpenTracingSpan();
if (span != null) {
String item = expression.evaluate(exchange, String.class);
span.setBaggageItem(baggageName, item);
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/TagProcessor.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/TagProcessor.java
index acf03f36fdb4e..b72bde75bcfb5 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/TagProcessor.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/TagProcessor.java
@@ -24,6 +24,7 @@
import org.apache.camel.spi.IdAware;
import org.apache.camel.spi.RouteIdAware;
import org.apache.camel.support.AsyncProcessorSupport;
+import org.apache.camel.tracing.ActiveSpanManager;
import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,7 +51,8 @@ public TagProcessor(String tagName, Expression expression) {
@Override
public boolean process(Exchange exchange, AsyncCallback callback) {
try {
- Span span = ActiveSpanManager.getSpan(exchange);
+ OpenTracingSpanAdapter camelSpan = (OpenTracingSpanAdapter) ActiveSpanManager.getSpan(exchange);
+ Span span = camelSpan.getOpenTracingSpan();
if (span != null) {
String tag = expression.evaluate(exchange, String.class);
span.setTag(tagName, tag);
diff --git a/components/camel-opentracing/src/main/resources/META-INF/services/org.apache.camel.opentracing.SpanDecorator b/components/camel-opentracing/src/main/resources/META-INF/services/org.apache.camel.opentracing.SpanDecorator
deleted file mode 100644
index 0e96a82cfc6df..0000000000000
--- a/components/camel-opentracing/src/main/resources/META-INF/services/org.apache.camel.opentracing.SpanDecorator
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# 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.
-#
-
-org.apache.camel.opentracing.decorators.AhcSpanDecorator
-org.apache.camel.opentracing.decorators.AmqpSpanDecorator
-org.apache.camel.opentracing.decorators.AwsSqsSpanDecorator
-org.apache.camel.opentracing.decorators.AwsSnsSpanDecorator
-org.apache.camel.opentracing.decorators.CometdSpanDecorator
-org.apache.camel.opentracing.decorators.CometdsSpanDecorator
-org.apache.camel.opentracing.decorators.CqlSpanDecorator
-org.apache.camel.opentracing.decorators.DirectSpanDecorator
-org.apache.camel.opentracing.decorators.DirectvmSpanDecorator
-org.apache.camel.opentracing.decorators.DisruptorSpanDecorator
-org.apache.camel.opentracing.decorators.DisruptorvmSpanDecorator
-org.apache.camel.opentracing.decorators.ElasticsearchSpanDecorator
-org.apache.camel.opentracing.decorators.HttpSpanDecorator
-org.apache.camel.opentracing.decorators.HttpsSpanDecorator
-org.apache.camel.opentracing.decorators.IronmqSpanDecorator
-org.apache.camel.opentracing.decorators.JdbcSpanDecorator
-org.apache.camel.opentracing.decorators.JettySpanDecorator
-org.apache.camel.opentracing.decorators.JmsSpanDecorator
-org.apache.camel.opentracing.decorators.KafkaSpanDecorator
-org.apache.camel.opentracing.decorators.LogSpanDecorator
-org.apache.camel.opentracing.decorators.MongoDBSpanDecorator
-org.apache.camel.opentracing.decorators.NettyHttpSpanDecorator
-org.apache.camel.opentracing.decorators.NatsSpanDecorator
-org.apache.camel.opentracing.decorators.NsqSpanDecorator
-org.apache.camel.opentracing.decorators.PahoSpanDecorator
-org.apache.camel.opentracing.decorators.PlatformHttpSpanDecorator
-org.apache.camel.opentracing.decorators.RabbitmqSpanDecorator
-org.apache.camel.opentracing.decorators.RestSpanDecorator
-org.apache.camel.opentracing.decorators.SedaSpanDecorator
-org.apache.camel.opentracing.decorators.ServletSpanDecorator
-org.apache.camel.opentracing.decorators.SjmsSpanDecorator
-org.apache.camel.opentracing.decorators.Sjms2SpanDecorator
-org.apache.camel.opentracing.decorators.SqlSpanDecorator
-org.apache.camel.opentracing.decorators.StompSpanDecorator
-org.apache.camel.opentracing.decorators.TimerSpanDecorator
-org.apache.camel.opentracing.decorators.UndertowSpanDecorator
-org.apache.camel.opentracing.decorators.VmSpanDecorator
-
diff --git a/components/camel-opentracing/src/main/resources/META-INF/services/org.apache.camel.tracing.SpanDecorator b/components/camel-opentracing/src/main/resources/META-INF/services/org.apache.camel.tracing.SpanDecorator
new file mode 100644
index 0000000000000..2d8ec83446e1e
--- /dev/null
+++ b/components/camel-opentracing/src/main/resources/META-INF/services/org.apache.camel.tracing.SpanDecorator
@@ -0,0 +1,55 @@
+#
+# 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.
+#
+
+org.apache.camel.tracing.decorators.AhcSpanDecorator
+org.apache.camel.tracing.decorators.AmqpSpanDecorator
+org.apache.camel.tracing.decorators.AwsSqsSpanDecorator
+org.apache.camel.tracing.decorators.AwsSnsSpanDecorator
+org.apache.camel.tracing.decorators.CometdSpanDecorator
+org.apache.camel.tracing.decorators.CometdsSpanDecorator
+org.apache.camel.tracing.decorators.CqlSpanDecorator
+org.apache.camel.tracing.decorators.DirectSpanDecorator
+org.apache.camel.tracing.decorators.DirectvmSpanDecorator
+org.apache.camel.tracing.decorators.DisruptorSpanDecorator
+org.apache.camel.tracing.decorators.DisruptorvmSpanDecorator
+org.apache.camel.tracing.decorators.ElasticsearchSpanDecorator
+org.apache.camel.tracing.decorators.HttpSpanDecorator
+org.apache.camel.tracing.decorators.HttpsSpanDecorator
+org.apache.camel.tracing.decorators.IronmqSpanDecorator
+org.apache.camel.tracing.decorators.JdbcSpanDecorator
+org.apache.camel.tracing.decorators.JettySpanDecorator
+org.apache.camel.tracing.decorators.JmsSpanDecorator
+org.apache.camel.tracing.decorators.KafkaSpanDecorator
+org.apache.camel.tracing.decorators.LogSpanDecorator
+org.apache.camel.tracing.decorators.MongoDBSpanDecorator
+org.apache.camel.tracing.decorators.NettyHttpSpanDecorator
+org.apache.camel.tracing.decorators.NatsSpanDecorator
+org.apache.camel.tracing.decorators.NsqSpanDecorator
+org.apache.camel.tracing.decorators.PahoSpanDecorator
+org.apache.camel.tracing.decorators.PlatformHttpSpanDecorator
+org.apache.camel.tracing.decorators.RabbitmqSpanDecorator
+org.apache.camel.tracing.decorators.RestSpanDecorator
+org.apache.camel.tracing.decorators.SedaSpanDecorator
+org.apache.camel.tracing.decorators.ServletSpanDecorator
+org.apache.camel.tracing.decorators.SjmsSpanDecorator
+org.apache.camel.tracing.decorators.Sjms2SpanDecorator
+org.apache.camel.tracing.decorators.SqlSpanDecorator
+org.apache.camel.tracing.decorators.StompSpanDecorator
+org.apache.camel.tracing.decorators.TimerSpanDecorator
+org.apache.camel.tracing.decorators.UndertowSpanDecorator
+org.apache.camel.tracing.decorators.VmSpanDecorator
+
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/CamelOpenTracingTestSupport.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/CamelOpenTracingTestSupport.java
index 9c598e3d0f397..a6c3a88e69e60 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/CamelOpenTracingTestSupport.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/CamelOpenTracingTestSupport.java
@@ -34,6 +34,7 @@
import org.apache.camel.CamelContext;
import org.apache.camel.spi.InterceptStrategy;
import org.apache.camel.test.junit5.CamelTestSupport;
+import org.apache.camel.tracing.SpanDecorator;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -64,9 +65,8 @@ protected CamelContext createCamelContext() throws Exception {
ottracer.setTracer(tracer);
ottracer.setExcludePatterns(getExcludePatterns());
ottracer.setTracingStrategy(getTracingStrategy());
-
+ ottracer.addDecorator(new TestSEDASpanDecorator());
ottracer.init(context);
-
return context;
}
@@ -139,7 +139,7 @@ protected void verifySpan(int index, SpanTestData[] testdata, List spa
}
assertEquals(td.getUri(), span.tags().get("camel.uri"), td.getLabel());
- // If span associated with TestSEDASpanDecorator, check that pre/post tags have been defined
+ // If span associated with org.apache.camel.opentracing.TestSEDASpanDecorator, check that pre/post tags have been defined
if ("camel-seda".equals(component)) {
assertTrue(span.tags().containsKey("pre"));
assertTrue(span.tags().containsKey("post"));
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/ClientRecipientListRouteTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/ClientRecipientListRouteTest.java
index c5f7cb9cd0d6c..96a0dbfed3bc6 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/ClientRecipientListRouteTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/ClientRecipientListRouteTest.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.opentracing;
-import io.opentracing.tag.Tags;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.junit.jupiter.api.Test;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/CustomComponentNameRouteTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/CustomComponentNameRouteTest.java
index 8912d056a5da9..0d9c9644aa03d 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/CustomComponentNameRouteTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/CustomComponentNameRouteTest.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.opentracing;
-import io.opentracing.tag.Tags;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.junit.jupiter.api.Test;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/EIPTracingRouteTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/EIPTracingRouteTest.java
index 5310b4c8d5306..4db8359211c5b 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/EIPTracingRouteTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/EIPTracingRouteTest.java
@@ -16,11 +16,6 @@
*/
package org.apache.camel.opentracing;
-import io.opentracing.Span;
-import io.opentracing.tag.Tags;
-import io.opentracing.util.GlobalTracer;
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.spi.InterceptStrategy;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/MulticastParallelRouteTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/MulticastParallelRouteTest.java
index 90c394e29027c..661512bf850de 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/MulticastParallelRouteTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/MulticastParallelRouteTest.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.opentracing;
-import io.opentracing.tag.Tags;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.junit.jupiter.api.Test;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/MulticastRouteTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/MulticastRouteTest.java
index 1bee543800dfb..619f86aacbcb7 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/MulticastRouteTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/MulticastRouteTest.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.opentracing;
-import io.opentracing.tag.Tags;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.junit.jupiter.api.Test;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/RouteConcurrentTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/RouteConcurrentTest.java
index aa0a92710f398..4646ad899a278 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/RouteConcurrentTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/RouteConcurrentTest.java
@@ -18,7 +18,6 @@
import java.util.concurrent.TimeUnit;
-import io.opentracing.tag.Tags;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.NotifyBuilder;
import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/SpanProcessorsTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/SpanProcessorsTest.java
index 52a6b82cd90ba..ca48c19cbcc82 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/SpanProcessorsTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/SpanProcessorsTest.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.opentracing;
-import io.opentracing.tag.Tags;
import org.apache.camel.Exchange;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TestSEDASpanDecorator.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TestSEDASpanDecorator.java
index e23f9f920e12c..d8cdf61976f06 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TestSEDASpanDecorator.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TestSEDASpanDecorator.java
@@ -16,23 +16,23 @@
*/
package org.apache.camel.opentracing;
-import io.opentracing.Span;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
-import org.apache.camel.opentracing.decorators.SedaSpanDecorator;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.decorators.SedaSpanDecorator;
public class TestSEDASpanDecorator extends SedaSpanDecorator {
@Override
- public void pre(Span span, Exchange exchange, Endpoint endpoint) {
+ public void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
super.pre(span, exchange, endpoint);
span.setTag("pre", "test");
}
@Override
- public void post(Span span, Exchange exchange, Endpoint endpoint) {
+ public void post(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
super.post(span, exchange, endpoint);
span.setTag("post", "test");
}
-}
+}
\ No newline at end of file
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TracingClientRecipientListRouteTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TracingClientRecipientListRouteTest.java
index c5d1245ef1344..34b47a4453bad 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TracingClientRecipientListRouteTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TracingClientRecipientListRouteTest.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.opentracing;
-import io.opentracing.tag.Tags;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.spi.InterceptStrategy;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TracingMulticastParallelRouteTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TracingMulticastParallelRouteTest.java
index ade81c0fcd7dc..c0a9f800eba48 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TracingMulticastParallelRouteTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TracingMulticastParallelRouteTest.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.opentracing;
-import io.opentracing.tag.Tags;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.spi.InterceptStrategy;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TwoServiceTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TwoServiceTest.java
index 497dcaebfcfe2..e987ebcc45759 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TwoServiceTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TwoServiceTest.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.opentracing;
-import io.opentracing.tag.Tags;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.junit.jupiter.api.Test;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TwoServiceWithExcludeTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TwoServiceWithExcludeTest.java
index 497dc9553f36f..670c62f92fa3e 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TwoServiceWithExcludeTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TwoServiceWithExcludeTest.java
@@ -19,7 +19,6 @@
import java.util.Collections;
import java.util.Set;
-import io.opentracing.tag.Tags;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.junit.jupiter.api.Test;
diff --git a/components/camel-opentracing/src/test/resources/META-INF/services/org.apache.camel.opentracing.SpanDecorator b/components/camel-opentracing/src/test/resources/META-INF/services/org.apache.camel.opentracing.SpanDecorator
deleted file mode 100644
index 403bde45a36e7..0000000000000
--- a/components/camel-opentracing/src/test/resources/META-INF/services/org.apache.camel.opentracing.SpanDecorator
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# 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.
-#
-
-org.apache.camel.opentracing.TestSEDASpanDecorator
diff --git a/components/camel-tracing/pom.xml b/components/camel-tracing/pom.xml
new file mode 100644
index 0000000000000..6138e19e8fce6
--- /dev/null
+++ b/components/camel-tracing/pom.xml
@@ -0,0 +1,62 @@
+
+
+
+
+ 4.0.0
+
+
+ org.apache.camel
+ components
+ 3.5.0-SNAPSHOT
+
+
+
+ 3.5.0
+
+
+ camel-tracing
+ jar
+ Camel :: Common Tracing
+ Distributed tracing common interfaces
+
+
+
+
+ org.apache.camel
+ camel-support
+
+
+ org.apache.camel
+ camel-test-spring-junit5
+ test
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+ test
+
+
+ org.mockito
+ mockito-junit-jupiter
+ test
+
+
+
diff --git a/components/camel-tracing/src/generated/resources/META-INF/services/org/apache/camel/other.properties b/components/camel-tracing/src/generated/resources/META-INF/services/org/apache/camel/other.properties
new file mode 100644
index 0000000000000..73dc7931747fb
--- /dev/null
+++ b/components/camel-tracing/src/generated/resources/META-INF/services/org/apache/camel/other.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+name=tracing
+groupId=org.apache.camel
+artifactId=camel-tracing
+version=3.5.0-SNAPSHOT
+projectName=Camel :: Common Tracing
+projectDescription=Distributed tracing common interfaces
diff --git a/components/camel-tracing/src/generated/resources/tracing.json b/components/camel-tracing/src/generated/resources/tracing.json
new file mode 100644
index 0000000000000..6b36673be3b7a
--- /dev/null
+++ b/components/camel-tracing/src/generated/resources/tracing.json
@@ -0,0 +1,14 @@
+{
+ "other": {
+ "kind": "other",
+ "name": "tracing",
+ "title": "Tracing",
+ "description": "Distributed tracing common interfaces",
+ "deprecated": false,
+ "firstVersion": "3.5.0",
+ "supportLevel": "Preview",
+ "groupId": "org.apache.camel",
+ "artifactId": "camel-tracing",
+ "version": "3.5.0-SNAPSHOT"
+ }
+}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/ActiveSpanManager.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/ActiveSpanManager.java
similarity index 90%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/ActiveSpanManager.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/ActiveSpanManager.java
index 50be44dded8c7..3d74cde08e783 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/ActiveSpanManager.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/ActiveSpanManager.java
@@ -14,15 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing;
+package org.apache.camel.tracing;
-import io.opentracing.Span;
import org.apache.camel.Exchange;
/**
* Utility class for managing active spans as a stack associated with
* an exchange.
- *
*/
public final class ActiveSpanManager {
@@ -38,7 +36,7 @@ private ActiveSpanManager() {
* @param exchange The exchange
* @return The current active span, or null if none exists
*/
- public static Span getSpan(Exchange exchange) {
+ public static SpanAdapter getSpan(Exchange exchange) {
Holder holder = (Holder) exchange.getProperty(ACTIVE_SPAN_PROPERTY);
if (holder != null) {
return holder.getSpan();
@@ -54,7 +52,7 @@ public static Span getSpan(Exchange exchange) {
* @param exchange The exchange
* @param span The span
*/
- public static void activate(Exchange exchange, Span span) {
+ public static void activate(Exchange exchange, SpanAdapter span) {
exchange.setProperty(ACTIVE_SPAN_PROPERTY,
new Holder((Holder) exchange.getProperty(ACTIVE_SPAN_PROPERTY), span));
}
@@ -83,18 +81,18 @@ public static void deactivate(Exchange exchange) {
*/
public static class Holder {
private Holder parent;
- private Span span;
-
- public Holder(Holder parent, Span span) {
+ private SpanAdapter span;
+
+ public Holder(Holder parent, SpanAdapter span) {
this.parent = parent;
this.span = span;
}
-
+
public Holder getParent() {
return parent;
}
-
- public Span getSpan() {
+
+ public SpanAdapter getSpan() {
return span;
}
}
diff --git a/components/camel-tracing/src/main/java/org/apache/camel/tracing/ExtractAdapter.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/ExtractAdapter.java
new file mode 100644
index 0000000000000..0cd426df58e41
--- /dev/null
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/ExtractAdapter.java
@@ -0,0 +1,25 @@
+/*
+ * 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.tracing;
+
+import java.util.Iterator;
+import java.util.Map;
+
+public interface ExtractAdapter {
+ Iterator> iterator();
+ Object get(String key);
+}
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
new file mode 100644
index 0000000000000..72f27dad39ee8
--- /dev/null
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/InjectAdapter.java
@@ -0,0 +1,21 @@
+/*
+ * 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.tracing;
+
+public interface InjectAdapter {
+ 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
new file mode 100644
index 0000000000000..fae4f07bf2eaa
--- /dev/null
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanAdapter.java
@@ -0,0 +1,30 @@
+/*
+ * 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.tracing;
+
+import java.util.Map;
+
+public interface SpanAdapter {
+ void setComponent(String component);
+ void setError(boolean error);
+ void setTag(Tag key, String value);
+ void setTag(Tag key, Number value);
+ void setTag(String key, String value);
+ void setTag(String key, Number value);
+ void setTag(String key, Boolean value);
+ void log(Map log);
+}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanDecorator.java
similarity index 86%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanDecorator.java
index 57bf0acdf4925..1ac91c8662392 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanDecorator.java
@@ -14,15 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing;
+package org.apache.camel.tracing;
import java.util.Map;
-import io.opentracing.Span;
-import io.opentracing.propagation.TextMap;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
-import org.apache.camel.opentracing.decorators.AbstractSpanDecorator;
+import org.apache.camel.tracing.decorators.AbstractSpanDecorator;
/**
* This interface represents a decorator specific to the component/endpoint
@@ -87,7 +85,7 @@ public String getComponentClassName() {
* @param exchange The exchange
* @param endpoint The endpoint
*/
- void pre(Span span, Exchange exchange, Endpoint endpoint);
+ void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint);
/**
* This method adds appropriate details (tags/logs) to the supplied span
@@ -97,7 +95,7 @@ public String getComponentClassName() {
* @param exchange The exchange
* @param endpoint The endpoint
*/
- void post(Span span, Exchange exchange, Endpoint endpoint);
+ void post(SpanAdapter span, Exchange exchange, Endpoint endpoint);
/**
* This method returns the 'span.kind' value for use when the component
@@ -105,7 +103,7 @@ public String getComponentClassName() {
*
* @return The kind
*/
- String getInitiatorSpanKind();
+ SpanKind getInitiatorSpanKind();
/**
* This method returns the 'span.kind' value for use when the component
@@ -113,7 +111,7 @@ public String getComponentClassName() {
*
* @return The kind
*/
- String getReceiverSpanKind();
+ SpanKind getReceiverSpanKind();
/**
* This method returns the map to be used for headers extraction
@@ -123,16 +121,16 @@ public String getComponentClassName() {
* @param encoding whether the headers are encoded
* @return The extraction map
*/
- TextMap getExtractAdapter(Map map, boolean encoding);
+ ExtractAdapter getExtractAdapter(Map map, boolean encoding);
/**
* This method returns the map to be used for headers injection
- * when the component is receiving a communication.
+ * when the component is receiving a communication.
*
* @param map a map containing the objects
* @param encoding whether the headers are encoded
* @return The injection map
*/
- TextMap getInjectAdapter(Map map, boolean encoding);
+ InjectAdapter getInjectAdapter(Map map, boolean encoding);
}
diff --git a/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanKind.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanKind.java
new file mode 100644
index 0000000000000..f2afa79518815
--- /dev/null
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/SpanKind.java
@@ -0,0 +1,24 @@
+/*
+ * 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.tracing;
+
+public enum SpanKind {
+ SPAN_KIND_CLIENT,
+ SPAN_KIND_SERVER,
+ CONSUMER,
+ PRODUCER,
+}
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
new file mode 100644
index 0000000000000..26a838636def0
--- /dev/null
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/Tag.java
@@ -0,0 +1,29 @@
+/*
+ * 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.tracing;
+
+public enum Tag {
+ COMPONENT,
+ HTTP_STATUS,
+ HTTP_METHOD,
+ HTTP_URL,
+ MESSAGE_BUS_DESTINATION,
+ DB_TYPE,
+ DB_INSTANCE,
+ DB_STATEMENT,
+ ERROR
+}
diff --git a/components/camel-tracing/src/main/java/org/apache/camel/tracing/Tracer.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/Tracer.java
new file mode 100644
index 0000000000000..116aa67caf786
--- /dev/null
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/Tracer.java
@@ -0,0 +1,345 @@
+/*
+ * 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.tracing;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.ServiceLoader;
+import java.util.Set;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.Component;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.NamedNode;
+import org.apache.camel.Route;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.StaticService;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelLogger;
+import org.apache.camel.spi.InterceptStrategy;
+import org.apache.camel.spi.LogListener;
+import org.apache.camel.spi.RoutePolicy;
+import org.apache.camel.spi.RoutePolicyFactory;
+import org.apache.camel.support.DefaultEndpoint;
+import org.apache.camel.support.EndpointHelper;
+import org.apache.camel.support.EventNotifierSupport;
+import org.apache.camel.support.RoutePolicySupport;
+import org.apache.camel.support.service.ServiceHelper;
+import org.apache.camel.support.service.ServiceSupport;
+import org.apache.camel.tracing.decorators.AbstractInternalSpanDecorator;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.StringHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class Tracer extends ServiceSupport implements RoutePolicyFactory, StaticService, CamelContextAware {
+ protected static final Map DECORATORS = new HashMap<>();
+ private static final Logger LOG = LoggerFactory.getLogger(Tracer.class);
+
+ static {
+ ServiceLoader.load(SpanDecorator.class).forEach(d -> {
+ SpanDecorator existing = DECORATORS.get(d.getComponent());
+ // Add span decorator if no existing decorator for the component,
+ // or if derived from the existing decorator's class, allowing
+ // custom decorators to be added if they extend the standard
+ // decorators
+ if (existing == null || existing.getClass().isInstance(d)) {
+ DECORATORS.put(d.getComponent(), d);
+ }
+ });
+ }
+
+ private final TracingLogListener logListener = new TracingLogListener();
+ private final TracingEventNotifier eventNotifier = new TracingEventNotifier();
+ private Set excludePatterns = new HashSet<>(0);
+ private InterceptStrategy tracingStrategy;
+ private boolean encoding;
+ private CamelContext camelContext;
+
+ protected abstract void initTracer();
+
+ protected abstract SpanAdapter startSendingEventSpan(String operationName, SpanKind kind, SpanAdapter parent);
+
+ protected abstract SpanAdapter startExchangeBeginSpan(String operationName, SpanKind kind, SpanAdapter parent);
+
+ protected abstract void finishSpan(SpanAdapter span);
+
+ protected abstract void inject(SpanAdapter span, InjectAdapter adapter);
+
+ /**
+ * Returns the currently used tracing strategy which is responsible for tracking invoked EIP or
+ * beans.
+ *
+ * @return The currently used tracing strategy
+ */
+ public InterceptStrategy getTracingStrategy() {
+ return tracingStrategy;
+ }
+
+ /**
+ * Specifies the instance responsible for tracking invoked EIP and beans with Tracing.
+ *
+ * @param tracingStrategy The instance which tracks invoked EIP and beans
+ */
+ public void setTracingStrategy(InterceptStrategy tracingStrategy) {
+ this.tracingStrategy = tracingStrategy;
+ }
+
+ public void addDecorator(SpanDecorator decorator) {
+ DECORATORS.put(decorator.getComponent(), decorator);
+ }
+
+ @Override
+ public CamelContext getCamelContext() {
+ return camelContext;
+ }
+
+ @Override
+ public void setCamelContext(CamelContext camelContext) {
+ this.camelContext = camelContext;
+ }
+
+ public Set getExcludePatterns() {
+ return excludePatterns;
+ }
+
+ public void setExcludePatterns(Set excludePatterns) {
+ this.excludePatterns = excludePatterns;
+ }
+
+ public boolean isEncoding() {
+ return encoding;
+ }
+
+ public void setEncoding(boolean encoding) {
+ this.encoding = encoding;
+ }
+
+ /**
+ * Adds an exclude pattern that will disable tracing for Camel messages that
+ * matches the pattern.
+ *
+ * @param pattern the pattern such as route id, endpoint url
+ */
+ public void addExcludePattern(String pattern) {
+ excludePatterns.add(pattern);
+ }
+
+ @Override public RoutePolicy createRoutePolicy(CamelContext camelContext, String routeId, NamedNode route) {
+ init(camelContext);
+ return new TracingRoutePolicy();
+
+ }
+
+ /**
+ * Registers this {@link Tracer} on the {@link CamelContext} if
+ * not already registered.
+ */
+ public void init(CamelContext camelContext) {
+ if (!camelContext.hasService(this)) {
+ try {
+ // start this service eager so we init before Camel is starting up
+ camelContext.addService(this, true, true);
+ } catch (Exception e) {
+ throw RuntimeCamelException.wrapRuntimeCamelException(e);
+ }
+ }
+ }
+
+ @Override protected void doInit() throws Exception {
+ ObjectHelper.notNull(camelContext, "CamelContext", this);
+
+ camelContext.getManagementStrategy().addEventNotifier(eventNotifier);
+ if (!camelContext.getRoutePolicyFactories().contains(this)) {
+ camelContext.addRoutePolicyFactory(this);
+ }
+ camelContext.adapt(ExtendedCamelContext.class).addLogListener(logListener);
+
+ if (tracingStrategy != null) {
+ camelContext.adapt(ExtendedCamelContext.class).addInterceptStrategy(tracingStrategy);
+ }
+ initTracer();
+ ServiceHelper.startService(eventNotifier);
+ }
+
+ @Override
+ protected void doShutdown() throws Exception {
+ // stop event notifier
+ camelContext.getManagementStrategy().removeEventNotifier(eventNotifier);
+ ServiceHelper.stopService(eventNotifier);
+
+ // remove route policy
+ camelContext.getRoutePolicyFactories().remove(this);
+ }
+
+ protected SpanDecorator getSpanDecorator(Endpoint endpoint) {
+ SpanDecorator sd = null;
+
+ String uri = endpoint.getEndpointUri();
+ String splitURI[] = StringHelper.splitOnCharacter(uri, ":", 2);
+ if (splitURI[1] != null) {
+ String scheme = splitURI[0];
+ sd = DECORATORS.get(scheme);
+ }
+ if (sd == null) {
+ // okay there was no decorator found via component name (scheme), then try FQN
+ if (endpoint instanceof DefaultEndpoint) {
+ Component comp = ((DefaultEndpoint) endpoint).getComponent();
+ String fqn = comp.getClass().getName();
+ // lookup via FQN
+ sd = DECORATORS.values().stream().filter(d -> fqn.equals(d.getComponentClassName())).findFirst()
+ .orElse(null);
+ }
+ }
+ if (sd == null) {
+ sd = SpanDecorator.DEFAULT;
+ }
+
+ return sd;
+ }
+
+ private boolean isExcluded(Exchange exchange, Endpoint endpoint) {
+ String url = endpoint.getEndpointUri();
+ if (url != null && !excludePatterns.isEmpty()) {
+ for (String pattern : excludePatterns) {
+ if (EndpointHelper.matchEndpoint(exchange.getContext(), url, pattern)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private final class TracingEventNotifier extends EventNotifierSupport {
+
+ @Override
+ public void notify(CamelEvent event) throws Exception {
+ try {
+ if (event instanceof CamelEvent.ExchangeSendingEvent) {
+ CamelEvent.ExchangeSendingEvent ese = (CamelEvent.ExchangeSendingEvent) event;
+ SpanDecorator sd = getSpanDecorator(ese.getEndpoint());
+ if (sd instanceof AbstractInternalSpanDecorator || !sd.newSpan() || isExcluded(ese.getExchange(), ese.getEndpoint())) {
+ return;
+ }
+ SpanAdapter parent = ActiveSpanManager.getSpan(ese.getExchange());
+ SpanAdapter span = startSendingEventSpan(sd.getOperationName(ese.getExchange(), ese.getEndpoint()), sd.getInitiatorSpanKind(), parent);
+ sd.pre(span, ese.getExchange(), ese.getEndpoint());
+ inject(span, sd.getInjectAdapter(ese.getExchange().getIn().getHeaders(), encoding));
+ ActiveSpanManager.activate(ese.getExchange(), span);
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Tracing: start client span={}", span);
+ }
+ } else if (event instanceof CamelEvent.ExchangeSentEvent) {
+ CamelEvent.ExchangeSentEvent ese = (CamelEvent.ExchangeSentEvent) event;
+ SpanDecorator sd = getSpanDecorator(ese.getEndpoint());
+ if (sd instanceof AbstractInternalSpanDecorator || !sd.newSpan() || isExcluded(ese.getExchange(), ese.getEndpoint())) {
+ return;
+ }
+ SpanAdapter span = ActiveSpanManager.getSpan(ese.getExchange());
+ if (span != null) {
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Tracing: start client span={}", span);
+ }
+ sd.post(span, ese.getExchange(), ese.getEndpoint());
+ finishSpan(span);
+ ActiveSpanManager.deactivate(ese.getExchange());
+ } else {
+ LOG.warn("Tracing: could not find managed span for exchange={}", ese.getExchange());
+ }
+ }
+ } catch (Throwable t) {
+ // This exception is ignored
+ LOG.warn("Tracing: Failed to capture tracing data", t);
+ }
+ }
+ }
+
+ private final class TracingRoutePolicy extends RoutePolicySupport {
+
+ @Override
+ public void onExchangeBegin(Route route, Exchange exchange) {
+ try {
+ if (isExcluded(exchange, route.getEndpoint())) {
+ return;
+ }
+ SpanDecorator sd = getSpanDecorator(route.getEndpoint());
+ SpanAdapter parent = ActiveSpanManager.getSpan(exchange);
+ SpanAdapter span;
+ if (parent == null && !(sd instanceof AbstractInternalSpanDecorator)) {
+ span = startExchangeBeginSpan(sd.getOperationName(exchange, route.getEndpoint()), sd.getReceiverSpanKind(), null);
+ } else {
+ span = startExchangeBeginSpan(sd.getOperationName(exchange, route.getEndpoint()), null, parent);
+ }
+ sd.pre(span, exchange, route.getEndpoint());
+ ActiveSpanManager.activate(exchange, span);
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Tracing: start server span={}", span);
+ }
+ } catch (Throwable t) {
+ // This exception is ignored
+ LOG.warn("Tracing: Failed to capture tracing data", t);
+ }
+ }
+
+ @Override
+ public void onExchangeDone(Route route, Exchange exchange) {
+ try {
+ if (isExcluded(exchange, route.getEndpoint())) {
+ return;
+ }
+ SpanAdapter span = ActiveSpanManager.getSpan(exchange);
+ if (span != null) {
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Tracing: finish server span={}", span);
+ }
+ SpanDecorator sd = getSpanDecorator(route.getEndpoint());
+ sd.post(span, exchange, route.getEndpoint());
+ finishSpan(span);
+ ActiveSpanManager.deactivate(exchange);
+ } else {
+ LOG.warn("Tracing: could not find managed span for exchange={}", exchange);
+ }
+ } catch (Throwable t) {
+ // This exception is ignored
+ LOG.warn("Tracing: Failed to capture tracing data", t);
+ }
+ }
+ }
+
+ private final class TracingLogListener implements LogListener {
+
+ @Override
+ public String onLog(Exchange exchange, CamelLogger camelLogger, String message) {
+ try {
+ SpanAdapter span = ActiveSpanManager.getSpan(exchange);
+ if (span != null) {
+ Map fields = new HashMap<>();
+ fields.put("message", message);
+ span.log(fields);
+ }
+ } catch (Throwable t) {
+ // This exception is ignored
+ LOG.warn("Tracing: Failed to capture tracing data", t);
+ }
+ return message;
+ }
+ }
+}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractHttpSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractHttpSpanDecorator.java
similarity index 86%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractHttpSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractHttpSpanDecorator.java
index 617223a8795c9..cbdc67b1f0bcd 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractHttpSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractHttpSpanDecorator.java
@@ -14,30 +14,24 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
-import io.opentracing.Span;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.Tag;
public abstract class AbstractHttpSpanDecorator extends AbstractSpanDecorator {
public static final String POST_METHOD = "POST";
public static final String GET_METHOD = "GET";
- @Override
- public String getOperationName(Exchange exchange, Endpoint endpoint) {
- // Based on HTTP component documentation:
- return getHttpMethod(exchange, endpoint);
- }
-
public static String getHttpMethod(Exchange exchange, Endpoint endpoint) {
// 1. Use method provided in header.
Object method = exchange.getIn().getHeader(Exchange.HTTP_METHOD);
if (method instanceof String) {
- return (String)method;
+ return (String) method;
}
// 2. GET if query string is provided in header.
@@ -60,15 +54,20 @@ public static String getHttpMethod(Exchange exchange, Endpoint endpoint) {
}
@Override
- public void pre(Span span, Exchange exchange, Endpoint endpoint) {
+ public String getOperationName(Exchange exchange, Endpoint endpoint) {
+ // Based on HTTP component documentation:
+ return getHttpMethod(exchange, endpoint);
+ }
+
+ @Override
+ public void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
super.pre(span, exchange, endpoint);
String httpUrl = getHttpURL(exchange, endpoint);
if (httpUrl != null) {
- span.setTag(Tags.HTTP_URL.getKey(), httpUrl);
+ span.setTag(Tag.HTTP_URL, httpUrl);
}
-
- span.setTag(Tags.HTTP_METHOD.getKey(), getHttpMethod(exchange, endpoint));
+ span.setTag(Tag.HTTP_METHOD, getHttpMethod(exchange, endpoint));
}
protected String getHttpURL(Exchange exchange, Endpoint endpoint) {
@@ -91,14 +90,14 @@ protected String getHttpURL(Exchange exchange, Endpoint endpoint) {
}
@Override
- public void post(Span span, Exchange exchange, Endpoint endpoint) {
+ public void post(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
super.post(span, exchange, endpoint);
Message message = exchange.getMessage();
if (message != null) {
Integer responseCode = message.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
if (responseCode != null) {
- span.setTag(Tags.HTTP_STATUS.getKey(), responseCode);
+ span.setTag(Tag.HTTP_STATUS, responseCode);
}
}
}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractInternalSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractInternalSpanDecorator.java
similarity index 96%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractInternalSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractInternalSpanDecorator.java
index 1d9e329fc78b1..a0c08a91b523a 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractInternalSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractInternalSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractMessagingSpanDecorator.java
similarity index 70%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractMessagingSpanDecorator.java
index e3b5ac3a136a0..976580fbd262e 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractMessagingSpanDecorator.java
@@ -14,17 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
-import java.util.Map;
+import java.util.*;
-import io.opentracing.Span;
-import io.opentracing.propagation.TextMap;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
-import org.apache.camel.opentracing.propagation.CamelMessagingHeadersExtractAdapter;
-import org.apache.camel.opentracing.propagation.CamelMessagingHeadersInjectAdapter;
+import org.apache.camel.tracing.ExtractAdapter;
+import org.apache.camel.tracing.InjectAdapter;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.SpanKind;
+import org.apache.camel.tracing.Tag;
+import org.apache.camel.tracing.propagation.CamelMessagingHeadersExtractAdapter;
+import org.apache.camel.tracing.propagation.CamelMessagingHeadersInjectAdapter;
public abstract class AbstractMessagingSpanDecorator extends AbstractSpanDecorator {
@@ -37,10 +39,9 @@ public String getOperationName(Exchange exchange, Endpoint endpoint) {
}
@Override
- public void pre(Span span, Exchange exchange, Endpoint endpoint) {
+ public void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
super.pre(span, exchange, endpoint);
-
- span.setTag(Tags.MESSAGE_BUS_DESTINATION.getKey(), getDestination(exchange, endpoint));
+ span.setTag(Tag.MESSAGE_BUS_DESTINATION, getDestination(exchange, endpoint));
String messageId = getMessageId(exchange);
if (messageId != null) {
@@ -61,13 +62,13 @@ protected String getDestination(Exchange exchange, Endpoint endpoint) {
}
@Override
- public String getInitiatorSpanKind() {
- return "producer";
+ public SpanKind getInitiatorSpanKind() {
+ return SpanKind.PRODUCER;
}
@Override
- public String getReceiverSpanKind() {
- return "consumer";
+ public SpanKind getReceiverSpanKind() {
+ return SpanKind.CONSUMER;
}
/**
@@ -80,12 +81,12 @@ protected String getMessageId(Exchange exchange) {
}
@Override
- public TextMap getExtractAdapter(final Map map, final boolean jmsEncoding) {
+ public ExtractAdapter getExtractAdapter(final Map map, final boolean jmsEncoding) {
return new CamelMessagingHeadersExtractAdapter(map, jmsEncoding);
}
@Override
- public TextMap getInjectAdapter(final Map map, final boolean jmsEncoding) {
+ public InjectAdapter getInjectAdapter(final Map map, final boolean jmsEncoding) {
return new CamelMessagingHeadersInjectAdapter(map, jmsEncoding);
}
}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractSpanDecorator.java
similarity index 80%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractSpanDecorator.java
index 1f392d9c07bde..5a80df243a43b 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractSpanDecorator.java
@@ -14,20 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
-import io.opentracing.Span;
-import io.opentracing.propagation.TextMap;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
-import org.apache.camel.opentracing.SpanDecorator;
-import org.apache.camel.opentracing.propagation.CamelHeadersExtractAdapter;
-import org.apache.camel.opentracing.propagation.CamelHeadersInjectAdapter;
+import org.apache.camel.tracing.ExtractAdapter;
+import org.apache.camel.tracing.InjectAdapter;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.SpanDecorator;
+import org.apache.camel.tracing.SpanKind;
+import org.apache.camel.tracing.propagation.CamelHeadersExtractAdapter;
+import org.apache.camel.tracing.propagation.CamelHeadersInjectAdapter;
import org.apache.camel.util.StringHelper;
import org.apache.camel.util.URISupport;
@@ -36,21 +35,6 @@
*/
public abstract class AbstractSpanDecorator implements SpanDecorator {
- @Override
- public boolean newSpan() {
- return true;
- }
-
- @Override
- public String getOperationName(Exchange exchange, Endpoint endpoint) {
- // OpenTracing aims to use low cardinality operation names. Ideally a
- // specific
- // span decorator should be defined for all relevant Camel components
- // that
- // identify a meaningful operation name
- return getComponentName(endpoint);
- }
-
/**
* This method removes the scheme, any leading slash characters and options
* from the supplied URI. This is intended to extract a meaningful name from
@@ -70,10 +54,50 @@ public static String stripSchemeAndOptions(Endpoint endpoint) {
return end == -1 ? endpoint.getEndpointUri().substring(start) : endpoint.getEndpointUri().substring(start, end);
}
+ public static Map toQueryParameters(String uri) {
+ int index = uri.indexOf('?');
+ if (index != -1) {
+ String queryString = uri.substring(index + 1);
+ Map map = new HashMap<>();
+ for (String param : queryString.split("&")) {
+ String[] parts = param.split("=");
+ if (parts.length == 2) {
+ map.put(parts[0], parts[1]);
+ }
+ }
+ return map;
+ }
+ return Collections.emptyMap();
+ }
+
+ private static String getComponentName(Endpoint endpoint) {
+ String[] splitURI = StringHelper.splitOnCharacter(endpoint.getEndpointUri(), ":", 2);
+ if (splitURI.length > 0) {
+ return splitURI[0];
+ } else {
+ return null;
+ }
+ }
+
@Override
- public void pre(Span span, Exchange exchange, Endpoint endpoint) {
+ public boolean newSpan() {
+ return true;
+ }
+
+ @Override
+ public String getOperationName(Exchange exchange, Endpoint endpoint) {
+ // OpenTracing aims to use low cardinality operation names. Ideally a
+ // specific
+ // span decorator should be defined for all relevant Camel components
+ // that
+ // identify a meaningful operation name
+ return getComponentName(endpoint);
+ }
+
+ @Override
+ public void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
String scheme = getComponentName(endpoint);
- span.setTag(Tags.COMPONENT.getKey(), CAMEL_COMPONENT + scheme);
+ span.setComponent(CAMEL_COMPONENT + scheme);
// Including the endpoint URI provides access to any options that may
// have been provided, for
@@ -82,9 +106,9 @@ public void pre(Span span, Exchange exchange, Endpoint endpoint) {
}
@Override
- public void post(Span span, Exchange exchange, Endpoint endpoint) {
+ public void post(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
if (exchange.isFailed()) {
- span.setTag(Tags.ERROR.getKey(), true);
+ span.setError(true);
if (exchange.getException() != null) {
Map logEvent = new HashMap<>();
logEvent.put("event", "error");
@@ -96,48 +120,23 @@ public void post(Span span, Exchange exchange, Endpoint endpoint) {
}
@Override
- public String getInitiatorSpanKind() {
- return Tags.SPAN_KIND_CLIENT;
+ public SpanKind getInitiatorSpanKind() {
+ return SpanKind.SPAN_KIND_CLIENT;
}
@Override
- public String getReceiverSpanKind() {
- return Tags.SPAN_KIND_SERVER;
- }
-
- public static Map toQueryParameters(String uri) {
- int index = uri.indexOf('?');
- if (index != -1) {
- String queryString = uri.substring(index + 1);
- Map map = new HashMap<>();
- for (String param : queryString.split("&")) {
- String[] parts = param.split("=");
- if (parts.length == 2) {
- map.put(parts[0], parts[1]);
- }
- }
- return map;
- }
- return Collections.emptyMap();
- }
-
- private static String getComponentName(Endpoint endpoint) {
- String[] splitURI = StringHelper.splitOnCharacter(endpoint.getEndpointUri(), ":", 2);
- if (splitURI.length > 0) {
- return splitURI[0];
- } else {
- return null;
- }
+ public SpanKind getReceiverSpanKind() {
+ return SpanKind.SPAN_KIND_SERVER;
}
@Override
- public TextMap getExtractAdapter(final Map map, boolean encoding) {
+ public ExtractAdapter getExtractAdapter(final Map map, boolean encoding) {
// no encoding supported per default
return new CamelHeadersExtractAdapter(map);
}
@Override
- public TextMap getInjectAdapter(final Map map, boolean encoding) {
+ public InjectAdapter getInjectAdapter(final Map map, boolean encoding) {
// no encoding supported per default
return new CamelHeadersInjectAdapter(map);
}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AhcSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AhcSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AhcSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AhcSpanDecorator.java
index e2a8358123ae7..897b8e1a2441f 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AhcSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AhcSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class AhcSpanDecorator extends AbstractHttpSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AmqpSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AmqpSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AmqpSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AmqpSpanDecorator.java
index b0b0c03bcd8a0..1b8bd0f6886bc 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AmqpSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AmqpSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class AmqpSpanDecorator extends AbstractMessagingSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AwsSnsSpanDecorator.java
similarity index 96%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AwsSnsSpanDecorator.java
index 0190e97a957ff..b446a132fef6f 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AwsSnsSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Exchange;
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AwsSqsSpanDecorator.java
similarity index 96%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AwsSqsSpanDecorator.java
index 64a7e04b90a9e..a0efd0c4d3754 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AwsSqsSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Exchange;
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/CometdSpanDecorator.java
similarity index 96%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/CometdSpanDecorator.java
index 3021bca85e743..7521c804a72b6 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/CometdSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import java.net.URI;
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdsSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/CometdsSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdsSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/CometdsSpanDecorator.java
index ac8a83f190037..6432dbfdc8d81 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdsSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/CometdsSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class CometdsSpanDecorator extends CometdSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CqlSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/CqlSpanDecorator.java
similarity index 79%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CqlSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/CqlSpanDecorator.java
index ad4f279fd801b..e4a5a9c3eb125 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CqlSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/CqlSpanDecorator.java
@@ -14,15 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import java.net.URI;
import java.util.Map;
-import io.opentracing.Span;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.Tag;
public class CqlSpanDecorator extends AbstractSpanDecorator {
@@ -41,24 +41,22 @@ public String getComponentClassName() {
}
@Override
- public void pre(Span span, Exchange exchange, Endpoint endpoint) {
+ public void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
super.pre(span, exchange, endpoint);
-
- span.setTag(Tags.DB_TYPE.getKey(), CASSANDRA_DB_TYPE);
-
+ span.setTag(Tag.DB_TYPE, CASSANDRA_DB_TYPE);
URI uri = URI.create(endpoint.getEndpointUri());
if (uri.getPath() != null && uri.getPath().length() > 0) {
// Strip leading '/' from path
- span.setTag(Tags.DB_INSTANCE.getKey(), uri.getPath().substring(1));
+ span.setTag(Tag.DB_INSTANCE, uri.getPath().substring(1));
}
Object cql = exchange.getIn().getHeader(CAMEL_CQL_QUERY);
if (cql != null) {
- span.setTag(Tags.DB_STATEMENT.getKey(), cql.toString());
+ span.setTag(Tag.DB_STATEMENT, cql.toString());
} else {
Map queryParameters = toQueryParameters(endpoint.getEndpointUri());
if (queryParameters.containsKey("cql")) {
- span.setTag(Tags.DB_STATEMENT.getKey(), queryParameters.get("cql"));
+ span.setTag(Tag.DB_STATEMENT, queryParameters.get("cql"));
}
}
}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DirectSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/DirectSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DirectSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/DirectSpanDecorator.java
index 98b3fd4f76c58..67ae5858896dd 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DirectSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/DirectSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class DirectSpanDecorator extends AbstractInternalSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DirectvmSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/DirectvmSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DirectvmSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/DirectvmSpanDecorator.java
index 85aee6eb66d43..f29f03f510640 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DirectvmSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/DirectvmSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class DirectvmSpanDecorator extends AbstractInternalSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/DisruptorSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/DisruptorSpanDecorator.java
index 1e0f43f7774c5..d254ec9eae751 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/DisruptorSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class DisruptorSpanDecorator extends AbstractInternalSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorvmSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/DisruptorvmSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorvmSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/DisruptorvmSpanDecorator.java
index 4f8bd2c61d5c5..967a38fc78483 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorvmSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/DisruptorvmSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class DisruptorvmSpanDecorator extends AbstractInternalSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/ElasticsearchSpanDecorator.java
similarity index 86%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/ElasticsearchSpanDecorator.java
index aadfc2fc0a465..fec79cac2bd6b 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/ElasticsearchSpanDecorator.java
@@ -14,14 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import java.util.Map;
-import io.opentracing.Span;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.Tag;
public class ElasticsearchSpanDecorator extends AbstractSpanDecorator {
@@ -47,14 +47,13 @@ public String getOperationName(Exchange exchange, Endpoint endpoint) {
}
@Override
- public void pre(Span span, Exchange exchange, Endpoint endpoint) {
+ public void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
super.pre(span, exchange, endpoint);
-
- span.setTag(Tags.DB_TYPE.getKey(), ELASTICSEARCH_DB_TYPE);
+ span.setTag(Tag.DB_TYPE, ELASTICSEARCH_DB_TYPE);
Map queryParameters = toQueryParameters(endpoint.getEndpointUri());
if (queryParameters.containsKey("indexName")) {
- span.setTag(Tags.DB_INSTANCE.getKey(), queryParameters.get("indexName"));
+ span.setTag(Tag.DB_INSTANCE, queryParameters.get("indexName"));
}
String cluster = stripSchemeAndOptions(endpoint);
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/HttpSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/HttpSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/HttpSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/HttpSpanDecorator.java
index 60d03a9fb4137..def7a352fcada 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/HttpSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/HttpSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class HttpSpanDecorator extends AbstractHttpSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/HttpsSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/HttpsSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/HttpsSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/HttpsSpanDecorator.java
index 61ff7514c3cd1..38377eb3010f4 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/HttpsSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/HttpsSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class HttpsSpanDecorator extends HttpSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/IronmqSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/IronmqSpanDecorator.java
similarity index 96%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/IronmqSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/IronmqSpanDecorator.java
index 32d140b695d63..4c4ec594b3d46 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/IronmqSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/IronmqSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Exchange;
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JdbcSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/JdbcSpanDecorator.java
similarity index 81%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JdbcSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/JdbcSpanDecorator.java
index 221f782bf0b22..8b1a197166bef 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JdbcSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/JdbcSpanDecorator.java
@@ -14,12 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
-import io.opentracing.Span;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.Tag;
public class JdbcSpanDecorator extends AbstractSpanDecorator {
@@ -34,14 +34,14 @@ public String getComponentClassName() {
}
@Override
- public void pre(Span span, Exchange exchange, Endpoint endpoint) {
+ public void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
super.pre(span, exchange, endpoint);
- span.setTag(Tags.DB_TYPE.getKey(), "sql");
+ span.setTag(Tag.DB_TYPE, "sql");
Object body = exchange.getIn().getBody();
if (body instanceof String) {
- span.setTag(Tags.DB_STATEMENT.getKey(), (String)body);
+ span.setTag(Tag.DB_STATEMENT, (String)body);
}
}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JettySpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/JettySpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JettySpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/JettySpanDecorator.java
index 0f006de8e940b..94a418a60a3f2 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JettySpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/JettySpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class JettySpanDecorator extends AbstractHttpSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JmsSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/JmsSpanDecorator.java
similarity index 96%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JmsSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/JmsSpanDecorator.java
index 336016069af9a..560e5aa158ec1 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JmsSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/JmsSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Exchange;
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/KafkaSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/KafkaSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/KafkaSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/KafkaSpanDecorator.java
index 664f832b4d1bc..1900b7abb93f2 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/KafkaSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/KafkaSpanDecorator.java
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import java.util.Map;
-import io.opentracing.Span;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
+import org.apache.camel.tracing.SpanAdapter;
public class KafkaSpanDecorator extends AbstractMessagingSpanDecorator {
@@ -59,7 +59,7 @@ public String getDestination(Exchange exchange, Endpoint endpoint) {
}
@Override
- public void pre(Span span, Exchange exchange, Endpoint endpoint) {
+ public void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
super.pre(span, exchange, endpoint);
String partition = getValue(exchange, PARTITION, Integer.class);
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/LogSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/LogSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/LogSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/LogSpanDecorator.java
index d0489e476dcd3..8117c26460717 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/LogSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/LogSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class LogSpanDecorator extends AbstractSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/MongoDBSpanDecorator.java
similarity index 82%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/MongoDBSpanDecorator.java
index 6c1e9a2150182..31add1d1e76b7 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/MongoDBSpanDecorator.java
@@ -14,14 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import java.util.Map;
-import io.opentracing.Span;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.Tag;
public class MongoDBSpanDecorator extends AbstractSpanDecorator {
@@ -46,17 +46,16 @@ public String getOperationName(Exchange exchange, Endpoint endpoint) {
}
@Override
- public void pre(Span span, Exchange exchange, Endpoint endpoint) {
+ public void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
super.pre(span, exchange, endpoint);
- span.setTag(Tags.DB_TYPE.getKey(), getComponent());
-
+ span.setTag(Tag.DB_TYPE, getComponent());
Map queryParameters = toQueryParameters(endpoint.getEndpointUri());
String database = queryParameters.get("database");
if (database != null) {
- span.setTag(Tags.DB_INSTANCE.getKey(), database);
+ span.setTag(Tag.DB_INSTANCE, database);
}
- span.setTag(Tags.DB_STATEMENT.getKey(), queryParameters.toString());
+ span.setTag(Tag.DB_STATEMENT, queryParameters.toString());
}
}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/NatsSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/NatsSpanDecorator.java
similarity index 96%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/NatsSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/NatsSpanDecorator.java
index 0882576c56231..0cc1be87215e2 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/NatsSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/NatsSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Exchange;
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/NettyHttpSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/NettyHttpSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/NettyHttpSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/NettyHttpSpanDecorator.java
index 909a01fe04c61..fbda6ba5c0caa 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/NettyHttpSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/NettyHttpSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class NettyHttpSpanDecorator extends AbstractHttpSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/NsqSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/NsqSpanDecorator.java
similarity index 97%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/NsqSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/NsqSpanDecorator.java
index aeb8d385d818e..b953ba3e3559f 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/NsqSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/NsqSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import java.util.Map;
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/PahoSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/PahoSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/PahoSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/PahoSpanDecorator.java
index 5e9faa52f2004..c215529effb0a 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/PahoSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/PahoSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class PahoSpanDecorator extends AbstractMessagingSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/PlatformHttpSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/PlatformHttpSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/PlatformHttpSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/PlatformHttpSpanDecorator.java
index 8bdaa78494334..4e600ebe73931 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/PlatformHttpSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/PlatformHttpSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class PlatformHttpSpanDecorator extends AbstractHttpSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RabbitmqSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/RabbitmqSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RabbitmqSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/RabbitmqSpanDecorator.java
index d741744061393..922960837b443 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RabbitmqSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/RabbitmqSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class RabbitmqSpanDecorator extends AbstractMessagingSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RestSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/RestSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RestSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/RestSpanDecorator.java
index c484021936ec6..6bbdd95ac20f1 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RestSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/RestSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
@@ -22,9 +22,9 @@
import java.util.Collections;
import java.util.List;
-import io.opentracing.Span;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
+import org.apache.camel.tracing.SpanAdapter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -48,7 +48,7 @@ public String getOperationName(Exchange exchange, Endpoint endpoint) {
}
@Override
- public void pre(Span span, Exchange exchange, Endpoint endpoint) {
+ public void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
super.pre(span, exchange, endpoint);
getParameters(getPath(endpoint.getEndpointUri())).forEach(param -> {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SedaSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/SedaSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SedaSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/SedaSpanDecorator.java
index 57096ee666c97..b8c0924e69433 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SedaSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/SedaSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class SedaSpanDecorator extends AbstractInternalSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ServletSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/ServletSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ServletSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/ServletSpanDecorator.java
index c0d03ddd3fec9..a91875c29c099 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ServletSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/ServletSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class ServletSpanDecorator extends AbstractHttpSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/Sjms2SpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/Sjms2SpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/Sjms2SpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/Sjms2SpanDecorator.java
index d3fde0fbfd494..90dc95434dd67 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/Sjms2SpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/Sjms2SpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class Sjms2SpanDecorator extends AbstractMessagingSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SjmsSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/SjmsSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SjmsSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/SjmsSpanDecorator.java
index 074d94134d5d2..3b64dddaec352 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SjmsSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/SjmsSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class SjmsSpanDecorator extends AbstractMessagingSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SqlSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/SqlSpanDecorator.java
similarity index 81%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SqlSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/SqlSpanDecorator.java
index 220ec4dd02795..c21be7ee9ae8a 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SqlSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/SqlSpanDecorator.java
@@ -14,12 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
-import io.opentracing.Span;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
+import org.apache.camel.tracing.SpanAdapter;
+import org.apache.camel.tracing.Tag;
public class SqlSpanDecorator extends AbstractSpanDecorator {
@@ -36,14 +36,13 @@ public String getComponentClassName() {
}
@Override
- public void pre(Span span, Exchange exchange, Endpoint endpoint) {
+ public void pre(SpanAdapter span, Exchange exchange, Endpoint endpoint) {
super.pre(span, exchange, endpoint);
-
- span.setTag(Tags.DB_TYPE.getKey(), "sql");
+ span.setTag(Tag.DB_TYPE, "sql");
Object sqlquery = exchange.getIn().getHeader(CAMEL_SQL_QUERY);
if (sqlquery instanceof String) {
- span.setTag(Tags.DB_STATEMENT.getKey(), (String) sqlquery);
+ span.setTag(Tag.DB_STATEMENT, (String) sqlquery);
}
}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/StompSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/StompSpanDecorator.java
similarity index 96%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/StompSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/StompSpanDecorator.java
index fcd24894b5668..b470bcd68ed8f 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/StompSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/StompSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/TimerSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/TimerSpanDecorator.java
similarity index 96%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/TimerSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/TimerSpanDecorator.java
index 3ba7c25723860..148cba10d6e73 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/TimerSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/TimerSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/UndertowSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/UndertowSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/UndertowSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/UndertowSpanDecorator.java
index 4ba59d27abbbc..56f3e6c6e42df 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/UndertowSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/UndertowSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class UndertowSpanDecorator extends AbstractHttpSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/VmSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/VmSpanDecorator.java
similarity index 95%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/VmSpanDecorator.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/VmSpanDecorator.java
index 4d5c48792e452..eec86bb800b6e 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/VmSpanDecorator.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/VmSpanDecorator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
public class VmSpanDecorator extends AbstractInternalSpanDecorator {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelHeadersExtractAdapter.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelHeadersExtractAdapter.java
similarity index 76%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelHeadersExtractAdapter.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelHeadersExtractAdapter.java
index 3387560b347b9..a4c36a538d66c 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelHeadersExtractAdapter.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelHeadersExtractAdapter.java
@@ -14,21 +14,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.propagation;
+package org.apache.camel.tracing.propagation;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
-import io.opentracing.propagation.TextMap;
+import org.apache.camel.tracing.ExtractAdapter;
-public final class CamelHeadersExtractAdapter implements TextMap {
+public final class CamelHeadersExtractAdapter implements ExtractAdapter {
private final Map map = new HashMap<>();
public CamelHeadersExtractAdapter(final Map 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()));
+ this.map.put(e.getKey(), (String) e.getValue()));
}
@Override
@@ -36,8 +36,7 @@ public Iterator> iterator() {
return map.entrySet().iterator();
}
- @Override
- public void put(String key, String value) {
- throw new UnsupportedOperationException("CamelHeadersExtractAdapter should only be used with Tracer.extract()");
+ @Override public Object get(String key) {
+ return this.map.get(key);
}
}
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelHeadersInjectAdapter.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelHeadersInjectAdapter.java
similarity index 75%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelHeadersInjectAdapter.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelHeadersInjectAdapter.java
index 682ababd25ea1..70a3f3f101e16 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelHeadersInjectAdapter.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelHeadersInjectAdapter.java
@@ -14,25 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.propagation;
+package org.apache.camel.tracing.propagation;
-import java.util.Iterator;
import java.util.Map;
-import io.opentracing.propagation.TextMap;
+import org.apache.camel.tracing.InjectAdapter;
-public final class CamelHeadersInjectAdapter implements TextMap {
+public final class CamelHeadersInjectAdapter implements InjectAdapter {
private final Map map;
public CamelHeadersInjectAdapter(final Map map) {
this.map = map;
}
- @Override
- public Iterator> iterator() {
- throw new UnsupportedOperationException("CamelHeadersInjectAdapter should only be used with Tracer.inject()");
- }
-
@Override
public void put(String key, String value) {
// Assume any header property that begins with 'Camel' is for internal use
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapter.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersExtractAdapter.java
similarity index 89%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapter.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersExtractAdapter.java
index 0f1ae098e23fc..c7a5b8b8a1b38 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapter.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersExtractAdapter.java
@@ -14,16 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.propagation;
+package org.apache.camel.tracing.propagation;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
-import io.opentracing.propagation.TextMap;
+import org.apache.camel.tracing.ExtractAdapter;
-public final class CamelMessagingHeadersExtractAdapter implements TextMap {
+public final class CamelMessagingHeadersExtractAdapter implements ExtractAdapter {
private final Map map = new HashMap<>();
private final boolean jmsEncoding;
@@ -46,8 +46,8 @@ public Iterator> iterator() {
}
@Override
- public void put(String key, String value) {
- throw new UnsupportedOperationException("CamelMessagingHeadersExtractAdapter should only be used with Tracer.extract()");
+ public Object get(String key) {
+ return this.map.get(key);
}
/**
@@ -55,7 +55,6 @@ public void put(String key, String value) {
* encoding and decoding is required by JMS. This is implemented here rather
* than specifically to JMS so that other Camel messaging endpoints can take
* part in traces where the peer is using JMS.
- *
*/
private String decodeDash(String key) {
if (jmsEncoding) {
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapter.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersInjectAdapter.java
similarity index 85%
rename from components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapter.java
rename to components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersInjectAdapter.java
index d42c928c321a6..7057b339b6170 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapter.java
+++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersInjectAdapter.java
@@ -14,14 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.propagation;
+package org.apache.camel.tracing.propagation;
-import java.util.Iterator;
import java.util.Map;
-import io.opentracing.propagation.TextMap;
+import org.apache.camel.tracing.InjectAdapter;
-public final class CamelMessagingHeadersInjectAdapter implements TextMap {
+public final class CamelMessagingHeadersInjectAdapter implements InjectAdapter {
// As per the JMS specs, header names must be valid Java identifier part
// characters.
@@ -38,11 +37,6 @@ public CamelMessagingHeadersInjectAdapter(final Map map, boolean
this.jmsEncoding = jmsEncoding;
}
- @Override
- public Iterator> iterator() {
- throw new UnsupportedOperationException("CamelHeadersInjectAdapter should only be used with Tracer.inject()");
- }
-
@Override
public void put(String key, String value) {
// Assume any header property that begins with 'Camel' is for internal
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/ActiveSpanManagerTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/ActiveSpanManagerTest.java
similarity index 84%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/ActiveSpanManagerTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/ActiveSpanManagerTest.java
index d4b33358c45fe..972354dbdadbf 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/ActiveSpanManagerTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/ActiveSpanManagerTest.java
@@ -14,10 +14,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing;
+package org.apache.camel.tracing;
-import io.opentracing.Span;
-import io.opentracing.mock.MockTracer;
import org.apache.camel.Exchange;
import org.apache.camel.test.junit5.ExchangeTestSupport;
import org.junit.jupiter.api.Test;
@@ -27,8 +25,6 @@
public class ActiveSpanManagerTest extends ExchangeTestSupport {
- private MockTracer tracer = new MockTracer();
-
@Test
public void testNoSpan() {
Exchange exchange = createExchange();
@@ -38,7 +34,7 @@ public void testNoSpan() {
@Test
public void testCurrentSpan() {
Exchange exchange = createExchange();
- Span span = tracer.buildSpan("test").start();
+ SpanAdapter span = MockSpanAdapter.buildSpan("test");
ActiveSpanManager.activate(exchange, span);
assertEquals(span, ActiveSpanManager.getSpan(exchange));
@@ -49,9 +45,9 @@ public void testCurrentSpan() {
@Test
public void testCreateChild() {
Exchange exchange = createExchange();
- Span parent = tracer.buildSpan("parent").start();
+ SpanAdapter parent = MockSpanAdapter.buildSpan("parent");
ActiveSpanManager.activate(exchange, parent);
- Span child = tracer.buildSpan("child").start();
+ SpanAdapter child = MockSpanAdapter.buildSpan("child");
ActiveSpanManager.activate(exchange, child);
assertEquals(child, ActiveSpanManager.getSpan(exchange));
@@ -63,7 +59,7 @@ public void testCreateChild() {
@Test
public void testIsolatedConcurrentExchanges() {
Exchange exchange = createExchange();
- Span parent = tracer.buildSpan("parent").start();
+ SpanAdapter parent = MockSpanAdapter.buildSpan("parent");
ActiveSpanManager.activate(exchange, parent);
Exchange path1 = exchange.copy();
@@ -73,10 +69,10 @@ public void testIsolatedConcurrentExchanges() {
assertEquals(parent, ActiveSpanManager.getSpan(path1));
assertEquals(parent, ActiveSpanManager.getSpan(path2));
- Span child1 = tracer.buildSpan("child1").start();
+ SpanAdapter child1 = MockSpanAdapter.buildSpan("child1");
ActiveSpanManager.activate(path1, child1);
- Span child2 = tracer.buildSpan("child2").start();
+ SpanAdapter child2 = MockSpanAdapter.buildSpan("child2");
ActiveSpanManager.activate(path2, child2);
ActiveSpanManager.deactivate(path2);
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
new file mode 100644
index 0000000000000..884fd043b94ee
--- /dev/null
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/MockSpanAdapter.java
@@ -0,0 +1,98 @@
+/*
+ * 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.tracing;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class MockSpanAdapter implements SpanAdapter {
+
+ private List logEntries = new ArrayList<>();
+ private HashMap tags = new HashMap<>();
+
+ static long nowMicros() {
+ return System.currentTimeMillis() * 1000;
+ }
+
+ static MockSpanAdapter buildSpan(String operation) {
+ return new MockSpanAdapter().setOperation(operation);
+ }
+
+ public HashMap tags() {
+ return tags;
+ }
+
+ @Override public void setComponent(String component) {
+ this.tags.put(Tag.COMPONENT.name(), component);
+ }
+
+ @Override public void setError(boolean error) {
+ this.tags.put(Tag.ERROR.name(), error);
+ }
+
+ @Override public void setTag(Tag key, String value) {
+ this.tags.put(key.name(), value);
+ }
+
+ @Override public void setTag(Tag key, Number value) {
+ this.tags.put(key.name(), value);
+ }
+
+ @Override public void setTag(String key, String value) {
+ this.tags.put(key, value);
+ }
+
+ @Override public void setTag(String key, Number value) {
+ this.tags.put(key, value);
+ }
+
+ @Override public void setTag(String key, Boolean value) {
+ this.tags.put(key, value);
+ }
+
+ @Override public void log(Map fields) {
+ this.logEntries.add(new LogEntry(nowMicros(), fields));
+ }
+
+ public List logEntries() {
+ return new ArrayList<>(this.logEntries);
+ }
+
+ public static final class LogEntry {
+ private final long timestampMicros;
+ private final Map fields;
+
+ public LogEntry(long timestampMicros, Map fields) {
+ this.timestampMicros = timestampMicros;
+ this.fields = fields;
+ }
+
+ public long timestampMicros() {
+ return timestampMicros;
+ }
+
+ public Map fields() {
+ return fields;
+ }
+ }
+
+ public MockSpanAdapter setOperation(String operation) {
+ return this;
+ }
+}
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AbstractHttpSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractHttpSpanDecoratorTest.java
similarity index 93%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AbstractHttpSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractHttpSpanDecoratorTest.java
index 566cfbab4fbe5..56825db84a60d 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AbstractHttpSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractHttpSpanDecoratorTest.java
@@ -14,15 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
-import io.opentracing.mock.MockSpan;
-import io.opentracing.mock.MockTracer;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
-import org.apache.camel.opentracing.SpanDecorator;
+import org.apache.camel.tracing.MockSpanAdapter;
+import org.apache.camel.tracing.SpanDecorator;
+import org.apache.camel.tracing.Tag;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -144,13 +143,12 @@ public String getComponentClassName() {
}
};
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.pre(span, exchange, endpoint);
- assertEquals(TEST_URI, span.tags().get(Tags.HTTP_URL.getKey()));
- assertTrue(span.tags().containsKey(Tags.HTTP_METHOD.getKey()));
+ assertEquals(TEST_URI, span.tags().get(Tag.HTTP_URL.name()));
+ assertTrue(span.tags().containsKey(Tag.HTTP_METHOD.name()));
}
@Test
@@ -259,7 +257,7 @@ public void testPostResponseCode() {
Mockito.when(exchange.getMessage()).thenReturn(message);
Mockito.when(message.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class)).thenReturn(200);
-
+
SpanDecorator decorator = new AbstractHttpSpanDecorator() {
@Override
public String getComponent() {
@@ -272,12 +270,11 @@ public String getComponentClassName() {
}
};
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.post(span, exchange, null);
- assertEquals(200, span.tags().get(Tags.HTTP_STATUS.getKey()));
+ assertEquals(200, span.tags().get(Tag.HTTP_STATUS.name()));
}
}
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractMessagingSpanDecoratorTest.java
similarity index 85%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractMessagingSpanDecoratorTest.java
index de1fb93cdedcf..3c9ee24bc6d83 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractMessagingSpanDecoratorTest.java
@@ -14,14 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
-import io.opentracing.mock.MockSpan;
-import io.opentracing.mock.MockTracer;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
-import org.apache.camel.opentracing.SpanDecorator;
+import org.apache.camel.tracing.MockSpanAdapter;
+import org.apache.camel.tracing.SpanDecorator;
+import org.apache.camel.tracing.Tag;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -68,12 +67,11 @@ public String getComponentClassName() {
}
};
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.pre(span, null, endpoint);
- assertEquals("MyQueue", span.tags().get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
+ assertEquals("MyQueue", span.tags().get(Tag.MESSAGE_BUS_DESTINATION.name()));
}
@Test
@@ -101,8 +99,7 @@ public String getMessageId(Exchange exchange) {
}
};
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.pre(span, exchange, endpoint);
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AbstractSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractSpanDecoratorTest.java
similarity index 87%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AbstractSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractSpanDecoratorTest.java
index 222668d25d2b6..452768e3d3dcd 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AbstractSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AbstractSpanDecoratorTest.java
@@ -14,14 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
-import io.opentracing.mock.MockSpan;
-import io.opentracing.mock.MockTracer;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
-import org.apache.camel.opentracing.SpanDecorator;
+import org.apache.camel.tracing.MockSpanAdapter;
+import org.apache.camel.tracing.SpanDecorator;
+import org.apache.camel.tracing.Tag;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -72,12 +71,11 @@ public String getComponentClassName() {
}
};
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.pre(span, null, endpoint);
- assertEquals("camel-test", span.tags().get(Tags.COMPONENT.getKey()));
+ assertEquals("camel-test", span.tags().get(Tag.COMPONENT.name()));
}
@Test
@@ -85,7 +83,7 @@ public void testPostExchangeFailed() {
Exchange exchange = Mockito.mock(Exchange.class);
Mockito.when(exchange.isFailed()).thenReturn(true);
-
+
Exception e = new Exception("Test Message");
Mockito.when(exchange.getException()).thenReturn(e);
@@ -101,12 +99,11 @@ public String getComponentClassName() {
}
};
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.post(span, exchange, null);
- assertEquals(true, span.tags().get(Tags.ERROR.getKey()));
+ assertEquals(true, span.tags().get(Tag.ERROR.name()));
assertEquals(1, span.logEntries().size());
assertEquals("error", span.logEntries().get(0).fields().get("event"));
assertEquals("Exception", span.logEntries().get(0).fields().get("error.kind"));
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AwsSnsSpanDecoratorTest.java
similarity index 96%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AwsSnsSpanDecoratorTest.java
index 7906befce6a57..87bd1a498a6a4 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AwsSnsSpanDecoratorTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AwsSqsSpanDecoratorTest.java
similarity index 96%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AwsSqsSpanDecoratorTest.java
index 7d70ef66ad57b..819e0971f1f44 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/AwsSqsSpanDecoratorTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CometdSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/CometdSpanDecoratorTest.java
similarity index 96%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CometdSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/CometdSpanDecoratorTest.java
index 1800f9a5184e3..bc3e18fd80c74 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CometdSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/CometdSpanDecoratorTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Endpoint;
import org.junit.jupiter.api.Test;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CqlSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/CqlSpanDecoratorTest.java
similarity index 76%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CqlSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/CqlSpanDecoratorTest.java
index cb83bfdb53b90..cead7b81b3ff4 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CqlSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/CqlSpanDecoratorTest.java
@@ -14,15 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
-import io.opentracing.mock.MockSpan;
-import io.opentracing.mock.MockTracer;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
-import org.apache.camel.opentracing.SpanDecorator;
+import org.apache.camel.tracing.MockSpanAdapter;
+import org.apache.camel.tracing.SpanDecorator;
+import org.apache.camel.tracing.Tag;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -46,14 +45,13 @@ public void testPreCqlFromUri() {
SpanDecorator decorator = new CqlSpanDecorator();
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.pre(span, exchange, endpoint);
- assertEquals(CqlSpanDecorator.CASSANDRA_DB_TYPE, span.tags().get(Tags.DB_TYPE.getKey()));
- assertEquals(cql, span.tags().get(Tags.DB_STATEMENT.getKey()));
- assertEquals(keyspace, span.tags().get(Tags.DB_INSTANCE.getKey()));
+ assertEquals(CqlSpanDecorator.CASSANDRA_DB_TYPE, span.tags().get(Tag.DB_TYPE.name()));
+ assertEquals(cql, span.tags().get(Tag.DB_STATEMENT.name()));
+ assertEquals(keyspace, span.tags().get(Tag.DB_INSTANCE.name()));
}
@Test
@@ -70,14 +68,13 @@ public void testPreCqlFromHeader() {
SpanDecorator decorator = new CqlSpanDecorator();
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.pre(span, exchange, endpoint);
- assertEquals(CqlSpanDecorator.CASSANDRA_DB_TYPE, span.tags().get(Tags.DB_TYPE.getKey()));
- assertEquals(cql, span.tags().get(Tags.DB_STATEMENT.getKey()));
- assertNull(span.tags().get(Tags.DB_INSTANCE.getKey()));
+ 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()));
}
}
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/ElasticsearchSpanDecoratorTest.java
similarity index 84%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/ElasticsearchSpanDecoratorTest.java
index 13f2b6b60fe04..76858b0c59ba4 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/ElasticsearchSpanDecoratorTest.java
@@ -14,15 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
-import io.opentracing.mock.MockSpan;
-import io.opentracing.mock.MockTracer;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
-import org.apache.camel.opentracing.SpanDecorator;
+import org.apache.camel.tracing.MockSpanAdapter;
+import org.apache.camel.tracing.SpanDecorator;
+import org.apache.camel.tracing.Tag;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -58,13 +57,12 @@ public void testPre() {
SpanDecorator decorator = new ElasticsearchSpanDecorator();
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.pre(span, exchange, endpoint);
- assertEquals(ElasticsearchSpanDecorator.ELASTICSEARCH_DB_TYPE, span.tags().get(Tags.DB_TYPE.getKey()));
- assertEquals(indexName, span.tags().get(Tags.DB_INSTANCE.getKey()));
+ assertEquals(ElasticsearchSpanDecorator.ELASTICSEARCH_DB_TYPE, span.tags().get(Tag.DB_TYPE.name()));
+ assertEquals(indexName, span.tags().get(Tag.DB_INSTANCE.name()));
assertEquals(cluster, span.tags().get(ElasticsearchSpanDecorator.ELASTICSEARCH_CLUSTER_TAG));
}
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/IronmqSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/IronmqSpanDecoratorTest.java
similarity index 96%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/IronmqSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/IronmqSpanDecoratorTest.java
index 0b385a3b03fe8..72000ac8c4b59 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/IronmqSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/IronmqSpanDecoratorTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JdbcSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/JdbcSpanDecoratorTest.java
similarity index 78%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JdbcSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/JdbcSpanDecoratorTest.java
index a860fe429e5fc..e3162a8bd623b 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JdbcSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/JdbcSpanDecoratorTest.java
@@ -14,15 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
-import io.opentracing.mock.MockSpan;
-import io.opentracing.mock.MockTracer;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
-import org.apache.camel.opentracing.SpanDecorator;
+import org.apache.camel.tracing.MockSpanAdapter;
+import org.apache.camel.tracing.SpanDecorator;
+import org.apache.camel.tracing.Tag;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -44,13 +43,12 @@ public void testPre() {
SpanDecorator decorator = new JdbcSpanDecorator();
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.pre(span, exchange, endpoint);
- assertEquals("sql", span.tags().get(Tags.DB_TYPE.getKey()));
- assertEquals(SQL_STATEMENT, span.tags().get(Tags.DB_STATEMENT.getKey()));
+ assertEquals("sql", span.tags().get(Tag.DB_TYPE.name()));
+ assertEquals(SQL_STATEMENT, span.tags().get(Tag.DB_STATEMENT.name()));
}
}
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JmsSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/JmsSpanDecoratorTest.java
similarity index 96%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JmsSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/JmsSpanDecoratorTest.java
index afcab81ff0b2d..6081438a600ea 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JmsSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/JmsSpanDecoratorTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/KafkaSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/KafkaSpanDecoratorTest.java
similarity index 92%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/KafkaSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/KafkaSpanDecoratorTest.java
index 870a39dd5f8b0..abf7ec97b16d3 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/KafkaSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/KafkaSpanDecoratorTest.java
@@ -14,14 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
-import io.opentracing.mock.MockSpan;
-import io.opentracing.mock.MockTracer;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
-import org.apache.camel.opentracing.SpanDecorator;
+import org.apache.camel.tracing.MockSpanAdapter;
+import org.apache.camel.tracing.SpanDecorator;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -77,8 +76,7 @@ public void testPreOffsetAndPartitionAsStringHeader() {
SpanDecorator decorator = new KafkaSpanDecorator();
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.pre(span, exchange, endpoint);
@@ -104,8 +102,7 @@ public void testPrePartitionAsIntegerHeaderAndOffsetAsLongHeader() {
SpanDecorator decorator = new KafkaSpanDecorator();
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.pre(span, exchange, endpoint);
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/MongoDBSpanDecoratorTest.java
similarity index 80%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/MongoDBSpanDecoratorTest.java
index 2041857a35f3b..8023a8c4a378e 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/MongoDBSpanDecoratorTest.java
@@ -14,15 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import java.util.Map;
-import io.opentracing.mock.MockSpan;
-import io.opentracing.mock.MockTracer;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
-import org.apache.camel.opentracing.SpanDecorator;
+import org.apache.camel.tracing.MockSpanAdapter;
+import org.apache.camel.tracing.SpanDecorator;
+import org.apache.camel.tracing.Tag;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -62,14 +61,13 @@ public void testPre() {
SpanDecorator decorator = new MongoDBSpanDecorator();
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.pre(span, null, endpoint);
- assertEquals("mongodb", span.tags().get(Tags.DB_TYPE.getKey()));
- assertEquals("flights", span.tags().get(Tags.DB_INSTANCE.getKey()));
- assertTrue(span.tags().containsKey(Tags.DB_STATEMENT.getKey()));
+ assertEquals("mongodb", span.tags().get(Tag.DB_TYPE.name()));
+ assertEquals("flights", span.tags().get(Tag.DB_INSTANCE.name()));
+ assertTrue(span.tags().containsKey(Tag.DB_STATEMENT.name()));
}
}
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/RestSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/RestSpanDecoratorTest.java
similarity index 92%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/RestSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/RestSpanDecoratorTest.java
index 377e1064eccd5..54ba0f2961eab 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/RestSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/RestSpanDecoratorTest.java
@@ -14,16 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import java.util.Arrays;
-import io.opentracing.mock.MockSpan;
-import io.opentracing.mock.MockTracer;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
-import org.apache.camel.opentracing.SpanDecorator;
+import org.apache.camel.tracing.MockSpanAdapter;
+import org.apache.camel.tracing.SpanDecorator;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -85,8 +84,7 @@ protected void testParameter(String paramName, Object paramValue) {
SpanDecorator decorator = new RestSpanDecorator();
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.pre(span, exchange, endpoint);
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/SqlSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/SqlSpanDecoratorTest.java
similarity index 78%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/SqlSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/SqlSpanDecoratorTest.java
index f695dfda32dfd..697a8effb9b97 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/SqlSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/SqlSpanDecoratorTest.java
@@ -14,15 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
-import io.opentracing.mock.MockSpan;
-import io.opentracing.mock.MockTracer;
-import io.opentracing.tag.Tags;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
-import org.apache.camel.opentracing.SpanDecorator;
+import org.apache.camel.tracing.MockSpanAdapter;
+import org.apache.camel.tracing.SpanDecorator;
+import org.apache.camel.tracing.Tag;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -44,13 +43,12 @@ public void testPre() {
SpanDecorator decorator = new SqlSpanDecorator();
- MockTracer tracer = new MockTracer();
- MockSpan span = tracer.buildSpan("TestSpan").start();
+ MockSpanAdapter span = new MockSpanAdapter();
decorator.pre(span, exchange, endpoint);
- assertEquals("sql", span.tags().get(Tags.DB_TYPE.getKey()));
- assertEquals(SQL_STATEMENT, span.tags().get(Tags.DB_STATEMENT.getKey()));
+ assertEquals("sql", span.tags().get(Tag.DB_TYPE.name()));
+ assertEquals(SQL_STATEMENT, span.tags().get(Tag.DB_STATEMENT.name()));
}
}
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/StompSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/StompSpanDecoratorTest.java
similarity index 96%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/StompSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/StompSpanDecoratorTest.java
index 4412537ef8781..3c63879b1b08b 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/StompSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/StompSpanDecoratorTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
import org.apache.camel.Endpoint;
import org.junit.jupiter.api.Test;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/TimerSpanDecoratorTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/TimerSpanDecoratorTest.java
similarity index 93%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/TimerSpanDecoratorTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/TimerSpanDecoratorTest.java
index ecfb8ccd44aa1..e26eec72d86c4 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/TimerSpanDecoratorTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/decorators/TimerSpanDecoratorTest.java
@@ -14,10 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.decorators;
+package org.apache.camel.tracing.decorators;
+
import org.apache.camel.Exchange;
-import org.apache.camel.opentracing.SpanDecorator;
+import org.apache.camel.tracing.SpanDecorator;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapterTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersExtractAdapterTest.java
similarity index 95%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapterTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersExtractAdapterTest.java
index 980a5463c8e38..7868118d5fb89 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapterTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersExtractAdapterTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.propagation;
+package org.apache.camel.tracing.propagation;
import java.util.HashMap;
import java.util.Iterator;
@@ -23,7 +23,7 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import static org.apache.camel.opentracing.propagation.CamelMessagingHeadersInjectAdapter.JMS_DASH;
+import static org.apache.camel.tracing.propagation.CamelMessagingHeadersInjectAdapter.JMS_DASH;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapterTest.java b/components/camel-tracing/src/test/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersInjectAdapterTest.java
similarity index 84%
rename from components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapterTest.java
rename to components/camel-tracing/src/test/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersInjectAdapterTest.java
index 5b8326d6d0a6f..b80c79f45fee3 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapterTest.java
+++ b/components/camel-tracing/src/test/java/org/apache/camel/tracing/propagation/CamelMessagingHeadersInjectAdapterTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.opentracing.propagation;
+package org.apache.camel.tracing.propagation;
import java.util.HashMap;
import java.util.Map;
@@ -22,7 +22,7 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import static org.apache.camel.opentracing.propagation.CamelMessagingHeadersInjectAdapter.JMS_DASH;
+import static org.apache.camel.tracing.propagation.CamelMessagingHeadersInjectAdapter.JMS_DASH;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -35,13 +35,6 @@ public void before() {
map = new HashMap<>();
}
- @Test
- public void cannotGetIterator() {
- CamelMessagingHeadersInjectAdapter adapter = new CamelMessagingHeadersInjectAdapter(map, true);
- assertThrows(UnsupportedOperationException.class,
- () -> adapter.iterator());
- }
-
@Test
public void putProperties() {
CamelMessagingHeadersInjectAdapter adapter = new CamelMessagingHeadersInjectAdapter(map, true);
diff --git a/components/pom.xml b/components/pom.xml
index bb8a568fc518b..97b592a17274a 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -235,6 +235,7 @@
camel-jbpmcamel-jcachecamel-jclouds
+ camel-tracingcamel-jcrcamel-jdbccamel-jgroups-raft
@@ -291,6 +292,7 @@
camel-olingo4camel-openstackcamel-opentracing
+ camel-opentelemetrycamel-optaplannercamel-pahocamel-pdf
diff --git a/parent/pom.xml b/parent/pom.xml
index 20374383ba1e3..68a91849a0bfa 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -447,6 +447,7 @@
3.1.123.1.23.0.2
+ 0.6.00.33.00.1.87.40.0.Final
@@ -1944,6 +1945,11 @@
camel-openstack${project.version}
+
+ org.apache.camel
+ camel-opentelemetry
+ ${project.version}
+ org.apache.camelcamel-opentracing
@@ -2394,6 +2400,11 @@
camel-timer${project.version}
+
+ org.apache.camel
+ camel-tracing
+ ${project.version}
+ org.apache.camelcamel-twilio