~loggerhead-team/loggerhead/trunk-rich

161 by Michael Hudson
don't insist on python 2.4
1
#!/usr/bin/env python
183.2.1 by John Arbash Meinel
Add Copyright information to most files.
2
# This program is free software; you can redistribute it and/or modify
3
# it under the terms of the GNU General Public License as published by
4
# the Free Software Foundation; either version 2 of the License, or
5
# (at your option) any later version.
6
#
7
# This program is distributed in the hope that it will be useful,
8
# but WITHOUT ANY WARRANTY; without even the implied warranty of
9
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
# GNU General Public License for more details.
11
#
12
# You should have received a copy of the GNU General Public License
13
# along with this program; if not, write to the Free Software
14
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15
16
"""A script for starting the loggerhead process."""
17
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
18
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
19
import logging
159.2.46 by Michael Hudson
add explicit import of logging.handlers
20
import logging.handlers
166.1.2 by Michael Hudson
more loggerhead.conf compatible vhosting
21
from optparse import OptionParser
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
22
import os
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
23
import sys
166.1.2 by Michael Hudson
more loggerhead.conf compatible vhosting
24
import urlparse
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
25
159.2.50 by Michael Hudson
reorder imports in start-loggerhead.py
26
from configobj import ConfigObj
27
159.2.28 by Michael Hudson
woohoo it works
28
from paste import httpserver
29
from paste.httpexceptions import make_middleware
30
from paste.translogger import make_filter
1 by Robey Pointer
initial checkin
31
204 by Martin Albisetti
Clean up unused/inexistant import
32
from loggerhead import daemon
159.2.50 by Michael Hudson
reorder imports in start-loggerhead.py
33
from loggerhead.apps.config import Root
217.1.1 by Guillermo Gonzalez
* refactor of logging-related functions (setup_logging and make_handler) into (new) trace module
34
from loggerhead.trace import make_handler, setup_logging
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
35
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
36
def main():
197.1.4 by Jelmer Vernooij
Add --pidfile argument to start-loggerhead.
37
    home = os.path.realpath(os.path.dirname(__file__))
38
    default_pidfile = os.path.join(home, 'loggerhead.pid')
197.1.5 by Jelmer Vernooij
Add --configfile argument.
39
    default_configfile = os.path.join(home, 'loggerhead.conf')
197.1.6 by Jelmer Vernooij
add --log-folder option.
40
    default_log_folder = os.path.join(home, 'logs')
205 by Martin Albisetti
Further cleaning
41
    parser = OptionParser(usage='usage: %prog [options]', version='%prog')
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
42
    parser.add_option('-f', '--foreground', action='store_true', dest='foreground', default=False,
43
                      help="run in the foreground; don't daemonize")
44
    parser.add_option('-C', '--check', action='store_true', dest='check', default=False,
45
                      help="only start if not already running (useful for cron jobs)")
197.1.4 by Jelmer Vernooij
Add --pidfile argument to start-loggerhead.
46
    parser.add_option('-p', '--pidfile', dest="pidfile", default=default_pidfile,
197.2.1 by Jelmer Vernooij
Fix syntax.
47
                      type=str, help="override pidfile location")
197.1.6 by Jelmer Vernooij
add --log-folder option.
48
    parser.add_option('-c', '--config-file', dest="configfile", default=default_configfile,
197.2.1 by Jelmer Vernooij
Fix syntax.
49
					  type=str, help="override configuration file location")
50
    parser.add_option('-L', '--log-folder', dest="log_folder", default=default_log_folder,
51
                      type=str, help="override log file directory")
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
52
    options, args = parser.parse_args()
53
    if len(args) > 0:
54
        parser.error('No filename arguments are used, only options.')
159.2.27 by Michael Hudson
begin a compatibility app
55
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
56
    if options.check:
197.1.4 by Jelmer Vernooij
Add --pidfile argument to start-loggerhead.
57
        if daemon.is_running(options.pidfile):
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
58
            sys.exit(0)
