Repository: karaf-decanter Updated Branches: refs/heads/master e4d460382 -> 029a6df5c
Refactor event processing to avoid duplication and split camel logic from decanter logic Project: http://git-wip-us.apache.org/repos/asf/karaf-decanter/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf-decanter/commit/029a6df5 Tree: http://git-wip-us.apache.org/repos/asf/karaf-decanter/tree/029a6df5 Diff: http://git-wip-us.apache.org/repos/asf/karaf-decanter/diff/029a6df5 Branch: refs/heads/master Commit: 029a6df5c39b54989b302aa3fffa612ba3481a0d Parents: e4d4603 Author: Christian Schneider <[email protected]> Authored: Wed Jul 19 09:08:24 2017 +0200 Committer: Christian Schneider <[email protected]> Committed: Wed Jul 19 09:08:24 2017 +0200 ---------------------------------------------------------------------- .../collector/camel/CamelEventMapper.java | 107 ++++++++ .../collector/camel/DecanterEventNotifier.java | 246 ++++++------------- .../camel/DecanterTraceEventHandler.java | 110 ++------- .../camel/DefaultExchangeExtender.java | 107 ++++++++ 4 files changed, 315 insertions(+), 255 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/029a6df5/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelEventMapper.java ---------------------------------------------------------------------- diff --git a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelEventMapper.java b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelEventMapper.java new file mode 100644 index 0000000..2c13a20 --- /dev/null +++ b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelEventMapper.java @@ -0,0 +1,107 @@ +/* + * 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.karaf.decanter.collector.camel; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.EventObject; +import java.util.HashMap; +import java.util.Map; + +import org.apache.camel.CamelContext; +import org.apache.camel.Route; +import org.apache.camel.management.event.CamelContextResumeFailureEvent; +import org.apache.camel.management.event.CamelContextStartupFailureEvent; +import org.apache.camel.management.event.CamelContextStopFailureEvent; +import org.apache.camel.management.event.ExchangeFailureHandledEvent; +import org.apache.camel.management.event.ExchangeRedeliveryEvent; +import org.apache.camel.management.event.ExchangeSendingEvent; +import org.apache.camel.management.event.ExchangeSentEvent; +import org.apache.camel.management.event.ServiceStartupFailureEvent; +import org.apache.camel.management.event.ServiceStopFailureEvent; + +public class CamelEventMapper { + + public Map<String, Object> toMap(EventObject event) throws UnknownHostException { + HashMap<String, Object> data = new HashMap<String, Object>(); + data.put("eventType", event.getClass().getName()); + data.put("type", "camelEvent"); + data.put("karafName", System.getProperty("karaf.name")); + data.put("hostAddress", InetAddress.getLocalHost().getHostAddress()); + data.put("hostName", InetAddress.getLocalHost().getHostName()); + data.put("timestamp", System.currentTimeMillis()); + + Object source = event.getSource(); + if (event instanceof ExchangeSentEvent) { + ExchangeSentEvent sent = (ExchangeSentEvent) event; + data.put("sentToEndpointUri", sent.getEndpoint() + .getEndpointUri()); + data.put("sentTimeTaken", sent.getTimeTaken()); + } + if (event instanceof ExchangeSendingEvent) { + ExchangeSendingEvent sending = (ExchangeSendingEvent) event; + data.put("sendingToEndpointUri", sending.getEndpoint().getEndpointUri()); + } + if (event instanceof ExchangeFailureHandledEvent) { + ExchangeFailureHandledEvent failHandled = (ExchangeFailureHandledEvent) event; + data.put("failureIsHandled", failHandled.isHandled()); + data.put("failureIsDeadLetterChannel", failHandled.isDeadLetterChannel()); + data.put("failureHandler", failHandled.getFailureHandler() == null ? "null" + : failHandled.getFailureHandler().getClass().getName()); + } + if (event instanceof ExchangeRedeliveryEvent) { + ExchangeRedeliveryEvent redelivery = (ExchangeRedeliveryEvent) event; + data.put("redeliveryAttempt", redelivery.getAttempt()); + } + if (source instanceof Route) { + Route route = (Route)source; + data.put("routeId", route.getId()); + data.put("camelContextName", route.getRouteContext().getCamelContext().getName()); + } + if (source instanceof CamelContext) { + CamelContext context = (CamelContext)source; + data.put("camelContextName", context.getName()); + } + + if (event instanceof ServiceStartupFailureEvent) { + ServiceStartupFailureEvent service = (ServiceStartupFailureEvent) event; + data.put("serviceName", service.getService().getClass().getName()); + data.put("camelContextName", service.getContext().getName()); + data.put("cause", service.getCause().toString()); + } + if (event instanceof ServiceStopFailureEvent) { + ServiceStopFailureEvent service = (ServiceStopFailureEvent) event; + data.put("serviceName", service.getService().getClass().getName()); + data.put("camelContextName", service.getContext().getName()); + data.put("cause", service.getCause().toString()); + } + if (event instanceof CamelContextResumeFailureEvent) { + CamelContextResumeFailureEvent context = (CamelContextResumeFailureEvent) event; + data.put("cause", context.getCause().toString()); + } + if (event instanceof CamelContextStartupFailureEvent) { + CamelContextStartupFailureEvent context = (CamelContextStartupFailureEvent) event; + data.put("cause", context.getCause().toString()); + } + if (event instanceof CamelContextStopFailureEvent) { + CamelContextStartupFailureEvent context = (CamelContextStartupFailureEvent) event; + data.put("cause", context.getCause().toString()); + } + return data; + } + +} http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/029a6df5/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java ---------------------------------------------------------------------- diff --git a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java index e07efad..df417d0 100644 --- a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java +++ b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java @@ -1,22 +1,27 @@ +/* + * 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.karaf.decanter.collector.camel; -import java.net.InetAddress; -import java.net.UnknownHostException; import java.util.EventObject; -import java.util.HashMap; import java.util.Map; import org.apache.camel.CamelContext; import org.apache.camel.Exchange; import org.apache.camel.Route; -import org.apache.camel.RouteNode; -import org.apache.camel.spi.TracedRouteNodes; -import org.apache.camel.support.EventNotifierSupport; -import org.apache.camel.util.MessageHelper; -import org.apache.camel.management.event.AbstractExchangeEvent; -import org.apache.camel.management.event.CamelContextResumeFailureEvent; -import org.apache.camel.management.event.CamelContextStartupFailureEvent; -import org.apache.camel.management.event.CamelContextStopFailureEvent; import org.apache.camel.management.event.ExchangeCompletedEvent; import org.apache.camel.management.event.ExchangeCreatedEvent; import org.apache.camel.management.event.ExchangeFailureHandledEvent; @@ -25,10 +30,9 @@ import org.apache.camel.management.event.ExchangeSendingEvent; import org.apache.camel.management.event.ExchangeSentEvent; import org.apache.camel.management.event.ServiceStartupFailureEvent; import org.apache.camel.management.event.ServiceStopFailureEvent; - +import org.apache.camel.support.EventNotifierSupport; import org.osgi.service.event.Event; import org.osgi.service.event.EventAdmin; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,10 +43,8 @@ public class DecanterEventNotifier extends EventNotifierSupport { private EventAdmin eventAdmin; private String camelContextMatcher = ".*"; private String routeMatcher = ".*"; - private DecanterCamelEventExtender extender = null; - private boolean includeProperties = true; - private boolean includeHeaders = true; - private boolean includeBody = true; + private DefaultExchangeExtender dextender = new DefaultExchangeExtender(); + private DecanterCamelEventExtender extender; public EventAdmin getEventAdmin() { return eventAdmin; @@ -63,13 +65,58 @@ public class DecanterEventNotifier extends EventNotifierSupport { public void setExtender(DecanterCamelEventExtender extender) { this.extender = extender; } + + public void setIncludeBody(boolean includeBody) { + dextender.setIncludeBody(includeBody); + } public void setIncludeHeaders(boolean includeHeaders) { - this.includeHeaders = includeHeaders; + dextender.setIncludeHeaders(includeHeaders); } public void setIncludeProperties(boolean includeProperties) { - this.includeProperties = includeProperties; + dextender.setIncludeProperties(includeProperties); + } + + private boolean isIgnored(EventObject event) { + if (isIgnoredBySourceType(event)) { + return true; + } + + if (event instanceof ExchangeSentEvent && isIgnoreExchangeSentEvents()) { + return true; + } + if (event instanceof ExchangeSendingEvent && isIgnoreExchangeSendingEvents()) { + return true; + } + if (event instanceof ExchangeFailureHandledEvent && isIgnoreExchangeFailedEvents()) { + return true; + } + if (event instanceof ExchangeRedeliveryEvent && isIgnoreExchangeRedeliveryEvents()) { + return true; + } + if (event instanceof ExchangeCompletedEvent && isIgnoreExchangeCompletedEvent()) { + return true; + } + if (event instanceof ExchangeCreatedEvent && isIgnoreExchangeCreatedEvent()) { + return true; + } + + if (event instanceof ServiceStartupFailureEvent && isIgnoreServiceEvents()) { + return true; + } + if (event instanceof ServiceStopFailureEvent && isIgnoreServiceEvents()) { + return true; + } + + return false; + } + + private boolean isIgnoredBySourceType(EventObject event) { + Object source = event.getSource(); + return (source instanceof Exchange && isIgnoreExchangeEvents() + || source instanceof Route && isIgnoreRouteEvents() + || source instanceof CamelContext && isIgnoreCamelContextEvents()); } @Override @@ -77,6 +124,9 @@ public class DecanterEventNotifier extends EventNotifierSupport { if (eventObject == null) { return false; } + if (isIgnored(eventObject)) { + return false; + } Object source = eventObject.getSource(); if (source instanceof Exchange) { Exchange exchange = (Exchange)source; @@ -100,83 +150,15 @@ public class DecanterEventNotifier extends EventNotifierSupport { public void notify(EventObject event) throws Exception { try { - Map<String, Object> eventMap = createEvent(event, - event instanceof AbstractExchangeEvent ? ((AbstractExchangeEvent) event) - .getExchange() : null); - boolean post = false; + Map<String, Object> eventMap = new CamelEventMapper().toMap(event); Object source = event.getSource(); - if (event instanceof ExchangeSentEvent && !isIgnoreExchangeEvents() && !isIgnoreExchangeSentEvents()) { - ExchangeSentEvent sent = (ExchangeSentEvent) event; - eventMap.put("sentToEndpointUri", sent.getEndpoint() - .getEndpointUri()); - eventMap.put("sentTimeTaken", sent.getTimeTaken()); - post = true; - } - if (event instanceof ExchangeSendingEvent && !isIgnoreExchangeEvents() && !isIgnoreExchangeSendingEvents()) { - ExchangeSendingEvent sending = (ExchangeSendingEvent) event; - eventMap.put("sendingToEndpointUri", sending.getEndpoint().getEndpointUri()); - post = true; - } - if (event instanceof ExchangeFailureHandledEvent && !isIgnoreExchangeEvents() && !isIgnoreExchangeFailedEvents()) { - ExchangeFailureHandledEvent failHandled = (ExchangeFailureHandledEvent) event; - eventMap.put("failureIsHandled", failHandled.isHandled()); - eventMap.put("failureIsDeadLetterChannel", failHandled.isDeadLetterChannel()); - eventMap.put("failureHandler", failHandled.getFailureHandler() == null ? "null" - : failHandled.getFailureHandler().getClass().getName()); - post = true; - } - if (event instanceof ExchangeRedeliveryEvent && !isIgnoreExchangeEvents() && !isIgnoreExchangeRedeliveryEvents()) { - ExchangeRedeliveryEvent redelivery = (ExchangeRedeliveryEvent) event; - eventMap.put("redeliveryAttempt", redelivery.getAttempt()); - post = true; - } - if (source instanceof Route && !isIgnoreRouteEvents()) { - Route route = (Route)source; - eventMap.put("routeId", route.getId()); - eventMap.put("camelContextName", route.getRouteContext().getCamelContext().getName()); - post = true; - } - if (source instanceof CamelContext && !isIgnoreCamelContextEvents()) { - CamelContext context = (CamelContext)source; - eventMap.put("camelContextName", context.getName()); - post = true; - } - - if (event instanceof ServiceStartupFailureEvent && !isIgnoreServiceEvents()) { - ServiceStartupFailureEvent service = (ServiceStartupFailureEvent) event; - eventMap.put("serviceName", service.getService().getClass().getName()); - eventMap.put("camelContextName", service.getContext().getName()); - eventMap.put("cause", service.getCause().toString()); - post = true; - } - if (event instanceof ServiceStopFailureEvent && !isIgnoreServiceEvents()) { - ServiceStopFailureEvent service = (ServiceStopFailureEvent) event; - eventMap.put("serviceName", service.getService().getClass().getName()); - eventMap.put("camelContextName", service.getContext().getName()); - eventMap.put("cause", service.getCause().toString()); - post = true; - } - if (event instanceof CamelContextResumeFailureEvent && !isIgnoreCamelContextEvents()) { - CamelContextResumeFailureEvent context = (CamelContextResumeFailureEvent) event; - eventMap.put("cause", context.getCause().toString()); - } - if (event instanceof CamelContextStartupFailureEvent && !isIgnoreCamelContextEvents()) { - CamelContextStartupFailureEvent context = (CamelContextStartupFailureEvent) event; - eventMap.put("cause", context.getCause().toString()); - } - if (event instanceof CamelContextStopFailureEvent && !isIgnoreCamelContextEvents()) { - CamelContextStartupFailureEvent context = (CamelContextStartupFailureEvent) event; - eventMap.put("cause", context.getCause().toString()); - } - if (event instanceof ExchangeCompletedEvent && !isIgnoreExchangeEvents() && !isIgnoreExchangeCompletedEvent()) { - post = true; - } - if (event instanceof ExchangeCreatedEvent && !isIgnoreExchangeEvents() && !isIgnoreExchangeCreatedEvent()) { - post = true; - } - if (post) { - eventAdmin.postEvent(new Event("decanter/collect/camel/event", eventMap)); + if (source instanceof Exchange) { + dextender.extend(eventMap, (Exchange)source); + if (extender != null) { + extender.extend(eventMap, (Exchange)source); + } } + eventAdmin.postEvent(new Event("decanter/collect/camel/event", eventMap)); } catch (Exception ex) { LOG.warn("Failed to handle event", ex); } @@ -188,80 +170,4 @@ public class DecanterEventNotifier extends EventNotifierSupport { protected void doStop() throws Exception { } - private Map<String, Object> createEvent(EventObject event, Exchange exchange) throws UnknownHostException { - HashMap<String, Object> data = new HashMap<String, Object>(); - data.put("eventType", event.getClass().getName()); - data.put("type", "camelEvent"); - data.put("karafName", System.getProperty("karaf.name")); - data.put("hostAddress", InetAddress.getLocalHost().getHostAddress()); - data.put("hostName", InetAddress.getLocalHost().getHostName()); - data.put("timestamp", System.currentTimeMillis()); - - if (exchange == null) { - return data; - } - data.put("fromEndpointUri", exchange.getFromEndpoint() != null ? exchange.getFromEndpoint().getEndpointUri() : null); - data.put("previousNode", extractFromNode(exchange)); - data.put("toNode", extractToNode(exchange)); - data.put("exchangeId", exchange.getExchangeId()); - data.put("routeId", exchange.getFromRouteId()); - data.put("camelContextName", exchange.getContext().getName()); - data.put("shortExchangeId", extractShortExchangeId(exchange)); - data.put("exchangePattern", exchange.getPattern().toString()); - if (includeProperties) { - data.put("properties", exchange.getProperties()); - } - if (includeHeaders) { - data.put("inHeaders", exchange.getIn().getHeaders()); - } - if (includeBody) { - data.put("inBody", MessageHelper.extractBodyAsString(exchange.getIn())); - } - data.put("inBodyType", MessageHelper.getBodyTypeName(exchange.getIn())); - if (exchange.hasOut()) { - if (includeHeaders) { - data.put("outHeaders", exchange.getOut().getHeaders()); - } - if (includeBody) { - data.put("outBody", MessageHelper.extractBodyAsString(exchange.getOut())); - } - data.put("outBodyType", MessageHelper.getBodyTypeName(exchange.getOut())); - } - data.put("causedByException", extractCausedByException(exchange)); - if (extender != null) { - extender.extend(data, exchange); - } - return data; - } - - private static String extractShortExchangeId(Exchange exchange) { - return exchange.getExchangeId().substring(exchange.getExchangeId().indexOf("/") + 1); - } - - private static String extractFromNode(Exchange exchange) { - if (exchange.getUnitOfWork() == null) { - return null; - } - TracedRouteNodes traced = exchange.getUnitOfWork().getTracedRouteNodes(); - RouteNode last = traced.getSecondLastNode(); - return last != null ? last.getLabel(exchange) : null; - } - - private static String extractToNode(Exchange exchange) { - if (exchange.getUnitOfWork() == null) { - return null; - } - TracedRouteNodes traced = exchange.getUnitOfWork().getTracedRouteNodes(); - RouteNode last = traced.getLastNode(); - return last != null ? last.getLabel(exchange) : null; - } - - private static String extractCausedByException(Exchange exchange) { - Throwable cause = exchange.getException(); - if (cause == null) { - cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class); - } - return (cause != null) ? cause.toString() : null; - } - } http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/029a6df5/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandler.java ---------------------------------------------------------------------- diff --git a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandler.java b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandler.java index 3cf43d9..e658528 100644 --- a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandler.java +++ b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandler.java @@ -16,50 +16,22 @@ */ package org.apache.karaf.decanter.collector.camel; +import java.net.InetAddress; +import java.util.HashMap; + import org.apache.camel.Exchange; import org.apache.camel.Processor; -import org.apache.camel.RouteNode; import org.apache.camel.model.ProcessorDefinition; import org.apache.camel.processor.interceptor.TraceEventHandler; import org.apache.camel.processor.interceptor.TraceInterceptor; -import org.apache.camel.spi.TracedRouteNodes; -import org.apache.camel.util.MessageHelper; import org.osgi.service.event.Event; import org.osgi.service.event.EventAdmin; -import java.net.InetAddress; -import java.util.HashMap; - public class DecanterTraceEventHandler implements TraceEventHandler { private EventAdmin eventAdmin; - private DecanterCamelEventExtender extender = null; - private boolean includeHeaders = true; - private boolean includeProperties = true; - private boolean includeBody = true; - - public DecanterTraceEventHandler() { - } - - public EventAdmin getEventAdmin() { - return eventAdmin; - } - - public void setExtender(DecanterCamelEventExtender extender) { - this.extender = extender; - } - - public void setEventAdmin(EventAdmin eventAdmin) { - this.eventAdmin = eventAdmin; - } - - public void setIncludeHeaders(boolean includeHeaders) { - this.includeHeaders = includeHeaders; - } - - public void setIncludeProperties(boolean includeProperties) { - this.includeProperties = includeProperties; - } + private DefaultExchangeExtender dextender = new DefaultExchangeExtender(); + private DecanterCamelEventExtender extender; @Override public void traceExchange(ProcessorDefinition<?> node, Processor target, TraceInterceptor traceInterceptor, Exchange exchange) throws Exception { @@ -70,47 +42,21 @@ public class DecanterTraceEventHandler implements TraceEventHandler { data.put("hostName", InetAddress.getLocalHost().getHostName()); data.put("nodeId", node.getId()); data.put("timestamp", System.currentTimeMillis()); - data.put("fromEndpointUri", exchange.getFromEndpoint() != null ? exchange.getFromEndpoint().getEndpointUri() : null); - data.put("previousNode", extractFromNode(exchange)); - data.put("toNode", extractToNode(exchange)); - data.put("exchangeId", exchange.getExchangeId()); - data.put("routeId", exchange.getFromRouteId()); - data.put("camelContextName", exchange.getContext().getName()); - data.put("shortExchangeId", extractShortExchangeId(exchange)); - data.put("exchangePattern", exchange.getPattern().toString()); + new DefaultExchangeExtender().extend(data, exchange); for (String property : exchange.getProperties().keySet()) { if (property.startsWith("decanter.")) { data.put(property.substring("decanter.".length()), exchange.getProperties().get(property)); } } - if (includeProperties) { - data.put("properties", exchange.getProperties().isEmpty() ? null : exchange.getProperties()); + dextender.extend(data, exchange); + if (extender != null) { + extender.extend(data, exchange); } for (String header : exchange.getIn().getHeaders().keySet()) { if (header.startsWith("decanter.")) { data.put(header.substring("decanter.".length()), exchange.getIn().getHeader(header)); } } - if (includeHeaders) { - data.put("inHeaders", exchange.getIn().getHeaders().isEmpty() ? null : exchange.getIn().getHeaders()); - } - if (includeBody) { - data.put("inBody", MessageHelper.extractBodyAsString(exchange.getIn())); - } - data.put("inBodyType", MessageHelper.getBodyTypeName(exchange.getIn())); - if (exchange.hasOut()) { - if (includeHeaders) { - data.put("outHeaders", exchange.getOut().getHeaders().isEmpty() ? null : exchange.getOut().getHeaders()); - } - if (includeBody) { - data.put("outBody", MessageHelper.extractBodyAsString(exchange.getOut())); - } - data.put("outBodyType", MessageHelper.getBodyTypeName(exchange.getOut())); - } - data.put("causedByException", extractCausedByException(exchange)); - if (extender != null) { - extender.extend(data, exchange); - } Event event = new Event("decanter/collect/camel/tracer", data); eventAdmin.postEvent(event); } @@ -125,35 +71,29 @@ public class DecanterTraceEventHandler implements TraceEventHandler { public void traceExchangeOut(ProcessorDefinition<?> node, Processor target, TraceInterceptor traceInterceptor, Exchange exchange, Object traceState) throws Exception { traceExchange(node, target, traceInterceptor, exchange); } + + public EventAdmin getEventAdmin() { + return eventAdmin; + } - private static String extractShortExchangeId(Exchange exchange) { - return exchange.getExchangeId().substring(exchange.getExchangeId().indexOf("/") + 1); + public void setExtender(DecanterCamelEventExtender extender) { + this.extender = extender; } - private static String extractFromNode(Exchange exchange) { - if (exchange.getUnitOfWork() == null) { - return null; - } - TracedRouteNodes traced = exchange.getUnitOfWork().getTracedRouteNodes(); - RouteNode last = traced.getSecondLastNode(); - return last != null ? last.getLabel(exchange) : null; + public void setEventAdmin(EventAdmin eventAdmin) { + this.eventAdmin = eventAdmin; + } + + public void setIncludeBody(boolean includeBody) { + dextender.setIncludeBody(includeBody); } - private static String extractToNode(Exchange exchange) { - if (exchange.getUnitOfWork() == null) { - return null; - } - TracedRouteNodes traced = exchange.getUnitOfWork().getTracedRouteNodes(); - RouteNode last = traced.getLastNode(); - return last != null ? last.getLabel(exchange) : null; + public void setIncludeHeaders(boolean includeHeaders) { + dextender.setIncludeHeaders(includeHeaders); } - private static String extractCausedByException(Exchange exchange) { - Throwable cause = exchange.getException(); - if (cause == null) { - cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class); - } - return (cause != null) ? cause.toString() : null; + public void setIncludeProperties(boolean includeProperties) { + dextender.setIncludeProperties(includeProperties); } } http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/029a6df5/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DefaultExchangeExtender.java ---------------------------------------------------------------------- diff --git a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DefaultExchangeExtender.java b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DefaultExchangeExtender.java new file mode 100644 index 0000000..fea3095 --- /dev/null +++ b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DefaultExchangeExtender.java @@ -0,0 +1,107 @@ +/* + * 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.karaf.decanter.collector.camel; + +import java.util.Map; + +import org.apache.camel.Exchange; +import org.apache.camel.RouteNode; +import org.apache.camel.spi.TracedRouteNodes; +import org.apache.camel.util.MessageHelper; + +/** + * Adds the default data from the Exchange to the data map + */ +public class DefaultExchangeExtender implements DecanterCamelEventExtender { + private boolean includeProperties = true; + private boolean includeHeaders = true; + private boolean includeBody = true; + + @Override + public void extend(Map<String, Object> data, Exchange exchange) { + data.put("fromEndpointUri", exchange.getFromEndpoint() != null ? exchange.getFromEndpoint().getEndpointUri() : null); + data.put("previousNode", extractFromNode(exchange)); + data.put("toNode", extractToNode(exchange)); + data.put("exchangeId", exchange.getExchangeId()); + data.put("routeId", exchange.getFromRouteId()); + data.put("camelContextName", exchange.getContext().getName()); + data.put("shortExchangeId", extractShortExchangeId(exchange)); + data.put("exchangePattern", exchange.getPattern().toString()); + if (includeProperties) { + data.put("properties", exchange.getProperties()); + } + if (includeHeaders) { + data.put("inHeaders", exchange.getIn().getHeaders()); + } + if (includeBody) { + data.put("inBody", MessageHelper.extractBodyAsString(exchange.getIn())); + } + data.put("inBodyType", MessageHelper.getBodyTypeName(exchange.getIn())); + if (exchange.hasOut()) { + if (includeHeaders) { + data.put("outHeaders", exchange.getOut().getHeaders()); + } + if (includeBody) { + data.put("outBody", MessageHelper.extractBodyAsString(exchange.getOut())); + } + data.put("outBodyType", MessageHelper.getBodyTypeName(exchange.getOut())); + } + data.put("causedByException", extractCausedByException(exchange)); + } + + private static String extractShortExchangeId(Exchange exchange) { + return exchange.getExchangeId().substring(exchange.getExchangeId().indexOf("/") + 1); + } + + private static String extractFromNode(Exchange exchange) { + if (exchange.getUnitOfWork() == null) { + return null; + } + TracedRouteNodes traced = exchange.getUnitOfWork().getTracedRouteNodes(); + RouteNode last = traced.getSecondLastNode(); + return last != null ? last.getLabel(exchange) : null; + } + + private static String extractToNode(Exchange exchange) { + if (exchange.getUnitOfWork() == null) { + return null; + } + TracedRouteNodes traced = exchange.getUnitOfWork().getTracedRouteNodes(); + RouteNode last = traced.getLastNode(); + return last != null ? last.getLabel(exchange) : null; + } + + private static String extractCausedByException(Exchange exchange) { + Throwable cause = exchange.getException(); + if (cause == null) { + cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class); + } + return (cause != null) ? cause.toString() : null; + } + + public void setIncludeBody(boolean includeBody) { + this.includeBody = includeBody; + } + + public void setIncludeHeaders(boolean includeHeaders) { + this.includeHeaders = includeHeaders; + } + + public void setIncludeProperties(boolean includeProperties) { + this.includeProperties = includeProperties; + } +}
