Skip to content

Commit 4edf338

Browse files
bvliucopybara-github
authored andcommitted
Correctly handle aggregation for Azure "count" metrics.
PiperOrigin-RevId: 853327424
1 parent ba9f43d commit 4edf338

File tree

2 files changed

+39
-3
lines changed

2 files changed

+39
-3
lines changed

perfkitbenchmarker/providers/azure/azure_flexible_server.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,9 @@ def _CollectProviderMetric(
434434
logging.info(
435435
'Collecting metric %s for instance %s', metric_name, self.instance_id
436436
)
437+
aggregation = 'Average'
438+
if 'count' in metric_name:
439+
aggregation = 'Total'
437440
cmd = [
438441
azure.AZURE_PATH,
439442
'monitor',
@@ -454,7 +457,7 @@ def _CollectProviderMetric(
454457
'--interval',
455458
'pt1m',
456459
'--aggregation',
457-
'Average',
460+
aggregation,
458461
]
459462
try:
460463
stdout, _ = vm_util.IssueRetryableCommand(cmd)
@@ -481,10 +484,11 @@ def _CollectProviderMetric(
481484
return []
482485

483486
points = []
487+
key = aggregation.lower()
484488
for dp in datapoints:
485-
if dp['average'] is None:
489+
if dp[key] is None:
486490
continue
487-
value = dp['average']
491+
value = dp[key]
488492
if metric.conversion_func:
489493
value = metric.conversion_func(value)
490494
points.append((

tests/providers/azure/azure_flexible_server_test.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import mock
99
from perfkitbenchmarker import errors
1010
from perfkitbenchmarker import provider_info
11+
from perfkitbenchmarker import relational_db
1112
from perfkitbenchmarker import sql_engine_utils
1213
from perfkitbenchmarker import vm_util
1314
from perfkitbenchmarker.providers.azure import azure_network
@@ -113,6 +114,37 @@ def testCollectMetrics(self):
113114
self.assertEqual(cpu_max.value, 20.0)
114115
self.assertEqual(cpu_max.unit, '%')
115116

117+
def testCollectMetricsAggregation(self):
118+
mock_issue_cmd = self.enter_context(
119+
mock.patch.object(
120+
vm_util,
121+
'IssueRetryableCommand',
122+
return_value=(json.dumps({'value': []}), ''),
123+
)
124+
)
125+
start_time = datetime.datetime(2025, 11, 26, 10, 0, 0)
126+
end_time = datetime.datetime(2025, 11, 26, 10, 1, 0)
127+
128+
# Test 'Total' aggregation
129+
count_metric = relational_db.MetricSpec(
130+
'some_count', 'some_count', 'count', None
131+
)
132+
self.server._CollectProviderMetric(count_metric, start_time, end_time)
133+
134+
call_args = mock_issue_cmd.call_args[0][0]
135+
self.assertIn('--aggregation', call_args)
136+
self.assertIn('Total', call_args)
137+
138+
# Test 'Average' aggregation
139+
avg_metric = relational_db.MetricSpec(
140+
'some_metric', 'some_metric', 'percent', None
141+
)
142+
self.server._CollectProviderMetric(avg_metric, start_time, end_time)
143+
144+
call_args = mock_issue_cmd.call_args[0][0]
145+
self.assertIn('--aggregation', call_args)
146+
self.assertIn('Average', call_args)
147+
116148

117149
class AzureFlexibleServerCreateTestCase(pkb_common_test_case.PkbCommonTestCase):
118150

0 commit comments

Comments
 (0)