example of WindowedEventRate
WindowedEventRate rate = WindowedEventRate.builder()
.bucketCount(50)
.window(Duration.ofMinutes(50))
.build();
rate.newEvent();
...
..
log.info("Measured rate: {} /s", rate.getRate(TimeUnit.SECONDS) + " #/s");
log.info("Measured rate: {}", rate); // toStringanother example of WindowedEventRate
import org.meeuw.configuration.ConfigurationService;
import org.meeuw.math.Interval;
import org.meeuw.math.abstractalgebra.reals.RealNumber;
import org.meeuw.math.text.configuration.UncertaintyConfiguration;
import org.meeuw.theories.abstractalgebra.UncertainDoubleTheory;
import org.meeuw.time.TestClock;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.data.Percentage.withPercentage;
import static org.meeuw.math.text.configuration.UncertaintyConfiguration.Notation.PARENTHESES;
...
ConfigurationService.withAspect(UncertaintyConfiguration.class, e -> e.withNotation(PARENTHESES),
() -> {
TestClock clock = new TestClock();
try (WindowedEventRate rate = WindowedEventRate.builder()
.window(Duration.ofSeconds(100))
.bucketCount(10)
.clock(clock)
.build()) {
for (int i = 0; i < 100; i++) {
rate.accept(5 + (i % 3));
clock.tick();
}
clock.tick(50);
assertThat(rate.isWarmingUp()).isFalse();
assertThat(rate.getRate()).isEqualTo(5.930038867295947);
assertThat(rate.toString()).isEqualTo("5.9(1.8) /s");
}
});Just to keep track of averages and standard deviations of incoming data.
Allow to enter 'longs' and similar objects.
Like durations
keeps tracks of durations (in nanoseconds)
StatisticalLong mes = new StatisticalLong(DURATION_NS);
mes.enter(Duration.ofNanos(10), Duration.ofNanos(20));
assertThat(mes.durationValue()).isEqualTo(Duration.ofNanos(15));
assertThat(mes.optionalDurationValue()).contains(Duration.ofNanos(15));
assertThat(mes.getStandardDeviation()).isEqualTo(5.0d); // 5 ns
mes.enter(Duration.ofMinutes(5));
assertThat(mes.optionalDurationValue()).contains(Duration.parse("PT1M40.00000001S"));