blob: b7a9ebc2fb5517e3f4165380324ac65c95ff86f6 [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright 2007 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""Run a server displaying the administrative UI for the application."""
import logging
import google
import webapp2
from google.appengine.tools.devappserver2 import wsgi_server
from google.appengine.tools.devappserver2.admin import admin_request_handler
from google.appengine.tools.devappserver2.admin import blobstore_viewer
from google.appengine.tools.devappserver2.admin import console
from google.appengine.tools.devappserver2.admin import cron_handler
from google.appengine.tools.devappserver2.admin import datastore_indexes_viewer
from google.appengine.tools.devappserver2.admin import datastore_stats_handler
from google.appengine.tools.devappserver2.admin import datastore_viewer
from google.appengine.tools.devappserver2.admin import logs_handler
from google.appengine.tools.devappserver2.admin import mail_request_handler
from google.appengine.tools.devappserver2.admin import memcache_viewer
from google.appengine.tools.devappserver2.admin import modules_handler
from google.appengine.tools.devappserver2.admin import quit_handler
from google.appengine.tools.devappserver2.admin import search_handler
from google.appengine.tools.devappserver2.admin import static_file_handler
from google.appengine.tools.devappserver2.admin import taskqueue_queues_handler
from google.appengine.tools.devappserver2.admin import taskqueue_tasks_handler
from google.appengine.tools.devappserver2.admin import xmpp_request_handler
class AdminApplication(webapp2.WSGIApplication):
"""A WSGI application that serves an administrative UI for the application."""
def __init__(self, dispatch, configuration):
"""Initializer for AdminApplication.
Args:
dispatch: A dispatcher.Dispatcher instance used to route requests and
provide state about running servers.
configuration: An application_configuration.ApplicationConfiguration
instance containing the configuration for the application.
"""
super(AdminApplication, self).__init__(
[('/datastore', datastore_viewer.DatastoreRequestHandler),
('/datastore/edit/(.*)', datastore_viewer.DatastoreEditRequestHandler),
('/datastore/edit', datastore_viewer.DatastoreEditRequestHandler),
('/datastore-indexes',
datastore_indexes_viewer.DatastoreIndexesViewer),
('/datastore-stats', datastore_stats_handler.DatastoreStatsHandler),
('/console', console.ConsoleRequestHandler),
('/console/restart/(.+)', console.ConsoleRequestHandler.restart),
('/memcache', memcache_viewer.MemcacheViewerRequestHandler),
('/blobstore', blobstore_viewer.BlobstoreRequestHandler),
('/blobstore/blob/(.+)', blobstore_viewer.BlobRequestHandler),
('/taskqueue', taskqueue_queues_handler.TaskQueueQueuesHandler),
('/taskqueue/queue/(.+)',
taskqueue_tasks_handler.TaskQueueTasksHandler),
('/cron', cron_handler.CronHandler),
('/xmpp', xmpp_request_handler.XmppRequestHandler),
('/mail', mail_request_handler.MailRequestHandler),
('/quit', quit_handler.QuitHandler),
('/search', search_handler.SearchIndexesListHandler),
('/search/document', search_handler.SearchDocumentHandler),
('/search/index', search_handler.SearchIndexHandler),
('/assets/(.+)', static_file_handler.StaticFileHandler),
('/instances', modules_handler.ModulesHandler),
('/instances/logs', logs_handler.LogsHandler),
webapp2.Route('/',
webapp2.RedirectHandler,
defaults={'_uri': '/instances'})],
debug=True)
self.dispatcher = dispatch
self.configuration = configuration
class AdminServer(wsgi_server.WsgiServer):
"""Serves an administrative UI for the application over HTTP."""
def __init__(self, host, port, dispatch, configuration, xsrf_token_path):
"""Initializer for AdminServer.
Args:
host: A string containing the name of the host that the server should bind
to e.g. "localhost".
port: An int containing the port that the server should bind to e.g. 80.
dispatch: A dispatcher.Dispatcher instance used to route requests and
provide state about running servers.
configuration: An application_configuration.ApplicationConfiguration
instance containing the configuration for the application.
xsrf_token_path: A string containing the path to a file that contains the
XSRF configuration for the admin UI.
"""
self._host = host
self._xsrf_token_path = xsrf_token_path
super(AdminServer, self).__init__((host, port),
AdminApplication(dispatch, configuration))
def start(self):
"""Start the AdminServer."""
admin_request_handler.AdminRequestHandler.init_xsrf(self._xsrf_token_path)
super(AdminServer, self).start()
logging.info('Starting admin server at: http://%s:%d', self._host,
self.port)
def quit(self):
"""Quits the AdminServer."""
super(AdminServer, self).quit()
console.ConsoleRequestHandler.quit()