~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to serve-branches

  • Committer: Martin Albisetti
  • Date: 2008-08-11 20:09:44 UTC
  • Revision ID: argentina@gmail.com-20080811200944-g1mdlbkc6r33m5rw
Make logs actually rotate. Bug #242806

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
 
22
22
from optparse import OptionParser
23
23
 
24
 
from bzrlib.plugin import load_plugins
25
 
 
26
24
from paste import httpserver
27
 
from paste.httpexceptions import HTTPExceptionHandler, HTTPInternalServerError
 
25
from paste.httpexceptions import HTTPExceptionHandler
28
26
from paste.translogger import TransLogger
29
27
 
30
28
from loggerhead import __version__
31
29
from loggerhead.apps.filesystem import (
32
30
    BranchesFromFileSystemRoot, UserBranchesFromFileSystemRoot)
33
 
from loggerhead.util import Reloader
34
 
from loggerhead.apps.error import ErrorHandlerApp
35
31
 
36
32
 
37
33
def command_line_parser():
39
35
    parser.set_defaults(
40
36
        user_dirs=False,
41
37
        show_version=False,
42
 
        log_folder=None,
43
38
        )
44
39
    parser.add_option("--user-dirs", action="store_true", dest="user_dirs",
45
40
                      help="Serve user directories as ~user.")
46
41
    parser.add_option("--trunk-dir", metavar="DIR",
47
42
                      help="The directory that contains the trunk branches.")
48
 
    parser.add_option("--port", dest="user_port",
49
 
                      help=("Port Loggerhead should listen on "
50
 
                            "(defaults to 8080)."))
51
 
    parser.add_option("--host", dest="user_host",
52
 
                      help="Host Loggerhead should listen on.")
53
 
    parser.add_option('--memory-profile', action='store_true',
54
 
                      dest='memory_profile',
55
 
                      help='Profile the memory usage using heapy.')
56
 
    parser.add_option("--prefix", dest="user_prefix",
57
 
                      help="Specify host prefix.")
58
 
    parser.add_option("--profile", action="store_true", dest="profile",
59
 
                      help="Generate callgrind profile data to "
60
 
                        "%d-stats.callgrind on each request.")
61
 
    parser.add_option("--reload", action="store_true", dest="reload",
62
 
                      help="Restarts the application when changing python"
63
 
                           " files. Only used for development purposes.")
64
 
    parser.add_option('--log-folder', dest="log_folder",
65
 
                      type=str, help="The directory to place log files in.")
66
43
    parser.add_option("--version", action="store_true", dest="show_version",
67
44
                      help="Print the software version and exit")
68
45
    return parser
69
46
 
70
47
 
71
48
def main(args):
 
49
    logging.basicConfig()
 
50
    logging.getLogger().setLevel(logging.DEBUG)
 
51
 
72
52
    parser = command_line_parser()
73
53
    (options, args) = parser.parse_args(sys.argv[1:])
74
54
 
92
72
        print "--trunk-dir is only valid with --user-dirs"
93
73
        sys.exit(1)
94
74
 
95
 
    if options.reload:
96
 
        if Reloader.is_installed():
97
 
            Reloader.install()
98
 
        else:
99
 
            return Reloader.restart_with_reloader()
100
 
 
101
75
    if options.user_dirs:
102
76
        if not options.trunk_dir:
103
77
            print "You didn't specify a directory for the trunk directories."
105
79
        app = UserBranchesFromFileSystemRoot(path, options.trunk_dir)
106
80
    else:
107
81
        app = BranchesFromFileSystemRoot(path)
108
 
 
109
 
    # setup_logging()
110
 
    logging.basicConfig()
111
 
    logging.getLogger('').setLevel(logging.DEBUG)
112
 
    logger = getattr(app, 'log', logging.getLogger('loggerhead'))
113
 
    if options.log_folder:
114
 
        logfile_path = os.path.join(options.log_folder, 'serve-branches.log')
115
 
    else:
116
 
        logfile_path = 'serve-branches.log'
117
 
    logfile = logging.FileHandler(logfile_path, 'a')
118
 
    formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(name)s:'
119
 
                                  ' %(message)s')
120
 
    logfile.setFormatter(formatter)
121
 
    logfile.setLevel(logging.DEBUG)
122
 
    logger.addHandler(logfile)
123
 
 
124
 
    memprofile = logging.getLogger('loggerhead-memprofile')
125
 
    memprofile.setLevel(logging.DEBUG)
126
 
    memprofile.addHandler(logging.FileHandler('loggerhead-memprofile'))
127
 
 
128
 
    # setup_logging() #end
129
 
 
130
 
    app = TransLogger(app, logger=logger)
131
 
    if options.profile:
132
 
        from loggerhead.middleware.profile import LSProfMiddleware
133
 
        app = LSProfMiddleware(app)
134
 
    if options.memory_profile:
135
 
        from loggerhead.middleware.profile import MemoryProfileMiddleware
136
 
        app = MemoryProfileMiddleware(app)
137
 
 
138
 
    if not options.user_prefix:
139
 
        prefix = '/'
140
 
    else:
141
 
        prefix = options.user_prefix
142
 
        if not prefix.startswith('/'):
143
 
            prefix = '/' + prefix
 
82
    app = HTTPExceptionHandler(app)
 
83
    app = TransLogger(app)
144
84
 
145
85
    try:
146
86
        from paste.deploy.config import PrefixMiddleware
147
87
    except ImportError:
148
 
        cant_proxy_correctly_message = (
149
 
            'Unsupported configuration: PasteDeploy not available, but '
150
 
            'loggerhead appears to be behind a proxy.')
151
 
        def check_not_proxied(app):
152
 
            def wrapped(environ, start_response):
153
 
                if 'HTTP_X_FORWARDED_SERVER' in environ:
154
 
                    exc = HTTPInternalServerError()
155
 
                    exc.explanation = cant_proxy_correctly_message
156
 
                    raise exc
157
 
                return app(environ, start_response)
158
 
            return wrapped
159
 
        app = check_not_proxied(app)
160
 
    else:
161
 
        app = PrefixMiddleware(app, prefix=prefix)
162
 
 
163
 
    app = HTTPExceptionHandler(app)
164
 
    app = ErrorHandlerApp(app)
165
 
 
166
 
    if not options.user_port:
167
 
        port = '8080'
168
 
    else:
169
 
        port = options.user_port
170
 
 
171
 
    if not options.user_host:
172
 
        host = '0.0.0.0'
173
 
    else:
174
 
        host = options.user_host
175
 
 
176
 
    load_plugins()
177
 
 
178
 
    httpserver.serve(app, host=host, port=port)
 
88
        pass
 
89
    else:
 
90
        app = PrefixMiddleware(app)
 
91
 
 
92
    httpserver.serve(app, host='0.0.0.0', port='8080')
179
93
 
180
94
 
181
95
if __name__ == "__main__":