Exemplo n.º 1
0
 private void AddLabelsToTags(MetricDictionary <List <MetricTag> > availTags, string name, IEnumerable <KeyValuePair <string, string> > labels)
 {
     foreach (var label in labels)
     {
         availTags[name].Add(new MetricTag(label.Key, new HashSet <string>(new List <string> {
             label.Value
         })));
     }
 }
Exemplo n.º 2
0
        protected internal List <MetricSample> GetMetricSamplesByTags(MetricDictionary <List <MetricSample> > measurements, string metricName, IEnumerable <KeyValuePair <string, string> > tags)
        {
            IEnumerable <MetricSample> filtered = measurements[metricName];
            var sampleList = new List <MetricSample>();

            if (tags != null && tags.Any())
            {
                filtered = filtered.Where(sample => tags.All(rt => sample.Tags.Any(sampleTag => rt.Key == sampleTag.Key && rt.Value == sampleTag.Value)));
            }
Exemplo n.º 3
0
        private void AddLabelsToTags(MetricDictionary <List <MetricTag> > availTags, string name, IEnumerable <KeyValuePair <string, string> > labels)
        {
            foreach (var label in labels)
            {
                var currentTags = availTags[name];
                var existingTag = currentTags.FirstOrDefault(tag => tag.Tag.Equals(label.Key, StringComparison.OrdinalIgnoreCase));

                if (existingTag != null)
                {
                    existingTag.Values.Add(label.Value);
                }
                else
                {
                    currentTags.Add(new MetricTag(label.Key, new HashSet <string>(new List <string> {
                        label.Value
                    })));
                }
            }
        }
Exemplo n.º 4
0
        protected internal void GetMetricsCollection(out MetricDictionary <List <MetricSample> > measurements, out MetricDictionary <List <MetricTag> > availTags)
        {
            measurements = new MetricDictionary <List <MetricSample> >();
            availTags    = new MetricDictionary <List <MetricTag> >();

            var doubleMetrics = _exporter.GetAndClearDoubleMetrics();

            if (doubleMetrics == null || doubleMetrics.Count <= 0)
            {
                doubleMetrics = DoubleMetrics;
            }
            else
            {
                DoubleMetrics = doubleMetrics;
            }

            if (doubleMetrics != null)
            {
                for (var i = 0; i < doubleMetrics.Count; i++)
                {
                    var metric = doubleMetrics[i];
                    var labels = metric.Labels;

                    switch (metric.AggregationType)
                    {
                    case AggregationType.DoubleSum:
                    {
                        var doubleSum = metric.Data as SumData <double>;

                        var doubleValue = doubleSum.Sum;

                        measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.COUNT, doubleValue, labels));

                        AddLabelsToTags(availTags, metric.MetricName, labels);

                        break;
                    }

                    case AggregationType.Summary:
                    {
                        var doubleSummary = metric.Data as SummaryData <double>;

                        var value = doubleSummary.Count > 0 ? doubleSummary.Sum / doubleSummary.Count : 0;
                        measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.VALUE, value, labels));

                        // If labels contain time, Total time
                        if (labels.Any(l => l.Key.Equals("TimeUnit", StringComparison.OrdinalIgnoreCase)))
                        {
                            measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.TOTAL_TIME, doubleSummary.Sum, labels));
                        }
                        else
                        {
                            measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.TOTAL, doubleSummary.Sum, labels));
                        }

                        AddLabelsToTags(availTags, metric.MetricName, labels);

                        break;
                    }

                    default:
                        _logger.LogDebug($"Handle Agg Type {metric.AggregationType} in doubleMetrics");
                        break;
                    }
                }
            }

            var longMetrics = _exporter.GetAndClearLongMetrics();

            if (longMetrics == null || longMetrics.Count <= 0)
            {
                longMetrics = LongMetrics;
            }
            else
            {
                LongMetrics = longMetrics;
            }

            if (longMetrics != null)
            {
                foreach (var metric in longMetrics)
                {
                    var labels = metric.Labels;
                    switch (metric.AggregationType)
                    {
                    case AggregationType.LongSum:
                    {
                        var longSum   = metric.Data as SumData <long>;
                        var longValue = longSum.Sum;

                        measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.COUNT, longValue, labels));
                        AddLabelsToTags(availTags, metric.MetricName, labels);

                        break;
                    }

                    case AggregationType.Summary:
                    {
                        var longSummary = metric.Data as SummaryData <long>;

                        var value = longSummary.Count > 0 ? longSummary.Sum / longSummary.Count : 0;
                        measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.VALUE, value, labels));

                        // If labels contain time, Total time
                        if (labels.Any(l => l.Key.Equals("TimeUnit", StringComparison.OrdinalIgnoreCase)))
                        {
                            measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.TOTAL_TIME, longSummary.Sum, labels));
                        }
                        else
                        {
                            measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.TOTAL, longSummary.Sum, labels));
                        }

                        AddLabelsToTags(availTags, metric.MetricName, labels);

                        break;
                    }

                    default:
                        _logger.LogDebug($"Handle Agg Type {metric.AggregationType} in longMetrics");
                        break;
                    }
                }
            }
        }
Exemplo n.º 5
0
        private void GetMetricsCollection(out MetricDictionary <List <MetricSample> > measurements, out MetricDictionary <List <MetricTag> > availTags)
        {
            measurements = new MetricDictionary <List <MetricSample> >();
            availTags    = new MetricDictionary <List <MetricTag> >();

            var doubleMetrics = _exporter.GetAndClearDoubleMetrics();

            for (int i = 0; i < doubleMetrics.Count; i++)
            {
                var metric = doubleMetrics[i];
                var labels = metric.Labels;
                switch (metric.AggregationType)
                {
                case AggregationType.DoubleSum:
                {
                    var doubleSum   = metric.Data as SumData <double>;
                    var doubleValue = doubleSum.Sum;

                    measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.COUNT, doubleValue));

                    AddLabelsToTags(availTags, metric.MetricName, labels);

                    break;
                }

                case AggregationType.Summary:
                {
                    var doubleSummary = metric.Data as SummaryData <double>;

                    measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.COUNT, doubleSummary.Count));
                    measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.TOTAL, doubleSummary.Sum));

                    AddLabelsToTags(availTags, metric.MetricName, labels);

                    break;
                }
                }
            }

            foreach (var metric in _exporter.GetAndClearLongMetrics())
            {
                var labels = metric.Labels;
                switch (metric.AggregationType)
                {
                case AggregationType.DoubleSum:
                {
                    var longSum     = metric.Data as SumData <long>;
                    var doubleValue = longSum.Sum;

                    measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.COUNT, doubleValue));
                    AddLabelsToTags(availTags, metric.MetricName, labels);

                    break;
                }

                case AggregationType.Summary:
                {
                    var doubleSummary = metric.Data as SummaryData <long>;

                    measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.COUNT, doubleSummary.Count));
                    measurements[metric.MetricName].Add(new MetricSample(MetricStatistic.TOTAL, doubleSummary.Sum));
                    AddLabelsToTags(availTags, metric.MetricName, labels);

                    break;
                }
                }
            }
        }