protected override MetricAggregate CreateAggregate(DateTimeOffset periodEnd)
        {
            double last, min, max;

            lock (_updateLock)
            {
                if (!_data.HasValues)
                {
                    return(null);
                }

                min  = _data.Min;
                max  = _data.Max;
                last = _data.Last;
            }

            last = Util.EnsureConcreteValue(last);
            min  = Util.EnsureConcreteValue(min);
            max  = Util.EnsureConcreteValue(max);

            MetricAggregate aggregate = new MetricAggregate(
                DataSeries?.MetricId ?? Util.NullString,
                MetricAggregateKinds.Gauge.Moniker);

            aggregate.AggregateData[MetricAggregateKinds.Gauge.DataKeys.Last] = last;
            aggregate.AggregateData[MetricAggregateKinds.Gauge.DataKeys.Min]  = min;
            aggregate.AggregateData[MetricAggregateKinds.Gauge.DataKeys.Max]  = max;

            AddInfo_Timing_Dimensions_Context(aggregate, periodEnd);

            return(aggregate);
        }
示例#2
0
        protected override MetricAggregate CreateAggregate(DateTimeOffset periodEnd)
        {
            double sum, min, max;

            lock (_updateLock)
            {
                sum = _sum;
                min = _min;
                max = _max;
            }

            if (_min > _max)
            {
                return(null);
            }

            sum = Util.EnsureConcreteValue(sum);
            min = Util.EnsureConcreteValue(min);
            max = Util.EnsureConcreteValue(max);

            MetricAggregate aggregate = new MetricAggregate(
                DataSeries?.MetricId ?? Util.NullString,
                MetricAggregateKinds.Accumulator.Moniker);

            aggregate.AggregateData[MetricAggregateKinds.SimpleStatistics.DataKeys.Sum] = sum;
            aggregate.AggregateData[MetricAggregateKinds.SimpleStatistics.DataKeys.Min] = min;
            aggregate.AggregateData[MetricAggregateKinds.SimpleStatistics.DataKeys.Max] = max;

            AddInfo_Timing_Dimensions_Context(aggregate, periodEnd);

            return(aggregate);
        }
示例#3
0
        protected override MetricAggregate CreateAggregate(DateTimeOffset periodEnd)
        {
            int    count;
            double sum, min, max, stdDev;

            lock (this.updateLock)
            {
                count  = this.data.Count;
                sum    = this.data.Sum;
                min    = 0.0;
                max    = 0.0;
                stdDev = 0.0;

                if (count > 0)
                {
                    min = this.data.Min;
                    max = this.data.Max;

                    if (Double.IsInfinity(this.data.SumOfSquares) || Double.IsInfinity(sum))
                    {
                        stdDev = Double.NaN;
                    }
                    else
                    {
                        double mean     = sum / count;
                        double variance = (this.data.SumOfSquares / count) - (mean * mean);
                        stdDev = Math.Sqrt(variance);
                    }
                }
            }

            sum = Util.EnsureConcreteValue(sum);

            if (count > 0)
            {
                min    = Util.EnsureConcreteValue(min);
                max    = Util.EnsureConcreteValue(max);
                stdDev = Util.EnsureConcreteValue(stdDev);
            }

            MetricAggregate aggregate = new MetricAggregate(
                this.DataSeries?.MetricIdentifier.MetricNamespace ?? String.Empty,
                this.DataSeries?.MetricIdentifier.MetricId ?? Util.NullString,
                MetricSeriesConfigurationForMeasurement.Constants.AggregateKindMoniker);

            aggregate.Data[MetricSeriesConfigurationForMeasurement.Constants.AggregateKindDataKeys.Count]  = count;
            aggregate.Data[MetricSeriesConfigurationForMeasurement.Constants.AggregateKindDataKeys.Sum]    = sum;
            aggregate.Data[MetricSeriesConfigurationForMeasurement.Constants.AggregateKindDataKeys.Min]    = min;
            aggregate.Data[MetricSeriesConfigurationForMeasurement.Constants.AggregateKindDataKeys.Max]    = max;
            aggregate.Data[MetricSeriesConfigurationForMeasurement.Constants.AggregateKindDataKeys.StdDev] = stdDev;

            this.AddInfo_Timing_Dimensions_Context(aggregate, periodEnd);

            return(aggregate);
        }
        protected override MetricAggregate CreateAggregate(DateTimeOffset periodEnd)
        {
            int    count;
            double sum, min, max, stdDev;

            lock (_updateLock)
            {
                count  = _data.Count;
                sum    = _data.Sum;
                min    = 0.0;
                max    = 0.0;
                stdDev = 0.0;

                if (count > 0)
                {
                    min = _data.Min;
                    max = _data.Max;

                    if (Double.IsInfinity(_data.SumOfSquares) || Double.IsInfinity(sum))
                    {
                        stdDev = Double.NaN;
                    }
                    else
                    {
                        double mean     = sum / count;
                        double variance = (_data.SumOfSquares / count) - (mean * mean);
                        stdDev = Math.Sqrt(variance);
                    }
                }
            }

            sum = Util.EnsureConcreteValue(sum);

            if (count > 0)
            {
                min    = Util.EnsureConcreteValue(min);
                max    = Util.EnsureConcreteValue(max);
                stdDev = Util.EnsureConcreteValue(stdDev);
            }

            MetricAggregate aggregate = new MetricAggregate(
                DataSeries?.MetricId ?? Util.NullString,
                MetricAggregateKinds.SimpleStatistics.Moniker);

            aggregate.AggregateData[MetricAggregateKinds.SimpleStatistics.DataKeys.Count]  = count;
            aggregate.AggregateData[MetricAggregateKinds.SimpleStatistics.DataKeys.Sum]    = sum;
            aggregate.AggregateData[MetricAggregateKinds.SimpleStatistics.DataKeys.Min]    = min;
            aggregate.AggregateData[MetricAggregateKinds.SimpleStatistics.DataKeys.Max]    = max;
            aggregate.AggregateData[MetricAggregateKinds.SimpleStatistics.DataKeys.StdDev] = stdDev;

            AddInfo_Timing_Dimensions_Context(aggregate, periodEnd);

            return(aggregate);
        }
        public void EnsureConcreteValue()
        {
            Assert.AreEqual(-1.7976931348623157E+308, Util.EnsureConcreteValue(Double.MinValue));
            Assert.AreEqual(Double.MinValue, Util.EnsureConcreteValue(-1.7976931348623157E+308));

            Assert.AreEqual(1.7976931348623157E+308, Util.EnsureConcreteValue(Double.MaxValue));
            Assert.AreEqual(Double.MaxValue, Util.EnsureConcreteValue(1.7976931348623157E+308));

            Assert.AreEqual(4.94065645841247E-324, Util.EnsureConcreteValue(Double.Epsilon));
            Assert.AreEqual(Double.Epsilon, Util.EnsureConcreteValue(4.94065645841247E-324));

            Assert.AreEqual(0.0, Util.EnsureConcreteValue(Double.NaN));
            Assert.AreEqual(Double.MinValue, Util.EnsureConcreteValue(Double.NegativeInfinity));
            Assert.AreEqual(Double.MaxValue, Util.EnsureConcreteValue(Double.PositiveInfinity));
        }