Jellyfish.Commands.Metrics.RollingNumber.GetCurrentBucket C# (CSharp) Method

GetCurrentBucket() private method

private GetCurrentBucket ( ) : Bucket
return Bucket
        internal Bucket GetCurrentBucket()
        {
            int newCurrentIndex;
            int initialCurrentIndex;
            Bucket bucket;
            Bucket newBucket;
            long currentTime;
            
            currentTime = clock.EllapsedTimeInMs;
            do {
                initialCurrentIndex = currentBucketIndex;
                bucket = buckets[initialCurrentIndex];
                if (bucket.bucketStartInMs + bucketSizeInMs > currentTime)
                {
                    return bucket;
                }

                newCurrentIndex = (initialCurrentIndex + 1) % (numberOfBuckets+1);
                newBucket = buckets[newCurrentIndex];

                bool lockTacken=false;
                try
                {
                    Monitor.TryEnter(gate, 10, ref lockTacken);
                    if (!lockTacken)
                    {
                        return newBucket;
                    }
                    newBucket.Reset(bucket, currentTime);
                }
                finally
                {
                    if (lockTacken)
                        Monitor.Exit(gate);
                }
            }
            while ( Interlocked.CompareExchange(ref currentBucketIndex, newCurrentIndex, initialCurrentIndex) != initialCurrentIndex);

          //  Console.WriteLine("Change bucket to {0}, {1}", newCurrentIndex, currentTime);
            cumulativeSum.AddBucket(bucket);

            return newBucket;
        }

Usage Example

        public void testIncrementInSingleBucket()
        {
            MockedClock time = new MockedClock();

            RollingNumber counter = new RollingNumber(time, 200, 10);

            // increment
            counter.Increment(RollingNumberEvent.SUCCESS);
            counter.Increment(RollingNumberEvent.SUCCESS);
            counter.Increment(RollingNumberEvent.SUCCESS);
            counter.Increment(RollingNumberEvent.SUCCESS);
            counter.Increment(RollingNumberEvent.FAILURE);
            counter.Increment(RollingNumberEvent.FAILURE);
            counter.Increment(RollingNumberEvent.TIMEOUT);

            // we should have 1 bucket
            var buckets = counter.GetBuckets().ToArray();
            Assert.Equal(1, buckets.Length);

            // the count should be 4
            Assert.Equal(4, counter.GetCurrentBucket().GetAdder(RollingNumberEvent.SUCCESS));
            Assert.Equal(2, counter.GetCurrentBucket().GetAdder(RollingNumberEvent.FAILURE));
            Assert.Equal(1, counter.GetCurrentBucket().GetAdder(RollingNumberEvent.TIMEOUT));
        }
All Usage Examples Of Jellyfish.Commands.Metrics.RollingNumber::GetCurrentBucket