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

Unified Diff: appengine/swarming/ts_mon_metrics.py

Issue 2121323002: swarming: add active jobs pending times metric (Closed) Base URL: https://github.com/luci/luci-py.git@master
Patch Set: tests Created 4 years, 5 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 | appengine/swarming/ts_mon_metrics_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/swarming/ts_mon_metrics.py
diff --git a/appengine/swarming/ts_mon_metrics.py b/appengine/swarming/ts_mon_metrics.py
index 3d7ed294a79a50e9ef960665f98fb9b65ccf0a84..ad2407c5905cd74e0028c169fd6f01a41aabe9a9 100644
--- a/appengine/swarming/ts_mon_metrics.py
+++ b/appengine/swarming/ts_mon_metrics.py
@@ -46,6 +46,11 @@ jobs_durations = gae_ts_mon.CumulativeDistributionMetric(
description='Cycle times of completed jobs, in seconds.')
+jobs_pending_durations = gae_ts_mon.NonCumulativeDistributionMetric(
+ 'jobs/pending_durations', bucketer=_bucketer,
+ description='Pending times of active jobs, in seconds.')
+
+
# Swarming-specific metric. Metric fields:
# - project_id: e.g. 'chromium'
# - subproject_id: e.g. 'blink'. Set to empty string if not used.
@@ -141,12 +146,14 @@ def update_jobs_completed_metrics(task_result_summary):
@ndb.tasklet
-def _set_jobs_metrics():
+def _set_jobs_metrics(now):
state_map = {task_result.State.RUNNING: 'running',
task_result.State.PENDING: 'pending'}
query_iter = task_result.get_result_summaries_query(
None, None, 'created_ts', 'pending_running', None).iter()
jobs_counts = defaultdict(lambda: 0)
+ jobs_pending_distributions = defaultdict(
+ lambda: gae_ts_mon.Distribution(_bucketer))
while (yield query_iter.has_next_async()):
summary = query_iter.next()
status = state_map.get(summary.state, '')
@@ -157,11 +164,22 @@ def _set_jobs_metrics():
if summary.bot_id and status == 'running':
jobs_running.set(True, target_fields=target_fields, fields=fields)
fields['status'] = status
- jobs_counts[tuple(sorted(fields.iteritems()))] += 1
+
+ key = tuple(sorted(fields.iteritems()))
+
+ jobs_counts[key] += 1
+
+ pending_duration = summary.pending_now(now)
+ if pending_duration is not None:
+ jobs_pending_distributions[key].add(pending_duration.total_seconds())
for key, count in jobs_counts.iteritems():
jobs_active.set(count, target_fields=TARGET_FIELDS, fields=dict(key))
+ for key, distribution in jobs_pending_distributions.iteritems():
+ jobs_pending_durations.set(
+ distribution, target_fields=TARGET_FIELDS, fields=dict(key))
+
@ndb.tasklet
def _set_executors_metrics(now):
@@ -187,7 +205,7 @@ def _set_executors_metrics(now):
@ndb.tasklet
def _set_global_metrics_async(now):
- yield _set_executors_metrics(now), _set_jobs_metrics()
+ yield _set_executors_metrics(now), _set_jobs_metrics(now)
def _set_global_metrics(now=None):
« no previous file with comments | « no previous file | appengine/swarming/ts_mon_metrics_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698