Search in sources :

Example 1 with Function

use of ratpack.func.Function in project ratpack by ratpack.

the class DefaultExecHarness method yield.

@Override
public <T> ExecResult<T> yield(Action<? super RegistrySpec> registry, final Function<? super Execution, ? extends Promise<T>> func) throws Exception {
    AtomicReference<ExecResult<T>> reference = new AtomicReference<>();
    CountDownLatch latch = new CountDownLatch(1);
    controller.fork().register(registry).onError(throwable -> reference.set(new ResultBackedExecResult<>(Result.<T>error(throwable)))).onComplete(exec -> latch.countDown()).start(execution -> {
        reference.set(ExecResult.complete());
        Promise<T> promise = func.apply(execution);
        if (promise == null) {
            reference.set(null);
        } else {
            promise.then(t -> reference.set(new ResultBackedExecResult<>(Result.success(t))));
        }
    });
    latch.await();
    return reference.get();
}
Also used : Function(ratpack.func.Function) CountDownLatch(java.util.concurrent.CountDownLatch) RegistrySpec(ratpack.registry.RegistrySpec) ratpack.exec(ratpack.exec) Action(ratpack.func.Action) ExecHarness(ratpack.test.exec.ExecHarness) Exceptions(ratpack.util.Exceptions) ResultBackedExecResult(ratpack.exec.internal.ResultBackedExecResult) AtomicReference(java.util.concurrent.atomic.AtomicReference) ResultBackedExecResult(ratpack.exec.internal.ResultBackedExecResult) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) ResultBackedExecResult(ratpack.exec.internal.ResultBackedExecResult)

Example 2 with Function

use of ratpack.func.Function in project ratpack by ratpack.

the class AbstractPropertiesConfigSource method loadConfigData.

@Override
public ObjectNode loadConfigData(ObjectMapper objectMapper, FileSystemBinding fileSystemBinding) throws Exception {
    ObjectNode rootNode = objectMapper.createObjectNode();
    Properties properties = loadProperties();
    Stream<Pair<String, String>> pairs = properties.stringPropertyNames().stream().map(key -> Pair.of(key, properties.getProperty(key)));
    if (prefix.isPresent()) {
        pairs = pairs.filter(p -> p.left.startsWith(prefix.get())).map(((Function<Pair<String, String>, Pair<String, String>>) p -> p.mapLeft(s -> s.substring(prefix.get().length()))).toFunction());
    }
    pairs.forEach(p -> populate(rootNode, p.left, p.right));
    return rootNode;
}
Also used : ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) Function(ratpack.func.Function) Properties(java.util.Properties) Stream(java.util.stream.Stream) FileSystemBinding(ratpack.file.FileSystemBinding) ConfigSource(ratpack.config.ConfigSource) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Optional(java.util.Optional) Pair(ratpack.func.Pair) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) TextNode(com.fasterxml.jackson.databind.node.TextNode) Function(ratpack.func.Function) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) Properties(java.util.Properties) Pair(ratpack.func.Pair)

Example 3 with Function

use of ratpack.func.Function in project ratpack by ratpack.

the class Guice method buildInjector.

