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",