@Override public void notify(EventObject event) throws Exception { // use event notifier to track events when Camel messages to endpoints // these events corresponds to Zipkin client events // client events if (event instanceof ExchangeSendingEvent) { ExchangeSendingEvent ese = (ExchangeSendingEvent) event; String serviceName = getServiceName(ese.getExchange(), ese.getEndpoint(), false, true); Tracing brave = getTracing(serviceName); if (brave != null) { clientRequest(brave, serviceName, ese); } } else if (event instanceof ExchangeSentEvent) { ExchangeSentEvent ese = (ExchangeSentEvent) event; String serviceName = getServiceName(ese.getExchange(), ese.getEndpoint(), false, true); Tracing brave = getTracing(serviceName); if (brave != null) { clientResponse(brave, serviceName, ese); } } }
private void clientResponse(Tracing brave, String serviceName, ExchangeSentEvent event) { Span span = null; ZipkinState state = event.getExchange().getProperty(ZipkinState.KEY, ZipkinState.class); if (state != null) { // only process if it was a zipkin client event span = state.popClientSpan(); } if (span != null) { ZipkinClientResponseAdaptor parser = new ZipkinClientResponseAdaptor(this, event.getEndpoint()); parser.onResponse(event.getExchange(), span.customizer()); span.finish(); TraceContext context = span.context(); String traceId = "" + context.traceIdString(); String spanId = "" + context.spanId(); String parentId = context.parentId() != null ? "" + context.parentId() : null; if (camelContext.isUseMDCLogging()) { MDC.put("traceId", traceId); MDC.put("spanId", spanId); MDC.put("parentId", parentId); } if (LOG.isDebugEnabled()) { if (parentId != null) { LOG.debug(String.format("clientResponse[service=%s, traceId=%20s, spanId=%20s, parentId=%20s]", serviceName, traceId, spanId, parentId)); } else { LOG.debug(String.format("clientResponse[service=%s, traceId=%20s, spanId=%20s]", serviceName, traceId, spanId)); } } } }
Request request = getRequest(event.getExchange(), event.getEndpoint());
protected void handleSentEvent(ExchangeSentEvent sentEvent) { String name = namingStrategy.getName(sentEvent.getExchange(), sentEvent.getEndpoint()); Tags tags = namingStrategy.getTags(sentEvent, sentEvent.getEndpoint()); getMeterRegistry().timer(name, tags).record(sentEvent.getTimeTaken(), TimeUnit.MILLISECONDS); }
ExchangeSentEvent ese = (ExchangeSentEvent)event; SpanDecorator sd = getSpanDecorator(ese.getEndpoint()); if (!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());