This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new dc8780d0ce25 CAMEL-23385: camel-jbang - Prepare for adding metric to
route diagram (#23091)
dc8780d0ce25 is described below
commit dc8780d0ce25a0b2aebf361e155dfa46d8538f49
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun May 10 10:53:55 2026 +0200
CAMEL-23385: camel-jbang - Prepare for adding metric to route diagram
(#23091)
* CAMEL-23385: camel-jbang - Prepare for adding metric to route diagram
---
.../apache/camel/diagram/RouteDiagramHelper.java | 31 +++++++
.../camel/diagram/RouteDiagramLayoutEngine.java | 25 ++++++
.../camel/impl/console/ProcessorDevConsole.java | 4 +-
.../apache/camel/impl/console/RouteDevConsole.java | 99 ++++++++++++----------
.../impl/console/RouteStructureDevConsole.java | 41 ++++++++-
.../camel-jbang-cmd-route-diagram.adoc | 1 +
.../camel/cli/connector/LocalCliConnector.java | 3 +-
.../META-INF/camel-jbang-commands-metadata.json | 2 +-
.../commands/action/CamelRouteDiagramAction.java | 5 ++
9 files changed, 158 insertions(+), 53 deletions(-)
diff --git
a/components/camel-diagram/src/main/java/org/apache/camel/diagram/RouteDiagramHelper.java
b/components/camel-diagram/src/main/java/org/apache/camel/diagram/RouteDiagramHelper.java
index f4558c8bd117..645110f0ca9b 100644
---
a/components/camel-diagram/src/main/java/org/apache/camel/diagram/RouteDiagramHelper.java
+++
b/components/camel-diagram/src/main/java/org/apache/camel/diagram/RouteDiagramHelper.java
@@ -70,6 +70,37 @@ public final class RouteDiagramHelper {
node.description = line.getString("description");
Integer level = line.getInteger("level");
node.level = level != null ? level : 0;
+
+ if (line.containsKey("statistics")) {
+ JsonObject ls = line.getJsonObject("statistics");
+ RouteDiagramLayoutEngine.StatInfo stat;
+ if ("route".equals(node.type)) {
+ // route has some special stats
+ var s = new
RouteDiagramLayoutEngine.RouteStatInfo();
+ s.coverage = ls.getString("coverage");
+ s.load01 = ls.getString("load01");
+ s.load05 = ls.getString("load05");
+ s.load15 = ls.getString("load15");
+ s.exchangesThroughput =
ls.getString("exchangesThroughput");
+ stat = s;
+ } else {
+ // common stats
+ stat = new RouteDiagramLayoutEngine.StatInfo();
+ }
+ node.stat = stat;
+ stat.idleSince = ls.getLong("idleSince");
+ stat.exchangesTotal = ls.getLong("exchangesTotal");
+ stat.exchangesFailed = ls.getLong("exchangesFailed");
+ stat.exchangesInflight =
ls.getLong("exchangesInflight");
+ stat.meanProcessingTime =
ls.getLong("meanProcessingTime");
+ stat.maxProcessingTime =
ls.getLong("maxProcessingTime");
+ stat.minProcessingTime =
ls.getLong("minProcessingTime");
+ stat.lastProcessingTime =
ls.getLongOrDefault("lastProcessingTime", -1);
+ stat.deltaProcessingTime =
ls.getLongOrDefault("deltaProcessingTime", -1);
+ stat.lastCreatedExchangeTimestamp =
ls.getLongOrDefault("lastCreatedExchangeTimestamp", -1);
+ stat.lastCompletedExchangeTimestamp =
ls.getLongOrDefault("lastCompletedExchangeTimestamp", -1);
+ stat.lastFailedExchangeTimestamp =
ls.getLongOrDefault("lastFailedExchangeTimestamp", -1);
+ }
route.nodes.add(node);
}
}
diff --git
a/components/camel-diagram/src/main/java/org/apache/camel/diagram/RouteDiagramLayoutEngine.java
b/components/camel-diagram/src/main/java/org/apache/camel/diagram/RouteDiagramLayoutEngine.java
index 34516df46da6..9ca815c03cca 100644
---
a/components/camel-diagram/src/main/java/org/apache/camel/diagram/RouteDiagramLayoutEngine.java
+++
b/components/camel-diagram/src/main/java/org/apache/camel/diagram/RouteDiagramLayoutEngine.java
@@ -127,16 +127,41 @@ public class RouteDiagramLayoutEngine {
return nodeTextPadding;
}
+ public static class RouteStatInfo extends StatInfo {
+ public String coverage;
+ public String load01;
+ public String load05;
+ public String load15;
+ public String exchangesThroughput;
+ }
+
+ public static class StatInfo {
+ public long idleSince;
+ public long exchangesTotal;
+ public long exchangesFailed;
+ public long exchangesInflight;
+ public long meanProcessingTime;
+ public long maxProcessingTime;
+ public long minProcessingTime;
+ public long lastProcessingTime;
+ public long deltaProcessingTime;
+ public long lastCreatedExchangeTimestamp;
+ public long lastCompletedExchangeTimestamp;
+ public long lastFailedExchangeTimestamp;
+ }
+
public static class NodeInfo {
public String type;
public String code;
public String description;
public int level;
+ public StatInfo stat;
}
public static class RouteInfo {
public String routeId;
public String source;
+ public RouteStatInfo stat;
public List<NodeInfo> nodes = new ArrayList<>();
}
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ProcessorDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ProcessorDevConsole.java
index 042dc628afcd..a3306453fad7 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ProcessorDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ProcessorDevConsole.java
@@ -306,7 +306,7 @@ public class ProcessorDevConsole extends AbstractDevConsole
{
jo.put("uri", destination);
}
- final JsonObject stats = getStatsObject(mp);
+ final JsonObject stats = gatherProcessorStats(mp);
jo.put("statistics", stats);
}
}
@@ -325,7 +325,7 @@ public class ProcessorDevConsole extends AbstractDevConsole
{
return null;
}
- private static JsonObject getStatsObject(ManagedProcessorMBean mp) {
+ public static JsonObject gatherProcessorStats(ManagedProcessorMBean mp) {
JsonObject stats = new JsonObject();
stats.put("idleSince", mp.getIdleSince());
stats.put("exchangesTotal", mp.getExchangesTotal());
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
index 8ec83aecb347..898d930e8380 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
@@ -128,7 +128,7 @@ public class RouteDevConsole extends AbstractDevConsole {
}
}
sb.append(String.format("%n Uptime: %s", mrb.getUptime()));
- String coverage = calculateRouteCoverage(mrb, true);
+ String coverage = calculateRouteCoverage(getCamelContext(), mrb,
true);
if (coverage != null) {
sb.append(String.format("%n Coverage: %s", coverage));
}
@@ -259,46 +259,7 @@ public class RouteDevConsole extends AbstractDevConsole {
}
jo.put("lastError", eo);
}
- JsonObject stats = new JsonObject();
- String coverage = calculateRouteCoverage(mrb, false);
- if (coverage != null) {
- stats.put("coverage", coverage);
- }
- String load1 = getLoad1(mrb);
- String load5 = getLoad5(mrb);
- String load15 = getLoad15(mrb);
- if (!load1.isEmpty() || !load5.isEmpty() || !load15.isEmpty()) {
- stats.put("load01", load1);
- stats.put("load05", load5);
- stats.put("load15", load15);
- }
- String thp = getThroughput(mrb);
- if (!thp.isEmpty()) {
- stats.put("exchangesThroughput", thp);
- }
- stats.put("idleSince", mrb.getIdleSince());
- stats.put("exchangesTotal", mrb.getExchangesTotal());
- stats.put("exchangesFailed", mrb.getExchangesFailed());
- stats.put("exchangesInflight", mrb.getExchangesInflight());
- stats.put("meanProcessingTime", mrb.getMeanProcessingTime());
- stats.put("maxProcessingTime", mrb.getMaxProcessingTime());
- stats.put("minProcessingTime", mrb.getMinProcessingTime());
- if (mrb.getExchangesTotal() > 0) {
- stats.put("lastProcessingTime", mrb.getLastProcessingTime());
- stats.put("deltaProcessingTime", mrb.getDeltaProcessingTime());
- }
- Date last = mrb.getLastExchangeCreatedTimestamp();
- if (last != null) {
- stats.put("lastCreatedExchangeTimestamp", last.getTime());
- }
- last = mrb.getLastExchangeCompletedTimestamp();
- if (last != null) {
- stats.put("lastCompletedExchangeTimestamp", last.getTime());
- }
- last = mrb.getLastExchangeFailureTimestamp();
- if (last != null) {
- stats.put("lastFailedExchangeTimestamp", last.getTime());
- }
+ JsonObject stats = gatherRouteStats(getCamelContext(), mrb);
jo.put("statistics", stats);
if (processors) {
JsonArray arr = new JsonArray();
@@ -374,36 +335,36 @@ public class RouteDevConsole extends AbstractDevConsole {
return o1.getRouteId().compareToIgnoreCase(o2.getRouteId());
}
- private String getLoad1(ManagedRouteMBean mrb) {
+ private static String getLoad1(ManagedRouteMBean mrb) {
String s = mrb.getLoad01();
// lets use dot as separator
s = s.replace(',', '.');
return s;
}
- private String getLoad5(ManagedRouteMBean mrb) {
+ private static String getLoad5(ManagedRouteMBean mrb) {
String s = mrb.getLoad05();
// lets use dot as separator
s = s.replace(',', '.');
return s;
}
- private String getLoad15(ManagedRouteMBean mrb) {
+ private static String getLoad15(ManagedRouteMBean mrb) {
String s = mrb.getLoad15();
// lets use dot as separator
s = s.replace(',', '.');
return s;
}
- private String getThroughput(ManagedRouteMBean mrb) {
+ private static String getThroughput(ManagedRouteMBean mrb) {
String s = mrb.getThroughput();
// lets use dot as separator
s = s.replace(',', '.');
return s;
}
- private String calculateRouteCoverage(ManagedRouteMBean mrb, boolean
percent) {
- ManagedCamelContext mcc =
getCamelContext().getCamelContextExtension().getContextPlugin(ManagedCamelContext.class);
+ private static String calculateRouteCoverage(CamelContext camelContext,
ManagedRouteMBean mrb, boolean percent) {
+ ManagedCamelContext mcc =
camelContext.getCamelContextExtension().getContextPlugin(ManagedCamelContext.class);
Collection<String> ids;
try {
@@ -493,4 +454,48 @@ public class RouteDevConsole extends AbstractDevConsole {
}
}
+ public static JsonObject gatherRouteStats(CamelContext camelContext,
ManagedRouteMBean mrb) {
+ JsonObject stats = new JsonObject();
+ String coverage = calculateRouteCoverage(camelContext, mrb, false);
+ if (coverage != null) {
+ stats.put("coverage", coverage);
+ }
+ String load1 = getLoad1(mrb);
+ String load5 = getLoad5(mrb);
+ String load15 = getLoad15(mrb);
+ if (!load1.isEmpty() || !load5.isEmpty() || !load15.isEmpty()) {
+ stats.put("load01", load1);
+ stats.put("load05", load5);
+ stats.put("load15", load15);
+ }
+ String thp = getThroughput(mrb);
+ if (!thp.isEmpty()) {
+ stats.put("exchangesThroughput", thp);
+ }
+ stats.put("idleSince", mrb.getIdleSince());
+ stats.put("exchangesTotal", mrb.getExchangesTotal());
+ stats.put("exchangesFailed", mrb.getExchangesFailed());
+ stats.put("exchangesInflight", mrb.getExchangesInflight());
+ stats.put("meanProcessingTime", mrb.getMeanProcessingTime());
+ stats.put("maxProcessingTime", mrb.getMaxProcessingTime());
+ stats.put("minProcessingTime", mrb.getMinProcessingTime());
+ if (mrb.getExchangesTotal() > 0) {
+ stats.put("lastProcessingTime", mrb.getLastProcessingTime());
+ stats.put("deltaProcessingTime", mrb.getDeltaProcessingTime());
+ }
+ Date last = mrb.getLastExchangeCreatedTimestamp();
+ if (last != null) {
+ stats.put("lastCreatedExchangeTimestamp", last.getTime());
+ }
+ last = mrb.getLastExchangeCompletedTimestamp();
+ if (last != null) {
+ stats.put("lastCompletedExchangeTimestamp", last.getTime());
+ }
+ last = mrb.getLastExchangeFailureTimestamp();
+ if (last != null) {
+ stats.put("lastFailedExchangeTimestamp", last.getTime());
+ }
+ return stats;
+ }
+
}
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteStructureDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteStructureDevConsole.java
index a4cf2c8f2549..a55dd747b06f 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteStructureDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteStructureDevConsole.java
@@ -20,8 +20,12 @@ import java.util.List;
import java.util.Map;
import java.util.function.Function;
+import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.NamedRoute;
+import org.apache.camel.api.management.ManagedCamelContext;
+import org.apache.camel.api.management.mbean.ManagedProcessorMBean;
+import org.apache.camel.api.management.mbean.ManagedRouteMBean;
import org.apache.camel.spi.ModelDumpLine;
import org.apache.camel.spi.ModelToStructureDumper;
import org.apache.camel.spi.annotations.DevConsole;
@@ -55,6 +59,11 @@ public class RouteStructureDevConsole extends
AbstractDevConsole {
*/
public static final String BRIEF = "brief";
+ /**
+ * Whether to include metrics such as number of messages processed (from
JMX)
+ */
+ public static final String METRIC = "metric";
+
public RouteStructureDevConsole() {
super("camel", "route-structure", "Route Structure", "Dump route
structure");
}
@@ -100,10 +109,12 @@ public class RouteStructureDevConsole extends
AbstractDevConsole {
@Override
protected JsonObject doCallJson(Map<String, Object> options) {
final String brief = (String) options.getOrDefault(BRIEF, "false");
+ final String metric = (String) options.getOrDefault(METRIC, "false");
final JsonObject root = new JsonObject();
final JsonArray list = new JsonArray();
+ final boolean stats = "true".equalsIgnoreCase(metric);
Function<NamedRoute, Object> task = def -> {
JsonObject jo = new JsonObject();
list.add(jo);
@@ -125,7 +136,7 @@ public class RouteStructureDevConsole extends
AbstractDevConsole {
ModelToStructureDumper dumper =
PluginHelper.getModelToStructureDumper(getCamelContext());
List<ModelDumpLine> lines
= dumper.dumpStructure(getCamelContext(),
def.getRouteId(), "true".equalsIgnoreCase(brief));
- JsonArray code = dumpAsJSon(lines);
+ JsonArray code = dumpAsJSon(getCamelContext(), lines, stats);
jo.put("code", code);
} catch (Exception e) {
// ignore
@@ -171,7 +182,9 @@ public class RouteStructureDevConsole extends
AbstractDevConsole {
|| PatternHelper.matchPattern(onlyName, filter);
}
- private static JsonArray dumpAsJSon(List<ModelDumpLine> lines) {
+ private JsonArray dumpAsJSon(CamelContext camelContext,
List<ModelDumpLine> lines, boolean metric) {
+ ManagedCamelContext mcc =
getCamelContext().getCamelContextExtension().getContextPlugin(ManagedCamelContext.class);
+
JsonArray code = new JsonArray();
int counter = 0;
for (var line : lines) {
@@ -189,6 +202,30 @@ public class RouteStructureDevConsole extends
AbstractDevConsole {
c.put("description", line.description());
}
c.put("code", Jsoner.escape(line.code()));
+
+ if (metric && mcc != null) {
+ if (counter <= 2) {
+ ManagedRouteMBean mrb = mcc.getManagedRoute(line.id());
+ if (mrb != null) {
+ JsonObject stats =
RouteDevConsole.gatherRouteStats(camelContext, mrb);
+ if (counter == 2) {
+ // from is route stats minus a few values
+ stats.remove("coverage");
+ stats.remove("load01");
+ stats.remove("load05");
+ stats.remove("load15");
+ stats.remove("exchangesThroughput");
+ }
+ c.put("statistics", stats);
+ }
+ } else {
+ ManagedProcessorMBean mp =
mcc.getManagedProcessor(line.id());
+ if (mp != null) {
+ JsonObject stats =
ProcessorDevConsole.gatherProcessorStats(mp);
+ c.put("statistics", stats);
+ }
+ }
+ }
code.add(c);
}
return code;
diff --git
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-cmd-route-diagram.adoc
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-cmd-route-diagram.adoc
index 9f854b762ff9..4a900c5a1a56 100644
---
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-cmd-route-diagram.adoc
+++
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-cmd-route-diagram.adoc
@@ -23,6 +23,7 @@ camel cmd route-diagram [options]
| `--filter` | Filter route by filename or route id | | String
| `--font-size` | Font size in logical pixels for node text | 12 | int
| `--ignore-loading-error` | Whether to ignore route loading and compilation
errors (use this with care!) | false | boolean
+| `--metric` | Whether to include live metrics (only possible for running
Camel application) | false | boolean
| `--node-label` | What text to display in diagram nodes: code, description,
or both (default) | both | String
| `--output` | Save diagram to a PNG file instead of displaying in terminal |
| String
| `--theme,--colors` | Color theme preset (dark, light, transparent, text) or
custom colors (e.g. bg=#1e1e1e:from=#2e7d32:to=#1565c0). Values can be #hex or
ANSI color names (e.g. from=seagreen:to=steelblue). Use bg= for transparent.
Can also be set via DIAGRAM_COLORS env var. | dark | String
diff --git
a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
index eaf6e37df925..aa98e238b689 100644
---
a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
+++
b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
@@ -683,9 +683,10 @@ public class LocalCliConnector extends ServiceSupport
implements CliConnector, C
if (dc != null) {
String filter = root.getString("filter");
String brief = root.getString("brief");
+ String metric = root.getString("metric");
JsonObject json
= (JsonObject) dc.call(DevConsole.MediaType.JSON,
- Map.of("filter", filter, "brief", brief));
+ Map.of("filter", filter, "brief", brief, "metric",
metric));
LOG.trace("Updating output file: {}", outputFile);
IOHelper.writeText(json.toJson(), outputFile);
} else {
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json
b/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json
index a4040d23eb5e..0553d5478fa5 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json
+++
b/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json
@@ -2,7 +2,7 @@
"commands": [
{ "name": "bind", "fullName": "bind", "description": "DEPRECATED: Bind
source and sink Kamelets as a new Camel integration", "deprecated": true,
"sourceClass": "org.apache.camel.dsl.jbang.core.commands.bind.Bind", "options":
[ { "names": "--error-handler", "description": "Add error handler
(none|log|sink:<endpoint>). Sink endpoints are expected in the format
[[apigroup\/]version:]kind:[namespace\/]name, plain Camel URIs or Kamelet
name.", "javaType": "java.lang.String", "type": "stri [...]
{ "name": "catalog", "fullName": "catalog", "description": "List artifacts
from Camel Catalog", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.catalog.CatalogCommand", "options": [
{ "names": "-h,--help", "description": "Display the help and sub-commands",
"javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name":
"component", "fullName": "catalog component", "description": "List components
from the Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.co [...]
- { "name": "cmd", "fullName": "cmd", "description": "Performs commands in
the running Camel integrations, such as start\/stop route, or change logging
levels.", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.action.CamelAction", "options": [ {
"names": "-h,--help", "description": "Display the help and sub-commands",
"javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name":
"browse", "fullName": "cmd browse", "description": "Browse pending messages on
endpoints [...]
+ { "name": "cmd", "fullName": "cmd", "description": "Performs commands in
the running Camel integrations, such as start\/stop route, or change logging
levels.", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.action.CamelAction", "options": [ {
"names": "-h,--help", "description": "Display the help and sub-commands",
"javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name":
"browse", "fullName": "cmd browse", "description": "Browse pending messages on
endpoints [...]
{ "name": "completion", "fullName": "completion", "description": "Generate
completion script for bash\/zsh", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.Complete", "options": [ { "names":
"-h,--help", "description": "Display the help and sub-commands", "javaType":
"boolean", "type": "boolean" } ] },
{ "name": "config", "fullName": "config", "description": "Get and set user
configuration values", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.config.ConfigCommand", "options": [ {
"names": "-h,--help", "description": "Display the help and sub-commands",
"javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "get",
"fullName": "config get", "description": "Display user configuration value",
"sourceClass": "org.apache.camel.dsl.jbang.core.commands.config. [...]
{ "name": "debug", "fullName": "debug", "description": "Debug local Camel
integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Debug",
"options": [ { "names": "--ago", "description": "Use ago instead of yyyy-MM-dd
HH:mm:ss in timestamp.", "javaType": "boolean", "type": "boolean" }, { "names":
"--background", "description": "Run in the background", "defaultValue":
"false", "javaType": "boolean", "type": "boolean" }, { "names":
"--background-wait", "description": "To [...]
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDiagramAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDiagramAction.java
index 191551a8a5f2..225861b01897 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDiagramAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDiagramAction.java
@@ -89,6 +89,10 @@ public class CamelRouteDiagramAction extends
ActionBaseCommand {
defaultValue = "both")
String nodeLabel;
+ @CommandLine.Option(names = { "--metric" }, defaultValue = "false",
+ description = "Whether to include live metrics (only
possible for running Camel application)")
+ boolean metric;
+
@CommandLine.Option(names = { "--ignore-loading-error" }, defaultValue =
"false",
description = "Whether to ignore route loading and
compilation errors (use this with care!)")
boolean ignoreLoadingError;
@@ -270,6 +274,7 @@ public class CamelRouteDiagramAction extends
ActionBaseCommand {
root.put("action", "route-structure");
root.put("filter", "*");
root.put("brief", false);
+ root.put("metric", metric);
Path file = getActionFile(Long.toString(pid));
try {
Files.writeString(file, root.toJson());