~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
352.6.13 by Martin Albisetti
Add deprecation warning to start-loggerhead
16
"""
17
WARNING! This script has been deprecated and will go away soon!
18
A script for starting the loggerhead process.
19
"""
183.2.1 by John Arbash Meinel
Add Copyright information to most files.
20
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
21
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
22
import logging
166.1.2 by Michael Hudson
more loggerhead.conf compatible vhosting
23
from optparse import OptionParser
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
24
import os
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
25
import sys
166.1.2 by Michael Hudson
more loggerhead.conf compatible vhosting
26
import urlparse
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
27
270.1.1 by Michael Hudson
defer loading of plugins until after we've set up the logging
28
from bzrlib.plugin import load_plugins
255.1.1 by Jelmer Vernooij
Fix import of ConfigObj.
29
from bzrlib.util.configobj.configobj import ConfigObj
159.2.50 by Michael Hudson
reorder imports in start-loggerhead.py
30
159.2.28 by Michael Hudson
woohoo it works
31
from paste import httpserver
32
from paste.httpexceptions import make_middleware
33
from paste.translogger import make_filter
1 by Robey Pointer
initial checkin
34
204 by Martin Albisetti
Clean up unused/inexistant import
35
from loggerhead import daemon
159.2.50 by Michael Hudson
reorder imports in start-loggerhead.py
36
from loggerhead.apps.config import Root
329.1.3 by Matt Nordhoff
Clean up some unused imports and syntax things.
37
from loggerhead.trace import setup_logging
217.1.4 by Guillermo Gonzalez
* new apps module: "error" and ErrorHandlerApp middleware
38
from loggerhead.apps.error import ErrorHandlerApp
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
39
230.1.1 by Steve 'Ashcrow' Milner
Updated to follow pep8.
40
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
41
def main():
352.6.13 by Martin Albisetti
Add deprecation warning to start-loggerhead
42
    sys.stderr.write('\n\n')
43
    sys.stderr.write('WARNING!!! This script has been deprecated by '
44
                     'serve-branches, and will be removed in the next '
45
                     'release. Please migrate to serve-branches and report '
46
                     'any missing features.\n')
47
    sys.stderr.write('\n\n')
48
197.1.4 by Jelmer Vernooij
Add --pidfile argument to start-loggerhead.
49
    home = os.path.realpath(os.path.dirname(__file__))
50
    default_pidfile = os.path.join(home, 'loggerhead.pid')
197.1.5 by Jelmer Vernooij
Add --configfile argument.
51
    default_configfile = os.path.join(home, 'loggerhead.conf')
197.1.6 by Jelmer Vernooij
add --log-folder option.
52
    default_log_folder = os.path.join(home, 'logs')
205 by Martin Albisetti
Further cleaning
53
    parser = OptionParser(usage='usage: %prog [options]', version='%prog')
230.1.1 by Steve 'Ashcrow' Milner
Updated to follow pep8.
54
    parser.add_option('-f', '--foreground',
55
                      action='store_true', dest='foreground', default=False,
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
56
                      help="run in the foreground; don't daemonize")
230.1.1 by Steve 'Ashcrow' Milner
Updated to follow pep8.
57
    parser.add_option('-C', '--check', action='store_true',
58
                      dest='check', default=False,
59
                      help=("only start if not already running (useful for "
60
                            "cron jobs)"))
61
    parser.add_option('-p', '--pidfile', dest="pidfile",
62
                      default=default_pidfile,
197.2.1 by Jelmer Vernooij
Fix syntax.
63
                      type=str, help="override pidfile location")
230.1.1 by Steve 'Ashcrow' Milner
Updated to follow pep8.
64
    parser.add_option('-c', '--config-file', dest="configfile",
65
                      default=default_configfile,
66
                      type=str, help="override configuration file location")
