Пример #1
0
        public MeterMetric(string eventType, TimeUnit rateUnit)
        {
            var timestamp = Timer.ElapsedNanoseconds;

            _m1Rate  = EWMA.OneMinuteEWMA(timestamp);
            _m5Rate  = EWMA.FiveMinuteEWMA(timestamp);
            _m15Rate = EWMA.FifteenMinuteEWMA(timestamp);

            EventType = eventType;
            RateUnit  = rateUnit;

            Timer.Tick += Tick;
        }
Пример #2
0
        public void Can_relative_decay_rates_for_discrete_values()
        {
            var one = EWMA.OneMinuteEWMA(InitialTimestamp);

            one.Update(100000);
            one.Tick(FiveSecondsTimestamp);

            var five = EWMA.FiveMinuteEWMA(InitialTimestamp);

            five.Update(100000);
            five.Tick(FiveSecondsTimestamp);

            var fifteen = EWMA.FifteenMinuteEWMA(InitialTimestamp);

            fifteen.Update(100000);
            fifteen.Tick(FiveSecondsTimestamp);

            var rateOne     = one.Rate(TimeUnit.Seconds);
            var rateFive    = five.Rate(TimeUnit.Seconds);
            var rateFifteen = fifteen.Rate(TimeUnit.Seconds);

            Assert.AreEqual(20000, rateOne);
            Assert.AreEqual(20000, rateFive);
            Assert.AreEqual(20000, rateFifteen);

            var timestamp = FiveSecondsTimestamp;

            ElapseMinute(timestamp, one);
            rateOne = one.Rate(TimeUnit.Seconds);

            ElapseMinute(timestamp, five);
            rateFive = five.Rate(TimeUnit.Seconds);

            ElapseMinute(timestamp, fifteen);
            rateFifteen = fifteen.Rate(TimeUnit.Seconds);

            Assert.AreEqual(7357.5888234288504d, rateOne);
            Assert.AreEqual(16374.615061559636d, rateFive);
            Assert.AreEqual(18710.13970063235d, rateFifteen);
        }
Пример #3
0
        public void EWMA_aFiveMinuteEWMAWithAValueOfThree()
        {
            var ewma = EWMA.FiveMinuteEWMA();

            ewma.Update(3L);
            ewma.Tick();

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.6, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.49123845, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.40219203, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.32928698, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.26959738, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.22072766, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.18071653, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.14795818, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.12113791, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.09917933, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.08120117, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.06648190, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.05443077, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.04456415, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.03648604, 0.000001);

            ElapseMinute(ewma);

            ewma.GetRate(TimeUnit.Seconds).Should().BeApproximately(0.02987224, 0.000001);
        }