89 lines
2.7 KiB
Python
89 lines
2.7 KiB
Python
import logging
|
|
import logging.config
|
|
import uuid
|
|
|
|
from peewee import Proxy
|
|
|
|
from app import app as application
|
|
from flask import request, Request
|
|
from util.names import urn_generator
|
|
from data.model import db as model_db, read_slave
|
|
|
|
# Turn off debug logging for boto
|
|
logging.getLogger('boto').setLevel(logging.CRITICAL)
|
|
|
|
from endpoints.api import api_bp
|
|
from endpoints.index import index
|
|
from endpoints.web import web
|
|
from endpoints.tags import tags
|
|
from endpoints.registry import registry
|
|
from endpoints.webhooks import webhooks
|
|
from endpoints.realtime import realtime
|
|
from endpoints.callbacks import callback
|
|
|
|
from logentries import LogentriesHandler
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
werkzeug = logging.getLogger('werkzeug')
|
|
werkzeug.setLevel(logging.DEBUG)
|
|
|
|
profile = logging.getLogger('profile')
|
|
profile.setLevel(logging.DEBUG)
|
|
|
|
logentries_key = application.config.get('LOGENTRIES_KEY', None)
|
|
if logentries_key:
|
|
logger.debug('Initializing logentries with key: %s' % logentries_key)
|
|
werkzeug.addHandler(LogentriesHandler(logentries_key))
|
|
profile.addHandler(LogentriesHandler(logentries_key))
|
|
|
|
application.register_blueprint(web)
|
|
application.register_blueprint(callback, url_prefix='/oauth2')
|
|
application.register_blueprint(index, url_prefix='/v1')
|
|
application.register_blueprint(tags, url_prefix='/v1')
|
|
application.register_blueprint(registry, url_prefix='/v1')
|
|
application.register_blueprint(api_bp, url_prefix='/api')
|
|
application.register_blueprint(webhooks, url_prefix='/webhooks')
|
|
application.register_blueprint(realtime, url_prefix='/realtime')
|
|
|
|
class RequestWithId(Request):
|
|
request_gen = staticmethod(urn_generator(['request']))
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super(RequestWithId, self).__init__(*args, **kwargs)
|
|
self.request_id = self.request_gen()
|
|
|
|
@application.before_request
|
|
def _request_start():
|
|
profile.debug('Starting request: %s', request.path)
|
|
|
|
|
|
@application.after_request
|
|
def _request_end(r):
|
|
profile.debug('Ending request: %s', request.path)
|
|
return r
|
|
|
|
class InjectingFilter(logging.Filter):
|
|
def filter(self, record):
|
|
record.msg = '[%s] %s' % (request.request_id, record.msg)
|
|
return True
|
|
|
|
profile.addFilter(InjectingFilter())
|
|
|
|
def close_db(exc):
|
|
db = model_db
|
|
if not db.is_closed():
|
|
logger.debug('Disconnecting from database.')
|
|
db.close()
|
|
|
|
if read_slave.obj is not None and not read_slave.is_closed():
|
|
logger.debug('Disconnecting from read slave.')
|
|
read_slave.close()
|
|
|
|
application.teardown_request(close_db)
|
|
application.request_class = RequestWithId
|
|
|
|
if __name__ == '__main__':
|
|
logging.config.fileConfig('conf/logging.conf', disable_existing_loggers=False)
|
|
application.run(port=5000, debug=True, threaded=True, host='0.0.0.0')
|