67
    parser.add_option('-L', '--log-folder', dest="log_folder",
68
                      default=default_log_folder,
197.2.1 by Jelmer Vernooij
Fix syntax.
69
                      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
70
    options, args = parser.parse_args()
71
    if len(args) > 0:
72
        parser.error('No filename arguments are used, only options.')
159.2.27 by Michael Hudson
begin a compatibility app
73
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
74
    if options.check:
197.1.4 by Jelmer Vernooij
Add --pidfile argument to start-loggerhead.
75
        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
76
            sys.exit(0)
230.1.1 by Steve 'Ashcrow' Milner
Updated to follow pep8.
77
        sys.stderr.write('Did not find loggerhead running in %r;' % (
78
                         options.pidfile))
79
        sys.stderr.write(' restarting...\n')
159.2.27 by Michael Hudson
begin a compatibility app
80
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
81
    # read loggerhead config
159.2.27 by Michael Hudson
begin a compatibility app
82
197.1.5 by Jelmer Vernooij
Add --configfile argument.
83
    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
84
    extra_path = config.get('bzrpath', None)
85
    if extra_path:
86
        sys.path.insert(0, extra_path)
159.2.27 by Michael Hudson
begin a compatibility app
87
230.1.1 by Steve 'Ashcrow' Milner
Updated to follow pep8.
88
    potential_overrides = [('server.socket_port', int),
89
                           ('server.webpath', str),
90
                           ('server.thread_pool', int),
91
                           ('server.socket_host', str)]
159.2.36 by Michael Hudson
more compatibility
92
    server_port = int(config.get('server.socket_port', 8080))
93
    nworkers = int(config.get('server.thread_pool', 10))
94
    server_host = config.get('server.socket_host', '0.0.0.0')
95
    webpath = config.get('server.webpath', None)
96
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
97
    for key, keytype in potential_overrides:
98
        value = config.get(key, None)
99
        if value is not None:
100
            value = keytype(value)
159.2.28 by Michael Hudson
woohoo it works
101
159.2.29 by Michael Hudson
re-enable daemonization, remove require("TurboGears")
102
    if not options.foreground:
103
        sys.stderr.write('\n')
104
        sys.stderr.write('Launching loggerhead into the background.\n')
329.1.14 by Matt Nordhoff
Always use a tuple in string formatting
105
        sys.stderr.write('PID file: %s\n' % (options.pidfile,))
159.2.29 by Michael Hudson
re-enable daemonization, remove require("TurboGears")
106
        sys.stderr.write('\n')
159.2.28 by Michael Hudson
woohoo it works
107
197.1.4 by Jelmer Vernooij
Add --pidfile argument to start-loggerhead.
108
        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
109
197.1.6 by Jelmer Vernooij
add --log-folder option.
110
    setup_logging(options.log_folder, config, foreground=options.foreground)
159.2.27 by Michael Hudson
begin a compatibility app
111
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
112
    log = logging.getLogger('loggerhead')
113
    log.info('Starting up...')
159.2.27 by Michael Hudson
begin a compatibility app
114
159.2.28 by Michael Hudson
woohoo it works
115
    app = Root(config)
116
117
    app = app
118
    app = make_middleware(app)
217.1.4 by Guillermo Gonzalez
* new apps module: "error" and ErrorHandlerApp middleware
119
    app = make_filter(app, None, logger_name=log.name+'.access')
120
    app = ErrorHandlerApp(app)
159.2.28 by Michael Hudson
woohoo it works
121
159.2.36 by Michael Hudson
more compatibility
122
    if webpath:
166.1.2 by Michael Hudson
more loggerhead.conf compatible vhosting
123
        scheme, netloc, path, blah, blah, blah = urlparse.urlparse(webpath)
230.1.1 by Steve 'Ashcrow' Milner
Updated to follow pep8.
124
166.1.2 by Michael Hudson
more loggerhead.conf compatible vhosting
125
        def app(environ, start_response, orig=app):
126
            environ['SCRIPT_NAME'] = path
127
            environ['HTTP_HOST'] = netloc
266 by Michael Hudson
apply neror's patch to fix bug #260547 ("start-loggerhead script doesn't properly set the wsgi.url_scheme from the server.webpath option")
128
            environ['wsgi.url_scheme'] = scheme
166.1.2 by Michael Hudson
more loggerhead.conf compatible vhosting
129
            return orig(environ, start_response)
159.2.36 by Michael Hudson
more compatibility
130
270.1.1 by Michael Hudson
defer loading of plugins until after we've set up the logging
131
    load_plugins()
132
159.2.45 by Michael Hudson
testing is grate
133
    try:
134
        httpserver.serve(
135
            app, host=server_host, port=server_port,
136
            threadpool_workers=nworkers)
137
    finally:
138
        log.info('Shutdown.')
139
        try:
197.1.4 by Jelmer Vernooij
Add --pidfile argument to start-loggerhead.
140
            os.remove(options.pidfile)
159.2.45 by Michael Hudson
testing is grate
141
        except OSError:
142
            pass
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
143
144
145
if __name__ == '__main__':
146
    main()