~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:
5
5
 
6
6
import logging
7
7
import os
8
 
import sys
9
 
from optparse import OptionParser
10
8
 
11
9
import turbogears
12
10
import cherrypy
13
11
cherrypy.lowercase_api = True
14
12
 
15
 
from loggerhead import daemon, release, util
16
 
 
17
 
 
18
 
def make_handler(config, filename):
19
 
    roll = config.get('log.roll', 'never')
20
 
    if roll == 'daily':
21
 
        h = logging.handlers.TimedRotatingFileHandler(filename, 'midnight', 0, 100)
22
 
    elif roll == 'weekly':
23
 
        h = logging.handlers.TimedRotatingFileHandler(filename, 'W0', 0, 100)
24
 
    else:
25
 
        h = logging.FileHandler(filename)
26
 
    return h
27
 
 
28
 
        
29
 
def setup_logging(home, config, foreground):
 
13
import sys
 
14
 
 
15
 
 
16
def setup_logging(home, foreground):
30
17
    # i hate that stupid logging config format, so just set up logging here.
31
18
 
32
19
    log_folder = os.path.join(home, 'logs')
35
22
    
36
23
    f = logging.Formatter('%(levelname)-.3s [%(asctime)s.%(msecs)03d] %(name)s: %(message)s',
37
24
                          '%Y%m%d-%H:%M:%S')
38
 
    debug_log = make_handler(config, os.path.join(log_folder, 'debug.log'))
 
25
    debug_log = logging.FileHandler(os.path.join(log_folder, 'debug.log'))
39
26
    debug_log.setLevel(logging.DEBUG)
40
27
    debug_log.setFormatter(f)
41
28
    if foreground:
44
31
        stdout_log.setFormatter(f)
45
32
    f = logging.Formatter('[%(asctime)s.%(msecs)03d] %(message)s',
46
33
                          '%Y%m%d-%H:%M:%S')
47
 
    access_log = make_handler(config, os.path.join(log_folder, 'access.log'))
 
34
    access_log = logging.FileHandler(os.path.join(log_folder, 'access.log'))
48
35
    access_log.setLevel(logging.INFO)
49
36
    access_log.setFormatter(f)
50
37
    
57
44
    
58
45
 
59
46
 
60
 
def main():
61
 
    parser = OptionParser(usage='usage: %prog [options]', version='%prog ' + release.version)
62
 
    parser.add_option('-f', '--foreground', action='store_true', dest='foreground', default=False,
63
 
                      help="run in the foreground; don't daemonize")
64
 
    parser.add_option('-C', '--check', action='store_true', dest='check', default=False,
65
 
                      help="only start if not already running (useful for cron jobs)")
66
 
    options, args = parser.parse_args()
67
 
    if len(args) > 0:
68
 
        parser.error('No filename arguments are used, only options.')
69
 
        
70
 
        
71
 
    home = os.path.realpath(os.path.dirname(__file__))
72
 
    pidfile = os.path.join(home, 'loggerhead.pid')
73
 
    
74
 
    if options.check:
75
 
        if daemon.is_running(pidfile):
76
 
            sys.exit(0)
77
 
        sys.stderr.write('Did not find loggerhead running in %r; restarting...\n' % (pidfile,))
78
 
    
79
 
    # read loggerhead config
80
 
    
81
 
    from configobj import ConfigObj
82
 
    config = ConfigObj(os.path.join(home, 'loggerhead.conf'), encoding='utf-8')
83
 
    extra_path = config.get('bzrpath', None)
84
 
    if extra_path:
85
 
        sys.path.insert(0, extra_path)
86
 
    
87
 
    turbogears.update_config(configfile="dev.cfg", modulename="loggerhead.config")
88
 
    
89
 
    potential_overrides = [ ('server.socket_port', int), ('server.webpath', str), ('server.thread_pool', int), ('server.socket_host' ,str) ]
90
 
    for key, keytype in potential_overrides:
91
 
        value = config.get(key, None)
92
 
        if value is not None:
93
 
            value = keytype(value)
94
 
            turbogears.config.update({ key: value })
95
 
    
96
 
    if not options.foreground:
97
 
        sys.stderr.write('\n')
98
 
        sys.stderr.write('Launching loggerhead into the background.\n')
99
 
        sys.stderr.write('PID file: %s\n' % (pidfile,))
100
 
        sys.stderr.write('\n')
101
 
    
102
 
        daemon.daemonize(pidfile, home)
103
 
 
104
 
    setup_logging(home, config, foreground=options.foreground)
105
 
        
106
 
    log = logging.getLogger('loggerhead')
107
 
    log.info('Starting up...')
108
 
    
109
 
    from loggerhead.controllers import Root
110
 
    
111
 
    Root = Root(config)
112
 
    
113
 
    # re-index every 6 hours
114
 
    index_freq = config.get('cache_rebuild_frequency', 6 * 3600)
115
 
    turbogears.scheduler.add_interval_task(initialdelay=1, interval=index_freq, action=Root._check_rebuild)
116
 
 
117
 
    util.set_date_format(config.get('date_format', 'fancy'))
 
47
foreground = False
 
48
if len(sys.argv) > 1:
 
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...')
 
86
 
 
87
from loggerhead.controllers import Root
 
88
 
 
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.')
118
97
    try:
119
 
        turbogears.start_server(Root)
120
 
    finally:
121
 
        log.info('Shutdown.')
122
 
        try:
123
 
            os.remove(pidfile)
124
 
        except OSError:
125
 
            pass
126
 
 
127
 
 
128
 
if __name__ == '__main__':
129
 
    main()
 
98
        os.remove(pidfile)
 
99
    except OSError:
 
100
        pass
 
101
 
 
102