~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to start-loggerhead

  • Committer: Martin Pool
  • Date: 2011-11-23 08:33:12 UTC
  • mto: This revision was merged to the branch mainline in revision 461.
  • Revision ID: mbp@canonical.com-20111123083312-4stzhfv5843jxv2k
Bump version to 1.18.1; compatible with bzr 2.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
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
 
"""
17
 
WARNING! This script has been deprecated and will go away soon!
18
 
A script for starting the loggerhead process.
19
 
"""
20
 
 
21
 
 
22
 
import logging
23
 
import logging.handlers
24
 
from optparse import OptionParser
25
 
import os
26
 
import sys
27
 
import urlparse
28
 
 
29
 
from bzrlib.plugin import load_plugins
30
 
from bzrlib.util.configobj.configobj import ConfigObj
31
 
 
32
 
from paste import httpserver
33
 
from paste.httpexceptions import make_middleware
34
 
from paste.translogger import make_filter
35
 
 
36
 
from loggerhead import daemon
37
 
from loggerhead.apps.config import Root
38
 
from loggerhead.trace import make_handler, setup_logging
39
 
from loggerhead.apps.error import ErrorHandlerApp
40
 
 
41
 
 
42
 
def main():
43
 
    sys.stderr.write('\n\n')
44
 
    sys.stderr.write('WARNING!!! This script has been deprecated by '
45
 
                     'serve-branches, and will be removed in the next '
46
 
                     'release. Please migrate to serve-branches and report '
47
 
                     'any missing features.\n')
48
 
    sys.stderr.write('\n\n')
49
 
 
50
 
    home = os.path.realpath(os.path.dirname(__file__))
51
 
    default_pidfile = os.path.join(home, 'loggerhead.pid')
52
 
    default_configfile = os.path.join(home, 'loggerhead.conf')
53
 
    default_log_folder = os.path.join(home, 'logs')
54
 
    parser = OptionParser(usage='usage: %prog [options]', version='%prog')
55
 
    parser.add_option('-f', '--foreground',
56
 
                      action='store_true', dest='foreground', default=False,
57
 
                      help="run in the foreground; don't daemonize")
58
 
    parser.add_option('-C', '--check', action='store_true',
59
 
                      dest='check', default=False,
60
 
                      help=("only start if not already running (useful for "
61
 
                            "cron jobs)"))
62
 
    parser.add_option('-p', '--pidfile', dest="pidfile",
63
 
                      default=default_pidfile,
64
 
                      type=str, help="override pidfile location")
65
 
    parser.add_option('-c', '--config-file', dest="configfile",
66
 
                      default=default_configfile,
67
 
                      type=str, help="override configuration file location")
68
 
    parser.add_option('-L', '--log-folder', dest="log_folder",
69
 
                      default=default_log_folder,
70
 
                      type=str, help="override log file directory")
71
 
    options, args = parser.parse_args()
72
 
    if len(args) > 0:
73
 
        parser.error('No filename arguments are used, only options.')
74
 
 
75
 
    if options.check:
76
 
        if daemon.is_running(options.pidfile):
77
 
            sys.exit(0)
78
 
        sys.stderr.write('Did not find loggerhead running in %r;' % (
79
 
                         options.pidfile))
80
 
        sys.stderr.write(' restarting...\n')
81
 
 
82
 
    # read loggerhead config
83
 
 
84
 
    config = ConfigObj(options.configfile, encoding='utf-8')
85
 
    extra_path = config.get('bzrpath', None)
86
 
    if extra_path:
87
 
        sys.path.insert(0, extra_path)
88
 
 
89
 
    potential_overrides = [('server.socket_port', int),
90
 
                           ('server.webpath', str),
91
 
                           ('server.thread_pool', int),
92
 
                           ('server.socket_host', str)]
93
 
    server_port = int(config.get('server.socket_port', 8080))
94
 
    nworkers = int(config.get('server.thread_pool', 10))
95
 
    server_host = config.get('server.socket_host', '0.0.0.0')
96
 
    webpath = config.get('server.webpath', None)
97
 
 
98
 
    for key, keytype in potential_overrides:
99
 
        value = config.get(key, None)
100
 
        if value is not None:
101
 
            value = keytype(value)
102
 
 
103
 
    if not options.foreground:
104
 
        sys.stderr.write('\n')
105
 
        sys.stderr.write('Launching loggerhead into the background.\n')
106
 
        sys.stderr.write('PID file: %s\n' % options.pidfile)
107
 
        sys.stderr.write('\n')
108
 
 
109
 
        daemon.daemonize(options.pidfile, home)
110
 
 
111
 
    setup_logging(options.log_folder, config, foreground=options.foreground)
112
 
 
113
 
    log = logging.getLogger('loggerhead')
114
 
    log.info('Starting up...')
115
 
 
116
 
    app = Root(config)
117
 
 
118
 
    app = app
119
 
    app = make_middleware(app)
120
 
    app = make_filter(app, None, logger_name=log.name+'.access')
121
 
    app = ErrorHandlerApp(app)
122
 
 
123
 
    if webpath:
124
 
        scheme, netloc, path, blah, blah, blah = urlparse.urlparse(webpath)
125
 
 
126
 
        def app(environ, start_response, orig=app):
127
 
            environ['SCRIPT_NAME'] = path
128
 
            environ['HTTP_HOST'] = netloc
129
 
            environ['wsgi.url_scheme'] = scheme
130
 
            return orig(environ, start_response)
131
 
 
132
 
    load_plugins()
133
 
 
134
 
    try:
135
 
        httpserver.serve(
136
 
            app, host=server_host, port=server_port,
137
 
            threadpool_workers=nworkers)
138
 
    finally:
139
 
        log.info('Shutdown.')
140
 
        try:
141
 
            os.remove(options.pidfile)
142
 
        except OSError:
143
 
            pass
144
 
 
145
 
 
146
 
if __name__ == '__main__':
147
 
    main()