diff --git a/client/agent-opentracing/src/main/java/org/hawkular/apm/agent/opentracing/OpenTracingManager.java b/client/agent-opentracing/src/main/java/org/hawkular/apm/agent/opentracing/OpenTracingManager.java index e25de0c64..b2fff0876 100644 --- a/client/agent-opentracing/src/main/java/org/hawkular/apm/agent/opentracing/OpenTracingManager.java +++ b/client/agent-opentracing/src/main/java/org/hawkular/apm/agent/opentracing/OpenTracingManager.java @@ -120,6 +120,10 @@ public void startSpanWithParent(SpanBuilder spanBuilder, Span parent) { * @param id The optional id to associate with the span */ public void startSpanWithParent(SpanBuilder spanBuilder, Span parent, String id) { + if (log.isLoggable(Level.FINEST)) { + log.finest("Start span as child of span = " + parent); + } + if (parent != null) { spanBuilder.asChildOf(parent.context()); } @@ -151,6 +155,10 @@ public void startSpanWithContext(SpanBuilder spanBuilder, SpanContext context) { * @param id The optional id to associate with the span */ public void startSpanWithContext(SpanBuilder spanBuilder, SpanContext context, String id) { + if (log.isLoggable(Level.FINEST)) { + log.finest("Start span as child of context = " + context); + } + if (context != null) { spanBuilder.asChildOf(context); } @@ -188,6 +196,10 @@ public void startSpan(SpanBuilder spanBuilder, String id) { protected void doStartSpanWithParent(SpanBuilder spanBuilder, String id) { Span parentSpan = getSpan(); + if (log.isLoggable(Level.FINEST)) { + log.finest("Start span as child of = " + parentSpan); + } + if (parentSpan != null) { spanBuilder.asChildOf(parentSpan); } @@ -203,14 +215,14 @@ protected void doStartSpan(SpanBuilder spanBuilder, String id) { traceState.set(ts); if (log.isLoggable(Level.FINEST)) { - log.finest("Create trace state = " + ts); + log.finest("Created trace state = " + ts); } } Span span = spanBuilder.start(); if (log.isLoggable(Level.FINEST)) { - log.finest("Start span = " + span + " id = " + id + " trace state = " + ts); + log.finest("Started span = " + span + " id = " + id + " trace state = " + ts); } ts.pushSpan(span, id); @@ -286,9 +298,6 @@ public Span getSpan() { return span; } - if (log.isLoggable(Level.FINEST)) { - log.finest("Get span requested, but no trace state"); - } return null; } @@ -459,6 +468,33 @@ public void setVariable(String name, Object value) { } } + /** + * This method removes the end part of a string beginning + * at a specified delimiter. + * + * @param original The original string + * @param delim The delimiter identifying the point to truncate + * @return The modified string + */ + public String truncateAtDelimiter(String original, String delim) { + int index = original.indexOf(delim); + if (index != -1) { + return original.substring(0, index); + } + return original; + } + + /** + * This method returns the simple class name of the supplied + * object. + * + * @param obj The object + * @return The simple class name + */ + public String simpleClassName(Object obj) { + return obj.getClass().getSimpleName(); + } + /** * This class represents the state information being accumulated for a * trace instance. diff --git a/client/agent-opentracing/src/main/resources/apmrules/org/jboss/apm-jboss-ee.btm b/client/agent-opentracing/src/main/resources/apmrules/org/jboss/apm-jboss-ee.btm new file mode 100644 index 000000000..4c312ee27 --- /dev/null +++ b/client/agent-opentracing/src/main/resources/apmrules/org/jboss/apm-jboss-ee.btm @@ -0,0 +1,23 @@ +# Exclude 'onMessage' method as will conflict with instrumentation of JMS/MDB + +RULE org.jboss.ee(1) EE Component Start +CLASS org.jboss.as.ee.component.ProxyInvocationHandler +METHOD invoke(Object,Method,Object[]) +HELPER org.hawkular.apm.agent.opentracing.OpenTracingManager +AT ENTRY +IF !$2.getName().equals("onMessage") +DO + startSpanWithParent(getTracer().buildSpan($2.getName()) + .withTag("EJB.uri", truncateAtDelimiter(simpleClassName($1),"$$$")), + getSpan()); +ENDRULE + +RULE org.jboss.ee(1) EE Component Finish +CLASS org.jboss.as.ee.component.ProxyInvocationHandler +METHOD invoke(Object,Method,Object[]) +HELPER org.hawkular.apm.agent.opentracing.OpenTracingManager +AT EXIT +IF !$2.getName().equals("onMessage") && hasSpan() +DO + finishSpan(); +ENDRULE diff --git a/client/opentracing/src/main/java/io/opentracing/impl/APMSpan.java b/client/opentracing/src/main/java/io/opentracing/impl/APMSpan.java index f9d81f94d..6ccaa093d 100644 --- a/client/opentracing/src/main/java/io/opentracing/impl/APMSpan.java +++ b/client/opentracing/src/main/java/io/opentracing/impl/APMSpan.java @@ -435,4 +435,8 @@ public Map state() { } return state; } + + public String toString() { + return super.toString() + "[operationName=" + getOperationName() + " state=" + state() + "]"; + } } diff --git a/client/opentracing/src/main/java/io/opentracing/impl/AbstractAPMTracer.java b/client/opentracing/src/main/java/io/opentracing/impl/AbstractAPMTracer.java index 99c1ae41e..8bead8ba3 100644 --- a/client/opentracing/src/main/java/io/opentracing/impl/AbstractAPMTracer.java +++ b/client/opentracing/src/main/java/io/opentracing/impl/AbstractAPMTracer.java @@ -22,6 +22,7 @@ import java.util.UUID; import org.hawkular.apm.api.logging.Logger; +import org.hawkular.apm.api.logging.Logger.Level; import org.hawkular.apm.api.model.Constants; import org.hawkular.apm.api.model.trace.NodeType; import org.hawkular.apm.client.api.recorder.BatchTraceRecorder; @@ -85,6 +86,10 @@ Map getTraceState(SpanContext spanContext) { ret.putAll(span.state()); } + if (log.isLoggable(Level.FINEST)) { + log.finest("Trace state = " + ret); + } + return ret; } } diff --git a/client/opentracing/src/main/java/org/hawkular/apm/client/opentracing/TraceContext.java b/client/opentracing/src/main/java/org/hawkular/apm/client/opentracing/TraceContext.java index 00b8a5e1d..3abf402e4 100644 --- a/client/opentracing/src/main/java/org/hawkular/apm/client/opentracing/TraceContext.java +++ b/client/opentracing/src/main/java/org/hawkular/apm/client/opentracing/TraceContext.java @@ -24,6 +24,7 @@ import java.util.concurrent.atomic.AtomicInteger; import org.hawkular.apm.api.logging.Logger; +import org.hawkular.apm.api.logging.Logger.Level; import org.hawkular.apm.api.model.Constants; import org.hawkular.apm.api.model.Property; import org.hawkular.apm.api.model.config.ReportingLevel; @@ -123,6 +124,9 @@ public void endProcessingNode() { } if (sampled) { + if (log.isLoggable(Level.FINEST)) { + log.finest("Record trace: " + trace); + } recorder.record(trace); } } diff --git a/client/trace-publisher-rest-client/src/main/java/org/hawkular/apm/trace/publisher/rest/client/TracePublisherRESTClient.java b/client/trace-publisher-rest-client/src/main/java/org/hawkular/apm/trace/publisher/rest/client/TracePublisherRESTClient.java index 9bf11d95f..c0bb08235 100644 --- a/client/trace-publisher-rest-client/src/main/java/org/hawkular/apm/trace/publisher/rest/client/TracePublisherRESTClient.java +++ b/client/trace-publisher-rest-client/src/main/java/org/hawkular/apm/trace/publisher/rest/client/TracePublisherRESTClient.java @@ -54,6 +54,9 @@ public int getInitialRetryCount() { @Override public void publish(String tenantId, List traces) throws Exception { long startTime = clock.millis(); + if (log.isLoggable(Level.FINEST)) { + log.finest("Publish traces: " + traces); + } int statusCode = postAsJsonTo(tenantId, "traces/fragments", traces); if (log.isLoggable(Level.FINEST)) { log.finest("Status code is: " + statusCode);