You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/09/28 11:05:50 UTC

[1/2] camel git commit: CAMEL-9179: Add uptime to route so we can easily see per route how long time they have been running

Repository: camel
Updated Branches:
  refs/heads/master 3d8ff95b9 -> 6d3d1309c


CAMEL-9179: Add uptime to route so we can easily see per route how long time they have been running


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/92c5fe5a
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/92c5fe5a
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/92c5fe5a

Branch: refs/heads/master
Commit: 92c5fe5a29c6e4599a07d829fec113ed93ba2a29
Parents: 3d8ff95
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Sep 28 10:55:32 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Sep 28 10:55:32 2015 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/camel/Route.java   |  7 +++++++
 .../api/management/mbean/ManagedRouteMBean.java |  3 +++
 .../apache/camel/impl/DefaultCamelContext.java  |  2 +-
 .../org/apache/camel/impl/DefaultRoute.java     | 20 ++++++++++++++++++--
 .../camel/management/mbean/ManagedRoute.java    |  4 ++++
 .../camel/management/ManagedRouteStopTest.java  |  7 +++++++
 6 files changed, 40 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/92c5fe5a/camel-core/src/main/java/org/apache/camel/Route.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/Route.java b/camel-core/src/main/java/org/apache/camel/Route.java
index d5cc0db..31b16b1 100644
--- a/camel-core/src/main/java/org/apache/camel/Route.java
+++ b/camel-core/src/main/java/org/apache/camel/Route.java
@@ -46,6 +46,13 @@ public interface Route extends EndpointAware {
     String getId();
 
     /**
+     * Gets the uptime in a human readable format
+     *
+     * @return the uptime in days/hours/minutes
+     */
+    String getUptime();
+
+    /**
      * Gets the inbound {@link Consumer}
      *
      * @return the inbound consumer

http://git-wip-us.apache.org/repos/asf/camel/blob/92c5fe5a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java
index 7083a0f..9d9e9b8 100644
--- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java
+++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java
@@ -33,6 +33,9 @@ public interface ManagedRouteMBean extends ManagedPerformanceCounterMBean {
     @ManagedAttribute(description = "Route State")
     String getState();
 
+    @ManagedAttribute(description = "Route Uptime")
+    String getUptime();
+
     /**
      * @deprecated use {@link #getExchangesInflight()}
      */

http://git-wip-us.apache.org/repos/asf/camel/blob/92c5fe5a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index c7207fe..5935f52 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -2654,7 +2654,7 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
     public String getUptime() {
         // compute and log uptime
         if (startDate == null) {
-            return "not started";
+            return "";
         }
         long delta = new Date().getTime() - startDate.getTime();
         return TimeUtils.printDuration(delta);

http://git-wip-us.apache.org/repos/asf/camel/blob/92c5fe5a/camel-core/src/main/java/org/apache/camel/impl/DefaultRoute.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultRoute.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultRoute.java
index 0d214c0..2b280e7 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultRoute.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultRoute.java
@@ -17,6 +17,7 @@
 package org.apache.camel.impl;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -26,6 +27,7 @@ import org.apache.camel.Route;
 import org.apache.camel.Service;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.ServiceSupport;
+import org.apache.camel.util.TimeUtils;
 
 /**
  * Default implementation of {@link Route}.
@@ -42,6 +44,7 @@ public abstract class DefaultRoute extends ServiceSupport implements Route {
     private final Map<String, Object> properties = new HashMap<String, Object>();
     private final List<Service> services = new ArrayList<Service>();
     private final RouteContext routeContext;
+    private Date startDate;
 
     public DefaultRoute(RouteContext routeContext, Endpoint endpoint) {
         this.routeContext = routeContext;
@@ -64,6 +67,16 @@ public abstract class DefaultRoute extends ServiceSupport implements Route {
         return (String) properties.get(Route.ID_PROPERTY);
     }
 
+    @Override
+    public String getUptime() {
+        // compute and log uptime
+        if (startDate == null) {
+            return "";
+        }
+        long delta = new Date().getTime() - startDate.getTime();
+        return TimeUtils.printDuration(delta);
+    }
+
     public Endpoint getEndpoint() {
         return endpoint;
     }
@@ -122,15 +135,18 @@ public abstract class DefaultRoute extends ServiceSupport implements Route {
     }
 
     protected void doStart() throws Exception {
-        // noop
+        startDate = new Date();
     }
 
     protected void doStop() throws Exception {
-        // noop
+        // and clear start date
+        startDate = null;
     }
 
     @Override
     protected void doShutdown() throws Exception {
+        // and clear start date
+        startDate = null;
         // clear services when shutting down
         services.clear();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/92c5fe5a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
index 50d041c..2f11b41 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
@@ -113,6 +113,10 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
         return status.name();
     }
 
+    public String getUptime() {
+        return route.getUptime();
+    }
+
     public Integer getInflightExchanges() {
         return (int) super.getExchangesInflight();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/92c5fe5a/camel-core/src/test/java/org/apache/camel/management/ManagedRouteStopTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedRouteStopTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedRouteStopTest.java
index 7c42de1..4c82293 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedRouteStopTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedRouteStopTest.java
@@ -57,6 +57,10 @@ public class ManagedRouteStopTest extends ManagementTestSupport {
         String state = (String) mbeanServer.getAttribute(on, "State");
         assertEquals("Should be started", ServiceStatus.Started.name(), state);
 
+        String uptime = (String) mbeanServer.getAttribute(on, "Uptime");
+        assertNotNull(uptime);
+        log.info("Uptime: {}", uptime);
+
         mbeanServer.invoke(on, "stop", null, null);
 
         registered = mbeanServer.isRegistered(on);
@@ -65,6 +69,9 @@ public class ManagedRouteStopTest extends ManagementTestSupport {
         // should be stopped, eg its removed
         state = (String) mbeanServer.getAttribute(on, "State");
         assertEquals("Should be stopped", ServiceStatus.Stopped.name(), state);
+
+        uptime = (String) mbeanServer.getAttribute(on, "Uptime");
+        assertEquals("", uptime);
     }
 
     @Override


[2/2] camel git commit: CAMEL-9179: Add uptime to Camel route list command.

Posted by da...@apache.org.
CAMEL-9179: Add uptime to Camel route list command.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6d3d1309
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6d3d1309
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6d3d1309

Branch: refs/heads/master
Commit: 6d3d1309c364201ac17c677644818c174c597e62
Parents: 92c5fe5
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Sep 28 11:07:34 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Sep 28 11:07:34 2015 +0200

----------------------------------------------------------------------
 .../commands/AbstractLocalCamelController.java  | 12 +++++
 .../apache/camel/commands/RouteListCommand.java | 48 ++++++++++++++++++--
 .../jolokia/DefaultJolokiaCamelController.java  |  6 ++-
 3 files changed, 61 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/6d3d1309/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
index 823e5b3..6d80584 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
@@ -37,6 +37,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Route;
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.StatefulService;
+import org.apache.camel.api.management.mbean.ManagedRouteMBean;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.rest.RestDefinition;
@@ -266,6 +267,17 @@ public abstract class AbstractLocalCamelController extends AbstractCamelControll
                         row.put("camelContextName", context.getName());
                         row.put("routeId", route.getId());
                         row.put("state", getRouteState(route));
+                        row.put("uptime", route.getUptime());
+                        ManagedRouteMBean mr = context.getManagedRoute(route.getId(), ManagedRouteMBean.class);
+                        if (mr != null) {
+                            row.put("exchangesTotal", "" + mr.getExchangesTotal());
+                            row.put("exchangesInflight", "" + mr.getExchangesInflight());
+                            row.put("exchangesFailed", "" + mr.getExchangesFailed());
+                        } else {
+                            row.put("exchangesTotal", "0");
+                            row.put("exchangesInflight", "0");
+                            row.put("exchangesFailed", "0");
+                        }
                         answer.add(row);
                     }
                 }

http://git-wip-us.apache.org/repos/asf/camel/blob/6d3d1309/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteListCommand.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteListCommand.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteListCommand.java
index 8c00d7a..2c94afd 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteListCommand.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteListCommand.java
@@ -29,6 +29,10 @@ public class RouteListCommand extends AbstractCamelCommand {
     private static final String CONTEXT_COLUMN_LABEL = "Context";
     private static final String ROUTE_COLUMN_LABEL = "Route";
     private static final String STATUS_COLUMN_LABEL = "Status";
+    private static final String TOTAL_COLUMN_LABEL = "Total #";
+    private static final String FAILED_COLUMN_LABEL = "Failed #";
+    private static final String INFLIGHT_COLUMN_LABEL = "Inflight #";
+    private static final String UPTIME_COLUMN_LABEL = "Uptime";
 
     private static final int DEFAULT_COLUMN_WIDTH_INCREMENT = 0;
     private static final String DEFAULT_FIELD_PREAMBLE = " ";
@@ -54,13 +58,17 @@ public class RouteListCommand extends AbstractCamelCommand {
         final String rowFormat = buildFormatString(columnWidths, false);
 
         if (routes.size() > 0) {
-            out.println(String.format(headerFormat, CONTEXT_COLUMN_LABEL, ROUTE_COLUMN_LABEL, STATUS_COLUMN_LABEL));
-            out.println(String.format(headerFormat, "-------", "-----", "------"));
+            out.println(String.format(headerFormat, CONTEXT_COLUMN_LABEL, ROUTE_COLUMN_LABEL, STATUS_COLUMN_LABEL, TOTAL_COLUMN_LABEL, FAILED_COLUMN_LABEL, INFLIGHT_COLUMN_LABEL, UPTIME_COLUMN_LABEL));
+            out.println(String.format(headerFormat, "-------", "-----", "------", "-------", "--------", "----------", "------"));
             for (Map<String, String> row : routes) {
                 String contextId = row.get("camelContextName");
                 String routeId = row.get("routeId");
                 String state = row.get("state");
-                out.println(String.format(rowFormat, contextId, routeId, state));
+                String total = row.get("exchangesTotal");
+                String failed = row.get("exchangesFailed");
+                String inflight = row.get("exchangesInflight");
+                String uptime = row.get("uptime");
+                out.println(String.format(rowFormat, contextId, routeId, state, total, failed, inflight, uptime));
             }
         }
 
@@ -74,6 +82,10 @@ public class RouteListCommand extends AbstractCamelCommand {
             int maxContextLen = 0;
             int maxRouteLen = 0;
             int maxStatusLen = 0;
+            int maxTotalLen = 0;
+            int maxFailedLen = 0;
+            int maxInflightLen = 0;
+            int maxUptimeLen = 0;
 
             for (Map<String, String> row : routes) {
                 final String contextId = row.get("camelContextName");
@@ -84,12 +96,28 @@ public class RouteListCommand extends AbstractCamelCommand {
 
                 final String status = row.get("state");
                 maxStatusLen = java.lang.Math.max(maxStatusLen, status == null ? 0 : status.length());
+
+                final String total = row.get("exchangesTotal");
+                maxTotalLen = java.lang.Math.max(maxTotalLen, total == null ? 0 : total.length());
+
+                final String failed = row.get("exchangesFailed");
+                maxFailedLen = java.lang.Math.max(maxFailedLen, failed == null ? 0 : failed.length());
+
+                final String inflight = row.get("exchangesInflight");
+                maxInflightLen = java.lang.Math.max(maxInflightLen, inflight == null ? 0 : inflight.length());
+
+                final String uptime = row.get("uptime");
+                maxUptimeLen = java.lang.Math.max(maxUptimeLen, uptime == null ? 0 : uptime.length());
             }
 
             final Map<String, Integer> retval = new Hashtable<String, Integer>(3);
             retval.put(CONTEXT_COLUMN_LABEL, maxContextLen);
             retval.put(ROUTE_COLUMN_LABEL, maxRouteLen);
             retval.put(STATUS_COLUMN_LABEL, maxStatusLen);
+            retval.put(TOTAL_COLUMN_LABEL, maxTotalLen);
+            retval.put(FAILED_COLUMN_LABEL, maxFailedLen);
+            retval.put(INFLIGHT_COLUMN_LABEL, maxInflightLen);
+            retval.put(UPTIME_COLUMN_LABEL, maxUptimeLen);
 
             return retval;
         }
@@ -112,14 +140,26 @@ public class RouteListCommand extends AbstractCamelCommand {
         int contextLen = Math.min(columnWidths.get(CONTEXT_COLUMN_LABEL) + columnWidthIncrement, MAX_COLUMN_WIDTH);
         int routeLen = Math.min(columnWidths.get(ROUTE_COLUMN_LABEL) + columnWidthIncrement, MAX_COLUMN_WIDTH);
         int statusLen = Math.min(columnWidths.get(STATUS_COLUMN_LABEL) + columnWidthIncrement, MAX_COLUMN_WIDTH);
+        int totalLen = Math.min(columnWidths.get(TOTAL_COLUMN_LABEL) + columnWidthIncrement, MAX_COLUMN_WIDTH);
+        int failedlLen = Math.min(columnWidths.get(FAILED_COLUMN_LABEL) + columnWidthIncrement, MAX_COLUMN_WIDTH);
+        int inflightLen = Math.min(columnWidths.get(INFLIGHT_COLUMN_LABEL) + columnWidthIncrement, MAX_COLUMN_WIDTH);
+        int uptimeLen = Math.min(columnWidths.get(UPTIME_COLUMN_LABEL) + columnWidthIncrement, MAX_COLUMN_WIDTH);
         contextLen = Math.max(MIN_COLUMN_WIDTH, contextLen);
         routeLen = Math.max(MIN_COLUMN_WIDTH, routeLen);
-        // last row does not have min width
+        statusLen = Math.max(MIN_COLUMN_WIDTH, statusLen);
+        totalLen = Math.max(MIN_COLUMN_WIDTH, totalLen);
+        failedlLen = Math.max(MIN_COLUMN_WIDTH, failedlLen);
+        inflightLen = Math.max(MIN_COLUMN_WIDTH, inflightLen);
+        uptimeLen = Math.max(MIN_COLUMN_WIDTH, uptimeLen);
 
         final StringBuilder retval = new StringBuilder(DEFAULT_FORMAT_BUFFER_LENGTH);
         retval.append(fieldPreamble).append("%-").append(contextLen).append('.').append(contextLen).append('s').append(fieldPostamble).append(' ');
         retval.append(fieldPreamble).append("%-").append(routeLen).append('.').append(routeLen).append('s').append(fieldPostamble).append(' ');
         retval.append(fieldPreamble).append("%-").append(statusLen).append('.').append(statusLen).append('s').append(fieldPostamble).append(' ');
+        retval.append(fieldPreamble).append("%").append(totalLen).append('.').append(totalLen).append('s').append(fieldPostamble).append(' ');
+        retval.append(fieldPreamble).append("%").append(failedlLen).append('.').append(failedlLen).append('s').append(fieldPostamble).append(' ');
+        retval.append(fieldPreamble).append("%").append(inflightLen).append('.').append(inflightLen).append('s').append(fieldPostamble).append(' ');
+        retval.append(fieldPreamble).append("%-").append(uptimeLen).append('.').append(uptimeLen).append('s').append(fieldPostamble).append(' ');
 
         return retval.toString();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/6d3d1309/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java b/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
index 6404fa2..21fd022 100644
--- a/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
+++ b/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
@@ -332,7 +332,7 @@ public class DefaultJolokiaCamelController extends AbstractCamelController imple
 
             List<J4pReadRequest> list = new ArrayList<J4pReadRequest>();
             for (ObjectName on : sr.getObjectNames()) {
-                list.add(new J4pReadRequest(on, "CamelId", "RouteId", "State"));
+                list.add(new J4pReadRequest(on, "CamelId", "RouteId", "State", "Uptime", "ExchangesTotal", "ExchangesInflight", "ExchangesFailed"));
             }
 
             List<J4pReadResponse> lrr = jolokia.execute(list);
@@ -343,6 +343,10 @@ public class DefaultJolokiaCamelController extends AbstractCamelController imple
                     row.put("camelContextName", rr.getValue("CamelId").toString());
                     row.put("routeId", routeId);
                     row.put("state", rr.getValue("State").toString());
+                    row.put("uptime", rr.getValue("Uptime").toString());
+                    row.put("exchangesTotal", rr.getValue("ExchangesTotal").toString());
+                    row.put("exchangesInflight", rr.getValue("ExchangesInflight").toString());
+                    row.put("exchangesFailed", rr.getValue("ExchangesFailed").toString());
                     answer.add(row);
                 }
             }