use of io.gravitee.gateway.services.healthcheck.Result in project gravitee-gateway by gravitee-io.
the class GatewayProbe method check.
@Override
public CompletableFuture<Result> check() {
VertxCompletableFuture<Result> result = new VertxCompletableFuture<>(vertx);
NetClientOptions options = new NetClientOptions().setConnectTimeout(500);
NetClient client = vertx.createNetClient(options);
client.connect(port, host, res -> {
if (res.succeeded()) {
result.complete(Result.healthy());
} else {
result.complete(Result.unhealthy(res.cause()));
}
client.close();
});
return result;
}
use of io.gravitee.gateway.services.healthcheck.Result in project gravitee-gateway by gravitee-io.
the class HealthcheckHandler method handle.
@Override
public void handle(RoutingContext ctx) {
Map<String, CompletableFuture<Result>> probeResults = this.probes.stream().collect(Collectors.toMap(Probe::id, Probe::check));
VertxCompletableFuture.allOf(ctx.vertx(), probeResults.values().toArray(new CompletableFuture[] {})).thenAccept(aVoid -> {
boolean unhealthyProbe = probeResults.values().stream().anyMatch(completableFuture -> {
try {
return !completableFuture.get().isHealthy();
} catch (Exception ex) {
LOGGER.error("Unable to check probe health", ex);
return false;
}
});
HttpServerResponse response = ctx.response();
response.setStatusCode((unhealthyProbe) ? HttpStatusCode.INTERNAL_SERVER_ERROR_500 : HttpStatusCode.OK_200);
response.putHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
response.setChunked(true);
Map<String, Result> results = new HashMap<>();
probeResults.forEach((probe, resultCompletableFuture) -> {
try {
results.put(probe, resultCompletableFuture.get());
} catch (Exception ex) {
LOGGER.error("Unable to check probe health", ex);
}
});
try {
Json.prettyMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
response.write(Json.prettyMapper.writeValueAsString(results));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
// End the response
response.end();
});
}
Aggregations