From fb6ffd9fe11da5f9bc27ff2e9db20dbeb66d7d2a Mon Sep 17 00:00:00 2001 From: vanitha1822 Date: Fri, 10 Jul 2026 15:23:29 +0530 Subject: [PATCH 1/2] fix: health response format --- .../controller/health/HealthController.java | 2 +- .../bengen/service/health/HealthService.java | 75 +++++++------------ 2 files changed, 27 insertions(+), 50 deletions(-) diff --git a/src/main/java/com/iemr/common/bengen/controller/health/HealthController.java b/src/main/java/com/iemr/common/bengen/controller/health/HealthController.java index bf6976c..247e23a 100644 --- a/src/main/java/com/iemr/common/bengen/controller/health/HealthController.java +++ b/src/main/java/com/iemr/common/bengen/controller/health/HealthController.java @@ -53,7 +53,7 @@ public ResponseEntity> checkHealth() { Map errorResponse = Map.of( "status", "DOWN", - "timestamp", Instant.now().toString() + "checkedAt", Instant.now().toString() ); return new ResponseEntity<>(errorResponse, HttpStatus.SERVICE_UNAVAILABLE); diff --git a/src/main/java/com/iemr/common/bengen/service/health/HealthService.java b/src/main/java/com/iemr/common/bengen/service/health/HealthService.java index 3ce59df..2aca8c1 100644 --- a/src/main/java/com/iemr/common/bengen/service/health/HealthService.java +++ b/src/main/java/com/iemr/common/bengen/service/health/HealthService.java @@ -90,38 +90,47 @@ public void shutdown() { } public Map checkHealth() { - Map response = new LinkedHashMap<>(); - response.put("timestamp", Instant.now().toString()); - Map mysqlStatus = new ConcurrentHashMap<>(); Map redisStatus = new ConcurrentHashMap<>(); - + Future mysqlFuture = executorService.submit( () -> performHealthCheck("MySQL", mysqlStatus, this::checkMySQLHealthSync)); Future redisFuture = executorService.submit( () -> performHealthCheck("Redis", redisStatus, this::checkRedisHealthSync)); - + // Wait for both checks to complete with combined timeout (shared deadline) long maxTimeout = Math.max(MYSQL_TIMEOUT_SECONDS, REDIS_TIMEOUT_SECONDS) + 1; awaitHealthChecks(mysqlFuture, redisFuture, maxTimeout); - + // Ensure timed-out or unfinished components are marked DOWN ensurePopulated(mysqlStatus, "MySQL"); ensurePopulated(redisStatus, "Redis"); - - Map> components = new LinkedHashMap<>(); - components.put("mysql", mysqlStatus); - components.put("redis", redisStatus); - - response.put("components", components); - - // Compute overall status - String overallStatus = computeOverallStatus(components); - response.put(STATUS_KEY, overallStatus); - + + // Build response in the standardized AMRIT shape (aligned with Common-API): + // top-level status + checkedAt, then per-service status/severity summaries. + Map response = new LinkedHashMap<>(); + + String mysqlOverall = (String) mysqlStatus.get(STATUS_KEY); + String redisOverall = (String) redisStatus.get(STATUS_KEY); + boolean overallUp = !STATUS_DOWN.equals(mysqlOverall) && !STATUS_DOWN.equals(redisOverall); + + response.put(STATUS_KEY, overallUp ? STATUS_UP : STATUS_DOWN); + response.put("checkedAt", Instant.now().toString()); + + // Expose only status and severity; keep diagnostics (responseTime, messages) internal + response.put("mysql", summarize(mysqlStatus)); + response.put("redis", summarize(redisStatus)); + return response; } + private Map summarize(Map componentStatus) { + Map summary = new LinkedHashMap<>(); + summary.put(STATUS_KEY, componentStatus.get(STATUS_KEY)); + summary.put(SEVERITY_KEY, componentStatus.get(SEVERITY_KEY)); + return summary; + } + private void awaitHealthChecks(Future mysqlFuture, Future redisFuture, long maxTimeoutSeconds) { long deadlineNs = System.nanoTime() + TimeUnit.SECONDS.toNanos(maxTimeoutSeconds); try { @@ -258,38 +267,6 @@ private String determineSeverity(boolean isHealthy, long responseTimeMs, boolean return SEVERITY_OK; } - private String computeOverallStatus(Map> components) { - boolean hasCritical = false; - boolean hasDegraded = false; - - for (Map componentStatus : components.values()) { - String status = (String) componentStatus.get(STATUS_KEY); - String severity = (String) componentStatus.get(SEVERITY_KEY); - - if (STATUS_DOWN.equals(status) || SEVERITY_CRITICAL.equals(severity)) { - hasCritical = true; - } - - if (STATUS_DEGRADED.equals(status)) { - hasDegraded = true; - } - - if (SEVERITY_WARNING.equals(severity)) { - hasDegraded = true; - } - } - - if (hasCritical) { - return STATUS_DOWN; - } - - if (hasDegraded) { - return STATUS_DEGRADED; - } - - return STATUS_UP; - } - // Internal advanced health checks for MySQL - do not expose details in responses private boolean performAdvancedMySQLChecksWithThrottle() { if (!ADVANCED_HEALTH_CHECKS_ENABLED) { From 322d262475968ed8ad6e854f2993c0e08018ff71 Mon Sep 17 00:00:00 2001 From: vanitha1822 Date: Fri, 10 Jul 2026 15:32:38 +0530 Subject: [PATCH 2/2] fix: pom version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4be32b0..f37a05b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.iemr.common bengen-api - 3.6.1 + 3.8.2 war BeneficiaryID-Generation-API