Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Unified Diff: infra/services/mastermon/pollers.py

Issue 1877953002: mastermon: collect step results count (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Refactoring + tests Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | infra/services/mastermon/test/pollers_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: infra/services/mastermon/pollers.py
diff --git a/infra/services/mastermon/pollers.py b/infra/services/mastermon/pollers.py
index bcd8a76cbbfd72d241ae0e6f74f61000d61cac7f..be5f9cc1050f2a684279dd2892624f4772ea140d 100644
--- a/infra/services/mastermon/pollers.py
+++ b/infra/services/mastermon/pollers.py
@@ -161,7 +161,12 @@ class FilePoller(Poller):
it was rotated or deleted.
"""
endpoint = 'FILE'
- field_keys = ('builder', 'slave', 'result', 'project_id', 'subproject_tag')
+ build_field_keys = ('builder', 'slave', 'result',
+ 'project_id', 'subproject_tag')
+ step_field_keys = ('builder', 'slave', 'step_result',
+ 'project_id', 'subproject_tag')
+
+ ### These metrics are sent when a build finishes.
result_count = ts_mon.CounterMetric('buildbot/master/builders/results/count',
description='Number of items consumed from ts_mon.log by mastermon')
# A custom bucketer with 12% resolution in the range of 1..10**5,
@@ -186,6 +191,11 @@ class FilePoller(Poller):
description='Durations (in seconds) that builds spent before their '
'"before_tests" step')
+ ### This metric is sent when a step finishes.
+ step_results_count = ts_mon.CounterMetric(
+ 'buildbot/master/builders/steps/results/count',
+ description='Count of step results, per builder')
+
def poll(self):
LOGGER.info('Collecting results from %s', self._url)
@@ -210,13 +220,24 @@ class FilePoller(Poller):
return True
def handle_response(self, data):
- fields = self.fields({k: data.get(k, 'unknown') for k in self.field_keys})
- self.result_count.increment(fields)
- if 'duration_s' in data:
- self.cycle_times.add(data['duration_s'], fields)
- if 'pending_s' in data:
- self.pending_times.add(data['pending_s'], fields)
- if 'total_s' in data:
- self.total_times.add(data['total_s'], fields)
- if 'pre_test_time_s' in data:
- self.pre_test_times.add(data['pre_test_time_s'], fields)
+ # We handle two cases here: whether the data was generated when a build
+ # finished or when a step finished. We use the content of the json dict to
+ # tell the difference.
+
+ if 'step_result' in data: # generated when a step finishes
+ fields = self.fields({k: data.get(k, 'unknown')
+ for k in self.step_field_keys})
+ self.step_results_count.increment(fields=fields)
+
+ else: # otherwise it's generated after a build finishes
+ fields = self.fields({k: data.get(k, 'unknown')
+ for k in self.build_field_keys})
+ self.result_count.increment(fields)
+ if 'duration_s' in data:
+ self.cycle_times.add(data['duration_s'], fields)
+ if 'pending_s' in data:
+ self.pending_times.add(data['pending_s'], fields)
+ if 'total_s' in data:
+ self.total_times.add(data['total_s'], fields)
+ if 'pre_test_time_s' in data:
+ self.pre_test_times.add(data['pre_test_time_s'], fields)
« no previous file with comments | « no previous file | infra/services/mastermon/test/pollers_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698