Repository: camel Updated Branches: refs/heads/master 3e56a4f2a -> 689d3c8f0
Add messaging span decorators Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/689d3c8f Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/689d3c8f Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/689d3c8f Branch: refs/heads/master Commit: 689d3c8f09e60e9d18af29f5ea8dcf68fe7daf8f Parents: 3e56a4f Author: Gary Brown <g...@brownuk.com> Authored: Fri Mar 10 15:40:12 2017 +0000 Committer: Claus Ibsen <davscl...@apache.org> Committed: Tue Mar 14 15:02:28 2017 +0100 ---------------------------------------------------------------------- .../camel/opentracing/OpenTracingTracer.java | 4 +- .../apache/camel/opentracing/SpanDecorator.java | 16 ++++ .../AbstractMessagingSpanDecorator.java | 76 ++++++++++++++++ .../decorators/AbstractSpanDecorator.java | 27 ++++++ .../decorators/AmqpSpanDecorator.java | 26 ++++++ .../decorators/AwsSnsSpanDecorator.java | 35 +++++++ .../decorators/AwsSqsSpanDecorator.java | 35 +++++++ .../decorators/CometdSpanDecorator.java | 37 ++++++++ .../decorators/CometdsSpanDecorator.java | 26 ++++++ .../decorators/IronmqSpanDecorator.java | 35 +++++++ .../decorators/JmsSpanDecorator.java | 35 +++++++ .../decorators/KafkaSpanDecorator.java | 82 +++++++++++++++++ .../decorators/MongoDBSpanDecorator.java | 17 ---- .../decorators/MqttSpanDecorator.java | 46 ++++++++++ .../decorators/PahoSpanDecorator.java | 26 ++++++ .../decorators/RabbitmqSpanDecorator.java | 39 ++++++++ .../decorators/SjmsSpanDecorator.java | 26 ++++++ .../org.apache.camel.opentracing.SpanDecorator | 12 +++ .../AbstractMessagingSpanDecoratorTest.java | 96 ++++++++++++++++++++ .../decorators/AwsSnsSpanDecoratorTest.java | 42 +++++++++ .../decorators/AwsSqsSpanDecoratorTest.java | 42 +++++++++ .../decorators/CometdSpanDecoratorTest.java | 37 ++++++++ .../decorators/IronmqSpanDecoratorTest.java | 42 +++++++++ .../decorators/JmsSpanDecoratorTest.java | 42 +++++++++ .../decorators/KafkaSpanDecoratorTest.java | 92 +++++++++++++++++++ .../decorators/MqttSpanDecoratorTest.java | 60 ++++++++++++ .../decorators/RabbitmqSpanDecoratorTest.java | 41 +++++++++ 27 files changed, 1075 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracer.java ---------------------------------------------------------------------- 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 9a3e34e..6f709f2 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 @@ -167,7 +167,7 @@ public class OpenTracingTracer extends ServiceSupport implements RoutePolicyFact SpanManager.ManagedSpan parent = spanManager.current(); SpanDecorator sd = getSpanDecorator(ese.getEndpoint()); SpanBuilder spanBuilder = tracer.buildSpan(sd.getOperationName(ese.getExchange(), ese.getEndpoint())) - .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT); + .withTag(Tags.SPAN_KIND.getKey(), sd.getInitiatorSpanKind()); // Temporary workaround to avoid adding 'null' span as a parent if (parent != null && parent.getSpan() != null) { spanBuilder.asChildOf(parent.getSpan()); @@ -216,7 +216,7 @@ public class OpenTracingTracer extends ServiceSupport implements RoutePolicyFact Span span = tracer.buildSpan(sd.getOperationName(exchange, route.getEndpoint())) .asChildOf(tracer.extract(Format.Builtin.TEXT_MAP, new CamelHeadersExtractAdapter(exchange.getIn().getHeaders()))) - .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_SERVER) + .withTag(Tags.SPAN_KIND.getKey(), sd.getReceiverSpanKind()) .start(); sd.pre(span, exchange, route.getEndpoint()); spanManager.activate(span); http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SpanDecorator.java index 1ffeac2..5d0445a 100644 --- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SpanDecorator.java +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SpanDecorator.java @@ -76,4 +76,20 @@ public interface SpanDecorator { */ void post(Span span, Exchange exchange, Endpoint endpoint); + /** + * This method returns the 'span.kind' value for use when the component + * is initiating a communication. + * + * @return The kind + */ + String getInitiatorSpanKind(); + + /** + * This method returns the 'span.kind' value for use when the component + * is receiving a communication. + * + * @return The kind + */ + String getReceiverSpanKind(); + } http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecorator.java new file mode 100644 index 0000000..25c8377 --- /dev/null +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecorator.java @@ -0,0 +1,76 @@ +/** + * 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.decorators; + +import io.opentracing.Span; +import io.opentracing.tag.Tags; +import org.apache.camel.Endpoint; +import org.apache.camel.Exchange; + +public abstract class AbstractMessagingSpanDecorator extends AbstractSpanDecorator { + + public static final String MESSAGE_BUS_ID = "message_bus.id"; + + @Override + public String getOperationName(Exchange exchange, Endpoint endpoint) { + // Use the destination name + return getDestination(exchange, endpoint); + } + + @Override + public void pre(Span span, Exchange exchange, Endpoint endpoint) { + super.pre(span, exchange, endpoint); + + span.setTag(Tags.MESSAGE_BUS_DESTINATION.getKey(), getDestination(exchange, endpoint)); + + String messageId = (String)getMessageId(exchange); + if (messageId != null) { + span.setTag(MESSAGE_BUS_ID, messageId); + } + } + + /** + * This method identifies the destination from the supplied exchange and/or endpoint. + * + * @param exchange The exchange + * @param endpoint The endpoint + * @return The message bus destination + */ + protected String getDestination(Exchange exchange, Endpoint endpoint) { + return stripSchemeAndOptions(endpoint); + } + + @Override + public String getInitiatorSpanKind() { + return "producer"; + } + + @Override + public String getReceiverSpanKind() { + return "consumer"; + } + + /** + * This method identifies the message id for the messaging exchange. + * + * @return The message id, or null if no id exists for the exchange + */ + protected String getMessageId(Exchange exchange) { + return null; + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractSpanDecorator.java index b87238b..55efc4c 100644 --- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractSpanDecorator.java +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractSpanDecorator.java @@ -17,6 +17,7 @@ package org.apache.camel.opentracing.decorators; import java.net.URI; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -84,4 +85,30 @@ public abstract class AbstractSpanDecorator implements SpanDecorator { } } + @Override + public String getInitiatorSpanKind() { + return Tags.SPAN_KIND_CLIENT; + } + + @Override + public String getReceiverSpanKind() { + return Tags.SPAN_KIND_SERVER; + } + + public static Map<String, String> toQueryParameters(String uri) { + int index = uri.indexOf('?'); + if (index != -1) { + String queryString = uri.substring(index + 1); + Map<String, String> 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(); + } + } http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AmqpSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AmqpSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AmqpSpanDecorator.java new file mode 100644 index 0000000..bce692e --- /dev/null +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AmqpSpanDecorator.java @@ -0,0 +1,26 @@ +/** + * 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.decorators; + +public class AmqpSpanDecorator extends AbstractMessagingSpanDecorator { + + @Override + public String getComponent() { + return "amqp"; + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecorator.java new file mode 100644 index 0000000..acf608b --- /dev/null +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecorator.java @@ -0,0 +1,35 @@ +/** + * 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.decorators; + +import org.apache.camel.Exchange; + +public class AwsSnsSpanDecorator extends AbstractMessagingSpanDecorator { + + public static final String CAMEL_AWS_SNS_MESSAGE_ID = "CamelAwsSnsMessageId"; + + @Override + public String getComponent() { + return "aws-sns"; + } + + @Override + protected String getMessageId(Exchange exchange) { + return (String)exchange.getIn().getHeader(CAMEL_AWS_SNS_MESSAGE_ID); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecorator.java new file mode 100644 index 0000000..0811c45 --- /dev/null +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecorator.java @@ -0,0 +1,35 @@ +/** + * 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.decorators; + +import org.apache.camel.Exchange; + +public class AwsSqsSpanDecorator extends AbstractMessagingSpanDecorator { + + public static final String CAMEL_AWS_SQS_MESSAGE_ID = "CamelAwsSqsMessageId"; + + @Override + public String getComponent() { + return "aws-sqs"; + } + + @Override + protected String getMessageId(Exchange exchange) { + return (String)exchange.getIn().getHeader(CAMEL_AWS_SQS_MESSAGE_ID); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdSpanDecorator.java new file mode 100644 index 0000000..3eabe05 --- /dev/null +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdSpanDecorator.java @@ -0,0 +1,37 @@ +/** + * 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.decorators; + +import java.net.URI; + +import org.apache.camel.Endpoint; +import org.apache.camel.Exchange; + +public class CometdSpanDecorator extends AbstractMessagingSpanDecorator { + + @Override + public String getComponent() { + return "cometd"; + } + + @Override + protected String getDestination(Exchange exchange, Endpoint endpoint) { + // Extract path, and remove leading '/' + return URI.create(endpoint.getEndpointUri()).getPath().substring(1); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdsSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdsSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdsSpanDecorator.java new file mode 100644 index 0000000..f700d2a --- /dev/null +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CometdsSpanDecorator.java @@ -0,0 +1,26 @@ +/** + * 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.decorators; + +public class CometdsSpanDecorator extends CometdSpanDecorator { + + @Override + public String getComponent() { + return "cometds"; + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/IronmqSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/IronmqSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/IronmqSpanDecorator.java new file mode 100644 index 0000000..75858bd --- /dev/null +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/IronmqSpanDecorator.java @@ -0,0 +1,35 @@ +/** + * 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.decorators; + +import org.apache.camel.Exchange; + +public class IronmqSpanDecorator extends AbstractMessagingSpanDecorator { + + public static final String CAMEL_IRON_MQ_MESSAGE_ID = "CamelIronMQMessageId"; + + @Override + public String getComponent() { + return "ironmq"; + } + + @Override + protected String getMessageId(Exchange exchange) { + return (String)exchange.getIn().getHeader(CAMEL_IRON_MQ_MESSAGE_ID); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JmsSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JmsSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JmsSpanDecorator.java new file mode 100644 index 0000000..cfe25bc --- /dev/null +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JmsSpanDecorator.java @@ -0,0 +1,35 @@ +/** + * 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.decorators; + +import org.apache.camel.Exchange; + +public class JmsSpanDecorator extends AbstractMessagingSpanDecorator { + + public static final String JMS_MESSAGE_ID = "JMSMessageID"; + + @Override + public String getComponent() { + return "jms"; + } + + @Override + protected String getMessageId(Exchange exchange) { + return (String)exchange.getIn().getHeader(JMS_MESSAGE_ID); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/KafkaSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/KafkaSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/KafkaSpanDecorator.java new file mode 100644 index 0000000..ecc9279 --- /dev/null +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/KafkaSpanDecorator.java @@ -0,0 +1,82 @@ +/** + * 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.decorators; + +import java.util.Map; + +import io.opentracing.Span; + +import org.apache.camel.Endpoint; +import org.apache.camel.Exchange; + +public class KafkaSpanDecorator extends AbstractMessagingSpanDecorator { + + public static final String KAFKA_PARTITION_TAG = "kafka.partition"; + public static final String KAFKA_PARTITION_KEY_TAG = "kafka.partition.key"; + public static final String KAFKA_KEY_TAG = "kafka.key"; + public static final String KAFKA_OFFSET_TAG = "kafka.offset"; + + /** + * Constants copied from {@link org.apache.camel.component.kafka.KafkaConstants} + */ + protected static final String PARTITION_KEY = "kafka.PARTITION_KEY"; + protected static final String PARTITION = "kafka.PARTITION"; + protected static final String KEY = "kafka.KEY"; + protected static final String TOPIC = "kafka.TOPIC"; + protected static final String OFFSET = "kafka.OFFSET"; + + @Override + public String getComponent() { + return "kafka"; + } + + @Override + public String getDestination(Exchange exchange, Endpoint endpoint) { + String topic = (String)exchange.getIn().getHeader(TOPIC); + if (topic == null) { + Map<String, String> queryParameters = toQueryParameters(endpoint.getEndpointUri()); + topic = queryParameters.get("topic"); + } + return topic != null ? topic : super.getDestination(exchange, endpoint); + } + + @Override + public void pre(Span span, Exchange exchange, Endpoint endpoint) { + super.pre(span, exchange, endpoint); + + String partition = (String)exchange.getIn().getHeader(PARTITION); + if (partition != null) { + span.setTag(KAFKA_PARTITION_TAG, partition); + } + + String partitionKey = (String)exchange.getIn().getHeader(PARTITION_KEY); + if (partitionKey != null) { + span.setTag(KAFKA_PARTITION_KEY_TAG, partitionKey); + } + + String key = (String)exchange.getIn().getHeader(KEY); + if (key != null) { + span.setTag(KAFKA_KEY_TAG, key); + } + + String offset = (String)exchange.getIn().getHeader(OFFSET); + if (offset != null) { + span.setTag(KAFKA_OFFSET_TAG, offset); + } + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecorator.java index a6da0b8..1139e68 100644 --- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecorator.java +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecorator.java @@ -16,8 +16,6 @@ */ package org.apache.camel.opentracing.decorators; -import java.util.Collections; -import java.util.HashMap; import java.util.Map; import io.opentracing.Span; @@ -57,19 +55,4 @@ public class MongoDBSpanDecorator extends AbstractSpanDecorator { span.setTag(Tags.DB_STATEMENT.getKey(), queryParameters.toString()); } - public static Map<String, String> toQueryParameters(String uri) { - int index = uri.indexOf('?'); - if (index != -1) { - String queryString = uri.substring(index + 1); - Map<String, String> 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(); - } } http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MqttSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MqttSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MqttSpanDecorator.java new file mode 100644 index 0000000..4bee69a --- /dev/null +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MqttSpanDecorator.java @@ -0,0 +1,46 @@ +/** + * 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.decorators; + +import java.util.Map; + +import org.apache.camel.Endpoint; +import org.apache.camel.Exchange; + +public class MqttSpanDecorator extends AbstractMessagingSpanDecorator { + + @Override + public String getComponent() { + return "mqtt"; + } + + @Override + public String getOperationName(Exchange exchange, Endpoint endpoint) { + return stripSchemeAndOptions(endpoint); + } + + @Override + protected String getDestination(Exchange exchange, Endpoint endpoint) { + Map<String, String> queryParameters = toQueryParameters(endpoint.getEndpointUri()); + String destination = queryParameters.get("subscribeTopicNames"); + if (destination == null) { + destination = queryParameters.get("publishTopicName"); + } + return destination; + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/PahoSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/PahoSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/PahoSpanDecorator.java new file mode 100644 index 0000000..b970fd8 --- /dev/null +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/PahoSpanDecorator.java @@ -0,0 +1,26 @@ +/** + * 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.decorators; + +public class PahoSpanDecorator extends AbstractMessagingSpanDecorator { + + @Override + public String getComponent() { + return "paho"; + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RabbitmqSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RabbitmqSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RabbitmqSpanDecorator.java new file mode 100644 index 0000000..f26c4d2 --- /dev/null +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RabbitmqSpanDecorator.java @@ -0,0 +1,39 @@ +/** + * 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.decorators; + +import org.apache.camel.Endpoint; +import org.apache.camel.Exchange; + +public class RabbitmqSpanDecorator extends AbstractMessagingSpanDecorator { + + /** + * Constants copied from {@link org.apache.camel.component.rabbitmq.RabbitMQConstants} + */ + protected static final String EXCHANGE_NAME = "rabbitmq.EXCHANGE_NAME"; + + @Override + public String getComponent() { + return "rabbitmq"; + } + + @Override + public String getDestination(Exchange exchange, Endpoint endpoint) { + return (String)exchange.getIn().getHeader(EXCHANGE_NAME); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SjmsSpanDecorator.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SjmsSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SjmsSpanDecorator.java new file mode 100644 index 0000000..efe29e7 --- /dev/null +++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SjmsSpanDecorator.java @@ -0,0 +1,26 @@ +/** + * 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.decorators; + +public class SjmsSpanDecorator extends AbstractMessagingSpanDecorator { + + @Override + public String getComponent() { + return "sjms"; + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/main/resources/META-INF/services/org.apache.camel.opentracing.SpanDecorator ---------------------------------------------------------------------- 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 index 137835e..68af6ca 100644 --- 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 @@ -16,17 +16,29 @@ # 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.DirectSpanDecorator org.apache.camel.opentracing.decorators.Http4SpanDecorator org.apache.camel.opentracing.decorators.HttpSpanDecorator +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.MongoDBSpanDecorator +org.apache.camel.opentracing.decorators.MqttSpanDecorator org.apache.camel.opentracing.decorators.NettyHttp4SpanDecorator org.apache.camel.opentracing.decorators.NettyHttpSpanDecorator +org.apache.camel.opentracing.decorators.PahoSpanDecorator +org.apache.camel.opentracing.decorators.RabbitmqSpanDecorator org.apache.camel.opentracing.decorators.RestletSpanDecorator org.apache.camel.opentracing.decorators.SedaSpanDecorator org.apache.camel.opentracing.decorators.ServletSpanDecorator +org.apache.camel.opentracing.decorators.SjmsSpanDecorator org.apache.camel.opentracing.decorators.SqlSpanDecorator org.apache.camel.opentracing.decorators.TimerSpanDecorator org.apache.camel.opentracing.decorators.UndertowSpanDecorator http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecoratorTest.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecoratorTest.java new file mode 100644 index 0000000..3a694b3 --- /dev/null +++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecoratorTest.java @@ -0,0 +1,96 @@ +/** + * 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.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.junit.Test; +import org.mockito.Mockito; + +import static org.junit.Assert.assertEquals; + +public class AbstractMessagingSpanDecoratorTest { + + @Test + public void testOperationName() { + Endpoint endpoint = Mockito.mock(Endpoint.class); + + Mockito.when(endpoint.getEndpointUri()).thenReturn("jms://MyQueue?hello=world"); + + SpanDecorator decorator = new AbstractMessagingSpanDecorator() { + @Override + public String getComponent() { + return null; + } + }; + + assertEquals("MyQueue", decorator.getOperationName(null, endpoint)); + } + + @Test + public void testPreMessageBusDestination() { + Endpoint endpoint = Mockito.mock(Endpoint.class); + + Mockito.when(endpoint.getEndpointUri()).thenReturn("jms://MyQueue?hello=world"); + + SpanDecorator decorator = new AbstractMessagingSpanDecorator() { + @Override + public String getComponent() { + return null; + } + }; + + MockTracer tracer = new MockTracer(); + MockSpan span = (MockSpan)tracer.buildSpan("TestSpan").start(); + + decorator.pre(span, null, endpoint); + + assertEquals("MyQueue", span.tags().get(Tags.MESSAGE_BUS_DESTINATION.getKey())); + } + + @Test + public void testPreMessageId() { + String messageId = "abcd"; + Endpoint endpoint = Mockito.mock(Endpoint.class); + Exchange exchange = Mockito.mock(Exchange.class); + + Mockito.when(endpoint.getEndpointUri()).thenReturn("test"); + + SpanDecorator decorator = new AbstractMessagingSpanDecorator() { + @Override + public String getComponent() { + return null; + } + @Override + public String getMessageId(Exchange exchange) { + return messageId; + } + }; + + MockTracer tracer = new MockTracer(); + MockSpan span = (MockSpan)tracer.buildSpan("TestSpan").start(); + + decorator.pre(span, exchange, endpoint); + + assertEquals(messageId, span.tags().get(AwsSqsSpanDecorator.MESSAGE_BUS_ID)); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecoratorTest.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecoratorTest.java new file mode 100644 index 0000000..eb8f8db --- /dev/null +++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSnsSpanDecoratorTest.java @@ -0,0 +1,42 @@ +/** + * 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.decorators; + +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.junit.Test; +import org.mockito.Mockito; + +import static org.junit.Assert.assertEquals; + +public class AwsSnsSpanDecoratorTest { + + @Test + public void testGetMessageId() { + String messageId = "abcd"; + Exchange exchange = Mockito.mock(Exchange.class); + Message message = Mockito.mock(Message.class); + + Mockito.when(exchange.getIn()).thenReturn(message); + Mockito.when(message.getHeader(AwsSnsSpanDecorator.CAMEL_AWS_SNS_MESSAGE_ID)).thenReturn(messageId); + + AwsSnsSpanDecorator decorator = new AwsSnsSpanDecorator(); + + assertEquals(messageId, decorator.getMessageId(exchange)); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecoratorTest.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecoratorTest.java new file mode 100644 index 0000000..2f527d4 --- /dev/null +++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/AwsSqsSpanDecoratorTest.java @@ -0,0 +1,42 @@ +/** + * 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.decorators; + +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.junit.Test; +import org.mockito.Mockito; + +import static org.junit.Assert.assertEquals; + +public class AwsSqsSpanDecoratorTest { + + @Test + public void testGetMessageId() { + String messageId = "abcd"; + Exchange exchange = Mockito.mock(Exchange.class); + Message message = Mockito.mock(Message.class); + + Mockito.when(exchange.getIn()).thenReturn(message); + Mockito.when(message.getHeader(AwsSqsSpanDecorator.CAMEL_AWS_SQS_MESSAGE_ID)).thenReturn(messageId); + + AwsSqsSpanDecorator decorator = new AwsSqsSpanDecorator(); + + assertEquals(messageId, decorator.getMessageId(exchange)); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CometdSpanDecoratorTest.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CometdSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CometdSpanDecoratorTest.java new file mode 100644 index 0000000..a1dda42 --- /dev/null +++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CometdSpanDecoratorTest.java @@ -0,0 +1,37 @@ +/** + * 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.decorators; + +import org.apache.camel.Endpoint; +import org.junit.Test; +import org.mockito.Mockito; + +import static org.junit.Assert.assertEquals; + +public class CometdSpanDecoratorTest { + + @Test + public void testGetDestination() { + Endpoint endpoint = Mockito.mock(Endpoint.class); + + Mockito.when(endpoint.getEndpointUri()).thenReturn("cometd://localhost:8080/MyQueue?hello=world"); + + CometdSpanDecorator decorator = new CometdSpanDecorator(); + + assertEquals("MyQueue", decorator.getDestination(null, endpoint)); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/IronmqSpanDecoratorTest.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/IronmqSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/IronmqSpanDecoratorTest.java new file mode 100644 index 0000000..5f58ccd --- /dev/null +++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/IronmqSpanDecoratorTest.java @@ -0,0 +1,42 @@ +/** + * 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.decorators; + +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.junit.Test; +import org.mockito.Mockito; + +import static org.junit.Assert.assertEquals; + +public class IronmqSpanDecoratorTest { + + @Test + public void testGetMessageId() { + String messageId = "abcd"; + Exchange exchange = Mockito.mock(Exchange.class); + Message message = Mockito.mock(Message.class); + + Mockito.when(exchange.getIn()).thenReturn(message); + Mockito.when(message.getHeader(IronmqSpanDecorator.CAMEL_IRON_MQ_MESSAGE_ID)).thenReturn(messageId); + + IronmqSpanDecorator decorator = new IronmqSpanDecorator(); + + assertEquals(messageId, decorator.getMessageId(exchange)); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JmsSpanDecoratorTest.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JmsSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JmsSpanDecoratorTest.java new file mode 100644 index 0000000..bd7e008 --- /dev/null +++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JmsSpanDecoratorTest.java @@ -0,0 +1,42 @@ +/** + * 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.decorators; + +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.junit.Test; +import org.mockito.Mockito; + +import static org.junit.Assert.assertEquals; + +public class JmsSpanDecoratorTest { + + @Test + public void testGetMessageId() { + String messageId = "abcd"; + Exchange exchange = Mockito.mock(Exchange.class); + Message message = Mockito.mock(Message.class); + + Mockito.when(exchange.getIn()).thenReturn(message); + Mockito.when(message.getHeader(JmsSpanDecorator.JMS_MESSAGE_ID)).thenReturn(messageId); + + JmsSpanDecorator decorator = new JmsSpanDecorator(); + + assertEquals(messageId, decorator.getMessageId(exchange)); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/KafkaSpanDecoratorTest.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/KafkaSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/KafkaSpanDecoratorTest.java new file mode 100644 index 0000000..b3eda9c --- /dev/null +++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/KafkaSpanDecoratorTest.java @@ -0,0 +1,92 @@ +/** + * 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.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.junit.Test; +import org.mockito.Mockito; + +import static org.junit.Assert.assertEquals; + +public class KafkaSpanDecoratorTest { + + @Test + public void testGetDestinationHeaderTopic() { + Exchange exchange = Mockito.mock(Exchange.class); + Message message = Mockito.mock(Message.class); + + Mockito.when(exchange.getIn()).thenReturn(message); + Mockito.when(message.getHeader(KafkaSpanDecorator.TOPIC)).thenReturn("test"); + + KafkaSpanDecorator decorator = new KafkaSpanDecorator(); + + assertEquals("test", decorator.getDestination(exchange, null)); + } + + @Test + public void testGetDestinationNoHeaderTopic() { + Exchange exchange = Mockito.mock(Exchange.class); + Message message = Mockito.mock(Message.class); + Endpoint endpoint = Mockito.mock(Endpoint.class); + + Mockito.when(exchange.getIn()).thenReturn(message); + Mockito.when(endpoint.getEndpointUri()) + .thenReturn("kafka:localhost:9092?topic=test&groupId=testing&consumersCount=1"); + + KafkaSpanDecorator decorator = new KafkaSpanDecorator(); + + assertEquals("test", decorator.getDestination(exchange, endpoint)); + } + + @Test + public void testPre() { + String testKey = "TestKey"; + String testOffset = "TestOffset"; + String testPartition = "TestPartition"; + String testPartitionKey = "TestPartitionKey"; + + Endpoint endpoint = Mockito.mock(Endpoint.class); + Exchange exchange = Mockito.mock(Exchange.class); + Message message = Mockito.mock(Message.class); + + Mockito.when(endpoint.getEndpointUri()).thenReturn("test"); + Mockito.when(exchange.getIn()).thenReturn(message); + Mockito.when(message.getHeader(KafkaSpanDecorator.KEY)).thenReturn(testKey); + Mockito.when(message.getHeader(KafkaSpanDecorator.OFFSET)).thenReturn(testOffset); + Mockito.when(message.getHeader(KafkaSpanDecorator.PARTITION)).thenReturn(testPartition); + Mockito.when(message.getHeader(KafkaSpanDecorator.PARTITION_KEY)).thenReturn(testPartitionKey); + + SpanDecorator decorator = new KafkaSpanDecorator(); + + MockTracer tracer = new MockTracer(); + MockSpan span = tracer.buildSpan("TestSpan").start(); + + decorator.pre(span, exchange, endpoint); + + assertEquals(testKey, span.tags().get(KafkaSpanDecorator.KAFKA_KEY_TAG)); + assertEquals(testOffset, span.tags().get(KafkaSpanDecorator.KAFKA_OFFSET_TAG)); + assertEquals(testPartition, span.tags().get(KafkaSpanDecorator.KAFKA_PARTITION_TAG)); + assertEquals(testPartitionKey, span.tags().get(KafkaSpanDecorator.KAFKA_PARTITION_KEY_TAG)); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/MqttSpanDecoratorTest.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/MqttSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/MqttSpanDecoratorTest.java new file mode 100644 index 0000000..d10682a --- /dev/null +++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/MqttSpanDecoratorTest.java @@ -0,0 +1,60 @@ +/** + * 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.decorators; + +import org.apache.camel.Endpoint; +import org.junit.Test; +import org.mockito.Mockito; + +import static org.junit.Assert.assertEquals; + +public class MqttSpanDecoratorTest { + + @Test + public void testGetOperationName() { + Endpoint endpoint = Mockito.mock(Endpoint.class); + + Mockito.when(endpoint.getEndpointUri()).thenReturn("mqtt://hello?publishTopicName=world"); + + MqttSpanDecorator decorator = new MqttSpanDecorator(); + + assertEquals("hello", decorator.getOperationName(null, endpoint)); + } + + @Test + public void testGetDestinationPublish() { + Endpoint endpoint = Mockito.mock(Endpoint.class); + + Mockito.when(endpoint.getEndpointUri()).thenReturn("mqtt://hello?publishTopicName=world"); + + MqttSpanDecorator decorator = new MqttSpanDecorator(); + + assertEquals("world", decorator.getDestination(null, endpoint)); + } + + @Test + public void testGetDestinationSubscribe() { + Endpoint endpoint = Mockito.mock(Endpoint.class); + + Mockito.when(endpoint.getEndpointUri()).thenReturn("mqtt://hello?subscribeTopicNames=world"); + + MqttSpanDecorator decorator = new MqttSpanDecorator(); + + assertEquals("world", decorator.getDestination(null, endpoint)); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/689d3c8f/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/RabbitmqSpanDecoratorTest.java ---------------------------------------------------------------------- diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/RabbitmqSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/RabbitmqSpanDecoratorTest.java new file mode 100644 index 0000000..cb99557 --- /dev/null +++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/RabbitmqSpanDecoratorTest.java @@ -0,0 +1,41 @@ +/** + * 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.decorators; + +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.junit.Test; +import org.mockito.Mockito; + +import static org.junit.Assert.assertEquals; + +public class RabbitmqSpanDecoratorTest { + + @Test + public void testGetDestinationHeaderTopic() { + Exchange exchange = Mockito.mock(Exchange.class); + Message message = Mockito.mock(Message.class); + + Mockito.when(exchange.getIn()).thenReturn(message); + Mockito.when(message.getHeader(RabbitmqSpanDecorator.EXCHANGE_NAME)).thenReturn("test"); + + RabbitmqSpanDecorator decorator = new RabbitmqSpanDecorator(); + + assertEquals("test", decorator.getDestination(exchange, null)); + } + +}