From 818ea38dac8741b91da10cbefe3726bd8b22840c Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Fri, 9 Sep 2016 15:36:54 -0400 Subject: [PATCH] Add repo-specific reporting of repository builds --- buildman/jobutil/buildjob.py | 5 +++++ buildman/server.py | 9 +++++---- util/metrics/metricqueue.py | 5 +++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/buildman/jobutil/buildjob.py b/buildman/jobutil/buildjob.py index eecac1000..83b4c42ef 100644 --- a/buildman/jobutil/buildjob.py +++ b/buildman/jobutil/buildjob.py @@ -72,6 +72,11 @@ class BuildJob(object): """ Returns the namespace under which this build is running. """ return self.repo_build.repository.namespace_user.username + @property + def repo_name(self): + """ Returns the name of the repository under which this build is running. """ + return self.repo_build.repository.name + @property def repo_build(self): return self._load_repo_build() diff --git a/buildman/server.py b/buildman/server.py index f94ef3a69..87ceb60f1 100644 --- a/buildman/server.py +++ b/buildman/server.py @@ -17,7 +17,6 @@ from buildman.jobutil.buildstatus import StatusHandler from buildman.jobutil.buildjob import BuildJob, BuildJobLoadException from data import database from app import app, metric_queue -from app import app logger = logging.getLogger(__name__) @@ -153,7 +152,7 @@ class BuilderServer(object): if self._current_status == BuildServerStatus.SHUTDOWN and not self._job_count: self._shutdown_event.set() - report_completion_status(job_status) + _report_completion_status(build_job, job_status) @trollius.coroutine def _work_checker(self): @@ -230,7 +229,10 @@ class BuilderServer(object): # Initialize the work queue checker. yield From(self._work_checker()) -def report_completion_status(status): +def _report_completion_status(build_job, status): + metric_queue.build_counter.Inc(labelvalues=[status]) + metric_queue.repository_build_completed.Inc(labelvalues=[build_job.namespace, build_job.repo_name, + status]) if status == BuildJobResult.COMPLETE: status_name = 'CompleteBuilds' elif status == BuildJobResult.ERROR: @@ -241,4 +243,3 @@ def report_completion_status(status): return metric_queue.put_deprecated(status_name, 1, unit='Count') - metric_queue.build_counter.Inc(labelvalues=[status_name]) diff --git a/util/metrics/metricqueue.py b/util/metrics/metricqueue.py index 522b0d7d1..1bd31a4b8 100644 --- a/util/metrics/metricqueue.py +++ b/util/metrics/metricqueue.py @@ -52,6 +52,11 @@ class MetricQueue(object): self.repository_push = prom.create_counter('repository_push', 'Repository Push Count', labelnames=['namespace', 'repo_name', 'protocol']) + self.repository_build_completed = prom.create_counter('repository_build_completed', + 'Repository Build Complete Count', + labelnames=['namespace', 'repo_name', + 'status']) + # Deprecated: Define an in-memory queue for reporting metrics to CloudWatch or another # provider. self._queue = None