Search in sources :

Example 1 with Result

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;
}
Also used : NetClientOptions(io.vertx.core.net.NetClientOptions) NetClient(io.vertx.core.net.NetClient) VertxCompletableFuture(io.gravitee.gateway.services.healthcheck.vertx.VertxCompletableFuture) Result(io.gravitee.gateway.services.healthcheck.Result)

Example 2 with 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();
    });
}
Also used : VertxCompletableFuture(io.gravitee.gateway.services.healthcheck.vertx.VertxCompletableFuture) CompletableFuture(java.util.concurrent.CompletableFuture) HashMap(java.util.HashMap) HttpServerResponse(io.vertx.core.http.HttpServerResponse) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) Result(io.gravitee.gateway.services.healthcheck.Result)

Aggregations

Result (io.gravitee.gateway.services.healthcheck.Result)2 VertxCompletableFuture (io.gravitee.gateway.services.healthcheck.vertx.VertxCompletableFuture)2 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)1 HttpServerResponse (io.vertx.core.http.HttpServerResponse)1 NetClient (io.vertx.core.net.NetClient)1 NetClientOptions (io.vertx.core.net.NetClientOptions)1 HashMap (java.util.HashMap)1 CompletableFuture (java.util.concurrent.CompletableFuture)1