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; } }