blob: e93726753ebad4ed2f748ecaef59a79531dd4a5f [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file or at
# https://developers.google.com/open-source/licenses/bsd
"""Main program for Monorail.
Monorail is an issue tracking tool that is based on the code.google.com
issue tracker, but it has been ported to Google AppEngine and Google Cloud SQL.
"""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import logging
import webapp2
from flask import Flask
from werkzeug.middleware import dispatcher
from components import endpoints_webapp2
import gae_ts_mon
import flaskregisterpages
import registerpages
from framework import sorting, urls
from services import api_svc_v1
from services import service_manager
services = service_manager.set_up_services()
sorting.InitializeArtValues(services)
registry = registerpages.ServletRegistry()
app_routes = registry.Register(services)
app = webapp2.WSGIApplication(
app_routes, config={'services': services})
# TODO(crbug.com/1322775) Migrate away from the shared prodx-mon-chrome-infra
# service account and change to gae_ts_mon.initialize_prod()
gae_ts_mon.initialize_adhoc(app)
flask_regist = flaskregisterpages.ServletRegistry()
app = dispatcher.DispatcherMiddleware(
app, {
urls.EXCESSIVE_ACTIVITY:
flask_regist.RegisterExcesiveActivity(services),
})
endpoints = endpoints_webapp2.api_server(
[api_svc_v1.MonorailApi, api_svc_v1.ClientConfigApi])
# TODO(crbug/monorail/8221): Remove this code during this milestone.
# It only serves as a safe way to begin connecting to redis without risking
# user facing problems.
try:
logging.info('Starting initial redis connection verification.')
from framework import redis_utils
redis_utils.AsyncVerifyRedisConnection()
except: # pylint: disable=bare-except
logging.exception('Exception when instantiating redis connection.')