Skip to content

Commit

Permalink
split requests in chunks for more then 20 metrics in subscription mode
Browse files Browse the repository at this point in the history
Signed-off-by: Markus Blaschke <[email protected]>
  • Loading branch information
mblaschke committed Jun 14, 2023
1 parent bf5a208 commit 0280fc6
Showing 1 changed file with 42 additions and 33 deletions.
75 changes: 42 additions & 33 deletions metrics/prober.go
Original file line number Diff line number Diff line change
Expand Up @@ -192,44 +192,53 @@ func (p *MetricProber) collectMetricsFromSubscriptions() {
return
}

resultType := armmonitor.MetricResultTypeData
opts := armmonitor.MetricsClientListAtSubscriptionScopeOptions{
Interval: p.settings.Interval,
Timespan: to.StringPtr(p.settings.Timespan),
Metricnames: to.StringPtr(strings.Join(p.settings.Metrics, ",")),
Metricnamespace: to.StringPtr(p.settings.ResourceType),
Top: p.settings.MetricTop,
AutoAdjustTimegrain: to.BoolPtr(true),
ResultType: &resultType,
Filter: to.StringPtr(`Microsoft.ResourceId eq '*'`),
}
// request metrics in 20 metrics chunks (azure metric api limitation)
for i := 0; i < len(p.settings.Metrics); i += AzureMetricApiMaxMetricNumber {
end := i + AzureMetricApiMaxMetricNumber
if end > len(p.settings.Metrics) {
end = len(p.settings.Metrics)
}
metricList := p.settings.Metrics[i:end]

resultType := armmonitor.MetricResultTypeData
opts := armmonitor.MetricsClientListAtSubscriptionScopeOptions{
Interval: p.settings.Interval,
Timespan: to.StringPtr(p.settings.Timespan),
Metricnames: to.StringPtr(strings.Join(metricList, ",")),
Metricnamespace: to.StringPtr(p.settings.ResourceType),
Top: p.settings.MetricTop,
AutoAdjustTimegrain: to.BoolPtr(true),
ResultType: &resultType,
Filter: to.StringPtr(`Microsoft.ResourceId eq '*'`),
}

if len(p.settings.Aggregations) >= 1 {
opts.Aggregation = to.StringPtr(strings.Join(p.settings.Aggregations, ","))
}
if len(p.settings.Aggregations) >= 1 {
opts.Aggregation = to.StringPtr(strings.Join(p.settings.Aggregations, ","))
}

if len(p.settings.MetricFilter) >= 1 {
opts.Filter = to.StringPtr(*opts.Filter + " and " + p.settings.MetricFilter)
}
if len(p.settings.MetricFilter) >= 1 {
opts.Filter = to.StringPtr(*opts.Filter + " and " + p.settings.MetricFilter)
}

if len(p.settings.MetricOrderBy) >= 1 {
opts.Orderby = to.StringPtr(p.settings.MetricOrderBy)
}
if len(p.settings.MetricOrderBy) >= 1 {
opts.Orderby = to.StringPtr(p.settings.MetricOrderBy)
}

response, err := client.ListAtSubscriptionScope(p.ctx, region, &opts)
if err != nil {
// FIXME: find a better way to report errors
p.logger.Error(err)
return
}
response, err := client.ListAtSubscriptionScope(p.ctx, region, &opts)
if err != nil {
// FIXME: find a better way to report errors
p.logger.Error(err)
return
}

result := AzureInsightSubscriptionMetricsResult{
AzureInsightBaseMetricsResult: AzureInsightBaseMetricsResult{
prober: p,
},
subscriptionID: subscriptionId,
Result: &response}
result.SendMetricToChannel(metricsChannel)
result := AzureInsightSubscriptionMetricsResult{
AzureInsightBaseMetricsResult: AzureInsightBaseMetricsResult{
prober: p,
},
subscriptionID: subscriptionId,
Result: &response}
result.SendMetricToChannel(metricsChannel)
}

if p.callbackSubscriptionFishish != nil {
p.callbackSubscriptionFishish(subscriptionId)
Expand Down

0 comments on commit 0280fc6

Please sign in to comment.