~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to __init__.py

  • Committer: Robey Pointer
  • Date: 2007-01-14 23:46:10 UTC
  • Revision ID: robey@lag.net-20070114234610-z3cn5j8eky0vqsg3
add a decorator to strip the whitespace from the generated html in the big
pages.  (kid theoretically can do this on its own, but it's not hooked up
from turbogears, and even if it was, it doesn't seem to work on html.)
removing whitespace appears to trim a good 20-30% from the generated pages,
so may help a lot for slow links.  in combination with the trimmed-down
javascript names, some of the worst offenders (revisions with gigantic
diffs) are now nearly half the size they were a few days ago.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2009, 2010, 2011 Canonical Ltd
2
 
#
3
 
# This program is free software; you can redistribute it and/or modify
4
 
# it under the terms of the GNU General Public License as published by
5
 
# the Free Software Foundation; either version 2 of the License, or
6
 
# (at your option) any later version.
7
 
#
8
 
# This program is distributed in the hope that it will be useful,
9
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 
# GNU General Public License for more details.
12
 
#
13
 
# You should have received a copy of the GNU General Public License
14
 
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
 
 
17
 
 
18
 
# This file allows loggerhead to be treated as a plugin for bzr.
19
 
#
20
 
# XXX: Because loggerhead already contains a loggerhead directory, much of the
21
 
# code is going to appear loaded at bzrlib.plugins.loggerhead.loggerhead.
22
 
# This seems like the easiest thing, because bzrlib wants the top-level plugin
23
 
# directory to be the module, but when it's used as a library people expect
24
 
# the source directory to contain a directory called loggerhead.  -- mbp
25
 
# 20090123
26
 
 
27
 
"""Loggerhead web viewer for Bazaar branches.
28
 
 
29
 
This provides a new option "--http" to the "bzr serve" command, that
30
 
starts a web server to browse the contents of a branch.
31
 
"""
32
 
 
33
 
import sys
34
 
 
35
 
from info import (
36
 
    bzr_plugin_version as version_info,
37
 
    bzr_compatible_versions,
38
 
    )
39
 
 
40
 
if __name__ == 'bzrlib.plugins.loggerhead':
41
 
    import bzrlib
42
 
    from bzrlib.api import require_any_api
43
 
    from bzrlib import commands
44
 
 
45
 
    require_any_api(bzrlib, bzr_compatible_versions)
46
 
 
47
 
    from bzrlib.transport import transport_server_registry
48
 
 
49
 
    DEFAULT_HOST = '0.0.0.0'
50
 
    DEFAULT_PORT = 8080
51
 
    HELP = ('Loggerhead, a web-based code viewer and server. (default port: %d)' %
52
 
            (DEFAULT_PORT,))
53
 
 
54
 
    def _ensure_loggerhead_path():
55
 
        """Ensure that you can 'import loggerhead' and get the root."""
56
 
        # loggerhead internal code will try to 'import loggerhead', so
57
 
        # let's put it on the path if we can't find it in the existing path
58
 
        try:
59
 
            import loggerhead.apps.transport
60
 
        except ImportError:
61
 
            import os.path, sys
62
 
            sys.path.append(os.path.dirname(__file__))
63
 
 
64
 
    def serve_http(transport, host=None, port=None, inet=None):
65
 
        # TODO: if we supported inet to pass requests in and respond to them,
66
 
        #       then it would be easier to test the full stack, but it probably
67
 
        #       means routing around paste.httpserver.serve which probably
68
 
        #       isn't testing the full stack
69
 
        from paste.httpexceptions import HTTPExceptionHandler
70
 
        from paste.httpserver import serve
71
 
 
72
 
        _ensure_loggerhead_path()
73
 
 
74
 
        from loggerhead.apps.http_head import HeadMiddleware
75
 
        from loggerhead.apps.transport import BranchesFromTransportRoot
76
 
        from loggerhead.config import LoggerheadConfig
77
 
        from loggerhead.main import setup_logging
78
 
 
79
 
        if host is None:
80
 
            host = DEFAULT_HOST
81
 
        if port is None:
82
 
            port = DEFAULT_PORT
83
 
        argv = ['--host', host, '--port', str(port), '--', transport.base]
84
 
        if not transport.is_readonly():
85
 
            argv.insert(0, '--allow-writes')
86
 
        config = LoggerheadConfig(argv)
87
 
        setup_logging(config, init_logging=False, log_file=sys.stderr)
88
 
        app = BranchesFromTransportRoot(transport.base, config)
89
 
        # Bug #758618, HeadMiddleware seems to break HTTPExceptionHandler from
90
 
        # actually sending appropriate return codes to the client. Since nobody
91
 
        # desperately needs HeadMiddleware right now, just ignoring it.
92
 
        # app = HeadMiddleware(app)
93
 
        app = HTTPExceptionHandler(app)
94
 
        serve(app, host=host, port=port)
95
 
 
96
 
    transport_server_registry.register('http', serve_http, help=HELP)
97
 
 
98
 
    class cmd_load_test_loggerhead(commands.Command):
99
 
        """Run a load test against a live loggerhead instance.
100
 
 
101
 
        Pass in the name of a script file to run. See loggerhead/load_test.py
102
 
        for a description of the file format.
103
 
        """
104
 
 
105
 
        takes_args = ["filename"]
106
 
 
107
 
        def run(self, filename):
108
 
            from bzrlib.plugins.loggerhead.loggerhead import load_test
109
 
            script = load_test.run_script(filename)
110
 
            for thread_id in sorted(script._threads):
111
 
                worker = script._threads[thread_id][0]
112
 
                for url, success, time in worker.stats:
113
 
                    self.outf.write(' %5.3fs %s %s\n'
114
 
                                    % (time, str(success)[0], url))
115
 
 
116
 
    commands.register_command(cmd_load_test_loggerhead)
117
 
 
118
 
    def load_tests(standard_tests, module, loader):
119
 
        _ensure_loggerhead_path()
120
 
        standard_tests.addTests(loader.loadTestsFromModuleNames(
121
 
            ['bzrlib.plugins.loggerhead.loggerhead.tests']))
122
 
        return standard_tests