197.1.4 by Jelmer Vernooij
Add --pidfile argument to start-loggerhead.
59
        sys.stderr.write('Did not find loggerhead running in %r; restarting...\n' % (options.pidfile,))
159.2.27 by Michael Hudson
begin a compatibility app
60
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
61
    # read loggerhead config
159.2.27 by Michael Hudson
begin a compatibility app
62
197.1.5 by Jelmer Vernooij
Add --configfile argument.
63
    config = ConfigObj(options.configfile, encoding='utf-8')
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
64
    extra_path = config.get('bzrpath', None)
65
    if extra_path:
66
        sys.path.insert(0, extra_path)
159.2.27 by Michael Hudson
begin a compatibility app
67
159.2.28 by Michael Hudson
woohoo it works
68
    potential_overrides = [ ('server.socket_port', int),
69
                            ('server.webpath', str),
70
                            ('server.thread_pool', int),
71
                            ('server.socket_host' ,str) ]
159.2.36 by Michael Hudson
more compatibility
72
    server_port = int(config.get('server.socket_port', 8080))
73
    nworkers = int(config.get('server.thread_pool', 10))
74
    server_host = config.get('server.socket_host', '0.0.0.0')
75
    webpath = config.get('server.webpath', None)
76
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
77
    for key, keytype in potential_overrides:
78
        value = config.get(key, None)
79
        if value is not None:
80
            value = keytype(value)
159.2.28 by Michael Hudson
woohoo it works
81
159.2.29 by Michael Hudson
re-enable daemonization, remove require("TurboGears")
82
    if not options.foreground:
83
        sys.stderr.write('\n')
84
        sys.stderr.write('Launching loggerhead into the background.\n')
197.1.4 by Jelmer Vernooij
Add --pidfile argument to start-loggerhead.
85
        sys.stderr.write('PID file: %s\n' % (options.pidfile,))
159.2.29 by Michael Hudson
re-enable daemonization, remove require("TurboGears")
86
        sys.stderr.write('\n')
159.2.28 by Michael Hudson
woohoo it works
87
197.1.4 by Jelmer Vernooij
Add --pidfile argument to start-loggerhead.
88
        daemon.daemonize(options.pidfile, home)
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
89
197.1.6 by Jelmer Vernooij
add --log-folder option.
90
    setup_logging(options.log_folder, config, foreground=options.foreground)
159.2.27 by Michael Hudson
begin a compatibility app
91
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
92
    log = logging.getLogger('loggerhead')
93
    log.info('Starting up...')
159.2.27 by Michael Hudson
begin a compatibility app
94
159.2.28 by Michael Hudson
woohoo it works
95
    app = Root(config)
96
97
    app = app
98
    app = make_middleware(app)
99
    app = make_filter(app, None)
100
159.2.36 by Michael Hudson
more compatibility
101
    if webpath:
166.1.2 by Michael Hudson
more loggerhead.conf compatible vhosting
102
        scheme, netloc, path, blah, blah, blah = urlparse.urlparse(webpath)
103
        def app(environ, start_response, orig=app):
104
            environ['SCRIPT_NAME'] = path
105
            environ['HTTP_HOST'] = netloc
106
            return orig(environ, start_response)
159.2.36 by Michael Hudson
more compatibility
107
159.2.45 by Michael Hudson
testing is grate
108
    try:
109
        httpserver.serve(
110
            app, host=server_host, port=server_port,
111
            threadpool_workers=nworkers)
112
    finally:
113
        log.info('Shutdown.')
114
        try:
197.1.4 by Jelmer Vernooij
Add --pidfile argument to start-loggerhead.
115
            os.remove(options.pidfile)
159.2.45 by Michael Hudson
testing is grate
116
        except OSError:
117
            pass
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
118
119
120
if __name__ == '__main__':
121
    main()