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/23 09:27:42 UTC

[camel] 03/05: CAMEL-18639: camel-health - Add detail for last time there was a failure

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

commit 0a542f7daae3dabe4a11034ecaf2a0391fa5077d
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Oct 23 11:00:44 2022 +0200

    CAMEL-18639: camel-health - Add detail for last time there was a failure
---
 .../main/java/org/apache/camel/health/HealthCheck.java   |  3 +++
 .../apache/camel/impl/health/AbstractHealthCheck.java    | 16 ++++++++++++++++
 2 files changed, 19 insertions(+)

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 b2372468f51..e02a4c402f2 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
@@ -35,11 +35,14 @@ public interface HealthCheck extends HasGroup, HasId, Ordered {
     String CHECK_ENABLED = "check.enabled";
     String INVOCATION_COUNT = "invocation.count";
     String INVOCATION_TIME = "invocation.time";
+    @Deprecated
     String INVOCATION_ATTEMPT_TIME = "invocation.attempt.time";
     String FAILURE_COUNT = "failure.count";
+    String FAILURE_TIME = "failure.time";
     String ENDPOINT_URI = "endpoint.uri";
     String FAILURE_ERROR_COUNT = "failure.error.count";
     String SUCCESS_COUNT = "success.count";
+    String SUCCESS_TIME = "success.time";
     String HTTP_RESPONSE_CODE = "http.response.code";
     /**
      * Use ENDPOINT_URI
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 d5d218d18c8..a40322ec5aa 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
@@ -152,7 +152,9 @@ public abstract class AbstractHealthCheck implements HealthCheck, CamelContextAw
         // Extract relevant information from meta data.
         int invocationCount = (Integer) meta.getOrDefault(INVOCATION_COUNT, 0);
         int failureCount = (Integer) meta.getOrDefault(FAILURE_COUNT, 0);
+        String failureTime = (String) meta.get(FAILURE_TIME);
         int successCount = (Integer) meta.getOrDefault(SUCCESS_COUNT, 0);
+        String successTime = (String) meta.get(SUCCESS_TIME);
 
         String invocationTime = ZonedDateTime.now().format(DateTimeFormatter.ISO_ZONED_DATE_TIME);
 
@@ -178,23 +180,37 @@ public abstract class AbstractHealthCheck implements HealthCheck, CamelContextAw
             // reset success since it failed
             successCount = 0;
             failureCount++;
+            failureTime = invocationTime;
         } else if (builder.state() == State.UP) {
             // reset failure since it ok
             failureCount = 0;
             successCount++;
+            successTime = invocationTime;
         }
 
         meta.put(INVOCATION_TIME, invocationTime);
         meta.put(INVOCATION_COUNT, ++invocationCount);
         meta.put(FAILURE_COUNT, failureCount);
+        if (failureTime != null) {
+            meta.put(FAILURE_TIME, failureTime);
+        }
         meta.put(SUCCESS_COUNT, successCount);
+        if (successTime != null) {
+            meta.put(SUCCESS_TIME, successTime);
+        }
 
         // Copy some meta-data bits to the response attributes so the
         // response caches the health-check state at the time of the invocation.
         builder.detail(INVOCATION_TIME, meta.get(INVOCATION_TIME));
         builder.detail(INVOCATION_COUNT, meta.get(INVOCATION_COUNT));
         builder.detail(FAILURE_COUNT, meta.get(FAILURE_COUNT));
+        if (meta.containsKey(FAILURE_TIME)) {
+            builder.detail(FAILURE_TIME, meta.get(FAILURE_TIME));
+        }
         builder.detail(SUCCESS_COUNT, meta.get(SUCCESS_COUNT));
+        if (meta.containsKey(SUCCESS_TIME)) {
+            builder.detail(SUCCESS_TIME, meta.get(SUCCESS_TIME));
+        }
 
         return builder;
     }