~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 05:40:40 UTC
  • Revision ID: robey@lag.net-20070114054040-7i9lbhq992e612rq
fix up dev.cfg so that nobody will ever have to edit it, by letting the
important params be overridable in loggerhead.conf.

make start-loggerhead actually daemonize, write a pid file, and write logs
to normal log files, instead of requiring 'nohup' stuff.  ie act like a real
server.  added stop-loggerhead to do a clean shutdown.  changed the README
to clarify how it should work now.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#!/usr/bin/env python2.4
 
2
 
2
3
import pkg_resources
3
4
pkg_resources.require("TurboGears")
4
5
 
 
6
import os
 
7
 
5
8
import turbogears
6
9
import cherrypy
7
10
cherrypy.lowercase_api = True
8
11
 
9
 
from os.path import *
10
12
import sys
11
13
 
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
16
 
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")
 
14
home = os.path.realpath(os.path.dirname(__file__))
 
15
pidfile = os.path.join(home, 'loggerhead.pid')
 
16
 
 
17
# read loggerhead config
 
18
 
 
19
from configobj import ConfigObj
 
20
config = sys._loggerhead_config = ConfigObj(os.path.join(home, 'loggerhead.conf'), encoding='utf-8')
 
21
extra_path = config.get('bzrpath', None)
 
22
if extra_path:
 
23
    sys.path.insert(0, extra_path)
 
24
 
 
25
turbogears.update_config(configfile="dev.cfg", modulename="loggerhead.config")
 
26
 
 
27
potential_overrides = [ ('server.socket_port', int), ('server.webpath', str), ('server.thread_pool', int) ]
 
28
for key, keytype in potential_overrides:
 
29
    value = config.get(key, None)
 
30
    if value is not None:
 
31
        value = keytype(value)
 
32
        turbogears.config.update({ key: value })
 
33
 
 
34
 
 
35
sys.stderr.write('\n')
 
36
sys.stderr.write('Launching loggerhead into the background.\n')
 
37
sys.stderr.write('PID file: %s\n' % (pidfile,))
 
38
sys.stderr.write('\n')
 
39
 
 
40
from loggerhead.daemon import daemonize
 
41
daemonize(pidfile, home)
 
42
 
 
43
# i hate that stupid logging config format, so just set up logging here.
 
44
import logging
 
45
 
 
46
log_folder = os.path.join(home, 'logs')
 
47
if not os.path.exists(log_folder):
 
48
    os.mkdir(log_folder)
 
49
 
 
50
f = logging.Formatter('%(levelname)-.3s [%(asctime)s.%(msecs)03d] %(name)s: %(message)s',
 
51
                      '%Y%m%d-%H:%M:%S')
 
52
debug_log = logging.FileHandler(os.path.join(log_folder, 'debug.log'))
 
53
debug_log.setLevel(logging.DEBUG)
 
54
debug_log.setFormatter(f)
 
55
f = logging.Formatter('[%(asctime)s.%(msecs)03d] %(message)s',
 
56
                      '%Y%m%d-%H:%M:%S')
 
57
access_log = logging.FileHandler(os.path.join(log_folder, 'access.log'))
 
58
access_log.setLevel(logging.INFO)
 
59
access_log.setFormatter(f)
 
60
 
 
61
logging.getLogger('').addHandler(debug_log)
 
62
logging.getLogger('turbogears.access').addHandler(access_log)
 
63
logging.getLogger('turbogears.controllers').setLevel(logging.INFO)
 
64
 
 
65
log = logging.getLogger('loggerhead')
 
66
log.info('Starting up...')
25
67
 
26
68
from loggerhead.controllers import Root
27
69
 
28
 
turbogears.start_server(Root())
 
70
# re-index every 6 hours
 
71
index_freq = 6 * 3600
 
72
turbogears.scheduler.add_interval_task(initialdelay=1, interval=index_freq, action=Root._check_rebuild)
 
73
 
 
74
try:
 
75
    turbogears.start_server(Root)
 
76
finally:
 
77
    log.info('Shutdown.')
 
78
    os.remove(pidfile)
 
79