[8672] | 1 | import os |
---|
| 2 | import subprocess |
---|
| 3 | import sys |
---|
| 4 | import waeup.stress |
---|
| 5 | from optparse import OptionParser |
---|
| 6 | from ConfigParser import SafeConfigParser |
---|
| 7 | |
---|
[8749] | 8 | VALID_MODES = ('paster', 'kofactl', 'zeo', 'profile') |
---|
| 9 | |
---|
[8672] | 10 | def configure_options(): |
---|
| 11 | usage = 'Usage: %prog <project name> [options]' |
---|
| 12 | parser = OptionParser(usage=usage) |
---|
| 13 | parser.add_option('-p', '--port', dest='port', type='int', |
---|
| 14 | help='rpc listener port') |
---|
| 15 | parser.add_option('-r', '--results', dest='results_dir', |
---|
| 16 | help='results directory to reprocess') |
---|
| 17 | parser.add_option('-b', '--bind-addr', dest='bind_addr', |
---|
| 18 | help='rpc bind address', default='localhost') |
---|
| 19 | parser.add_option('-d', '--directory', dest='projects_dir', |
---|
| 20 | help='directory containing project folder', default='.') |
---|
| 21 | cmd_opts, args = parser.parse_args() |
---|
| 22 | |
---|
| 23 | try: |
---|
| 24 | project_name = args[0] |
---|
| 25 | except IndexError: |
---|
| 26 | sys.stderr.write('\nERROR: no project specified\n\n') |
---|
| 27 | sys.stderr.write('%s\n' % usage) |
---|
| 28 | sys.stderr.write('Example: multimech-run my_project\n\n') |
---|
| 29 | sys.exit(1) |
---|
| 30 | pass |
---|
| 31 | |
---|
| 32 | return cmd_opts, args |
---|
| 33 | |
---|
| 34 | DEFAULTS = dict( |
---|
| 35 | instance='kofa', baseport='8080', server_port='8100', |
---|
| 36 | zope_threads='10', cache='20MB', cached_objs='5000', |
---|
| 37 | paster_threads='10', use_threadpool='true', buildout='', |
---|
[8674] | 38 | instance_mode='paster', start_instance='true', host='localhost') |
---|
[8672] | 39 | |
---|
| 40 | def configure_project(name, path): |
---|
| 41 | """Parse project in `path` with name `name`. |
---|
| 42 | |
---|
| 43 | Extracts kofa-related settings and returns them as a dict. |
---|
| 44 | """ |
---|
| 45 | print "CONFIGURE PROJECT: ", name, path |
---|
| 46 | cfg_path = os.path.join(path, 'config.cfg') |
---|
| 47 | cfg_defaults = dict([('kofa_' + name, value) |
---|
| 48 | for name, value in DEFAULTS.items()]) |
---|
| 49 | config = SafeConfigParser(cfg_defaults) |
---|
| 50 | config.read(cfg_path) |
---|
| 51 | params = dict() |
---|
| 52 | params.update(DEFAULTS) |
---|
| 53 | for name, value in config.items('global'): |
---|
| 54 | if not name.startswith('kofa_'): |
---|
| 55 | continue |
---|
| 56 | name = name.split('_', 1)[-1] |
---|
| 57 | print name, value |
---|
| 58 | params.update(dict({name: value})) |
---|
[8749] | 59 | if params['instance_mode'] not in VALID_MODES: |
---|
[8672] | 60 | print "Warning: invalid instance_mode in config.cfg, picking 'paster'." |
---|
[8749] | 61 | print " valid would be: %s" % VALID_MODES |
---|
[8672] | 62 | params['instance_mode'] = 'paster' |
---|
| 63 | params['start_instance'] = config.getboolean( |
---|
| 64 | 'global', 'kofa_start_instance') |
---|
| 65 | return params |
---|
| 66 | |
---|
[8749] | 67 | def configure(): |
---|
[8672] | 68 | cmd_opts, args = configure_options() |
---|
| 69 | project_name = args[0] |
---|
| 70 | path = os.path.abspath(os.path.join(cmd_opts.projects_dir, project_name)) |
---|
| 71 | cfg_opts = configure_project(project_name, path) |
---|
[8749] | 72 | return path, project_name, cmd_opts, cfg_opts |
---|
| 73 | |
---|
| 74 | def main(): |
---|
| 75 | path, project_name, cmd_opts, cfg_opts = configure() |
---|
[8672] | 76 | pre_run_path = os.path.join(path, 'pre_run.py') |
---|
| 77 | post_run_path = os.path.join(path, 'post_run.py') |
---|
[8749] | 78 | sys.path.append(path) # make project scripts available for import |
---|
[8672] | 79 | if os.path.exists(pre_run_path): |
---|
| 80 | print "WAEUP.STRESS.RUN: running pre_run %s" % pre_run_path |
---|
| 81 | execfile(pre_run_path) |
---|
[8749] | 82 | # late import as this scripts mangles sys.argv |
---|
| 83 | from multimechanize.utilities import run |
---|
[8672] | 84 | run.main() |
---|
| 85 | if os.path.exists(post_run_path): |
---|
| 86 | print "WAEUP.STRESS.RUN: running post_run %s" % post_run_path |
---|
| 87 | execfile(post_run_path) |
---|
| 88 | return |
---|