All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.mstream.trader.datafeed.handlers.monitoring.healthcheck.QuandlHealthCheck Maven / Gradle / Ivy

The newest version!
package io.mstream.trader.datafeed.handlers.monitoring.healthcheck;


import io.mstream.trader.datafeed.stocks.Stock;
import io.mstream.trader.datafeed.stocks.quandl.QuandlClient;
import ratpack.exec.Promise;
import ratpack.health.HealthCheck;
import ratpack.registry.Registry;

import javax.inject.Inject;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

import static java.lang.String.format;
import static ratpack.rx.RxRatpack.promiseSingle;


class QuandlHealthCheck
        implements HealthCheck {
    
    private static final String ERROR_MESSAGE_FORMAT =
            "Could not get price for stock %s on %s because of: %s";
    
    private final QuandlClient quandlClient;
    
    private final Stock stock;
    
    private final LocalDate date;
    
    private final DateTimeFormatter dateFormatter;
    
    @Inject
    public QuandlHealthCheck(
            QuandlClient quandlClient,
            @HealthCheckData
                    Stock stock,
            @HealthCheckData
                    LocalDate date,
            DateTimeFormatter dateFormatter
    ) {
        
        this.quandlClient = quandlClient;
        this.stock = stock;
        this.date = date;
        this.dateFormatter = dateFormatter;
    }
    
    @Override
    public String getName() {
        
        return "quandl";
    }
    
    @Override
    public Promise check(Registry registry)
            throws Exception {
        
        return promiseSingle(
                quandlClient
                        .price(
                                stock,
                                date
                        )
                        .toObservable()
        )
                .onError(throwable ->
                        HealthCheck.Result.unhealthy(
                                format(
                                        ERROR_MESSAGE_FORMAT,
                                        stock.getName(),
                                        dateFormatter.format(date),
                                        "exception thrown"
                                ),
                                throwable
                        )
                )
                .flatMap(valueText ->
                        Promise.value(HealthCheck.Result.healthy())
                );
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy