You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/10/24 08:57:10 UTC
[camel] branch main updated: CAMEL-18630: camel-jbang - Add get health command
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 eee0a50f46e CAMEL-18630: camel-jbang - Add get health command
eee0a50f46e is described below
commit eee0a50f46e2dfc57c937b78158e6ee04f2f6932
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Oct 24 10:56:43 2022 +0200
CAMEL-18630: camel-jbang - Add get health command
---
.../java/org/apache/camel/health/HealthCheck.java | 2 ++
.../camel/impl/health/AbstractHealthCheck.java | 26 ++++++++++++++++++++++
.../jbang/core/commands/process/ListHealth.java | 22 ++++++++++++++++--
3 files changed, 48 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 e02a4c402f2..caf2a85fbcb 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
@@ -38,10 +38,12 @@ public interface HealthCheck extends HasGroup, HasId, Ordered {
@Deprecated
String INVOCATION_ATTEMPT_TIME = "invocation.attempt.time";
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 SUCCESS_COUNT = "success.count";
+ String SUCCESS_START_TIME = "success.start.time";
String SUCCESS_TIME = "success.time";
String HTTP_RESPONSE_CODE = "http.response.code";
/**
diff --git a/core/camel-health/src/main/java/org/apache/camel/impl/health/AbstractHealthCheck.java b/core/camel-health/src/main/java/org/apache/camel/impl/health/AbstractHealthCheck.java
index 305c0f4b45e..a5911776d0e 100644
--- a/core/camel-health/src/main/java/org/apache/camel/impl/health/AbstractHealthCheck.java
+++ b/core/camel-health/src/main/java/org/apache/camel/impl/health/AbstractHealthCheck.java
@@ -157,8 +157,10 @@ public abstract class AbstractHealthCheck implements HealthCheck, CamelContextAw
int invocationCount = (Integer) meta.getOrDefault(INVOCATION_COUNT, 0);
int failureCount = (Integer) meta.getOrDefault(FAILURE_COUNT, 0);
String failureTime = (String) meta.get(FAILURE_TIME);
+ String failureStartTime = (String) meta.get(FAILURE_START_TIME);
int successCount = (Integer) meta.getOrDefault(SUCCESS_COUNT, 0);
String successTime = (String) meta.get(SUCCESS_TIME);
+ String successStartTime = (String) meta.get(SUCCESS_START_TIME);
String invocationTime = ZonedDateTime.now().format(DateTimeFormatter.ISO_ZONED_DATE_TIME);
@@ -183,11 +185,16 @@ public abstract class AbstractHealthCheck implements HealthCheck, CamelContextAw
if (builder.state() == State.DOWN) {
// reset success since it failed
successCount = 0;
+ successStartTime = null;
failureCount++;
failureTime = invocationTime;
+ if (failureStartTime == null) {
+ failureStartTime = invocationTime;
+ }
} else if (builder.state() == State.UP) {
// reset failure since it ok
failureCount = 0;
+ failureStartTime = null;
successCount++;
if (successTime == null) {
// first time we are OK, then reset failure as we only want to capture
@@ -195,6 +202,9 @@ public abstract class AbstractHealthCheck implements HealthCheck, CamelContextAw
failureTime = null;
}
successTime = invocationTime;
+ if (successStartTime == null) {
+ successStartTime = invocationTime;
+ }
}
meta.put(INVOCATION_TIME, invocationTime);
@@ -205,12 +215,22 @@ public abstract class AbstractHealthCheck implements HealthCheck, CamelContextAw
} else {
meta.remove(FAILURE_TIME);
}
+ if (failureStartTime != null) {
+ meta.put(FAILURE_START_TIME, failureStartTime);
+ } else {
+ meta.remove(FAILURE_START_TIME);
+ }
meta.put(SUCCESS_COUNT, successCount);
if (successTime != null) {
meta.put(SUCCESS_TIME, successTime);
} else {
meta.remove(SUCCESS_TIME);
}
+ if (successStartTime != null) {
+ meta.put(SUCCESS_START_TIME, successStartTime);
+ } else {
+ meta.remove(SUCCESS_START_TIME);
+ }
// Copy some meta-data bits to the response attributes so the
// response caches the health-check state at the time of the invocation.
@@ -220,10 +240,16 @@ public abstract class AbstractHealthCheck implements HealthCheck, CamelContextAw
if (meta.containsKey(FAILURE_TIME)) {
builder.detail(FAILURE_TIME, meta.get(FAILURE_TIME));
}
+ if (meta.containsKey(FAILURE_START_TIME)) {
+ builder.detail(FAILURE_START_TIME, meta.get(FAILURE_START_TIME));
+ }
builder.detail(SUCCESS_COUNT, meta.get(SUCCESS_COUNT));
if (meta.containsKey(SUCCESS_TIME)) {
builder.detail(SUCCESS_TIME, meta.get(SUCCESS_TIME));
}
+ if (meta.containsKey(SUCCESS_START_TIME)) {
+ builder.detail(SUCCESS_START_TIME, meta.get(SUCCESS_START_TIME));
+ }
return builder;
}
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 d5a99651668..922585aa12c 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
@@ -124,6 +124,14 @@ public class ListHealth extends ProcessBaseCommand {
row.sinceSuccess = TimeUtils.printAge(delta);
}
}
+ time = d.getString("success.start.time");
+ if (time != null) {
+ ZonedDateTime zdt = ZonedDateTime.parse(time);
+ if (zdt != null) {
+ long delta = Math.abs(ZonedDateTime.now().until(zdt, ChronoUnit.MILLIS));
+ row.sinceStartSuccess = TimeUtils.printAge(delta);
+ }
+ }
time = d.getString("failure.time");
if (time != null) {
ZonedDateTime zdt = ZonedDateTime.parse(time);
@@ -132,6 +140,14 @@ public class ListHealth extends ProcessBaseCommand {
row.sinceFailure = TimeUtils.printAge(delta);
}
}
+ time = d.getString("failure.start.time");
+ if (time != null) {
+ ZonedDateTime zdt = ZonedDateTime.parse(time);
+ if (zdt != null) {
+ long delta = Math.abs(ZonedDateTime.now().until(zdt, ChronoUnit.MILLIS));
+ row.sinceStartFailure = TimeUtils.printAge(delta);
+ }
+ }
}
boolean add = true;
@@ -237,8 +253,8 @@ public class ListHealth extends ProcessBaseCommand {
protected String getSince(Row r) {
String s1 = r.sinceLast != null ? r.sinceLast : "-";
- String s2 = r.sinceSuccess != null ? r.sinceSuccess : "-";
- String s3 = r.sinceFailure != null ? r.sinceFailure : "-";
+ String s2 = r.sinceStartSuccess != null ? r.sinceStartSuccess : "-";
+ String s3 = r.sinceStartFailure != null ? r.sinceStartFailure : "-";
return s1 + "/" + s2 + "/" + s3;
}
@@ -257,7 +273,9 @@ public class ListHealth extends ProcessBaseCommand {
String failure;
String sinceLast;
String sinceSuccess;
+ String sinceStartSuccess;
String sinceFailure;
+ String sinceStartFailure;
String message;
}