~loggerhead-team/loggerhead/trunk-rich

24.1.2 by robey
use python2.4 from the env, not mac-style :)
1
#!/usr/bin/env python2.4
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
2
1 by Robey Pointer
initial checkin
3
import pkg_resources
4
pkg_resources.require("TurboGears")
5
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
6
import logging
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
7
import os
8
1 by Robey Pointer
initial checkin
9
import turbogears
10
import cherrypy
11
cherrypy.lowercase_api = True
12
13
import sys
14
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
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
48
if len(sys.argv) > 1:
49
    if sys.argv[1] == '-f':
50
        foreground = True
51
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
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
128.1.1 by Michael Hudson
summary execution of sys._loggerhead_config.
58
config = ConfigObj(os.path.join(home, 'loggerhead.conf'), encoding='utf-8')
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
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
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
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
    
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
83
log = logging.getLogger('loggerhead')
84
log.info('Starting up...')
1 by Robey Pointer
initial checkin
85
86
from loggerhead.controllers import Root
87
128.1.1 by Michael Hudson
summary execution of sys._loggerhead_config.
88
Root = Root(config)
89
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
90
# re-index every 6 hours
96 by Robey Pointer
make index_freq a config
91
92
index_freq = config.get('cache_rebuild_frequency', 6 * 3600)
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
93
turbogears.scheduler.add_interval_task(initialdelay=1, interval=index_freq, action=Root._check_rebuild)
94
95
try:
96
    turbogears.start_server(Root)
97
finally:
98
    log.info('Shutdown.')
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
99
    try:
100
        os.remove(pidfile)
101
    except OSError:
102
        pass
103
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
104