Ejemplo n.º 1
0
        public override void Process(string meterName, string metricName, LabelSet labelSet, Aggregator <double> aggregator)
        {
            var metric = new ProcessedMetric <double>(meterName, metricName, meterName + metricName, labelSet.Labels, aggregator.GetAggregationType());

            metric.Data = aggregator.ToMetricData();
            this.DoubleMetrics.Add(metric);
        }
Ejemplo n.º 2
0
        public override void Process(string meterName, string metricName, LabelSet labelSet, Aggregator <double> aggregator)
        {
            var metric = new ProcessedMetric <double>(meterName, metricName, meterName + metricName, labelSet.Labels, aggregator.GetAggregationType());

            metric.Data = aggregator.ToMetricData();
            var metricKey = new MetricKey(metricName, labelSet.Labels);

            if (this.DoubleMetrics.ContainsKey(metricKey))
            {
                var previousMetric = DoubleMetrics[metricKey];
                switch (previousMetric.AggregationType)
                {
                case AggregationType.LongSum:
                    DoubleMetrics[metricKey] = UpdateSum(metric, previousMetric);
                    break;

                case AggregationType.Summary:
                    DoubleMetrics[metricKey] = UpdateSummary(metric, previousMetric);
                    break;
                }
            }
            else
            {
                DoubleMetrics.Add(metricKey, metric);
            }
        }
Ejemplo n.º 3
0
        public override void Process(string meterName, string metricName, LabelSet labelSet, Aggregator <long> aggregator)
        {
            var metric = new ProcessedMetric <long>(meterName, metricName, meterName + metricName, labelSet.Labels, aggregator.GetAggregationType())
            {
                Data = aggregator.ToMetricData()
            };

            LongMetrics.Add(metric);
        }
Ejemplo n.º 4
0
        private Metric <T> UpdateSum <T>(ProcessedMetric <T> metric, Metric <T> previousMetric)
            where T : struct
        {
            var previousSummary = previousMetric.Data as SumData <T>;
            var currentSummary  = metric.Data as SumData <T>;

            var newSum     = Sum(previousSummary.Sum, currentSummary.Sum);
            var newSummary = new SumData <T>()
            {
                Sum = newSum, Timestamp = currentSummary.Timestamp
            };

            metric.Data = newSummary;
            return(metric);
        }
Ejemplo n.º 5
0
        internal SummaryData <T> GetMetricByName <T>(string name, List <KeyValuePair <string, string> > labels = null)
            where T : struct
        {
            ProcessedMetric <T> processedMetric;

            if (typeof(T) == typeof(long))
            {
                var filtered = LongMetrics.Where(m => m.MetricName == name).Select(m => m as ProcessedMetric <T>);
                filtered        = labels == null ? filtered : filtered.Where(m => m.Labels.Any(label => labels.Contains(label))).ToList();
                processedMetric = filtered.Aggregate(
                    (a, b) =>
                {
                    var c = new ProcessedMetric <T>(a.MetricNamespace, name, a.MetricDescription, a.Labels, a.AggregationType);
                    switch (a.AggregationType)
                    {
                    case AggregationType.Summary:
                        var aData    = a.Data as SummaryData <T>;
                        var bData    = b.Data as SummaryData <T>;
                        var aSum     = aData.Sum;
                        var bSum     = bData.Sum;
                        var aLongSum = Unsafe.As <T, long>(ref aSum);
                        var bLongSum = Unsafe.As <T, long>(ref bSum);
                        var cLongSum = aLongSum + bLongSum;
                        c.Data       = new SummaryData <T>()
                        {
                            Count = aData.Count + bData.Count,
                            Max   = Comparer <T> .Default.Compare(aData.Max, bData.Max) > 0 ? aData.Max : bData.Max,
                            Min   = Comparer <T> .Default.Compare(aData.Max, bData.Max) < 0 ? aData.Min : bData.Min,
                            Sum   = Unsafe.As <long, T>(ref cLongSum)
                        };
                        break;

                    default:
                        break;
                    }

                    return(c);
                });
            }
            else
            {
                var filtered = labels == null ? DoubleMetrics : DoubleMetrics.FindAll(m => m.Labels.Any(label => labels.Contains(label))).ToList();
                processedMetric = filtered.FirstOrDefault(m => m.MetricName == name) as ProcessedMetric <T>;
            }

            return(processedMetric.Data as SummaryData <T>);
        }
