class BaseApp(object): def __init__(self, config=None, debug=False, main_loop=None, configure=True): self.config = config self.main_loop = main_loop self.storage = None self.project_keys = {} self.processed_items = 0 self.ignored_items = 0 self.last_requests = [] self.average_request_time = None self.percentile_request_time = None self.cache = None self.project_loader = ProjectLoader(self.config) if configure: self.configure(debug=debug) def configure(self, debug=False): if debug: self.config.NUMBER_OF_FORKS = 1 self.project_loader.log_info() cache_class = get_class(self.config.CACHE_IMPLEMENTATION_CLASS) self.cache = cache_class(self) storage_class = get_class(self.config.STORAGE) self.storage = storage_class(self) projects_update_task = ProjectsUpdateTask(self, self.main_loop) projects_update_task.update() projects_update_task.start() send_to_sentry_task = SendToSentryTask(self, self.main_loop) send_to_sentry_task.update() send_to_sentry_task.start() AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient") def get_handlers(self): return [ url(r'/api/(?P<project_id>\d+)/store/', RouterHandler, name="router"), # Deprecated url(r'/api/store/', OldRouterHandler, name="router_post"), #/Deprecated url(r'/count', CountHandler, name="count"), url(r'/healthcheck(?:/|\.html)?', HealthCheckHandler, name="healthcheck"), ] def load_project_keys(self): self.project_keys = self.project_loader.get_project_keys() return self.project_keys