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 }))); } }
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))); }
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 }))); } } }
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; } } } }
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; } } } }