Ejemplo n.º 6
0
        private Metric <T> UpdateSummary <T>(ProcessedMetric <T> metric, Metric <T> previousMetric)
            where T : struct
        {
            var previousSummary = previousMetric.Data as SummaryData <T>;
            var currentSummary  = metric.Data as SummaryData <T>;
            var newMax          = Max(previousSummary.Max, currentSummary.Max);
            var newMin          = Min(previousSummary.Min, currentSummary.Min);
            var newCount        = previousSummary.Count + currentSummary.Count;
            var newSum          = Sum(previousSummary.Sum, currentSummary.Sum);
            var newSummary      = new SummaryData <T>()
            {
                Count = newCount, Min = newMin, Max = newMax, Sum = newSum, Timestamp = currentSummary.Timestamp
            };

            metric.Data    = newSummary;
            previousMetric = metric;
            return(previousMetric);
        }
Ejemplo n.º 7
0
 public ProcessedMetric(ProcessedMetric<T> metric)
     : base(metric.MetricNamespace, metric.MetricName, metric.MetricDescription, metric.Labels, metric.AggregationType)
 {
 }
Ejemplo n.º 8
0
        internal SummaryData <T> GetMetricByName <T>(string name, List <KeyValuePair <string, string> > labels = null)
            where T : struct
        {
            ProcessedMetric <T> processedMetric = null;

            if (typeof(T) == typeof(long))
            {
                var filtered = LongMetrics.Where(m => m.MetricName == name).Select(m => m as ProcessedMetric <T>);
                filtered = labels == null ? filtered : filtered.Where(m => m.Labels.Any(label => labels.Contains(label))).ToList();

                processedMetric = filtered.Count() < 1 ? default : filtered.Aggregate(
                                      (a, b) =>
                {
                    var c = new ProcessedMetric <T>(a.MetricNamespace, name, a.MetricDescription, a.Labels, a.AggregationType);
                    switch (a.AggregationType)
                    {
                    case AggregationType.Summary:
                        var aData    = a.Data as SummaryData <T>;
                        var bData    = b.Data as SummaryData <T>;
                        var aSum     = aData.Sum;
                        var bSum     = bData.Sum;
                        var aLongSum = Unsafe.As <T, long>(ref aSum);
                        var bLongSum = Unsafe.As <T, long>(ref bSum);
                        var cLongSum = aLongSum + bLongSum;
                        c.Data       = new SummaryData <T>()
                        {
                            Count = aData.Count + bData.Count,
                            Max   = Max(aData.Max, bData.Max),
                            Min   = Min(aData.Min, bData.Min),
                            Sum   = Unsafe.As <long, T>(ref cLongSum),
                        };
                        break;

                    default:
                        // TODO: If we use more than Measure instruments we need more aggregations
                        break;
                    }

                    return(c);
                });
            }
            else
            {
                var filtered = DoubleMetrics.Where(m => m.MetricName == name).Select(m => m as ProcessedMetric <T>);
                filtered = labels == null ? filtered : filtered.Where(m => m.Labels.Any(label => labels.Contains(label))).ToList();

                processedMetric = filtered.Count() < 1 ? default : filtered.Aggregate(
                                      (a, b) =>
                {
                    var c = new ProcessedMetric <T>(a.MetricNamespace, name, a.MetricDescription, a.Labels, a.AggregationType);
                    switch (a.AggregationType)
                    {
                    case AggregationType.Summary:
                        var aData      = a.Data as SummaryData <T>;
                        var bData      = b.Data as SummaryData <T>;
                        var aSum       = aData.Sum;
                        var bSum       = bData.Sum;
                        var aDoubleSum = Unsafe.As <T, double>(ref aSum);
                        var bDoubleSum = Unsafe.As <T, double>(ref bSum);
                        var cDoubleSum = aDoubleSum + bDoubleSum;
                        c.Data         = new SummaryData <T>()
                        {
                            Count = aData.Count + bData.Count,
                            Max   = Max(aData.Max, bData.Max),
                            Min   = Min(aData.Max, bData.Max),
                            Sum   = Unsafe.As <double, T>(ref cDoubleSum),
                        };
                        break;

                    default:
                        // TODO: If we use more than Measure instruments we need more aggregations
                        break;
                    }

                    return(c);
                });
            }

            return(processedMetric?.Data as SummaryData <T>);
        }