~loggerhead-team/loggerhead/trunk-rich

128.6.72 by Michael Hudson
use 2.4 by default
1
#!/usr/bin/env python2.4
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
2
1 by Robey Pointer
initial checkin
3
import pkg_resources
4
pkg_resources.require("TurboGears")
5
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
6
import logging
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
7
import os
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
8
import sys
9
from optparse import OptionParser
89 by Robey Pointer
fix up dev.cfg so that nobody will ever have to edit it, by letting the
10
159.2.28 by Michael Hudson
woohoo it works
11
from loggerhead.apps.config import Root
12
from paste import httpserver
13
from paste.httpexceptions import make_middleware
14
from paste.translogger import make_filter
1 by Robey Pointer
initial checkin
15
148.3.4 by Michael Hudson
decruft
16
from loggerhead import daemon, release
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
17
18
19
def make_handler(config, filename):
20
    roll = config.get('log.roll', 'never')
21
    if roll == 'daily':
22
        h = logging.handlers.TimedRotatingFileHandler(filename, 'midnight', 0, 100)
23
    elif roll == 'weekly':
24
        h = logging.handlers.TimedRotatingFileHandler(filename, 'W0', 0, 100)
25
    else:
128.2.4 by Robey Pointer
ok i should've known those API calls wouldn't be consistent.
26
        h = logging.FileHandler(filename)
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
27
    return h
28
159.2.27 by Michael Hudson
begin a compatibility app
29
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
30
def setup_logging(home, config, foreground):
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
31
    # i hate that stupid logging config format, so just set up logging here.
32
33
    log_folder = os.path.join(home, 'logs')
34
    if not os.path.exists(log_folder):
35
        os.mkdir(log_folder)
159.2.27 by Michael Hudson
begin a compatibility app
36
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
37
    f = logging.Formatter('%(levelname)-.3s [%(asctime)s.%(msecs)03d] %(name)s: %(message)s',
38
                          '%Y%m%d-%H:%M:%S')
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
39
    debug_log = make_handler(config, os.path.join(log_folder, 'debug.log'))
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
40
    debug_log.setLevel(logging.DEBUG)
41
    debug_log.setFormatter(f)
42
    if foreground:
43
        stdout_log = logging.StreamHandler(sys.stdout)
44
        stdout_log.setLevel(logging.DEBUG)
45
        stdout_log.setFormatter(f)
46
    f = logging.Formatter('[%(asctime)s.%(msecs)03d] %(message)s',
47
                          '%Y%m%d-%H:%M:%S')
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
48
    access_log = make_handler(config, os.path.join(log_folder, 'access.log'))
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
49
    access_log.setLevel(logging.INFO)
50
    access_log.setFormatter(f)
159.2.27 by Michael Hudson
begin a compatibility app
51
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
52
    logging.getLogger('').addHandler(debug_log)
53
    logging.getLogger('turbogears.access').addHandler(access_log)
54
    logging.getLogger('turbogears.controllers').setLevel(logging.INFO)
159.2.27 by Michael Hudson
begin a compatibility app
55
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
56
    if foreground:
57
        logging.getLogger('').addHandler(stdout_log)
159.2.27 by Michael Hudson
begin a compatibility app
58
93 by Robey Pointer
slight cleanup, and add '-f' option for running in the foreground.
59
60
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
61
def main():
62
    parser = OptionParser(usage='usage: %prog [options]', version='%prog ' + release.version)
63
    parser.add_option('-f', '--foreground', action='store_true', dest='foreground', default=False,
64
                      help="run in the foreground; don't daemonize")
65
    parser.add_option('-C', '--check', action='store_true', dest='check', default=False,
66
                      help="only start if not already running (useful for cron jobs)")
67
    options, args = parser.parse_args()
68
    if len(args) > 0:
69
        parser.error('No filename arguments are used, only options.')
159.2.27 by Michael Hudson
begin a compatibility app
70
71
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
72
    home = os.path.realpath(os.path.dirname(__file__))
73
    pidfile = os.path.join(home, 'loggerhead.pid')
159.2.27 by Michael Hudson
begin a compatibility app
74
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
75
    if options.check:
76
        if daemon.is_running(pidfile):
77
            sys.exit(0)
128.2.5 by Robey Pointer
it's called loggerhead :)
78
        sys.stderr.write('Did not find loggerhead running in %r; restarting...\n' % (pidfile,))
159.2.27 by Michael Hudson
begin a compatibility app
79
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
80
    # read loggerhead config
159.2.27 by Michael Hudson
begin a compatibility app
81
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
82
    from configobj import ConfigObj
83
    config = ConfigObj(os.path.join(home, 'loggerhead.conf'), encoding='utf-8')
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
159.2.28 by Michael Hudson
woohoo it works
88
    #turbogears.update_config(configfile="dev.cfg", modulename="loggerhead.config")
159.2.27 by Michael Hudson
begin a compatibility app
89
159.2.28 by Michael Hudson
woohoo it works
90
    potential_overrides = [ ('server.socket_port', int),
91
                            ('server.webpath', str),
92
                            ('server.thread_pool', int),
93
                            ('server.socket_host' ,str) ]
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
94
    for key, keytype in potential_overrides:
95
        value = config.get(key, None)
96
        if value is not None:
97
            value = keytype(value)
159.2.28 by Michael Hudson
woohoo it works
98
            #turbogears.config.update({ key: value })
99
100
    ## if not options.foreground:
101
    ##     sys.stderr.write('\n')
102
    ##     sys.stderr.write('Launching loggerhead into the background.\n')
103
    ##     sys.stderr.write('PID file: %s\n' % (pidfile,))
104
    ##     sys.stderr.write('\n')
105
106
    ##     daemon.daemonize(pidfile, home)
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
107
108
    setup_logging(home, config, foreground=options.foreground)
159.2.27 by Michael Hudson
begin a compatibility app
109
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
110
    log = logging.getLogger('loggerhead')
111
    log.info('Starting up...')
159.2.27 by Michael Hudson
begin a compatibility app
112
159.2.28 by Michael Hudson
woohoo it works
113
    app = Root(config)
114
115
    app = app
116
    app = make_middleware(app)
117
    app = make_filter(app, None)
118
119
    httpserver.serve(app, host='127.0.0.1', port='9876')
128.2.3 by Robey Pointer
add a '-C' option for ensuring loggerhead is running (from a cron job, for
120
121
122
if __name__ == '__main__':
123
    main()