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

Reply via email to