package io.budgetapp.resource; import com.codahale.metrics.health.HealthCheck; import com.codahale.metrics.health.HealthCheckRegistry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.Map; /** * */ @Path(ResourceURL.HEALTH) @Produces(MediaType.APPLICATION_JSON) public class HealthCheckResource extends AbstractResource { private static final Logger LOGGER = LoggerFactory.getLogger(HealthCheckResource.class); private final HealthCheckRegistry healthCheckRegistry; public HealthCheckResource(HealthCheckRegistry healthCheckRegistry) { this.healthCheckRegistry = healthCheckRegistry; } @Override public String getPath() { return ResourceURL.HEALTH; } @GET @Path("/ping") public Response ping() { try { Map<String, HealthCheck.Result> results = healthCheckRegistry.runHealthChecks(); for (Map.Entry<String, HealthCheck.Result> entry : results.entrySet()) { if (!entry.getValue().isHealthy()) { LOGGER.info(entry.getValue().getMessage(), entry.getValue().getError()); return error("error"); } } } catch (Exception e) { LOGGER.error(e.getMessage(), e); return error("error"); } return ok("ok"); } }