~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to start-loggerhead.py

  • Committer: Robey Pointer
  • Date: 2007-01-02 04:34:09 UTC
  • Revision ID: robey@lag.net-20070102043409-5slhxuzq5omtim2f
exponential backoff isn't really working for the lockfile, so keep it down
to 0.1 second pauses while trying to grab the lock.  also, flush the caches
at shutdown, and pause during cache rebuilding to give normal requests a
chance to get the lock.  (with threading.Lock, wakeups were automatic, but
with the file lock, there's a lot of sleeping going on.)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#!/usr/bin/env python2.4
2
 
 
3
2
import pkg_resources
4
3
pkg_resources.require("TurboGears")
5
4
 
6
 
import logging
7
 
import os
8
 
 
9
5
import turbogears
10
6
import cherrypy
11
7
cherrypy.lowercase_api = True
12
8
 
 
9
from os.path import *
13
10
import sys
14
11
 
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
 
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
48
16
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...')
 
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")
85
25
 
86
26
from loggerhead.controllers import Root
87
27
 
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.')
97
 
    try:
98
 
        os.remove(pidfile)
99
 
    except OSError:
100
 
        pass
101
 
 
102
 
 
 
28
turbogears.start_server(Root)