diff --git a/app.py b/app.py index 9ddc3d587..d87c4e89a 100644 --- a/app.py +++ b/app.py @@ -20,7 +20,7 @@ from data.billing import Billing from data.buildlogs import BuildLogs from data.archivedlogs import LogArchive from data.userevent import UserEventsBuilderModule -from data.queue import WorkQueue +from data.queue import WorkQueue, MetricQueueReporter from util.saas.analytics import Analytics from util.saas.exceptionlog import Sentry from util.names import urn_generator @@ -137,7 +137,7 @@ oauth_apps = [github_login, github_trigger, gitlab_trigger, google_login] image_diff_queue = WorkQueue(app.config['DIFFS_QUEUE_NAME'], tf) dockerfile_build_queue = WorkQueue(app.config['DOCKERFILE_BUILD_QUEUE_NAME'], tf, - metric_queue=metric_queue) + reporter=MetricQueueReporter(metric_queue)) notification_queue = WorkQueue(app.config['NOTIFICATION_QUEUE_NAME'], tf) database.configure(app.config) diff --git a/data/queue.py b/data/queue.py index 26cbce8ad..289b99ada 100644 --- a/data/queue.py +++ b/data/queue.py @@ -13,11 +13,22 @@ class NoopWith: def __exit__(self, type, value, traceback): pass +class MetricQueueReporter(object): + def __init__(self, metric_queue): + self._metric_queue = metric_queue + + def __call__(self, currently_processing, running_count, total_count): + need_capacity_count = total_count - running_count + self._metric_queue.put('BuildCapacityShortage', need_capacity_count, unit='Count') + + building_percent = 100 if currently_processing else 0 + self._metric_queue.put('PercentBuilding', building_percent, unit='Percent') + class WorkQueue(object): def __init__(self, queue_name, transaction_factory, - canonical_name_match_list=None, metric_queue=None): + canonical_name_match_list=None, reporter=None): self._queue_name = queue_name - self._metric_queue = metric_queue + self._reporter = reporter self._transaction_factory = transaction_factory self._currently_processing = False @@ -75,14 +86,12 @@ class WorkQueue(object): return (running_count, available_not_running_count, available_count) def update_metrics(self): - if self._metric_queue is None: + if self._reporter is None: return (running_count, available_not_running_count, available_count) = self.get_metrics() - self._metric_queue.put('BuildCapacityShortage', available_not_running_count, unit='Count') - - building_percent = 100 if self._currently_processing else 0 - self._metric_queue.put('PercentBuilding', building_percent, unit='Percent') + self._reporter(self._currently_processing, running_count, + running_count + available_not_running_count) def has_retries_remaining(self, item_id): """ Returns whether the queue item with the given id has any retries remaining. If the