static Injector buildInjector(Registry baseRegistry, Action<? super BindingsSpec> bindingsAction, Function<? super Module, ? extends Injector> injectorFactory) throws Exception {
    List<Action<? super Binder>> binderActions = Lists.newLinkedList();
    List<Module> modules = Lists.newLinkedList();
    ServerConfig serverConfig = baseRegistry.get(ServerConfig.class);
    BindingsSpec bindings = new DefaultBindingsSpec(serverConfig, binderActions, modules);
    modules.add(new RatpackBaseRegistryModule(baseRegistry));
    modules.add(new ConfigModule(serverConfig.getRequiredConfig()));
    try {
        bindingsAction.execute(bindings);
    } catch (Exception e) {
        throw uncheck(e);
    }
    modules.add(new AdHocModule(binderActions));
    Optional<BindingsImposition> bindingsImposition = Impositions.current().get(BindingsImposition.class);
    if (bindingsImposition.isPresent()) {
        BindingsImposition imposition = bindingsImposition.get();
        List<Action<? super Binder>> imposedBinderActions = Lists.newLinkedList();
        List<Module> imposedModules = Lists.newLinkedList();
        BindingsSpec imposedBindings = new DefaultBindingsSpec(serverConfig, imposedBinderActions, imposedModules);
        imposition.getBindings().execute(imposedBindings);
        imposedModules.add(new AdHocModule(imposedBinderActions));
        Module imposedModule = imposedModules.stream().reduce((acc, next) -> Modules.override(acc).with(next)).get();
        modules.add(imposedModule);
    }
    Module masterModule = modules.stream().reduce((acc, next) -> Modules.override(acc).with(next)).get();
    return injectorFactory.apply(masterModule);
}
Also used : Function(ratpack.func.Function) Module(com.google.inject.Module) RatpackBaseRegistryModule(ratpack.guice.internal.RatpackBaseRegistryModule) Context(ratpack.handling.Context) Modules(com.google.inject.util.Modules) Guice.createInjector(com.google.inject.Guice.createInjector) Exceptions.uncheck(ratpack.util.Exceptions.uncheck) Injector(com.google.inject.Injector) Stage(com.google.inject.Stage) Chain(ratpack.handling.Chain) ConfigObject(ratpack.config.ConfigObject) List(java.util.List) Lists(com.google.common.collect.Lists) Binder(com.google.inject.Binder) Impositions(ratpack.impose.Impositions) GuiceUtil(ratpack.guice.internal.GuiceUtil) InjectorRegistryBacking(ratpack.guice.internal.InjectorRegistryBacking) Action(ratpack.func.Action) Handler(ratpack.handling.Handler) ServerConfig(ratpack.server.ServerConfig) Registry(ratpack.registry.Registry) Optional(java.util.Optional) DefaultBindingsSpec(ratpack.guice.internal.DefaultBindingsSpec) Action(ratpack.func.Action) DefaultBindingsSpec(ratpack.guice.internal.DefaultBindingsSpec) DefaultBindingsSpec(ratpack.guice.internal.DefaultBindingsSpec) Binder(com.google.inject.Binder) ServerConfig(ratpack.server.ServerConfig) RatpackBaseRegistryModule(ratpack.guice.internal.RatpackBaseRegistryModule) Module(com.google.inject.Module) RatpackBaseRegistryModule(ratpack.guice.internal.RatpackBaseRegistryModule)

Example 4 with Function

use of ratpack.func.Function in project resilience4j by resilience4j.

the class BulkheadChain method execute.

