~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to start-loggerhead.py

  • Committer: Robey Pointer
  • Date: 2007-01-14 23:46:10 UTC
  • Revision ID: robey@lag.net-20070114234610-z3cn5j8eky0vqsg3
add a decorator to strip the whitespace from the generated html in the big
pages.  (kid theoretically can do this on its own, but it's not hooked up
from turbogears, and even if it was, it doesn't seem to work on html.)
removing whitespace appears to trim a good 20-30% from the generated pages,
so may help a lot for slow links.  in combination with the trimmed-down
javascript names, some of the worst offenders (revisions with gigantic
diffs) are now nearly half the size they were a few days ago.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/Library/Frameworks/Python.framework/Versions/2.4/Resources/Python.app/Contents/MacOS/Python
 
1
#!/usr/bin/env python2.4
 
2
 
2
3
import pkg_resources
3
4
pkg_resources.require("TurboGears")
4
5
 
 
6
import logging
 
7
import os
 
8
 
5
9
import turbogears
6
10
import cherrypy
7
11
cherrypy.lowercase_api = True
8
12
 
9
 
from os.path import *
10
13
import sys
11
14
 
12
 
# first look on the command line for a desired config file,
13
 
# if it's not on the command line, then
14
 
# look for setup.py in this directory. If it's not there, this script is
15
 
# probably installed
 
15
 
 
16
def setup_logging(home, foreground):
 
17
    # i hate that stupid logging config format, so just set up logging here.
 
18
 
 
19
    log_folder = os.path.join(home, 'logs')
 
20
    if not os.path.exists(log_folder):
 
21
        os.mkdir(log_folder)
 
22
    
 
23
    f = logging.Formatter('%(levelname)-.3s [%(asctime)s.%(msecs)03d] %(name)s: %(message)s',
 
24
                          '%Y%m%d-%H:%M:%S')
 
25
    debug_log = logging.FileHandler(os.path.join(log_folder, 'debug.log'))
 
26
    debug_log.setLevel(logging.DEBUG)
 
27
    debug_log.setFormatter(f)
 
28
    if foreground:
 
29
        stdout_log = logging.StreamHandler(sys.stdout)
 
30
        stdout_log.setLevel(logging.DEBUG)
 
31
        stdout_log.setFormatter(f)
 
32
    f = logging.Formatter('[%(asctime)s.%(msecs)03d] %(message)s',
 
33
                          '%Y%m%d-%H:%M:%S')
 
34
    access_log = logging.FileHandler(os.path.join(log_folder, 'access.log'))
 
35
    access_log.setLevel(logging.INFO)
 
36
    access_log.setFormatter(f)
 
37
    
 
38
    logging.getLogger('').addHandler(debug_log)
 
39
    logging.getLogger('turbogears.access').addHandler(access_log)
 
40
    logging.getLogger('turbogears.controllers').setLevel(logging.INFO)
 
41
    
 
42
    if foreground:
 
43
        logging.getLogger('').addHandler(stdout_log)
 
44
    
 
45
 
 
46
 
 
47
foreground = False
16
48
if len(sys.argv) > 1:
17
 
    turbogears.update_config(configfile=sys.argv[1], 
18
 
        modulename="loggerhead.config")
19
 
elif exists(join(dirname(__file__), "setup.py")):
20
 
    turbogears.update_config(configfile="dev.cfg",
21
 
        modulename="loggerhead.config")
22
 
else:
23
 
    turbogears.update_config(configfile="prod.cfg",
24
 
        modulename="loggerhead.config")
25
 
 
26
 
# robey FIXME
27
 
sys.path.insert(0, '/Users/robey/code/bzr/bzr.dev')
 
49
    if sys.argv[1] == '-f':
 
50
        foreground = True
 
51
 
 
52
home = os.path.realpath(os.path.dirname(__file__))
 
53
pidfile = os.path.join(home, 'loggerhead.pid')
 
54
 
 
55
# read loggerhead config
 
56
 
 
57
from configobj import ConfigObj
 
58
config = sys._loggerhead_config = ConfigObj(os.path.join(home, 'loggerhead.conf'), encoding='utf-8')
 
59
extra_path = config.get('bzrpath', None)
 
60
if extra_path:
 
61
    sys.path.insert(0, extra_path)
 
62
 
 
63
turbogears.update_config(configfile="dev.cfg", modulename="loggerhead.config")
 
64
 
 
65
potential_overrides = [ ('server.socket_port', int), ('server.webpath', str), ('server.thread_pool', int) ]
 
66
for key, keytype in potential_overrides:
 
67
    value = config.get(key, None)
 
68
    if value is not None:
 
69
        value = keytype(value)
 
70
        turbogears.config.update({ key: value })
 
71
 
 
72
 
 
73
if not foreground:
 
74
    sys.stderr.write('\n')
 
75
    sys.stderr.write('Launching loggerhead into the background.\n')
 
76
    sys.stderr.write('PID file: %s\n' % (pidfile,))
 
77
    sys.stderr.write('\n')
 
78
 
 
79
    from loggerhead.daemon import daemonize
 
80
    daemonize(pidfile, home)
 
81
 
 
82
setup_logging(home, foreground=foreground)
 
83
    
 
84
log = logging.getLogger('loggerhead')
 
85
log.info('Starting up...')
28
86
 
29
87
from loggerhead.controllers import Root
30
88
 
31
 
turbogears.start_server(Root())
 
89
# re-index every 6 hours
 
90
index_freq = 6 * 3600
 
91
turbogears.scheduler.add_interval_task(initialdelay=1, interval=index_freq, action=Root._check_rebuild)
 
92
 
 
93
try:
 
94
    turbogears.start_server(Root)
 
95
finally:
 
96
    log.info('Shutdown.')
 
97
    try:
 
98
        os.remove(pidfile)
 
99
    except OSError:
 
100
        pass
 
101
 
 
102