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 <[email protected]> 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 + } +}
