You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gz...@apache.org on 2017/07/09 11:43:50 UTC
camel git commit: CAMEL-11374: Export JMX route details via Actuator
endpoint
Repository: camel
Updated Branches:
refs/heads/feature/CAMEL-11374-actuator-jmx-details [created] 1dd8b4b42
CAMEL-11374: Export JMX route details via Actuator endpoint
Expose JMX route details with the Camel route MVC endpoint that is
exposed via /camelroutes/{route-id}.
Signed-off-by: Gregor Zurowski <gr...@zurowski.org>
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1dd8b4b4
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1dd8b4b4
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1dd8b4b4
Branch: refs/heads/feature/CAMEL-11374-actuator-jmx-details
Commit: 1dd8b4b429cb8c963bcbda3b06fd8dfaf05c78f5
Parents: 4f872f0
Author: Gregor Zurowski <gr...@zurowski.org>
Authored: Sun Jul 9 13:41:30 2017 +0200
Committer: Gregor Zurowski <gr...@zurowski.org>
Committed: Sun Jul 9 13:41:30 2017 +0200
----------------------------------------------------------------------
.../actuate/endpoint/CamelRoutesEndpoint.java | 208 ++++++++++++++++++-
.../endpoint/CamelRoutesMvcEndpoint.java | 2 +-
.../endpoint/CamelRoutesMvcEndpointTest.java | 5 +-
3 files changed, 210 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/1dd8b4b4/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
index f8e31a9..9e86ed4 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
@@ -16,14 +16,17 @@
*/
package org.apache.camel.spring.boot.actuate.endpoint;
+import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import org.apache.camel.CamelContext;
import org.apache.camel.Route;
import org.apache.camel.StatefulService;
+import org.apache.camel.api.management.mbean.ManagedRouteMBean;
import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteEndpointInfo;
import org.springframework.boot.actuate.endpoint.AbstractEndpoint;
import org.springframework.boot.actuate.endpoint.Endpoint;
@@ -55,10 +58,10 @@ public class CamelRoutesEndpoint extends AbstractEndpoint<List<RouteEndpointInfo
.collect(Collectors.toList());
}
- public RouteEndpointInfo getRouteInfo(String id) {
+ public RouteDetailsEndpointInfo getRouteDetailsInfo(String id) {
Route route = camelContext.getRoute(id);
if (route != null) {
- return new RouteEndpointInfo(route);
+ return new RouteDetailsEndpointInfo(camelContext, route);
}
return null;
@@ -113,4 +116,205 @@ public class CamelRoutesEndpoint extends AbstractEndpoint<List<RouteEndpointInfo
}
}
+ /**
+ * Container for exposing {@link org.apache.camel.Route} information
+ * with route details as JSON. Route details are retrieved from JMX.
+ */
+ public static class RouteDetailsEndpointInfo extends RouteEndpointInfo {
+
+ @JsonProperty("details")
+ private RouteDetails routeDetails;
+
+ public RouteDetailsEndpointInfo(final CamelContext camelContext, final Route route) {
+ super(route);
+ if (camelContext.getManagementStrategy().getManagementAgent() != null) {
+ this.routeDetails = new RouteDetails(camelContext.getManagedRoute(route.getId(),
+ ManagedRouteMBean.class));
+ }
+ }
+
+ public RouteDetails getRouteDetails() {
+ return routeDetails;
+ }
+
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ static class RouteDetails {
+
+ private long deltaProcessingTime;
+
+ private long exchangesInflight;
+
+ private long exchangesTotal;
+
+ private long externalRedeliveries;
+
+ private long failuresHandled;
+
+ private String firstExchangeCompletedExchangeId;
+
+ private Date firstExchangeCompletedTimestamp;
+
+ private String firstExchangeFailureExchangeId;
+
+ private Date firstExchangeFailureTimestamp;
+
+ private String lastExchangeCompletedExchangeId;
+
+ private Date lastExchangeCompletedTimestamp;
+
+ private String lastExchangeFailureExchangeId;
+
+ private Date lastExchangeFailureTimestamp;
+
+ private long lastProcessingTime;
+
+ private String load01;
+
+ private String load05;
+
+ private String load15;
+
+ private long maxProcessingTime;
+
+ private long meanProcessingTime;
+
+ private long minProcessingTime;
+
+ private Long oldestInflightDuration;
+
+ private String oldestInflightExchangeId;
+
+ private long redeliveries;
+
+ private long totalProcessingTime;
+
+ RouteDetails(ManagedRouteMBean managedRoute) {
+ try {
+ this.deltaProcessingTime = managedRoute.getDeltaProcessingTime();
+ this.exchangesInflight = managedRoute.getExchangesInflight();
+ this.exchangesTotal = managedRoute.getExchangesTotal();
+ this.externalRedeliveries = managedRoute.getExternalRedeliveries();
+ this.failuresHandled = managedRoute.getFailuresHandled();
+ this.firstExchangeCompletedExchangeId = managedRoute.getFirstExchangeCompletedExchangeId();
+ this.firstExchangeCompletedTimestamp = managedRoute.getFirstExchangeCompletedTimestamp();
+ this.firstExchangeFailureExchangeId = managedRoute.getFirstExchangeFailureExchangeId();
+ this.firstExchangeFailureTimestamp = managedRoute.getFirstExchangeFailureTimestamp();
+ this.lastExchangeCompletedExchangeId = managedRoute.getLastExchangeCompletedExchangeId();
+ this.lastExchangeCompletedTimestamp = managedRoute.getLastExchangeCompletedTimestamp();
+ this.lastExchangeFailureExchangeId = managedRoute.getLastExchangeFailureExchangeId();
+ this.lastExchangeFailureTimestamp = managedRoute.getLastExchangeFailureTimestamp();
+ this.lastProcessingTime = managedRoute.getLastProcessingTime();
+ this.load01 = managedRoute.getLoad01();
+ this.load05 = managedRoute.getLoad05();
+ this.load15 = managedRoute.getLoad15();
+ this.maxProcessingTime = managedRoute.getMaxProcessingTime();
+ this.meanProcessingTime = managedRoute.getMeanProcessingTime();
+ this.minProcessingTime = managedRoute.getMinProcessingTime();
+ this.oldestInflightDuration = managedRoute.getOldestInflightDuration();
+ this.oldestInflightExchangeId = managedRoute.getOldestInflightExchangeId();
+ this.redeliveries = managedRoute.getRedeliveries();
+ this.totalProcessingTime = managedRoute.getTotalProcessingTime();
+ } catch (Exception e) {
+ // Ignore
+ }
+ }
+
+ public long getDeltaProcessingTime() {
+ return deltaProcessingTime;
+ }
+
+ public long getExchangesInflight() {
+ return exchangesInflight;
+ }
+
+ public long getExchangesTotal() {
+ return exchangesTotal;
+ }
+
+ public long getExternalRedeliveries() {
+ return externalRedeliveries;
+ }
+
+ public long getFailuresHandled() {
+ return failuresHandled;
+ }
+
+ public String getFirstExchangeCompletedExchangeId() {
+ return firstExchangeCompletedExchangeId;
+ }
+
+ public Date getFirstExchangeCompletedTimestamp() {
+ return firstExchangeCompletedTimestamp;
+ }
+
+ public String getFirstExchangeFailureExchangeId() {
+ return firstExchangeFailureExchangeId;
+ }
+
+ public Date getFirstExchangeFailureTimestamp() {
+ return firstExchangeFailureTimestamp;
+ }
+
+ public String getLastExchangeCompletedExchangeId() {
+ return lastExchangeCompletedExchangeId;
+ }
+
+ public Date getLastExchangeCompletedTimestamp() {
+ return lastExchangeCompletedTimestamp;
+ }
+
+ public String getLastExchangeFailureExchangeId() {
+ return lastExchangeFailureExchangeId;
+ }
+
+ public Date getLastExchangeFailureTimestamp() {
+ return lastExchangeFailureTimestamp;
+ }
+
+ public long getLastProcessingTime() {
+ return lastProcessingTime;
+ }
+
+ public String getLoad01() {
+ return load01;
+ }
+
+ public String getLoad05() {
+ return load05;
+ }
+
+ public String getLoad15() {
+ return load15;
+ }
+
+ public long getMaxProcessingTime() {
+ return maxProcessingTime;
+ }
+
+ public long getMeanProcessingTime() {
+ return meanProcessingTime;
+ }
+
+ public long getMinProcessingTime() {
+ return minProcessingTime;
+ }
+
+ public Long getOldestInflightDuration() {
+ return oldestInflightDuration;
+ }
+
+ public String getOldestInflightExchangeId() {
+ return oldestInflightExchangeId;
+ }
+
+ public long getRedeliveries() {
+ return redeliveries;
+ }
+
+ public long getTotalProcessingTime() {
+ return totalProcessingTime;
+ }
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/camel/blob/1dd8b4b4/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesMvcEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesMvcEndpoint.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesMvcEndpoint.java
index 017fd9d..c90e187 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesMvcEndpoint.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesMvcEndpoint.java
@@ -51,7 +51,7 @@ public class CamelRoutesMvcEndpoint extends EndpointMvcAdapter {
return getDisabledResponse();
}
- Object result = delegate.getRouteInfo(id);
+ Object result = delegate.getRouteDetailsInfo(id);
if (result == null) {
result = NOT_FOUND;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/1dd8b4b4/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesMvcEndpointTest.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesMvcEndpointTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesMvcEndpointTest.java
index 954b156..63e47cf 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesMvcEndpointTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesMvcEndpointTest.java
@@ -20,6 +20,7 @@ import java.util.List;
import org.apache.camel.CamelContext;
import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteDetailsEndpointInfo;
import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteEndpointInfo;
import org.junit.Assert;
import org.junit.Test;
@@ -60,8 +61,8 @@ public class CamelRoutesMvcEndpointTest extends Assert {
public void testMvcRoutesEndpoint() throws Exception {
Object result = endpoint.get("foo-route");
- assertTrue(result instanceof RouteEndpointInfo);
- assertEquals("foo-route", ((RouteEndpointInfo)result).getId());
+ assertTrue(result instanceof RouteDetailsEndpointInfo);
+ assertEquals("foo-route", ((RouteDetailsEndpointInfo)result).getId());
}
}