diff --git a/src/ResourceManagement/Insights/Insights/Customizations/Shoebox/SasMetricRetriever.cs b/src/ResourceManagement/Insights/Insights/Customizations/Shoebox/SasMetricRetriever.cs index 1f3b3ad51123..5b4db5e09042 100644 --- a/src/ResourceManagement/Insights/Insights/Customizations/Shoebox/SasMetricRetriever.cs +++ b/src/ResourceManagement/Insights/Insights/Customizations/Shoebox/SasMetricRetriever.cs @@ -23,18 +23,24 @@ public async Task GetMetricsAsync(string resourceId, string { MetricFilter filter = MetricFilterExpressionParser.Parse(filterString); + // Filter definitions by timegrain + var timegraindefinitions = from d in definitions + where d.MetricAvailabilities.Count > 0 + && d.MetricAvailabilities[0].TimeGrain == filter.TimeGrain + select d; + // Group definitions by location so we can make one request to each location Dictionary groups = - definitions.GroupBy(d => d.MetricAvailabilities.First(a => a.TimeGrain == filter.TimeGrain), - new SasMetricRetriever.AvailabilityComparer()).ToDictionary(g => g.Key, g => new MetricFilter() - { - TimeGrain = filter.TimeGrain, - StartTime = filter.StartTime, - EndTime = filter.EndTime, - DimensionFilters = g.Select(d => - filter.DimensionFilters.FirstOrDefault(df => string.Equals(df.Name, d.Name.Value, StringComparison.OrdinalIgnoreCase)) - ?? new MetricDimension() {Name = d.Name.Value}) - }); + timegraindefinitions.GroupBy(d => d.MetricAvailabilities[0]).ToDictionary(g => g.Key, g => new MetricFilter() + { + TimeGrain = filter.TimeGrain, + StartTime = filter.StartTime, + EndTime = filter.EndTime, + DimensionFilters = g.Select(d => + filter.DimensionFilters.FirstOrDefault(df => string.Equals(df.Name, d.Name.Value, StringComparison.OrdinalIgnoreCase)) + ?? new MetricDimension() {Name = d.Name.Value}) + }); + // Verify all groups represent shoebox metrics if (groups.Any(g => g.Key.Location == null))