Monitor various sizes for queues

see #304
This commit is contained in:
Matt Jibson 2015-09-14 15:57:08 -04:00
parent 927084106d
commit 39dc4c7d8d
2 changed files with 17 additions and 7 deletions

7
app.py
View file

@ -142,11 +142,12 @@ dex_login = DexOAuthConfig(app.config, 'DEX_LOGIN_CONFIG')
oauth_apps = [github_login, github_trigger, gitlab_trigger, google_login, dex_login] oauth_apps = [github_login, github_trigger, gitlab_trigger, google_login, dex_login]
image_diff_queue = WorkQueue(app.config['DIFFS_QUEUE_NAME'], tf) image_diff_queue = WorkQueue(app.config['DIFFS_QUEUE_NAME'], tf, metric_queue=metric_queue)
image_replication_queue = WorkQueue(app.config['REPLICATION_QUEUE_NAME'], tf) image_replication_queue = WorkQueue(app.config['REPLICATION_QUEUE_NAME'], tf, metric_queue=metric_queue)
dockerfile_build_queue = WorkQueue(app.config['DOCKERFILE_BUILD_QUEUE_NAME'], tf, dockerfile_build_queue = WorkQueue(app.config['DOCKERFILE_BUILD_QUEUE_NAME'], tf,
metric_queue=metric_queue,
reporter=MetricQueueReporter(metric_queue)) reporter=MetricQueueReporter(metric_queue))
notification_queue = WorkQueue(app.config['NOTIFICATION_QUEUE_NAME'], tf) notification_queue = WorkQueue(app.config['NOTIFICATION_QUEUE_NAME'], tf, metric_queue=metric_queue)
database.configure(app.config) database.configure(app.config)
model.config.app_config = app.config model.config.app_config = app.config

View file

@ -26,9 +26,10 @@ class MetricQueueReporter(object):
class WorkQueue(object): class WorkQueue(object):
def __init__(self, queue_name, transaction_factory, def __init__(self, queue_name, transaction_factory,
canonical_name_match_list=None, reporter=None): canonical_name_match_list=None, reporter=None, metric_queue=None):
self._queue_name = queue_name self._queue_name = queue_name
self._reporter = reporter self._reporter = reporter
self._metric_queue = metric_queue
self._transaction_factory = transaction_factory self._transaction_factory = transaction_factory
self._currently_processing = False self._currently_processing = False
@ -86,12 +87,20 @@ class WorkQueue(object):
return (running_count, available_not_running_count, available_count) return (running_count, available_not_running_count, available_count)
def update_metrics(self): def update_metrics(self):
if self._reporter is None: if self._reporter is None and self._metric_queue is None:
return return
(running_count, available_not_running_count, available_count) = self.get_metrics() (running_count, available_not_running_count, available_count) = self.get_metrics()
self._reporter(self._currently_processing, running_count,
running_count + available_not_running_count) if self._metric_queue:
dim = {'queue': self._queue_name}
self._metric_queue.put('Running', running_count, dimensions=dim)
self._metric_queue.put('AvailableNotRunning', available_not_running_count, dimensions=dim)
self._metric_queue.put('Available', available_count, dimensions=dim)
if self._reporter:
self._reporter(self._currently_processing, running_count,
running_count + available_not_running_count)
def has_retries_remaining(self, item_id): def has_retries_remaining(self, item_id):
""" Returns whether the queue item with the given id has any retries remaining. If the """ Returns whether the queue item with the given id has any retries remaining. If the