~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to start-loggerhead

  • Committer: Matt Nordhoff
  • Date: 2009-09-20 19:08:28 UTC
  • Revision ID: mnordhoff@mattnordhoff.com-20090920190828-qy1ybggfpx4fi3pv
Mark Loggerhead plugin as compatible with up to bzr 2.1.0.

Seems to be necessary.

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
# along with this program; if not, write to the Free Software
14
14
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15
15
 
16
 
"""A script for starting the loggerhead process."""
 
16
"""
 
17
WARNING! This script has been deprecated and will go away soon!
 
18
A script for starting the loggerhead process.
 
19
"""
17
20
 
18
21
 
19
22
import logging
23
26
import sys
24
27
import urlparse
25
28
 
26
 
from configobj import ConfigObj
 
29
from bzrlib.plugin import load_plugins
 
30
from bzrlib.util.configobj.configobj import ConfigObj
27
31
 
28
32
from paste import httpserver
29
33
from paste.httpexceptions import make_middleware
30
34
from paste.translogger import make_filter
31
35
 
32
 
from loggerhead import daemon, release
 
36
from loggerhead import daemon
33
37
from loggerhead.apps.config import Root
34
 
 
35
 
 
36
 
def make_handler(config, filename):
37
 
    roll = config.get('log.roll', 'never')
38
 
    if roll == 'daily':
39
 
        h = logging.handlers.TimedRotatingFileHandler(filename, 'midnight', 0, 100)
40
 
    elif roll == 'weekly':
41
 
        h = logging.handlers.TimedRotatingFileHandler(filename, 'W0', 0, 100)
42
 
    else:
43
 
        h = logging.FileHandler(filename)
44
 
    return h
45
 
 
46
 
 
47
 
def setup_logging(logdir, config, foreground):
48
 
    # i hate that stupid logging config format, so just set up logging here.
49
 
 
50
 
    if not os.path.exists(log_folder):
51
 
        os.mkdir(log_folder)
52
 
 
53
 
    f = logging.Formatter('%(levelname)-.3s [%(asctime)s.%(msecs)03d] %(name)s: %(message)s',
54
 
                          '%Y%m%d-%H:%M:%S')
55
 
    debug_log = make_handler(config, os.path.join(log_folder, 'debug.log'))
56
 
    debug_log.setLevel(logging.DEBUG)
57
 
    debug_log.setFormatter(f)
58
 
    if foreground:
59
 
        stdout_log = logging.StreamHandler(sys.stdout)
60
 
        stdout_log.setLevel(logging.DEBUG)
61
 
        stdout_log.setFormatter(f)
62
 
    f = logging.Formatter('[%(asctime)s.%(msecs)03d] %(message)s',
63
 
                          '%Y%m%d-%H:%M:%S')
64
 
    access_log = make_handler(config, os.path.join(log_folder, 'access.log'))
65
 
    access_log.setLevel(logging.INFO)
66
 
    access_log.setFormatter(f)
67
 
 
68
 
    logging.getLogger('').setLevel(logging.DEBUG)
69
 
    logging.getLogger('').addHandler(debug_log)
70
 
    logging.getLogger('wsgi').addHandler(access_log)
71
 
 
72
 
    if foreground:
73
 
        logging.getLogger('').addHandler(stdout_log)
74
 
 
 
38
from loggerhead.trace import make_handler, setup_logging
 
39
from loggerhead.apps.error import ErrorHandlerApp
75
40
 
76
41
 
77
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
 
78
50
    home = os.path.realpath(os.path.dirname(__file__))
79
51
    default_pidfile = os.path.join(home, 'loggerhead.pid')
80
52
    default_configfile = os.path.join(home, 'loggerhead.conf')
81
53
    default_log_folder = os.path.join(home, 'logs')
82
 
    parser = OptionParser(usage='usage: %prog [options]', version='%prog ' + release.version)
83
 
    parser.add_option('-f', '--foreground', action='store_true', dest='foreground', default=False,
 
54
    parser = OptionParser(usage='usage: %prog [options]', version='%prog')
 
55
    parser.add_option('-f', '--foreground',
 
56
                      action='store_true', dest='foreground', default=False,
84
57
                      help="run in the foreground; don't daemonize")
85
 
    parser.add_option('-C', '--check', action='store_true', dest='check', default=False,
86
 
                      help="only start if not already running (useful for cron jobs)")
87
 
    parser.add_option('-p', '--pidfile', dest="pidfile", default=default_pidfile,
88
 
                      help="override pidfile location")
89
 
    parser.add_option('-c', '--config-file', dest="configfile", default=default_configfile,
90
 
                      help="override configuration file location")
91
 
    parser.add_option('-L', '--log-folder', dest="log-folder", default=default_log_folder,
92
 
                      help="override log file directory")
 
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")
93
71
    options, args = parser.parse_args()
94
72
    if len(args) > 0:
95
73
        parser.error('No filename arguments are used, only options.')
97
75
    if options.check:
98
76
        if daemon.is_running(options.pidfile):
99
77
            sys.exit(0)
100
 
        sys.stderr.write('Did not find loggerhead running in %r; restarting...\n' % (options.pidfile,))
 
78
        sys.stderr.write('Did not find loggerhead running in %r;' % (
 
79
                         options.pidfile))
 
80
        sys.stderr.write(' restarting...\n')
101
81
 
102
82
    # read loggerhead config
103
83
 
106
86
    if extra_path:
107
87
        sys.path.insert(0, extra_path)
108
88
 
109
 
    potential_overrides = [ ('server.socket_port', int),
110
 
                            ('server.webpath', str),
111
 
                            ('server.thread_pool', int),
112
 
                            ('server.socket_host' ,str) ]
 
89
    potential_overrides = [('server.socket_port', int),
 
90
                           ('server.webpath', str),
 
91
                           ('server.thread_pool', int),
 
92
                           ('server.socket_host', str)]
113
93
    server_port = int(config.get('server.socket_port', 8080))
114
94
    nworkers = int(config.get('server.thread_pool', 10))
115
95
    server_host = config.get('server.socket_host', '0.0.0.0')
123
103
    if not options.foreground:
124
104
        sys.stderr.write('\n')
125
105
        sys.stderr.write('Launching loggerhead into the background.\n')
126
 
        sys.stderr.write('PID file: %s\n' % (options.pidfile,))
 
106
        sys.stderr.write('PID file: %s\n' % options.pidfile)
127
107
        sys.stderr.write('\n')
128
108
 
129
109
        daemon.daemonize(options.pidfile, home)
137
117
 
138
118
    app = app
139
119
    app = make_middleware(app)
140
 
    app = make_filter(app, None)
 
120
    app = make_filter(app, None, logger_name=log.name+'.access')
 
121
    app = ErrorHandlerApp(app)
141
122
 
142
123
    if webpath:
143
124
        scheme, netloc, path, blah, blah, blah = urlparse.urlparse(webpath)
 
125
 
144
126
        def app(environ, start_response, orig=app):
145
127
            environ['SCRIPT_NAME'] = path
146
128
            environ['HTTP_HOST'] = netloc
 
129
            environ['wsgi.url_scheme'] = scheme
147
130
            return orig(environ, start_response)
148
131
 
 
132
    load_plugins()
 
133
 
149
134
    try:
150
135
        httpserver.serve(
151
136
            app, host=server_host, port=server_port,