Example #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="HystrixRollingNumber"/> class.
        /// </summary>
        /// <param name="time">The <see cref="ITime"/> instance to measure time.</param>
        /// <param name="timeInMilliseconds">The total time window to track.</param>
        /// <param name="numberOfBuckets">The number of parts to break the time window.</param>
        private HystrixRollingNumber(ITime time, IHystrixProperty <int> timeInMilliseconds, IHystrixProperty <int> numberOfBuckets)
        {
            this.time = time;
            this.timeInMilliseconds = timeInMilliseconds;
            this.numberOfBuckets    = numberOfBuckets;

            if (timeInMilliseconds.Get() % numberOfBuckets.Get() != 0)
            {
                throw new ArgumentException("The timeInMilliseconds must divide equally into numberOfBuckets. For example 1000/10 is ok, 1000/11 is not.");
            }

            this.buckets = new BucketCircularArray <Bucket>(numberOfBuckets.Get());
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="HystrixRollingPercentile"/> class.
        /// </summary>
        /// <param name="time">The <see cref="ITime"/> instance to measure time.</param>
        /// <param name="timeInMilliseconds">Number of milliseconds of data that should be tracked.</param>
        /// <param name="numberOfBuckets">Number of buckets that the time window should be divided into.</param>
        /// <param name="bucketDataLength">Number of values stored in each bucket.</param>
        /// <param name="enabled">Sets whether data should be tracked and percentiles be calculated.</param>
        internal HystrixRollingPercentile(ITime time, IHystrixProperty <int> timeInMilliseconds, IHystrixProperty <int> numberOfBuckets, IHystrixProperty <int> bucketDataLength, IHystrixProperty <bool> enabled)
        {
            if (timeInMilliseconds.Get() % numberOfBuckets.Get() != 0)
            {
                throw new ArgumentException("The timeInMilliseconds must divide equally into numberOfBuckets. For example 1000/10 is ok, 1000/11 is not.");
            }

            this.time = time;
            this.timeInMilliseconds = timeInMilliseconds;
            this.numberOfBuckets    = numberOfBuckets;
            this.bucketDataLength   = bucketDataLength;
            this.enabled            = enabled;
            this.buckets            = new BucketCircularArray <Bucket>(this.numberOfBuckets.Get());
        }