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/07/28 09:11:37 UTC

[2/6] camel git commit: Camel commands show more details

Camel commands show more details


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

Branch: refs/heads/master
Commit: d04768e0d25f4aa533d80a7f907c2732d61b6bf9
Parents: 75ef7eb
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Jul 27 19:49:20 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jul 28 09:12:11 2015 +0200

----------------------------------------------------------------------
 .../camel/commands/AbstractCamelController.java | 21 +++++
 .../apache/camel/commands/CamelController.java  | 11 ++-
 .../commands/EndpointStatisticCommand.java      | 91 +++++++++++++-------
 .../camel/karaf/commands/EndpointStats.java     |  2 +-
 4 files changed, 91 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/d04768e0/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java
index 2aad27d..cea1b46 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java
@@ -25,6 +25,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.camel.catalog.CamelCatalog;
+import org.apache.camel.catalog.CatalogHelper;
 import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.commands.internal.RegexUtil;
 import org.apache.camel.util.JsonSchemaHelper;
@@ -37,6 +38,26 @@ public abstract class AbstractCamelController implements CamelController {
     private CamelCatalog catalog = new DefaultCamelCatalog();
 
     @Override
+    public List<Map<String, String>> getCamelContexts(String filter) throws Exception {
+        List<Map<String, String>> answer = new ArrayList<Map<String, String>>();
+
+        List<Map<String, String>> context = getCamelContexts();
+        if (filter != null) {
+            filter = RegexUtil.wildcardAsRegex(filter);
+        } else {
+            filter = "*";
+        }
+        for (Map<String, String> entry : context) {
+            String name = entry.get("name");
+            if (name.equalsIgnoreCase(filter) || CatalogHelper.matchWildcard(name, filter) || name.matches(filter)) {
+                answer.add(entry);
+            }
+        }
+
+        return answer;
+    }
+
+    @Override
     public List<Map<String, String>> listEipsCatalog(String filter) throws Exception {
         List<Map<String, String>> answer = new ArrayList<Map<String, String>>();
 

http://git-wip-us.apache.org/repos/asf/camel/blob/d04768e0/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
index 67030bc..dd807b4 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
@@ -43,6 +43,15 @@ public interface CamelController {
     List<Map<String, String>> getCamelContexts() throws Exception;
 
     /**
+     * Get the list of Camel context filter by reg ex.
+     *
+     * @param filter           the filter which supports * and ? as wildcards
+     * @return a list of key/value pairs with CamelContext information
+     * @throws java.lang.Exception can be thrown
+     */
+    List<Map<String, String>> getCamelContexts(String filter) throws Exception;
+
+    /**
      * Returns detailed CamelContext and route statistics as XML identified by a ID and a Camel context.
      *
      * @param camelContextName  the Camel context.
@@ -193,7 +202,7 @@ public interface CamelController {
     /**
      * Return endpoint runtime statistics
      *
-     * @param camelContextName the Camel context.
+     * @param camelContextName the Camel context
      * @return a list of key/value pairs with endpoint runtime statistics
      * @throws java.lang.Exception can be thrown
      */

http://git-wip-us.apache.org/repos/asf/camel/blob/d04768e0/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EndpointStatisticCommand.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EndpointStatisticCommand.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EndpointStatisticCommand.java
index f9427251..a89f2e2 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EndpointStatisticCommand.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EndpointStatisticCommand.java
@@ -19,6 +19,7 @@ package org.apache.camel.commands;
 import java.io.PrintStream;
 import java.net.URLDecoder;
 import java.util.Hashtable;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -27,8 +28,9 @@ import org.apache.camel.util.URISupport;
 /**
  * Display endpoint runtime statistics for a CamelContext
  */
-public class EndpointStatisticCommand extends AbstractContextCommand {
+public class EndpointStatisticCommand extends AbstractCamelCommand {
 
+    private static final String CONTEXT_COLUMN_LABEL = "Context";
     private static final String URI_COLUMN_LABEL = "Uri";
     private static final String ROUTE_COLUMN_LABEL = "Route Id";
     private static final String DIRECTION_COLUMN_LABEL = "Direction";
@@ -46,27 +48,43 @@ public class EndpointStatisticCommand extends AbstractContextCommand {
     private static final int MAX_COLUMN_WIDTH = 120;
     private static final int MIN_COLUMN_WIDTH = 12;
 
+    String context;
     boolean decode = true;
     private String[] filter;
 
     public EndpointStatisticCommand(String context, boolean decode, String[] filter) {
-        super(context);
+        this.context = context;
         this.decode = decode;
         this.filter = filter;
     }
 
     @Override
-    protected Object performContextCommand(CamelController camelController, String contextName, PrintStream out, PrintStream err) throws Exception {
-        List<Map<String, String>> endpoints = camelController.getEndpointRuntimeStatistics(contextName);
+    public Object execute(CamelController camelController, PrintStream out, PrintStream err) throws Exception {
+        List<Map<String, String>> contexts = camelController.getCamelContexts(context);
 
-        final Map<String, Integer> columnWidths = computeColumnWidths(endpoints);
+        boolean header = false;
+
+        Map<String, List<Map<String, String>>> allEndpoints = new LinkedHashMap<>();
+
+        for (Map<String, String> context : contexts) {
+            String contextName = context.get("name");
+            List<Map<String, String>> endpoints = camelController.getEndpointRuntimeStatistics(contextName);
+            allEndpoints.put(contextName, endpoints);
+        }
+
+        final Map<String, Integer> columnWidths = computeColumnWidths(allEndpoints);
         final String headerFormat = buildFormatString(columnWidths, true);
         final String rowFormat = buildFormatString(columnWidths, false);
 
-        if (endpoints.size() > 0) {
-            out.println(String.format(headerFormat, URI_COLUMN_LABEL, ROUTE_COLUMN_LABEL, DIRECTION_COLUMN_LABEL, STATIC_COLUMN_LABEL, DYNAMIC_COLUMN_LABEL, HITS_COLUMN_LABEL));
-            out.println(String.format(headerFormat, "---", "--------", "---------", "------", "-------", "----"));
-            for (Map<String, String> row : endpoints) {
+        for (Map.Entry<String, List<Map<String, String>>> entry : allEndpoints.entrySet()) {
+            String contextName = entry.getKey();
+            for (Map<String, String> row : entry.getValue()) {
+
+                if (!header) {
+                    out.println(String.format(headerFormat, CONTEXT_COLUMN_LABEL, URI_COLUMN_LABEL, ROUTE_COLUMN_LABEL, DIRECTION_COLUMN_LABEL, STATIC_COLUMN_LABEL, DYNAMIC_COLUMN_LABEL, HITS_COLUMN_LABEL));
+                    out.println(String.format(headerFormat, "-------", "---", "--------", "---------", "------", "-------", "----"));
+                    header = true;
+                }
 
                 String uri = row.get("uri");
                 if (decode) {
@@ -83,7 +101,7 @@ public class EndpointStatisticCommand extends AbstractContextCommand {
 
                 // should we filter
                 if (isValidRow(direction, isStatic, isDynamic)) {
-                    out.println(String.format(rowFormat, uri, routeId, direction, isStatic, isDynamic, hits));
+                    out.println(String.format(rowFormat, contextName, uri, routeId, direction, isStatic, isDynamic, hits));
                 }
             }
         }
@@ -115,10 +133,11 @@ public class EndpointStatisticCommand extends AbstractContextCommand {
         return answer;
     }
 
-    private Map<String, Integer> computeColumnWidths(final Iterable<Map<String, String>> endpoints) throws Exception {
-        if (endpoints == null) {
+    private Map<String, Integer> computeColumnWidths(Map<String, List<Map<String, String>>> allEndpoints) throws Exception {
+        if (allEndpoints == null) {
             throw new IllegalArgumentException("Unable to determine column widths from null Iterable<Endpoint>");
         } else {
+            int maxContextLen = 0;
             int maxUriLen = 0;
             int maxRouteIdLen = 0;
             int maxDirectionLen = 0;
@@ -126,36 +145,40 @@ public class EndpointStatisticCommand extends AbstractContextCommand {
             int maxDynamicLen = 0;
             int maxHitsLen = 0;
 
-            for (Map<String, String> row : endpoints) {
-                final String name = row.get("camelContextName");
+            for (Map.Entry<String, List<Map<String, String>>> entry : allEndpoints.entrySet()) {
+                String contextName = entry.getKey();
+                for (Map<String, String> row : entry.getValue()) {
+                    maxContextLen = Math.max(maxContextLen, contextName == null ? 0 : contextName.length());
 
-                String uri = row.get("uri");
-                if (decode) {
-                    // decode uri so its more human readable
-                    uri = URLDecoder.decode(uri, "UTF-8");
-                }
-                // sanitize and mask uri so we dont see passwords
-                uri = URISupport.sanitizeUri(uri);
+                    String uri = row.get("uri");
+                    if (decode) {
+                        // decode uri so its more human readable
+                        uri = URLDecoder.decode(uri, "UTF-8");
+                    }
+                    // sanitize and mask uri so we dont see passwords
+                    uri = URISupport.sanitizeUri(uri);
 
-                maxUriLen = Math.max(maxUriLen, uri == null ? 0 : uri.length());
+                    maxUriLen = Math.max(maxUriLen, uri == null ? 0 : uri.length());
 
-                final String routeId = row.get("routeId");
-                maxRouteIdLen = Math.max(maxRouteIdLen, routeId == null ? 0 : routeId.length());
+                    final String routeId = row.get("routeId");
+                    maxRouteIdLen = Math.max(maxRouteIdLen, routeId == null ? 0 : routeId.length());
 
-                final String direction = row.get("direction");
-                maxDirectionLen = Math.max(maxDirectionLen, direction == null ? 0 : direction.length());
+                    final String direction = row.get("direction");
+                    maxDirectionLen = Math.max(maxDirectionLen, direction == null ? 0 : direction.length());
 
-                final String isStatic = row.get("static");
-                maxStaticLen = Math.max(maxStaticLen, isStatic == null ? 0 : isStatic.length());
+                    final String isStatic = row.get("static");
+                    maxStaticLen = Math.max(maxStaticLen, isStatic == null ? 0 : isStatic.length());
 
-                final String isDynamic = row.get("dynamic");
-                maxDynamicLen = Math.max(maxDynamicLen, isDynamic == null ? 0 : isDynamic.length());
+                    final String isDynamic = row.get("dynamic");
+                    maxDynamicLen = Math.max(maxDynamicLen, isDynamic == null ? 0 : isDynamic.length());
 
-                final String hits = row.get("hits");
-                maxHitsLen = Math.max(maxHitsLen, hits == null ? 0 : hits.length());
+                    final String hits = row.get("hits");
+                    maxHitsLen = Math.max(maxHitsLen, hits == null ? 0 : hits.length());
+                }
             }
 
             final Map<String, Integer> retval = new Hashtable<String, Integer>();
+            retval.put(CONTEXT_COLUMN_LABEL, maxContextLen);
             retval.put(URI_COLUMN_LABEL, maxUriLen);
             retval.put(ROUTE_COLUMN_LABEL, maxRouteIdLen);
             retval.put(DIRECTION_COLUMN_LABEL, maxDirectionLen);
@@ -181,6 +204,9 @@ public class EndpointStatisticCommand extends AbstractContextCommand {
         }
         columnWidthIncrement = DEFAULT_COLUMN_WIDTH_INCREMENT;
 
+        int contextLen = Math.min(columnWidths.get(CONTEXT_COLUMN_LABEL) + columnWidthIncrement, getMaxColumnWidth());
+        contextLen = Math.max(MIN_COLUMN_WIDTH, contextLen);
+
         int uriLen = Math.min(columnWidths.get(URI_COLUMN_LABEL) + columnWidthIncrement, getMaxColumnWidth());
         uriLen = Math.max(MIN_COLUMN_WIDTH, uriLen);
 
@@ -199,6 +225,7 @@ public class EndpointStatisticCommand extends AbstractContextCommand {
         // last row does not have min width
 
         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(uriLen).append('.').append(uriLen).append('s').append(fieldPostamble).append(' ');
         retval.append(fieldPreamble).append("%-").append(routeIdLen).append('.').append(routeIdLen).append('s').append(fieldPostamble).append(' ');
         retval.append(fieldPreamble).append("%-").append(directionLen).append('.').append(directionLen).append('s').append(fieldPostamble).append(' ');

http://git-wip-us.apache.org/repos/asf/camel/blob/d04768e0/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointStats.java
----------------------------------------------------------------------
diff --git a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointStats.java b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointStats.java
index a9b64b6..a06ff4c 100644
--- a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointStats.java
+++ b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointStats.java
@@ -24,7 +24,7 @@ import org.apache.felix.gogo.commands.Option;
 @Command(scope = "camel", name = "endpoint-stats", description = "Display endpoint runtime statistics")
 public class EndpointStats extends CamelCommandSupport {
 
-    @Argument(index = 0, name = "name", description = "The name of the Camel context", required = true, multiValued = false)
+    @Argument(index = 0, name = "name", description = "The name of the Camel context (support wildcard)", required = false, multiValued = false)
     String name;
 
     @Option(name = "--filter", aliases = "-f", description = "Filter the list by in,out,static,dynamic",