From 63e908e6450fd9dff37f6b8c7fe6e2dedcddaf70 Mon Sep 17 00:00:00 2001 From: Sotatek-HuyLe3a Date: Tue, 9 Apr 2024 15:07:27 +0700 Subject: [PATCH 1/2] chore: bump yaci-store version --- gradle/libs.versions.toml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d9303037..49159907 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,10 +1,10 @@ [libraries] -yaci-store-starter="com.bloxbean.cardano:yaci-store-spring-boot-starter:0.1.0-rc2-a863cfe-SNAPSHOT" -yaci-store-utxo-starter="com.bloxbean.cardano:yaci-store-utxo-spring-boot-starter:0.1.0-rc2-a863cfe-SNAPSHOT" -yaci-store-account-starter="com.bloxbean.cardano:yaci-store-account-spring-boot-starter:0.1.0-rc2-a863cfe-SNAPSHOT" -yaci-store-remote-starter="com.bloxbean.cardano:yaci-store-remote-spring-boot-starter:0.1.0-rc2-a863cfe-SNAPSHOT" -yaci-store-governance-starter="com.bloxbean.cardano:yaci-store-governance-spring-boot-starter:0.1.0-rc2-a863cfe-SNAPSHOT" -yaci-store-events="com.bloxbean.cardano:yaci-store-events:0.1.0-rc2-a863cfe-SNAPSHOT" +yaci-store-starter="com.bloxbean.cardano:yaci-store-spring-boot-starter:0.1.0-rc2-87c7beb-SNAPSHOT" +yaci-store-utxo-starter="com.bloxbean.cardano:yaci-store-utxo-spring-boot-starter:0.1.0-rc2-87c7beb-SNAPSHOT" +yaci-store-account-starter="com.bloxbean.cardano:yaci-store-account-spring-boot-starter:0.1.0-rc2-87c7beb-SNAPSHOT" +yaci-store-remote-starter="com.bloxbean.cardano:yaci-store-remote-spring-boot-starter:0.1.0-rc2-87c7beb-SNAPSHOT" +yaci-store-governance-starter="com.bloxbean.cardano:yaci-store-governance-spring-boot-starter:0.1.0-rc2-87c7beb-SNAPSHOT" +yaci-store-events="com.bloxbean.cardano:yaci-store-events:0.1.0-rc2-87c7beb-SNAPSHOT" cardano-client-lib="com.bloxbean.cardano:cardano-client-lib:0.5.1" snakeyaml="org.yaml:snakeyaml:2.0" From aa2de2a124861f8abd2e960c98c5c30f58fea76e Mon Sep 17 00:00:00 2001 From: Sotatek-HuyLe3a Date: Tue, 9 Apr 2024 15:09:36 +0700 Subject: [PATCH 2/2] chore: custom health check for aggr app --- .../CustomHealthStatusServiceImpl.java | 53 +++++++++++++++++++ .../app/healthcheck/CustomMessage.java | 16 ++++++ 2 files changed, 69 insertions(+) create mode 100644 aggregation-app/src/main/java/org/cardanofoundation/ledgersync/aggregation/app/healthcheck/CustomHealthStatusServiceImpl.java create mode 100644 aggregation-app/src/main/java/org/cardanofoundation/ledgersync/aggregation/app/healthcheck/CustomMessage.java diff --git a/aggregation-app/src/main/java/org/cardanofoundation/ledgersync/aggregation/app/healthcheck/CustomHealthStatusServiceImpl.java b/aggregation-app/src/main/java/org/cardanofoundation/ledgersync/aggregation/app/healthcheck/CustomHealthStatusServiceImpl.java new file mode 100644 index 00000000..337feb7c --- /dev/null +++ b/aggregation-app/src/main/java/org/cardanofoundation/ledgersync/aggregation/app/healthcheck/CustomHealthStatusServiceImpl.java @@ -0,0 +1,53 @@ +package org.cardanofoundation.ledgersync.aggregation.app.healthcheck; + +import com.bloxbean.cardano.yaci.store.core.service.BlockFetchService; +import lombok.RequiredArgsConstructor; +import org.cardanofoundation.ledgersync.healthcheck.HealthCheckProperties; +import org.cardanofoundation.ledgersync.healthcheck.model.HealthStatus; +import org.cardanofoundation.ledgersync.healthcheck.model.Message; +import org.cardanofoundation.ledgersync.healthcheck.service.HealthCheckCachingService; +import org.cardanofoundation.ledgersync.healthcheck.service.HealthStatusService; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.temporal.ChronoUnit; + +@Component +@RequiredArgsConstructor +public class CustomHealthStatusServiceImpl implements HealthStatusService { + private final HealthCheckCachingService healthCheckCachingService; + private final HealthCheckProperties healthCheckProperties; + private final BlockFetchService blockFetchService; + + @Override + public HealthStatus getHealthStatus() { + final var latestEventTime = healthCheckCachingService.getLatestEventTime(); + final var latestSlotNo = healthCheckCachingService.getLatestSlotNo(); + final var latestBlockTime = healthCheckCachingService.getLatestBlockTime(); + final var stopSlot = healthCheckProperties.getStopSlot(); + if (blockFetchService.isScheduledToStop()) { + return new HealthStatus(Boolean.TRUE, CustomMessage.IS_SCHEDULED_TO_STOP.getCode(), + CustomMessage.IS_SCHEDULED_TO_STOP.getDesc()); + } + + if (!isInThreshold(healthCheckProperties.getEventTimeThreshold(), latestEventTime)) { + if (stopSlot > 0 && latestSlotNo >= stopSlot) { + return new HealthStatus(Boolean.TRUE, Message.STOP_SLOT_HAS_REACHED); + } + return new HealthStatus(Boolean.FALSE, Message.IS_BAD); + } + + if (healthCheckProperties.isBlockTimeCheckEnabled() && latestBlockTime != null && + isInThreshold(healthCheckProperties.getBlockTimeThreshold(), latestBlockTime)) { + return new HealthStatus(Boolean.TRUE, Message.BLOCK_HAS_REACHED_TIP); + } + + return new HealthStatus(Boolean.TRUE, Message.IS_GOOD); + } + + private boolean isInThreshold(Long threshold, LocalDateTime time) { + long value = ChronoUnit.SECONDS.between(time, LocalDateTime.now(ZoneOffset.UTC)); + return value <= threshold; + } +} diff --git a/aggregation-app/src/main/java/org/cardanofoundation/ledgersync/aggregation/app/healthcheck/CustomMessage.java b/aggregation-app/src/main/java/org/cardanofoundation/ledgersync/aggregation/app/healthcheck/CustomMessage.java new file mode 100644 index 00000000..39b45a82 --- /dev/null +++ b/aggregation-app/src/main/java/org/cardanofoundation/ledgersync/aggregation/app/healthcheck/CustomMessage.java @@ -0,0 +1,16 @@ +package org.cardanofoundation.ledgersync.aggregation.app.healthcheck; + +import lombok.Getter; + +@Getter +public enum CustomMessage { + IS_SCHEDULED_TO_STOP("IS_SCHEDULED_TO_STOP", "Service is scheduled to stop"); + + private final String code; + private final String desc; + + CustomMessage(String code, String desc) { + this.code = code; + this.desc = desc; + } +}