Change to only run the cloud watch reporter in the gunicorn_web

This commit is contained in:
Joseph Schorr 2015-01-16 13:44:29 -05:00
parent 99bd16a69c
commit b89ba61286
5 changed files with 17 additions and 9 deletions

9
app.py
View file

@ -17,15 +17,15 @@ from data.userfiles import Userfiles
from data.users import UserAuthentication from data.users import UserAuthentication
from util.analytics import Analytics from util.analytics import Analytics
from util.exceptionlog import Sentry from util.exceptionlog import Sentry
from util.queuemetrics import QueueMetrics
from util.names import urn_generator from util.names import urn_generator
from util.oauth import GoogleOAuthConfig, GithubOAuthConfig from util.oauth import GoogleOAuthConfig, GithubOAuthConfig
from data.billing import Billing from data.billing import Billing
from data.buildlogs import BuildLogs from data.buildlogs import BuildLogs
from data.archivedlogs import LogArchive from data.archivedlogs import LogArchive
from data.queue import WorkQueue
from data.userevent import UserEventsBuilderModule from data.userevent import UserEventsBuilderModule
from avatars.avatars import Avatar from avatars.avatars import Avatar
from util.queuemetrics import QueueMetrics
from data.queue import WorkQueue
class Config(BaseConfig): class Config(BaseConfig):
@ -130,16 +130,17 @@ analytics = Analytics(app)
billing = Billing(app) billing = Billing(app)
sentry = Sentry(app) sentry = Sentry(app)
build_logs = BuildLogs(app) build_logs = BuildLogs(app)
queue_metrics = QueueMetrics(app)
authentication = UserAuthentication(app) authentication = UserAuthentication(app)
userevents = UserEventsBuilderModule(app) userevents = UserEventsBuilderModule(app)
queue_metrics = QueueMetrics(app)
tf = app.config['DB_TRANSACTION_FACTORY']
github_login = GithubOAuthConfig(app, 'GITHUB_LOGIN_CONFIG') github_login = GithubOAuthConfig(app, 'GITHUB_LOGIN_CONFIG')
github_trigger = GithubOAuthConfig(app, 'GITHUB_TRIGGER_CONFIG') github_trigger = GithubOAuthConfig(app, 'GITHUB_TRIGGER_CONFIG')
google_login = GoogleOAuthConfig(app, 'GOOGLE_LOGIN_CONFIG') google_login = GoogleOAuthConfig(app, 'GOOGLE_LOGIN_CONFIG')
oauth_apps = [github_login, github_trigger, google_login] oauth_apps = [github_login, github_trigger, google_login]
tf = app.config['DB_TRANSACTION_FACTORY']
image_diff_queue = WorkQueue(app.config['DIFFS_QUEUE_NAME'], tf) image_diff_queue = WorkQueue(app.config['DIFFS_QUEUE_NAME'], tf)
dockerfile_build_queue = WorkQueue(app.config['DOCKERFILE_BUILD_QUEUE_NAME'], tf, dockerfile_build_queue = WorkQueue(app.config['DOCKERFILE_BUILD_QUEUE_NAME'], tf,
reporter=queue_metrics.report) reporter=queue_metrics.report)

View file

@ -11,7 +11,7 @@ from random import SystemRandom
from data import model from data import model
from data.database import db from data.database import db
from app import app, login_manager, dockerfile_build_queue, notification_queue, oauth_apps from app import app, login_manager, oauth_apps, dockerfile_build_queue
from auth.permissions import QuayDeferredPermissionUser from auth.permissions import QuayDeferredPermissionUser
from auth import scopes from auth import scopes

View file

@ -7,7 +7,6 @@ from endpoints.index import index
from endpoints.tags import tags from endpoints.tags import tags
from endpoints.registry import registry from endpoints.registry import registry
application.register_blueprint(index, url_prefix='/v1') application.register_blueprint(index, url_prefix='/v1')
application.register_blueprint(tags, url_prefix='/v1') application.register_blueprint(tags, url_prefix='/v1')
application.register_blueprint(registry, url_prefix='/v1') application.register_blueprint(registry, url_prefix='/v1')

View file

@ -54,6 +54,7 @@ class SendToCloudWatch(Process):
class QueueMetrics(object): class QueueMetrics(object):
def __init__(self, app=None): def __init__(self, app=None):
self.app = app self.app = app
self.sender = None
if app is not None: if app is not None:
self.state = self.init_app(app) self.state = self.init_app(app)
else: else:
@ -72,8 +73,7 @@ class QueueMetrics(object):
request_queue = Queue() request_queue = Queue()
reporter = QueueingCloudWatchReporter(request_queue, namespace, req_capacity_name, reporter = QueueingCloudWatchReporter(request_queue, namespace, req_capacity_name,
build_percent_name) build_percent_name)
sender = SendToCloudWatch(request_queue, access_key, secret_key) self.sender = SendToCloudWatch(request_queue, access_key, secret_key)
sender.start()
else: else:
reporter = NullReporter() reporter = NullReporter()
@ -82,5 +82,11 @@ class QueueMetrics(object):
app.extensions['queuemetrics'] = reporter app.extensions['queuemetrics'] = reporter
return reporter return reporter
def run(self):
logger.debug('Asked to start CloudWatch reporter')
if self.sender is not None:
logger.debug('Starting CloudWatch reporter')
self.sender.start()
def __getattr__(self, name): def __getattr__(self, name):
return getattr(self.state, name, None) return getattr(self.state, name, None)

4
web.py
View file

@ -1,7 +1,7 @@
import logging import logging
import logging.config import logging.config
from app import app as application from app import app as application, queue_metrics
from endpoints.api import api_bp from endpoints.api import api_bp
from endpoints.web import web from endpoints.web import web
@ -9,6 +9,8 @@ from endpoints.webhooks import webhooks
from endpoints.realtime import realtime from endpoints.realtime import realtime
from endpoints.callbacks import callback from endpoints.callbacks import callback
# Start the cloudwatch reporting.
queue_metrics.run()
application.register_blueprint(web) application.register_blueprint(web)
application.register_blueprint(callback, url_prefix='/oauth2') application.register_blueprint(callback, url_prefix='/oauth2')