~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to start-loggerhead

[release-critical=Rinchen][r=thumper] restore three gifs that went
        walkabout in the merging of trunk LH to RF

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
 
"""
17
 
WARNING! This script has been deprecated and will go away soon!
18
 
A script for starting the loggerhead process.
19
 
"""
 
16
"""A script for starting the loggerhead process."""
20
17
 
21
18
 
22
19
import logging
26
23
import sys
27
24
import urlparse
28
25
 
29
 
from bzrlib.plugin import load_plugins
30
 
from bzrlib.util.configobj.configobj import ConfigObj
 
26
from configobj import ConfigObj
31
27
 
32
28
from paste import httpserver
33
29
from paste.httpexceptions import make_middleware
35
31
 
36
32
from loggerhead import daemon
37
33
from loggerhead.apps.config import Root
38
 
from loggerhead.trace import make_handler, setup_logging
39
 
from loggerhead.apps.error import ErrorHandlerApp
 
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', 1, 100)
 
40
    elif roll == 'weekly':
 
41
        h = logging.handlers.TimedRotatingFileHandler(filename, 'W0', 1, 100)
 
42
    else:
 
43
        h = logging.FileHandler(filename)
 
44
    return h
 
45
 
 
46
 
 
47
def setup_logging(log_folder, 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
 
40
75
 
41
76
 
42
77
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
78
    home = os.path.realpath(os.path.dirname(__file__))
51
79
    default_pidfile = os.path.join(home, 'loggerhead.pid')
52
80
    default_configfile = os.path.join(home, 'loggerhead.conf')
53
81
    default_log_folder = os.path.join(home, 'logs')
54
82
    parser = OptionParser(usage='usage: %prog [options]', version='%prog')
55
 
    parser.add_option('-f', '--foreground',
56
 
                      action='store_true', dest='foreground', default=False,
 
83
    parser.add_option('-f', '--foreground', action='store_true', dest='foreground', default=False,
57
84
                      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,
 
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,
64
88
                      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,
 
89
    parser.add_option('-c', '--config-file', dest="configfile", default=default_configfile,
 
90
                                          type=str, help="override configuration file location")
 
91
    parser.add_option('-L', '--log-folder', dest="log_folder", default=default_log_folder,
70
92
                      type=str, help="override log file directory")
71
93
    options, args = parser.parse_args()
72
94
    if len(args) > 0:
75
97
    if options.check:
76
98
        if daemon.is_running(options.pidfile):
77
99
            sys.exit(0)
78
 
        sys.stderr.write('Did not find loggerhead running in %r;' % (
79
 
                         options.pidfile))
80
 
        sys.stderr.write(' restarting...\n')
 
100
        sys.stderr.write('Did not find loggerhead running in %r; restarting...\n' % (options.pidfile,))
81
101
 
82
102
    # read loggerhead config
83
103
 
86
106
    if extra_path:
87
107
        sys.path.insert(0, extra_path)
88
108
 
89
 
    potential_overrides = [('server.socket_port', int),
90
 
                           ('server.webpath', str),
91
 
                           ('server.thread_pool', int),
92
 
                           ('server.socket_host', str)]
 
109
    potential_overrides = [ ('server.socket_port', int),
 
110
                            ('server.webpath', str),
 
111
                            ('server.thread_pool', int),
 
112
                            ('server.socket_host' ,str) ]
93
113
    server_port = int(config.get('server.socket_port', 8080))
94
114
    nworkers = int(config.get('server.thread_pool', 10))
95
115
    server_host = config.get('server.socket_host', '0.0.0.0')
103
123
    if not options.foreground:
104
124
        sys.stderr.write('\n')
105
125
        sys.stderr.write('Launching loggerhead into the background.\n')
106
 
        sys.stderr.write('PID file: %s\n' % options.pidfile)
 
126
        sys.stderr.write('PID file: %s\n' % (options.pidfile,))
107
127
        sys.stderr.write('\n')
108
128
 
109
129
        daemon.daemonize(options.pidfile, home)
117
137
 
118
138
    app = app
119
139
    app = make_middleware(app)
120
 
    app = make_filter(app, None, logger_name=log.name+'.access')
121
 
    app = ErrorHandlerApp(app)
 
140
    app = make_filter(app, None)
122
141
 
123
142
    if webpath:
124
143
        scheme, netloc, path, blah, blah, blah = urlparse.urlparse(webpath)
125
 
 
126
144
        def app(environ, start_response, orig=app):
127
145
            environ['SCRIPT_NAME'] = path
128
146
            environ['HTTP_HOST'] = netloc
129
 
            environ['wsgi.url_scheme'] = scheme
130
147
            return orig(environ, start_response)
131
148
 
132
 
    load_plugins()
133
 
 
134
149
    try:
135
150
        httpserver.serve(
136
151
            app, host=server_host, port=server_port,