/** * Returns a {@link LogSampler} that accepts once as per the frequency. This method is equivalent to * calling {@link #limitRate(long, TimeProvider)} using {@link TimeProvider#SYSTEM_TIME} as the * {@link TimeProvider}. */ public static LogSampler limitRate(long frequency) { return limitRate(frequency, TimeProvider.SYSTEM_TIME); }
/** * Returns a {@link LogSampler} that accepts once as per the frequency. This method is equivalent to * calling {@link #limitRate(long, TimeProvider)} using {@link TimeProvider#SYSTEM_TIME} as the * {@link TimeProvider}. */ public static LogSampler limitRate(long frequency) { return limitRate(frequency, TimeProvider.SYSTEM_TIME); }
private static final Logger LOG = LoggerFactory.getLogger(MessagingMetricsProcessorService.class); private static final Logger PROGRESS_LOG = Loggers.sampling(LOG, LogSamplers.limitRate(60000));
@Test public void testLimitRate() { // Instead of sleeping, use the incremental time provider to generate monotonic increase timestamps LogSampler sampler = LogSamplers.limitRate(200, new TimeProvider.IncrementalTimeProvider()); List<Integer> accepted = new ArrayList<>(); for (int i = 0; i < 1000; i++) { if (sampler.accept("", 0)) { accepted.add(i); } } Assert.assertEquals(Arrays.asList(0, 200, 400, 600, 800), accepted); }
private static final Logger LOG = LoggerFactory.getLogger(MessagingMetricsProcessorService.class); private static final Logger PROGRESS_LOG = Loggers.sampling(LOG, LogSamplers.limitRate(60000));
@Test public void testAll() { LogSampler sampler = LogSamplers.all(LogSamplers.onceEvery(500), LogSamplers.limitRate(200, new TimeProvider.IncrementalTimeProvider())); List<Integer> accepted = new ArrayList<>(); for (int i = 0; i < 2000; i++) { if (sampler.accept("", 0)) { accepted.add(i); } } Assert.assertEquals(Arrays.asList(0, 1000), accepted); }
@Test public void testAny() { // A sampler that accept once every 500 count, but also accept if time passed 200 milliseconds LogSampler sampler = LogSamplers.any(LogSamplers.onceEvery(500), LogSamplers.limitRate(200, new TimeProvider.IncrementalTimeProvider())); List<Integer> accepted = new ArrayList<>(); for (int i = 0; i < 2000; i++) { if (sampler.accept("", 0)) { accepted.add(i); } } Assert.assertEquals(Arrays.asList(0, 200, 400, 500, 600, 800, 1000, 1200, 1400, 1500, 1600, 1800), accepted); }
@Test public void testConcurrentLimitRate() throws InterruptedException { final LogSampler sampler = LogSamplers.limitRate(50, new TimeProvider.IncrementalTimeProvider()); final AtomicInteger acceptedCount = new AtomicInteger();