Search in sources :

Example 1 with RetryEvent

use of io.github.resilience4j.retry.event.RetryEvent in project resilience4j by resilience4j.

the class RetryChain method execute.

@Override
public void execute(Chain chain) throws Exception {
    String prefix = chain.getRegistry().get(Resilience4jConfig.class).getEndpoints().getRetries().getPath();
    chain.prefix(prefix, chain1 -> {
        chain1.get("events", ctx -> Promise.<RetryEventsEndpointResponse>async(d -> {
            List<RetryEventDTO> eventsList = eventConsumerRegistry.getAllEventConsumer().flatMap(CircularEventConsumer::getBufferedEvents).sorted(Comparator.comparing(RetryEvent::getCreationTime)).map(RetryEventDTO::createRetryEventDTO).toJavaList();
            d.success(new RetryEventsEndpointResponse(eventsList));
        }).then(r -> ctx.render(Jackson.json(r))));
        chain1.get("stream/events", ctx -> {
            Seq<Flowable<RetryEvent>> eventStreams = retryRegistry.getAllRetries().map(retry -> toFlowable(retry.getEventPublisher()));
            Function<RetryEvent, String> data = r -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(RetryEventDTO.createRetryEventDTO(r));
            ServerSentEvents events = ServerSentEvents.serverSentEvents(Flowable.merge(eventStreams), e -> e.id(RetryEvent::getName).event(c -> c.getEventType().name()).data(data));
            ctx.render(events);
        });
        chain1.get("events/:name", ctx -> {
            String retryName = ctx.getPathTokens().get("name");
            Promise.<RetryEventsEndpointResponse>async(d -> {
                List<RetryEventDTO> eventsList = eventConsumerRegistry.getEventConsumer(retryName).getBufferedEvents().sorted(Comparator.comparing(RetryEvent::getCreationTime)).map(RetryEventDTO::createRetryEventDTO).toJavaList();
                d.success(new RetryEventsEndpointResponse(eventsList));
            }).then(r -> ctx.render(Jackson.json(r)));
        });
        chain1.get("stream/events/:name", ctx -> {
            String rateLimiterName = ctx.getPathTokens().get("name");
            Retry retry = retryRegistry.getAllRetries().find(rL -> rL.getName().equals(rateLimiterName)).getOrElseThrow(() -> new IllegalArgumentException(String.format("rate limiter with name %s not found", rateLimiterName)));
            Function<RetryEvent, String> data = r -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(RetryEventDTO.createRetryEventDTO(r));
            ServerSentEvents events = ServerSentEvents.serverSentEvents(toFlowable(retry.getEventPublisher()), e -> e.id(RetryEvent::getName).event(c -> c.getEventType().name()).data(data));
            ctx.render(events);
        });
        chain1.get("events/:name/:type", ctx -> {
            String retryName = ctx.getPathTokens().get("name");
            String eventType = ctx.getPathTokens().get("type");
            Promise.<RetryEventsEndpointResponse>async(d -> {
                List<RetryEventDTO> eventsList = eventConsumerRegistry.getEventConsumer(retryName).getBufferedEvents().sorted(Comparator.comparing(RetryEvent::getCreationTime)).filter(event -> event.getEventType() == RetryEvent.Type.valueOf(eventType.toUpperCase())).map(RetryEventDTO::createRetryEventDTO).toJavaList();
                d.success(new RetryEventsEndpointResponse(eventsList));
            }).then(r -> ctx.render(Jackson.json(r)));
        });
        chain1.get("stream/events/:name/:type", ctx -> {
            String retryName = ctx.getPathTokens().get("name");
            String eventType = ctx.getPathTokens().get("type");
            Retry retry = retryRegistry.getAllRetries().find(rL -> rL.getName().equals(retryName)).getOrElseThrow(() -> new IllegalArgumentException(String.format("rate limiter with name %s not found", retryName)));
            Flowable<RetryEvent> eventStream = toFlowable(retry.getEventPublisher()).filter(event -> event.getEventType() == RetryEvent.Type.valueOf(eventType.toUpperCase()));
            Function<RetryEvent, String> data = r -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(RetryEventDTO.createRetryEventDTO(r));
            ServerSentEvents events = ServerSentEvents.serverSentEvents(eventStream, e -> e.id(RetryEvent::getName).event(c -> c.getEventType().name()).data(data));
            ctx.render(events);
        });
    });
}
Also used : Function(ratpack.func.Function) Retry(io.github.resilience4j.retry.Retry) Promise(ratpack.exec.Promise) RetryEvent(io.github.resilience4j.retry.event.RetryEvent) Resilience4jConfig(io.github.resilience4j.ratpack.Resilience4jConfig) Jackson(ratpack.jackson.Jackson) ServerSentEvents(ratpack.sse.ServerSentEvents) Chain(ratpack.handling.Chain) Inject(javax.inject.Inject) List(java.util.List) Flowable(io.reactivex.Flowable) CircularEventConsumer(io.github.resilience4j.consumer.CircularEventConsumer) Action(ratpack.func.Action) RxJava2Adapter.toFlowable(io.github.resilience4j.adapter.RxJava2Adapter.toFlowable) Seq(io.vavr.collection.Seq) RetryRegistry(io.github.resilience4j.retry.RetryRegistry) Comparator(java.util.Comparator) EventConsumerRegistry(io.github.resilience4j.consumer.EventConsumerRegistry) RetryEvent(io.github.resilience4j.retry.event.RetryEvent) Resilience4jConfig(io.github.resilience4j.ratpack.Resilience4jConfig) ServerSentEvents(ratpack.sse.ServerSentEvents) List(java.util.List) Retry(io.github.resilience4j.retry.Retry) Flowable(io.reactivex.Flowable) RxJava2Adapter.toFlowable(io.github.resilience4j.adapter.RxJava2Adapter.toFlowable)

Aggregations

RxJava2Adapter.toFlowable (io.github.resilience4j.adapter.RxJava2Adapter.toFlowable)1 CircularEventConsumer (io.github.resilience4j.consumer.CircularEventConsumer)1 EventConsumerRegistry (io.github.resilience4j.consumer.EventConsumerRegistry)1 Resilience4jConfig (io.github.resilience4j.ratpack.Resilience4jConfig)1 Retry (io.github.resilience4j.retry.Retry)1 RetryRegistry (io.github.resilience4j.retry.RetryRegistry)1 RetryEvent (io.github.resilience4j.retry.event.RetryEvent)1 Flowable (io.reactivex.Flowable)1 Seq (io.vavr.collection.Seq)1 Comparator (java.util.Comparator)1 List (java.util.List)1 Inject (javax.inject.Inject)1 Promise (ratpack.exec.Promise)1 Action (ratpack.func.Action)1 Function (ratpack.func.Function)1 Chain (ratpack.handling.Chain)1 Jackson (ratpack.jackson.Jackson)1 ServerSentEvents (ratpack.sse.ServerSentEvents)1