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 88c403ddb66 CAMEL-18630: camel-jbang - Add get health command
88c403ddb66 is described below

commit 88c403ddb664d7977cc342d167a378f6bf79f535
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Mon Oct 24 12:02:44 2022 +0200

    CAMEL-18630: camel-jbang - Add get health command
---
 .../java/org/apache/camel/health/HealthCheck.java  |  2 +-
 .../org/apache/camel/health/HealthCheckHelper.java | 42 ++++++++++++++++++++++
 .../jbang/core/commands/process/ListHealth.java    | 24 ++++++++++++-
 3 files changed, 66 insertions(+), 2 deletions(-)

diff --git 
a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheck.java 
b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheck.java
index caf2a85fbcb..f8244eb3fdb 100644
--- a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheck.java
+++ b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheck.java
@@ -40,8 +40,8 @@ public interface HealthCheck extends HasGroup, HasId, Ordered 
{
     String FAILURE_COUNT = "failure.count";
     String FAILURE_START_TIME = "failure.start.time";
     String FAILURE_TIME = "failure.time";
-    String ENDPOINT_URI = "endpoint.uri";
     String FAILURE_ERROR_COUNT = "failure.error.count";
+    String ENDPOINT_URI = "endpoint.uri";
     String SUCCESS_COUNT = "success.count";
     String SUCCESS_START_TIME = "success.start.time";
     String SUCCESS_TIME = "success.time";
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java 
b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java
index 4aaa255c2ca..e04102121cf 100644
--- 
a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java
+++ 
b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java
@@ -331,4 +331,46 @@ public final class HealthCheckHelper {
     private static String getGroup(HealthCheck check) {
         return ObjectHelper.supplyIfEmpty(check.getGroup(), () -> "");
     }
+
+    /**
+     * Is the given key a reserved key used by Camel to store metadata in 
health check response details.
+     *
+     * @param  key the key
+     * @return     true if reserved, false otherwise
+     */
+    public static boolean isReservedKey(String key) {
+        if (key == null) {
+            return false;
+        }
+
+        if (HealthCheck.CHECK_ID.equals(key)) {
+            return true;
+        } else if (HealthCheck.CHECK_GROUP.equals(key)) {
+            return true;
+        } else if (HealthCheck.CHECK_KIND.equals(key)) {
+            return true;
+        } else if (HealthCheck.CHECK_ENABLED.equals(key)) {
+            return true;
+        } else if (HealthCheck.INVOCATION_COUNT.equals(key)) {
+            return true;
+        } else if (HealthCheck.INVOCATION_TIME.equals(key)) {
+            return true;
+        } else if (HealthCheck.FAILURE_COUNT.equals(key)) {
+            return true;
+        } else if (HealthCheck.FAILURE_START_TIME.equals(key)) {
+            return true;
+        } else if (HealthCheck.FAILURE_TIME.equals(key)) {
+            return true;
+        } else if (HealthCheck.FAILURE_ERROR_COUNT.equals(key)) {
+            return true;
+        } else if (HealthCheck.SUCCESS_COUNT.equals(key)) {
+            return true;
+        } else if (HealthCheck.SUCCESS_START_TIME.equals(key)) {
+            return true;
+        } else if (HealthCheck.SUCCESS_TIME.equals(key)) {
+            return true;
+        }
+
+        return false;
+    }
 }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java
index fb7f7f40339..80f4cd9324e 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java
@@ -21,6 +21,8 @@ import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
 import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
@@ -28,6 +30,7 @@ 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 org.apache.camel.health.HealthCheckHelper;
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
@@ -148,6 +151,15 @@ public class ListHealth extends ProcessBaseCommand {
                                         row.sinceStartFailure = 
TimeUtils.printAge(delta);
                                     }
                                 }
+                                for (String k : d.keySet()) {
+                                    // gather custom details
+                                    if (!HealthCheckHelper.isReservedKey(k)) {
+                                        if (row.customMeta == null) {
+                                            row.customMeta = new TreeMap<>();
+                                        }
+                                        row.customMeta.put(k, d.get(k));
+                                    }
+                                }
                             }
 
                             boolean add = true;
@@ -212,10 +224,19 @@ public class ListHealth extends ProcessBaseCommand {
                     System.out.println(StringHelper.padString(1, 55) + 
"STACK-TRACE");
                     System.out.println(StringHelper.fillChars('-', 120));
                     StringBuilder sb = new StringBuilder();
-                    sb.append(String.format("\tID: %s%n", getId(row)));
+                    sb.append(String.format("\tPID: %s%n", row.pid));
+                    sb.append(String.format("\tNAME: %s%n", row.name));
+                    sb.append(String.format("\tAGE: %s%n", row.ago));
+                    sb.append(String.format("\tCHECK-ID: %s%n", getId(row)));
                     sb.append(String.format("\tSTATE: %s%n", row.state));
                     sb.append(String.format("\tRATE: %s%n", row.failure));
                     sb.append(String.format("\tSINCE: %s%n", 
row.sinceStartFailure));
+                    if (row.customMeta != null) {
+                        sb.append(String.format("\tMETADATA:%n"));
+                        row.customMeta.forEach((k, v) -> {
+                            sb.append(String.format("\t\t%s = %s%n", k, v));
+                        });
+                    }
                     sb.append(String.format("\tMESSAGE: %s%n", row.message));
                     for (int i = 0; i < depth && i < row.stackTrace.size(); 
i++) {
                         sb.append(String.format("\t%s%n", 
row.stackTrace.get(i)));
@@ -298,6 +319,7 @@ public class ListHealth extends ProcessBaseCommand {
         String sinceStartFailure;
         String message;
         List<String> stackTrace;
+        Map<String, Object> customMeta;
     }
 
 }

Reply via email to