@Override public String toString() { return "RateLimiterEvent{" + "type=" + getEventType() + ", rateLimiterName='" + getRateLimiterName() + '\'' + ", creationTime=" + getCreationTime() + '}'; } }
private void publishRateLimiterEvent(boolean permissionAcquired) { if (!eventProcessor.hasConsumers()) { return; } if (permissionAcquired) { eventProcessor.consumeEvent(new RateLimiterOnSuccessEvent(name)); return; } eventProcessor.consumeEvent(new RateLimiterOnFailureEvent(name)); } }
public static RateLimiterEventDTO createRateLimiterEventDTO(RateLimiterEvent rateLimiterEvent) { RateLimiterEventDTO dto = new RateLimiterEventDTO(); dto.setRateLimiterName(rateLimiterEvent.getRateLimiterName()); dto.setRateLimiterEventType(rateLimiterEvent.getEventType()); dto.setRateLimiterCreationTime(rateLimiterEvent.getCreationTime().toString()); return dto; }
@RequestMapping(value = "events/{rateLimiterName}/{eventType}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public RateLimiterEventsEndpointResponse getEventsFilteredByRateLimiterNameAndEventType(@PathVariable("rateLimiterName") String rateLimiterName, @PathVariable("eventType") String eventType) { RateLimiterEvent.Type targetType = RateLimiterEvent.Type.valueOf(eventType.toUpperCase()); List<RateLimiterEventDTO> eventsList = eventsConsumerRegistry.getEventConsumer(rateLimiterName).getBufferedEvents() .filter(event -> event.getRateLimiterName().equals(rateLimiterName)) .filter(event -> event.getEventType() == targetType) .map(RateLimiterEventDTO::createRateLimiterEventDTO).toJavaList(); return new RateLimiterEventsEndpointResponse(eventsList); }
Seq<Flux<RateLimiterEvent>> eventStreams = rateLimiterRegistry.getAllRateLimiters().map(rateLimiter -> ReactorAdapter.toFlux(rateLimiter.getEventPublisher())); Function<RateLimiterEvent, String> data = r -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(RateLimiterEventDTO.createRateLimiterEventDTO(r)); ServerSentEvents events = ServerSentEvents.serverSentEvents(Flux.merge(eventStreams), e -> e.id(RateLimiterEvent::getRateLimiterName).event(c -> c.getEventType().name()).data(data)); ctx.render(events); }); new IllegalArgumentException(String.format("rate limiter with name %s not found", rateLimiterName))); Function<RateLimiterEvent, String> data = r -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(RateLimiterEventDTO.createRateLimiterEventDTO(r)); ServerSentEvents events = ServerSentEvents.serverSentEvents(ReactorAdapter.toFlux(rateLimiter.getEventPublisher()), e -> e.id(RateLimiterEvent::getRateLimiterName).event(c -> c.getEventType().name()).data(data)); ctx.render(events); }); .getBufferedEvents() .sorted(Comparator.comparing(RateLimiterEvent::getCreationTime)) .filter(event -> event.getEventType() == RateLimiterEvent.Type.valueOf(eventType.toUpperCase())) .map(RateLimiterEventDTO::createRateLimiterEventDTO).toJavaList(); d.success(new RateLimiterEventsEndpointResponse(eventsList)); new IllegalArgumentException(String.format("rate limiter with name %s not found", rateLimiterName))); Flux<RateLimiterEvent> eventStream = ReactorAdapter.toFlux(rateLimiter.getEventPublisher()) .filter(event -> event.getEventType() == RateLimiterEvent.Type.valueOf(eventType.toUpperCase())); Function<RateLimiterEvent, String> data = r -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(RateLimiterEventDTO.createRateLimiterEventDTO(r)); ServerSentEvents events = ServerSentEvents.serverSentEvents(eventStream, e -> e.id(RateLimiterEvent::getRateLimiterName).event(c -> c.getEventType().name()).data(data)); ctx.render(events); });
@RequestMapping(value = "stream/events/{rateLimiterName}/{eventType}", produces = MEDIA_TYPE_TEXT_EVENT_STREAM) public SseEmitter getEventsStreamFilteredByRateLimiterNameAndEventType(@PathVariable("rateLimiterName") String rateLimiterName, @PathVariable("eventType") String eventType) { RateLimiterEvent.Type targetType = RateLimiterEvent.Type.valueOf(eventType.toUpperCase()); RateLimiter rateLimiter = rateLimiterRegistry.getAllRateLimiters() .find(rL -> rL.getName().equals(rateLimiterName)) .getOrElseThrow(() -> new IllegalArgumentException(String.format("rate limiter with name %s not found", rateLimiterName))); Flux<RateLimiterEvent> eventStream = toFlux(rateLimiter.getEventPublisher()) .filter(event -> event.getEventType() == targetType); return RateLimiterEventsEmitter.createSseEmitter(eventStream); } }
@RequestMapping(value = "events/{rateLimiterName}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public RateLimiterEventsEndpointResponse getEventsFilteredByRateLimiterName(@PathVariable("rateLimiterName") String rateLimiterName) { List<RateLimiterEventDTO> eventsList = eventsConsumerRegistry.getEventConsumer(rateLimiterName).getBufferedEvents() .filter(event -> event.getRateLimiterName().equals(rateLimiterName)) .map(RateLimiterEventDTO::createRateLimiterEventDTO).toJavaList(); return new RateLimiterEventsEndpointResponse(eventsList); }
@Test public void shouldConsumeOnSuccessEvent() throws Throwable { rateLimiter.getEventPublisher() .onSuccess(event -> logger.info(event.getEventType().toString())); String result = rateLimiter.executeSupplier(() -> "Hello world"); assertThat(result).isEqualTo("Hello world"); then(logger).should(times(1)).info("SUCCESSFUL_ACQUIRE"); }
@Test public void shouldConsumeOnFailureEvent() throws Throwable { rateLimiter.getEventPublisher() .onFailure(event -> logger.info(event.getEventType().toString())); rateLimiter.executeSupplier(() -> "Hello world"); Try.ofSupplier(RateLimiter.decorateSupplier(rateLimiter, () -> "Hello world")); then(logger).should(times(1)).info("FAILED_ACQUIRE"); }
public static RateLimiterEventDTO createRateLimiterEventDTO(RateLimiterEvent rateLimiterEvent) { RateLimiterEventDTO dto = new RateLimiterEventDTO(); dto.setRateLimiterName(rateLimiterEvent.getRateLimiterName()); dto.setRateLimiterEventType(rateLimiterEvent.getEventType()); dto.setRateLimiterCreationTime(rateLimiterEvent.getCreationTime().toString()); return dto; }
@ReadOperation public RateLimiterEventsEndpointResponse getEventsFilteredByRateLimiterNameAndEventType(@Selector String name, @Selector String eventType) { RateLimiterEvent.Type targetType = RateLimiterEvent.Type.valueOf(eventType.toUpperCase()); List<RateLimiterEventDTO> eventsList = eventsConsumerRegistry.getEventConsumer(name).getBufferedEvents() .filter(event -> event.getRateLimiterName().equals(name)) .filter(event -> event.getEventType() == targetType) .map(RateLimiterEventDTO::createRateLimiterEventDTO).toJavaList(); return new RateLimiterEventsEndpointResponse(eventsList); } }
Seq<Flux<RateLimiterEvent>> eventStreams = rateLimiterRegistry.getAllRateLimiters().map(rateLimiter -> ReactorAdapter.toFlux(rateLimiter.getEventPublisher())); Function<RateLimiterEvent, String> data = r -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(RateLimiterEventDTO.createRateLimiterEventDTO(r)); ServerSentEvents events = ServerSentEvents.serverSentEvents(Flux.merge(eventStreams), e -> e.id(RateLimiterEvent::getRateLimiterName).event(c -> c.getEventType().name()).data(data)); ctx.render(events); }); new IllegalArgumentException(String.format("rate limiter with name %s not found", rateLimiterName))); Function<RateLimiterEvent, String> data = r -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(RateLimiterEventDTO.createRateLimiterEventDTO(r)); ServerSentEvents events = ServerSentEvents.serverSentEvents(ReactorAdapter.toFlux(rateLimiter.getEventPublisher()), e -> e.id(RateLimiterEvent::getRateLimiterName).event(c -> c.getEventType().name()).data(data)); ctx.render(events); }); .getBufferedEvents() .sorted(Comparator.comparing(RateLimiterEvent::getCreationTime)) .filter(event -> event.getEventType() == RateLimiterEvent.Type.valueOf(eventType.toUpperCase())) .map(RateLimiterEventDTO::createRateLimiterEventDTO).toJavaList(); d.success(new RateLimiterEventsEndpointResponse(eventsList)); new IllegalArgumentException(String.format("rate limiter with name %s not found", rateLimiterName))); Flux<RateLimiterEvent> eventStream = ReactorAdapter.toFlux(rateLimiter.getEventPublisher()) .filter(event -> event.getEventType() == RateLimiterEvent.Type.valueOf(eventType.toUpperCase())); Function<RateLimiterEvent, String> data = r -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(RateLimiterEventDTO.createRateLimiterEventDTO(r)); ServerSentEvents events = ServerSentEvents.serverSentEvents(eventStream, e -> e.id(RateLimiterEvent::getRateLimiterName).event(c -> c.getEventType().name()).data(data)); ctx.render(events); });
@Override public String toString() { return "RateLimiterEvent{" + "type=" + getEventType() + ", rateLimiterName='" + getRateLimiterName() + '\'' + ", creationTime=" + getCreationTime() + '}'; } }
private void publishRateLimiterEvent(boolean permissionAcquired) { if (!eventProcessor.hasConsumers()) { return; } if (permissionAcquired) { eventProcessor.consumeEvent(new RateLimiterOnSuccessEvent(name)); return; } eventProcessor.consumeEvent(new RateLimiterOnFailureEvent(name)); }
@ReadOperation public RateLimiterEventsEndpointResponse getEventsFilteredByRateLimiterName(@Selector String name) { List<RateLimiterEventDTO> eventsList = eventsConsumerRegistry.getEventConsumer(name).getBufferedEvents() .filter(event -> event.getRateLimiterName().equals(name)) .map(RateLimiterEventDTO::createRateLimiterEventDTO).toJavaList(); return new RateLimiterEventsEndpointResponse(eventsList); }
public static RateLimiterEventDTO createRateLimiterEventDTO(RateLimiterEvent rateLimiterEvent) { RateLimiterEventDTO dto = new RateLimiterEventDTO(); dto.setRateLimiterName(rateLimiterEvent.getRateLimiterName()); dto.setRateLimiterEventType(rateLimiterEvent.getEventType()); dto.setRateLimiterCreationTime(rateLimiterEvent.getCreationTime().toString()); return dto; }
private void publishRateLimiterEvent(boolean permissionAcquired) { if (!eventProcessor.hasConsumers()) { return; } if (permissionAcquired) { eventProcessor.consumeEvent(new RateLimiterOnSuccessEvent(name)); return; } eventProcessor.consumeEvent(new RateLimiterOnFailureEvent(name)); } }
public static RateLimiterEventDTO createRateLimiterEventDTO(RateLimiterEvent rateLimiterEvent) { RateLimiterEventDTO dto = new RateLimiterEventDTO(); dto.setRateLimiterName(rateLimiterEvent.getRateLimiterName()); dto.setRateLimiterEventType(rateLimiterEvent.getEventType()); dto.setRateLimiterCreationTime(rateLimiterEvent.getCreationTime().toString()); return dto; }
private void publishRateLimiterEvent(boolean permissionAcquired) { if (!eventProcessor.hasConsumers()) { return; } if (permissionAcquired) { eventProcessor.consumeEvent(new RateLimiterOnSuccessEvent(name)); return; } eventProcessor.consumeEvent(new RateLimiterOnFailureEvent(name)); }