Skip to content

Commit e425913

Browse files
authored
fix: add aggregation to batch criteria (#2668)
1 parent f28519c commit e425913

File tree

4 files changed

+56
-1
lines changed

4 files changed

+56
-1
lines changed

changelog/content/experimental/unreleased.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ version:
66

77
#### Scraper
88

9-
None.
9+
- {{% tag fixed %}} Azure Monitor Scraper: batch based on aggregation in addition to existing criteria
1010

1111
#### Resource Discovery
1212

src/Promitor.Core.Scraping/Configuration/Model/AzureMetricConfiguration.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,17 @@ public string ToUniqueStringRepresentation()
6767
}
6868
sb.Append($"_limit{Limit}");
6969

70+
if (Aggregation != null)
71+
{
72+
sb.Append("_agg");
73+
sb.Append(Aggregation.Type.ToString());
74+
75+
if (Aggregation.Interval.HasValue)
76+
{
77+
sb.Append("_interval");
78+
sb.Append(Aggregation.Interval.Value.ToString("c"));
79+
}
80+
}
7081

7182
return sb.ToString();
7283
}

src/Promitor.Tests.Unit/Core/Metrics/ScrapeDefinitionBatchPropertiesTest.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,25 @@ public void BuildBatchHashKeyDifferentResultDifferentSchedule()
166166
Assert.NotEqual(hashCode1, hashCode2);
167167
}
168168

169+
[Fact]
170+
public void BuildBatchHashKeyDifferentResultDifferentAggregation()
171+
{
172+
var azureMetricConfiguration1 = _mapper.Map<AzureMetricConfiguration>(azureMetricConfigurationBase);
173+
azureMetricConfiguration1.Aggregation = new MetricAggregation{Type = PromitorMetricAggregationType.Count};
174+
var azureMetricConfiguration2 = _mapper.Map<AzureMetricConfiguration>(azureMetricConfigurationBase);
175+
azureMetricConfiguration2.Aggregation = new MetricAggregation{Type = PromitorMetricAggregationType.Average};
176+
var logAnalyticsConfiguration = _mapper.Map<LogAnalyticsConfiguration>(logAnalyticsConfigurationBase);
177+
178+
var scraping = _mapper.Map<Promitor.Core.Scraping.Configuration.Model.Scraping>(scrapingBase);
179+
180+
var batchProperties = new ScrapeDefinitionBatchProperties(azureMetricConfiguration: azureMetricConfiguration1, logAnalyticsConfiguration: logAnalyticsConfiguration, prometheusMetricDefinition: prometheusMetricDefinition, resourceType: Promitor.Core.Contracts.ResourceType.StorageAccount, scraping: scraping, subscriptionId: subscriptionId);
181+
var batchProperties2 = new ScrapeDefinitionBatchProperties(azureMetricConfiguration: azureMetricConfiguration2, logAnalyticsConfiguration: logAnalyticsConfiguration, prometheusMetricDefinition: prometheusMetricDefinition, resourceType: Promitor.Core.Contracts.ResourceType.StorageAccount, scraping: scraping, subscriptionId: subscriptionId);
182+
183+
var hashCode1 = batchProperties.GetHashCode();
184+
var hashCode2 = batchProperties2.GetHashCode();
185+
Assert.NotEqual(hashCode1, hashCode2);
186+
}
187+
169188
[Fact]
170189
public void BuildBatchHashKeyTest()
171190
{

src/Promitor.Tests.Unit/Core/Scraping/Batching/AzureResourceDefinitionBatchingTests.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,30 @@ public void BatchConstructionShouldBeAgnosticToResourceGroup()
169169
Assert.Single(groupedScrapeDefinitions);
170170
Assert.Equal(20, groupedScrapeDefinitions[0].ScrapeDefinitions.Count);
171171
}
172+
173+
[Fact]
174+
public void DifferentAggregationShouldBatchSeparately()
175+
{
176+
var azureMetricConfigurationMax = _mapper.Map<AzureMetricConfiguration>(azureMetricConfigurationBase);
177+
azureMetricConfigurationMax.Aggregation.Type = PromitorMetricAggregationType.Maximum;
178+
var azureMetricConfigurationAverage = _mapper.Map<AzureMetricConfiguration>(azureMetricConfigurationBase);
179+
180+
var scraping = _mapper.Map<Promitor.Core.Scraping.Configuration.Model.Scraping>(scrapingBase);
181+
var logAnalyticsConfiguration = _mapper.Map<LogAnalyticsConfiguration>(logAnalyticsConfigurationBase);
182+
var scrapeDefinitions = BuildScrapeDefinitionBatch(
183+
azureMetricConfiguration: azureMetricConfigurationMax, logAnalyticsConfiguration: logAnalyticsConfiguration, prometheusMetricDefinition: prometheusMetricDefinitionTest, scraping: scraping,
184+
resourceType: ResourceType.StorageAccount, subscriptionId: subscriptionIdTest, resourceGroupName: resourceGroupNameTest, 10
185+
);
186+
var differentScrapeDefinitions = BuildScrapeDefinitionBatch(
187+
azureMetricConfiguration: azureMetricConfigurationAverage, logAnalyticsConfiguration: logAnalyticsConfiguration, prometheusMetricDefinition: prometheusMetricDefinitionTest, scraping: scraping,
188+
resourceType: ResourceType.StorageAccount, subscriptionId: subscriptionIdTest, resourceGroupName: resourceGroupNameTest, 10
189+
);
190+
var groupedScrapeDefinitions = AzureResourceDefinitionBatching.GroupScrapeDefinitions([.. scrapeDefinitions, .. differentScrapeDefinitions], maxBatchSize: batchSize);
191+
// expect two batch of 10 each
192+
Assert.Equal(2, groupedScrapeDefinitions.Count);
193+
Assert.Equal(10, groupedScrapeDefinitions[0].ScrapeDefinitions.Count);
194+
Assert.Equal(10, groupedScrapeDefinitions[1].ScrapeDefinitions.Count);
195+
}
172196

173197
private static List<ScrapeDefinition<IAzureResourceDefinition>> BuildScrapeDefinitionBatch(
174198
AzureMetricConfiguration azureMetricConfiguration,
@@ -191,6 +215,7 @@ private static List<ScrapeDefinition<IAzureResourceDefinition>> BuildScrapeDefin
191215
return batch;
192216
}
193217

218+
194219
private static int CountTotalScrapeDefinitions(List<BatchScrapeDefinition<IAzureResourceDefinition>> groupedScrapeDefinitions)
195220
{
196221
var count = 0;

0 commit comments

Comments
 (0)