blob: 5067d64294c3e1a36fb4668e61be6890787063c6 [file] [log] [blame]
# Copyright 2008 the Melange authors.
#
# 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.
"""Main Melange module with profiling support."""
import logging
from google.appengine.ext.webapp import util
from melange.appengine import django_setup
def profile_main_as_html():
"""Main program for profiling. Profiling data added as HTML to the page.
"""
import cProfile
import pstats
import StringIO
prof = cProfile.Profile()
prof = prof.runctx('real_main()', globals(), locals())
stream = StringIO.StringIO()
stats = pstats.Stats(prof, stream=stream)
# stats.strip_dirs() # Don't; too many modules are named __init__.py.
# 'time', 'cumulative' or 'calls'
stats.sort_stats('time')
# Optional arg: how many to print
stats.print_stats()
# The rest is optional.
# stats.print_callees()
# stats.print_callers()
# pylint: disable=print-statement
print '\n<hr>'
print '<h1>Profile data</h1>'
print '<pre>'
print stream.getvalue()[:1000000]
print '</pre>'
def profile_main_as_logs():
"""Main program for profiling. Profiling data logged.
"""
import cProfile
import pstats
import StringIO
prof = cProfile.Profile()
prof = prof.runctx("real_main()", globals(), locals())
stream = StringIO.StringIO()
stats = pstats.Stats(prof, stream=stream)
stats.sort_stats('time') # Or cumulative
stats.print_stats(80) # 80 = how many to print
# The rest is optional.
# stats.print_callees()
# stats.print_callers()
logging.info("Profile data:\n%s", stream.getvalue())
def real_main():
"""Main program without profiling.
"""
django_setup.setup_environment()
django_setup.appengine_django_setup()
import django.core.handlers.wsgi
# Create a Django application for WSGI.
application = django.core.handlers.wsgi.WSGIHandler()
from soc.modules import callback
from soc.modules import core
import settings
callback.registerCore(core.Core())
callback.getCore().registerModuleCallbacks(settings.CALLBACK_MODULE_NAMES)
callback.getCore().initialize()
# Run the WSGI CGI handler with that application.
util.run_wsgi_app(application)
main = real_main
if __name__ == '__main__':
main()