Merge lp:~rockstar/loggerhead/config-cleanup into lp:loggerhead

Proposed by Paul Hummer
Status: Merged
Merged at revision: not available
Proposed branch: lp:~rockstar/loggerhead/config-cleanup
Merge into: lp:loggerhead
Diff against target: None lines
To merge this branch: bzr merge lp:~rockstar/loggerhead/config-cleanup
Reviewer Review Type Date Requested Status
Michael Hudson-Doyle Pending
Review via email: mp+5084@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Paul Hummer (rockstar) wrote :

This branch cleans up (a bit) the configuration stuff for Loggerhead, and
merges command line and options with (some) configuration options. I think
this really needs a lot of cleaning up, but I'm still not sure how to do this
without it being really messy.

 reviewer mwhudson

319. By Paul Hummer

Responded to mwhudson's review

320. By Paul Hummer

Fixed an issue where I seemed to have poo for brains at the time, and created memory profile logs ALL the time.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'loggerhead/apps/filesystem.py'
--- loggerhead/apps/filesystem.py 2009-02-19 18:04:11 +0000
+++ loggerhead/apps/filesystem.py 2009-03-31 19:31:45 +0000
@@ -1,7 +1,6 @@
1"""Serve branches at urls that mimic the file system layout."""1"""Serve branches at urls that mimic the file system layout."""
22
3import os3import os
4import tempfile
54
6from bzrlib import branch, errors, lru_cache5from bzrlib import branch, errors, lru_cache
76
@@ -11,10 +10,9 @@
1110
12from loggerhead.apps.branch import BranchWSGIApp11from loggerhead.apps.branch import BranchWSGIApp
13from loggerhead.apps import favicon_app, static_app12from loggerhead.apps import favicon_app, static_app
13from loggerhead.config import LoggerheadConfig
14from loggerhead.controllers.directory_ui import DirectoryUI14from loggerhead.controllers.directory_ui import DirectoryUI
1515
16sql_dir = tempfile.mkdtemp(prefix='loggerhead-cache-')
17
1816
19class BranchesFromFileSystemServer(object):17class BranchesFromFileSystemServer(object):
2018
@@ -22,6 +20,7 @@
22 self.path = path20 self.path = path
23 self.root = root21 self.root = root
24 self.name = name22 self.name = name
23 self._config = LoggerheadConfig()
2524
26 def app_for_branch(self, branch):25 def app_for_branch(self, branch):
27 if not self.name:26 if not self.name:
@@ -31,8 +30,9 @@
31 name = self.name30 name = self.name
32 is_root = False31 is_root = False
33 branch_app = BranchWSGIApp(32 branch_app = BranchWSGIApp(
34 branch, name, {'cachepath': sql_dir}, self.root.graph_cache,33 branch, name,
35 is_root=is_root)34 {'cachepath': self._config.SQL_DIR},
35 self.root.graph_cache, is_root=is_root)
36 return branch_app.app36 return branch_app.app
3737
38 def app_for_non_branch(self, environ):38 def app_for_non_branch(self, environ):
3939
=== added file 'loggerhead/config.py'
--- loggerhead/config.py 1970-01-01 00:00:00 +0000
+++ loggerhead/config.py 2009-03-31 19:31:45 +0000
@@ -0,0 +1,66 @@
1'''Configuration tools for Loggerhead.'''
2from optparse import OptionParser
3import sys
4import tempfile
5
6
7def command_line_parser():
8 parser = OptionParser("%prog [options] <path>")
9 parser.set_defaults(
10 user_dirs=False,
11 show_version=False,
12 log_folder=None,
13 )
14 parser.add_option("--user-dirs", action="store_true", dest="user_dirs",
15 help="Serve user directories as ~user.")
16 parser.add_option("--trunk-dir", metavar="DIR",
17 help="The directory that contains the trunk branches.")
18 parser.add_option("--port", dest="user_port",
19 help=("Port Loggerhead should listen on "
20 "(defaults to 8080)."))
21 parser.add_option("--host", dest="user_host",
22 help="Host Loggerhead should listen on.")
23 parser.add_option('--memory-profile', action='store_true',
24 dest='memory_profile',
25 help='Profile the memory usage using heapy.')
26 parser.add_option("--prefix", dest="user_prefix",
27 help="Specify host prefix.")
28 parser.add_option("--profile", action="store_true", dest="profile",
29 help="Generate callgrind profile data to "
30 "%d-stats.callgrind on each request.")
31 parser.add_option("--reload", action="store_true", dest="reload",
32 help="Restarts the application when changing python"
33 " files. Only used for development purposes.")
34 parser.add_option('--log-folder', dest="log_folder",
35 type=str, help="The directory to place log files in.")
36 parser.add_option("--version", action="store_true", dest="show_version",
37 help="Print the software version and exit")
38 return parser
39
40
41class LoggerheadConfig:
42 '''A configuration object.'''
43
44 def __init__(self):
45 self._parser = command_line_parser()
46 self._options, self._args = self._parser.parse_args(sys.argv[1:])
47
48 self.SQL_DIR = tempfile.mkdtemp(prefix='loggerhead-cache-')
49
50 def get_option(self, option):
51 '''Get an option from the options dict.'''
52 return self._options.__dict__[option]
53
54 def get_arg(self, index):
55 '''Get an arg from the arg list.'''
56 return self._args(index)
57
58 def print_help(self):
59 '''Wrapper around OptionParser.print_help.'''
60 return self._parser.print_help()
61
62 @property
63 def arg_count(self):
64 '''Return the number of args from the option parser.'''
65 return len(self._args)
66
067
=== modified file 'serve-branches'
--- serve-branches 2009-03-30 22:11:06 +0000
+++ serve-branches 2009-03-31 19:31:45 +0000
@@ -19,8 +19,6 @@
19import os19import os
20import sys20import sys
2121
22from optparse import OptionParser
23
24from bzrlib.plugin import load_plugins22from bzrlib.plugin import load_plugins
2523
26from paste import httpserver24from paste import httpserver
@@ -30,56 +28,22 @@
30from loggerhead import __version__28from loggerhead import __version__
31from loggerhead.apps.filesystem import (29from loggerhead.apps.filesystem import (
32 BranchesFromFileSystemRoot, UserBranchesFromFileSystemRoot)30 BranchesFromFileSystemRoot, UserBranchesFromFileSystemRoot)
31from loggerhead.config import LoggerheadConfig
33from loggerhead.util import Reloader32from loggerhead.util import Reloader
34from loggerhead.apps.error import ErrorHandlerApp33from loggerhead.apps.error import ErrorHandlerApp
3534
3635
37def command_line_parser():
38 parser = OptionParser("%prog [options] <path>")
39 parser.set_defaults(
40 user_dirs=False,
41 show_version=False,
42 log_folder=None,
43 )
44 parser.add_option("--user-dirs", action="store_true", dest="user_dirs",
45 help="Serve user directories as ~user.")
46 parser.add_option("--trunk-dir", metavar="DIR",
47 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 parser.add_option("--version", action="store_true", dest="show_version",
67 help="Print the software version and exit")
68 return parser
69
70
71def main(args):36def main(args):
72 parser = command_line_parser()37 config = LoggerheadConfig()
73 (options, args) = parser.parse_args(sys.argv[1:])
7438
75 if options.show_version:39 if config.get_option('show_version'):
76 print "loggerhead %s" % __version__40 print "loggerhead %s" % __version__
77 sys.exit(0)41 sys.exit(0)
7842
79 if len(args) > 1:43 if config.arg_count > 1:
80 parser.print_help()44 config.print_help()
81 sys.exit(1)45 sys.exit(1)
82 elif len(args) == 1:46 elif config.arg_count == 1:
83 [path] = args47 [path] = args
84 else:48 else:
85 path = '.'49 path = '.'
@@ -88,21 +52,22 @@
88 print "%s is not a directory" % path52 print "%s is not a directory" % path
89 sys.exit(1)53 sys.exit(1)
9054
91 if options.trunk_dir and not options.user_dirs:55 if config.get_option('trunk_dir') and not config.get_option('user_dirs'):
92 print "--trunk-dir is only valid with --user-dirs"56 print "--trunk-dir is only valid with --user-dirs"
93 sys.exit(1)57 sys.exit(1)
9458
95 if options.reload:59 if config.get_option('reload'):
96 if Reloader.is_installed():60 if Reloader.is_installed():
97 Reloader.install()61 Reloader.install()
98 else:62 else:
99 return Reloader.restart_with_reloader()63 return Reloader.restart_with_reloader()
10064
101 if options.user_dirs:65 if config.get_option('user_dirs'):
102 if not options.trunk_dir:66 if not config.get_option['trunk_dir']:
103 print "You didn't specify a directory for the trunk directories."67 print "You didn't specify a directory for the trunk directories."
104 sys.exit(1)68 sys.exit(1)
105 app = UserBranchesFromFileSystemRoot(path, options.trunk_dir)69 app = UserBranchesFromFileSystemRoot(
70 path, config.get_option('trunk_dir'))
106 else:71 else:
107 app = BranchesFromFileSystemRoot(path)72 app = BranchesFromFileSystemRoot(path)
10873
@@ -110,8 +75,9 @@
110 logging.basicConfig()75 logging.basicConfig()
111 logging.getLogger('').setLevel(logging.DEBUG)76 logging.getLogger('').setLevel(logging.DEBUG)
112 logger = getattr(app, 'log', logging.getLogger('loggerhead'))77 logger = getattr(app, 'log', logging.getLogger('loggerhead'))
113 if options.log_folder:78 if config.get_option('log_folder'):
114 logfile_path = os.path.join(options.log_folder, 'serve-branches.log')79 logfile_path = os.path.join(
80 config.get_option['log_folder'], 'serve-branches.log')
115 else:81 else:
116 logfile_path = 'serve-branches.log'82 logfile_path = 'serve-branches.log'
117 logfile = logging.FileHandler(logfile_path, 'a')83 logfile = logging.FileHandler(logfile_path, 'a')
@@ -128,17 +94,17 @@
128 # setup_logging() #end94 # setup_logging() #end
12995
130 app = TransLogger(app, logger=logger)96 app = TransLogger(app, logger=logger)
131 if options.profile:97 if config.get_option('profile'):
132 from loggerhead.middleware.profile import LSProfMiddleware98 from loggerhead.middleware.profile import LSProfMiddleware
133 app = LSProfMiddleware(app)99 app = LSProfMiddleware(app)
134 if options.memory_profile:100 if config.get_option('memory_profile'):
135 from loggerhead.middleware.profile import MemoryProfileMiddleware101 from loggerhead.middleware.profile import MemoryProfileMiddleware
136 app = MemoryProfileMiddleware(app)102 app = MemoryProfileMiddleware(app)
137103
138 if not options.user_prefix:104 if not config.get_option('user_prefix'):
139 prefix = '/'105 prefix = '/'
140 else:106 else:
141 prefix = options.user_prefix107 prefix = config.get_option('user_prefix')
142 if not prefix.startswith('/'):108 if not prefix.startswith('/'):
143 prefix = '/' + prefix109 prefix = '/' + prefix
144110
@@ -163,15 +129,15 @@
163 app = HTTPExceptionHandler(app)129 app = HTTPExceptionHandler(app)
164 app = ErrorHandlerApp(app)130 app = ErrorHandlerApp(app)
165131
166 if not options.user_port:132 if not config.get_option('user_port'):
167 port = '8080'133 port = '8080'
168 else:134 else:
169 port = options.user_port135 port = config.get_option('user_port')
170136
171 if not options.user_host:137 if not config.get_option('user_host'):
172 host = '0.0.0.0'138 host = '0.0.0.0'
173 else:139 else:
174 host = options.user_host140 host = config.get_option('user_host')
175141
176 load_plugins()142 load_plugins()
177143

Subscribers

People subscribed via source and target branches