69 lines
2.0 KiB
Java
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();
|
|
|
|
}
|
|
} |