@Override
public void execute(Chain chain) throws Exception {
    String prefix = chain.getRegistry().get(Resilience4jConfig.class).getEndpoints().getBulkheads().getPath();
    chain.prefix(prefix, chain1 -> {
        chain1.get("events", ctx -> Promise.<BulkheadEventsEndpointResponse>async(d -> {
            BulkheadEventsEndpointResponse response = new BulkheadEventsEndpointResponse(eventConsumerRegistry.getAllEventConsumer().flatMap(CircularEventConsumer::getBufferedEvents).sorted(Comparator.comparing(BulkheadEvent::getCreationTime)).map(BulkheadEventDTO::createEventDTO).toJavaList());
            d.success(response);
        }).then(r -> ctx.render(Jackson.json(r))));
        chain1.get("stream/events", ctx -> {
            Seq<Flowable<BulkheadEvent>> eventStreams = bulkheadRegistry.getAllBulkheads().map(bulkhead -> RxJava2Adapter.toFlowable(bulkhead.getEventPublisher()));
            Function<BulkheadEvent, String> data = b -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(BulkheadEventDTO.createEventDTO(b));
            ServerSentEvents events = ServerSentEvents.serverSentEvents(Flowable.merge(eventStreams), e -> e.id(BulkheadEvent::getBulkheadName).event(c -> c.getEventType().name()).data(data));
            ctx.render(events);
        });
        chain1.get("events/:name", ctx -> {
            String bulkheadName = ctx.getPathTokens().get("name");
            Promise.<BulkheadEventsEndpointResponse>async(d -> {
                BulkheadEventsEndpointResponse response = new BulkheadEventsEndpointResponse(eventConsumerRegistry.getEventConsumer(bulkheadName).getBufferedEvents().map(BulkheadEventDTO::createEventDTO).toJavaList());
                d.success(response);
            }).then(r -> ctx.render(Jackson.json(r)));
        });
        chain1.get("stream/events/:name", ctx -> {
            String bulkheadName = ctx.getPathTokens().get("name");
            Bulkhead bulkhead = bulkheadRegistry.getAllBulkheads().find(b -> b.getName().equals(bulkheadName)).getOrElseThrow(() -> new IllegalArgumentException(String.format("bulkhead with name %s not found", bulkheadName)));
            Function<BulkheadEvent, String> data = b -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(BulkheadEventDTO.createEventDTO(b));
            ServerSentEvents events = ServerSentEvents.serverSentEvents(RxJava2Adapter.toFlowable(bulkhead.getEventPublisher()), e -> e.id(BulkheadEvent::getBulkheadName).event(c -> c.getEventType().name()).data(data));
            ctx.render(events);
        });
        chain1.get("events/:name/:type", ctx -> {
            String bulkheadName = ctx.getPathTokens().get("name");
            String eventType = ctx.getPathTokens().get("type");
            Promise.<BulkheadEventsEndpointResponse>async(d -> {
                BulkheadEventsEndpointResponse response = new BulkheadEventsEndpointResponse(eventConsumerRegistry.getEventConsumer(bulkheadName).getBufferedEvents().filter(event -> event.getEventType() == BulkheadEvent.Type.valueOf(eventType.toUpperCase())).map(BulkheadEventDTO::createEventDTO).toJavaList());
                d.success(response);
            }).then(r -> ctx.render(Jackson.json(r)));
        });
        chain1.get("stream/events/:name/:type", ctx -> {
            String bulkheadName = ctx.getPathTokens().get("name");
            String eventType = ctx.getPathTokens().get("type");
            Bulkhead bulkhead = bulkheadRegistry.getAllBulkheads().find(b -> b.getName().equals(bulkheadName)).getOrElseThrow(() -> new IllegalArgumentException(String.format("bulkhead with name %s not found", bulkheadName)));
            Flowable<BulkheadEvent> eventStream = RxJava2Adapter.toFlowable(bulkhead.getEventPublisher()).filter(event -> event.getEventType() == BulkheadEvent.Type.valueOf(eventType.toUpperCase()));
            Function<BulkheadEvent, String> data = b -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(BulkheadEventDTO.createEventDTO(b));
            ServerSentEvents events = ServerSentEvents.serverSentEvents(eventStream, e -> e.id(BulkheadEvent::getBulkheadName).event(c -> c.getEventType().name()).data(data));
            ctx.render(events);
        });
    });
}
Also used : Function(ratpack.func.Function) RxJava2Adapter(io.github.resilience4j.adapter.RxJava2Adapter) BulkheadRegistry(io.github.resilience4j.bulkhead.BulkheadRegistry) Bulkhead(io.github.resilience4j.bulkhead.Bulkhead) Promise(ratpack.exec.Promise) BulkheadEvent(io.github.resilience4j.bulkhead.event.BulkheadEvent) Resilience4jConfig(io.github.resilience4j.ratpack.Resilience4jConfig) Jackson(ratpack.jackson.Jackson) ServerSentEvents(ratpack.sse.ServerSentEvents) Chain(ratpack.handling.Chain) Inject(javax.inject.Inject) Flowable(io.reactivex.Flowable) CircularEventConsumer(io.github.resilience4j.consumer.CircularEventConsumer) Action(ratpack.func.Action) Seq(io.vavr.collection.Seq) Comparator(java.util.Comparator) EventConsumerRegistry(io.github.resilience4j.consumer.EventConsumerRegistry) Resilience4jConfig(io.github.resilience4j.ratpack.Resilience4jConfig) BulkheadEvent(io.github.resilience4j.bulkhead.event.BulkheadEvent) Bulkhead(io.github.resilience4j.bulkhead.Bulkhead) CircularEventConsumer(io.github.resilience4j.consumer.CircularEventConsumer) ServerSentEvents(ratpack.sse.ServerSentEvents) Flowable(io.reactivex.Flowable)

Example 5 with Function

use of ratpack.func.Function 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

Function (ratpack.func.Function)8 Action (ratpack.func.Action)7 Chain (ratpack.handling.Chain)5 CircularEventConsumer (io.github.resilience4j.consumer.CircularEventConsumer)4 EventConsumerRegistry (io.github.resilience4j.consumer.EventConsumerRegistry)4 Resilience4jConfig (io.github.resilience4j.ratpack.Resilience4jConfig)4 Flowable (io.reactivex.Flowable)4 Seq (io.vavr.collection.Seq)4 Comparator (java.util.Comparator)4 Inject (javax.inject.Inject)4 Promise (ratpack.exec.Promise)4 Jackson (ratpack.jackson.Jackson)4 ServerSentEvents (ratpack.sse.ServerSentEvents)4 RxJava2Adapter (io.github.resilience4j.adapter.RxJava2Adapter)3 List (java.util.List)3 Optional (java.util.Optional)2 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 ArrayNode (com.fasterxml.jackson.databind.node.ArrayNode)1 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)1 TextNode (com.fasterxml.jackson.databind.node.TextNode)1