You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2020/07/16 12:55:06 UTC

[camel] 01/07: opentracing: adds support for tags

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit f2dd2ea80bfc0b2c1049b0a4ebc342e84c3467dd
Author: Jose Montoya <ja...@protonmail.com>
AuthorDate: Mon Jun 15 21:09:42 2020 -0500

    opentracing: adds support for tags
---
 .../org/apache/camel/opentracing/TagProcessor.java | 102 +++++++++++++++++++++
 1 file changed, 102 insertions(+)

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
new file mode 100644
index 0000000..4313671
--- /dev/null
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/TagProcessor.java
@@ -0,0 +1,102 @@
+package org.apache.camel.opentracing;
+
+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.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A processor which adds a tag on the active {@link io.opentracing.Span} with an {@link org.apache.camel.Expression}
+ */
+public class TagProcessor extends AsyncProcessorSupport implements Traceable, IdAware, RouteIdAware {
+
+    private static final Logger LOG = LoggerFactory.getLogger(TagProcessor.class);
+
+    private String id;
+    private String routeId;
+    private final Expression tagName;
+    private final Expression expression;
+
+    public TagProcessor(Expression tagName, Expression expression) {
+        this.tagName = tagName;
+        this.expression = expression;
+        ObjectHelper.notNull(tagName, "headerName");
+        ObjectHelper.notNull(expression, "expression");
+    }
+
+    @Override
+    public boolean process(Exchange exchange, AsyncCallback callback) {
+        try {
+            Span span = ActiveSpanManager.getSpan(exchange);
+            if (span != null) {
+                String key = tagName.evaluate(exchange, String.class);
+                String tag = expression.evaluate(exchange, String.class);
+                span.setTag(key, tag);
+            } else {
+                LOG.warn("OpenTracing: could not find managed span for exchange={}", exchange);
+            }
+        } catch (Exception e) {
+            exchange.setException(e);
+        } finally {
+            // callback must be invoked
+            callback.done(true);
+        }
+
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return id;
+    }
+
+    @Override
+    public String getTraceLabel() {
+        return "tag[" + tagName + ", " + expression + "]";
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getRouteId() {
+        return routeId;
+    }
+
+    @Override
+    public void setRouteId(String routeId) {
+        this.routeId = routeId;
+    }
+
+    public String getTagName() {
+        return tagName.toString();
+    }
+
+    public Expression getExpression() {
+        return expression;
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        // noop
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+        // noop
+    }
+}