~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to start-loggerhead.py

  • Committer: Robey Pointer
  • Date: 2007-01-21 00:05:52 UTC
  • Revision ID: robey@lag.net-20070121000552-laswr1ffqh030uge
big checkpoint commit.  added some functions to util for tracking browsing
context (those key=value params to urls) since there are already a few and
now i'm adding some more: 'remember' and 'compare_revid'.

'remember' is a remembered revision_id that gets carried around if you click
on a "compare this revision to another revision" link on the revision page.
afterwards, whenever you're on a revision page, you can click "compare to
revision [x]" and it will switch 'remember' to 'compare_revid' and show the
revision page with a diff as compared to the remembered revision.  this is
to allow arbitrary diffs.  i'm not sure the ui is great, though.

bundle is also hooked up this way, so you can download an arbitrary bundle.

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) ]
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
if not foreground:
 
73
    sys.stderr.write('\n')
 
74
    sys.stderr.write('Launching loggerhead into the background.\n')
 
75
    sys.stderr.write('PID file: %s\n' % (pidfile,))
 
76
    sys.stderr.write('\n')
 
77
 
 
78
    from loggerhead.daemon import daemonize
 
79
    daemonize(pidfile, home)
 
80
 
 
81
setup_logging(home, foreground=foreground)
 
82
    
 
83
log = logging.getLogger('loggerhead')
 
84
log.info('Starting up...')
 
85
 
 
86
from loggerhead.controllers import Root
 
87
 
 
88
# re-index every 6 hours
 
89
 
 
90
index_freq = config.get('cache_rebuild_frequency', 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