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 dd3fa683309 camel-jbang - Add load average statistics dd3fa683309 is described below commit dd3fa68330928983cf2845122633dd2c30370cb8 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Sep 8 16:47:06 2022 +0200 camel-jbang - Add load average statistics --- .../core/commands/process/CamelContextTop.java | 38 +++++++++++++- .../core/commands/process/CamelRouteStatus.java | 58 ++++++++++++++-------- .../jbang/core/commands/process/CamelRouteTop.java | 47 ++++++++++++++++++ 3 files changed, 122 insertions(+), 21 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java index 638b45edc12..7a2b096b07d 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java @@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -72,7 +73,21 @@ public class CamelContextTop extends ProcessBaseCommand { row.javaVersion = runtime != null ? runtime.getString("javaVersion") : null; row.state = context.getInteger("phase"); row.camelVersion = context.getString("version"); - + Map<String, ?> stats = context.getMap("statistics"); + if (stats != null) { + Object load = stats.get("load01"); + if (load != null) { + row.load01 = load.toString(); + } + load = stats.get("load05"); + if (load != null) { + row.load05 = load.toString(); + } + load = stats.get("load15"); + if (load != null) { + row.load15 = load.toString(); + } + } JsonObject mem = (JsonObject) root.get("memory"); if (mem != null) { row.heapMemUsed = mem.getLong("heapMemoryUsed"); @@ -113,6 +128,8 @@ public class CamelContextTop extends ProcessBaseCommand { new Column().header("STATUS").headerAlign(HorizontalAlign.CENTER) .with(r -> extractState(r.state)), new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.ago), + new Column().header("LOAD").headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER) + .with(this::getLoad), new Column().header("HEAP").headerAlign(HorizontalAlign.CENTER).with(this::getHeapMemory), new Column().header("NON-HEAP").headerAlign(HorizontalAlign.CENTER).with(this::getNonHeapMemory), new Column().header("GC").headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.LEFT) @@ -197,6 +214,22 @@ public class CamelContextTop extends ProcessBaseCommand { return v; } + private String getLoad(Row r) { + String s1 = r.load01 != null ? r.load01 : "-"; + String s2 = r.load05 != null ? r.load05 : "-"; + String s3 = r.load15 != null ? r.load15 : "-"; + if ("0.00".equals(s1)) { + s1 = "-"; + } + if ("0.00".equals(s2)) { + s2 = "-"; + } + if ("0.00".equals(s3)) { + s3 = "-"; + } + return s1 + "/" + s2 + "/" + s3; + } + private static long asMegaBytesOneDigit(long bytes) { return bytes / 1000 / 1000; } @@ -211,6 +244,9 @@ public class CamelContextTop extends ProcessBaseCommand { int state; String ago; long uptime; + String load01; + String load05; + String load15; long heapMemUsed; long heapMemCommitted; long heapMemMax; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java index c984d7bff92..90c7140bc37 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java @@ -82,6 +82,18 @@ public class CamelRouteStatus extends ProcessBaseCommand { row.uptime = row.age != null ? TimeUtils.toMilliSeconds(row.age) : 0; Map<String, ?> stats = o.getMap("statistics"); if (stats != null) { + Object load = stats.get("load01"); + if (load != null) { + row.load01 = load.toString(); + } + load = stats.get("load05"); + if (load != null) { + row.load05 = load.toString(); + } + load = stats.get("load15"); + if (load != null) { + row.load15 = load.toString(); + } row.total = stats.get("exchangesTotal").toString(); row.inflight = stats.get("exchangesInflight").toString(); row.failed = stats.get("exchangesFailed").toString(); @@ -123,31 +135,34 @@ public class CamelRouteStatus extends ProcessBaseCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - boolean sources = rows.stream().noneMatch(r -> r.source == null); - System.out.println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS) - .with(r -> r.name), - new Column().header("ID").dataAlign(HorizontalAlign.LEFT).maxWidth(25, OverflowBehaviour.ELLIPSIS) - .with(r -> r.routeId), - new Column().header("FROM").dataAlign(HorizontalAlign.LEFT).maxWidth(40, OverflowBehaviour.ELLIPSIS) - .with(r -> r.from), - new Column().header("STATUS").headerAlign(HorizontalAlign.CENTER) - .with(r -> r.state), - new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.age), - new Column().header("TOTAL").with(r -> r.total), - new Column().header("FAIL").with(r -> r.failed), - new Column().header("INFLIGHT").with(r -> r.inflight), - new Column().header("MEAN").with(r -> r.mean), - new Column().header("MIN").with(r -> r.min), - new Column().header("MAX").with(r -> r.max), - new Column().header("SINCE-LAST").with(this::getSinceLast)))); + printTable(rows); } return 0; } - private String getSinceLast(Row r) { + protected void printTable(List<Row> rows) { + System.out.println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS) + .with(r -> r.name), + new Column().header("ID").dataAlign(HorizontalAlign.LEFT).maxWidth(25, OverflowBehaviour.ELLIPSIS) + .with(r -> r.routeId), + new Column().header("FROM").dataAlign(HorizontalAlign.LEFT).maxWidth(40, OverflowBehaviour.ELLIPSIS) + .with(r -> r.from), + new Column().header("STATUS").headerAlign(HorizontalAlign.CENTER) + .with(r -> r.state), + new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.age), + new Column().header("TOTAL").with(r -> r.total), + new Column().header("FAIL").with(r -> r.failed), + new Column().header("INFLIGHT").with(r -> r.inflight), + new Column().header("MEAN").with(r -> r.mean), + new Column().header("MIN").with(r -> r.min), + new Column().header("MAX").with(r -> r.max), + new Column().header("SINCE-LAST").with(this::getSinceLast)))); + } + + String getSinceLast(Row r) { String s1 = r.sinceLastStarted != null ? r.sinceLastStarted : "-"; String s2 = r.sinceLastCompleted != null ? r.sinceLastCompleted : "-"; String s3 = r.sinceLastFailed != null ? r.sinceLastFailed : "-"; @@ -185,6 +200,9 @@ public class CamelRouteStatus extends ProcessBaseCommand { String sinceLastStarted; String sinceLastCompleted; String sinceLastFailed; + String load01; + String load05; + String load15; } } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteTop.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteTop.java index afef2e6bb1c..8dd9adbe710 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteTop.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteTop.java @@ -16,6 +16,13 @@ */ package org.apache.camel.dsl.jbang.core.commands.process; +import java.util.Arrays; +import java.util.List; + +import com.github.freva.asciitable.AsciiTable; +import com.github.freva.asciitable.Column; +import com.github.freva.asciitable.HorizontalAlign; +import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; import picocli.CommandLine.Command; @@ -26,6 +33,46 @@ public class CamelRouteTop extends CamelRouteStatus { super(main); } + @Override + protected void printTable(List<Row> rows) { + System.out.println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS) + .with(r -> r.name), + new Column().header("ID").dataAlign(HorizontalAlign.LEFT).maxWidth(25, OverflowBehaviour.ELLIPSIS) + .with(r -> r.routeId), + new Column().header("FROM").dataAlign(HorizontalAlign.LEFT).maxWidth(40, OverflowBehaviour.ELLIPSIS) + .with(r -> r.from), + new Column().header("STATUS").headerAlign(HorizontalAlign.CENTER) + .with(r -> r.state), + new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.age), + new Column().header("LOAD").headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER) + .with(this::getLoad), + new Column().header("TOTAL").with(r -> r.total), + new Column().header("FAIL").with(r -> r.failed), + new Column().header("INFLIGHT").with(r -> r.inflight), + new Column().header("MEAN").with(r -> r.mean), + new Column().header("MIN").with(r -> r.min), + new Column().header("MAX").with(r -> r.max), + new Column().header("SINCE-LAST").with(this::getSinceLast)))); + } + + private String getLoad(Row r) { + String s1 = r.load01 != null ? r.load01 : "-"; + String s2 = r.load05 != null ? r.load05 : "-"; + String s3 = r.load15 != null ? r.load15 : "-"; + if ("0.00".equals(s1)) { + s1 = "-"; + } + if ("0.00".equals(s2)) { + s2 = "-"; + } + if ("0.00".equals(s3)) { + s3 = "-"; + } + return s1 + "/" + s2 + "/" + s3; + } + @Override protected int sortRow(Row o1, Row o2) { // sort for highest mean value as we want the slowest in the top