69 lines
2.0 KiB
Java

package com.banesco.infrastructure.healthcheck;
import com.banesco.commons.config.AppConf;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.microprofile.health.HealthCheck;
import org.eclipse.microprofile.health.HealthCheckResponse;
import org.eclipse.microprofile.health.Readiness;
import java.util.concurrent.Semaphore;
@SuppressWarnings("unused")
@Readiness
@Slf4j
@ApplicationScoped
public class ConfigHealthCheck implements HealthCheck {
// Semáforo para evitar múltiples health checks simultáneos
private final Semaphore healthCheckSemaphore = new Semaphore(1);
@Inject
public ConfigHealthCheck() {
log.info("ConfigHealthCheck inicializado");
}
@Override
public HealthCheckResponse call() {
if (!healthCheckSemaphore.tryAcquire()) {
log.debug("Health check en progreso, saltando esta invocación");
return HealthCheckResponse.builder()
.name("ApiConfig")
.withData("AppConf", "progressing")
.withData("timestamp", System.currentTimeMillis())
.build();
}
try {
AppConf.getInstance();
return buildResponse(null);
} catch (Exception e) {
return buildResponse(e.getMessage());
} finally {
healthCheckSemaphore.release();
}
}
private HealthCheckResponse buildResponse(String errorMessage) {
var responseBuilder = HealthCheckResponse.named("ApiConfig");
if (errorMessage == null) {
return responseBuilder.up()
.withData("AppConf", "configured")
.withData("timestamp", System.currentTimeMillis())
.build();
}
return responseBuilder.down()
.withData("AppConf", "wrong")
.withData("timestamp", System.currentTimeMillis())
.withData("errorMessage", errorMessage)
.build();
}
}