def main(args): with file('arena.json', 'rb') as json_f: config = json.load(json_f) svc_list = config['services'] cns_list = config['consumers'] sts_list = config['suites'] if len(args) < 2: exit_errmsg(USAGE.format(progname=args[0], services=usage_format(svc_list), consumers=usage_format(cns_list), suites=usage_format(sts_list))) else: tst = Tester() if args[1] == 'test': svc_name, cns_name = args[2:4] tst.test_pair(resolve(svc_list, svc_name, 'service'), resolve(cns_list, cns_name, 'consumer')) elif args[1] == 'clean': tst.clean(config[args[2] + 's'][args[3]]) elif args[1] == 'measure': if len(args) < 3: suites = sts_list.itervalues() else: suites = [resolve(sts_list, args[2], 'suite')] if len(args) < 4: repeats = config['measurement']['repeats'] else: repeats = [int(args[3])] if len(args) < 5: runs = config['measurement']['runs'] else: runs = int(args[4]) measure(suites, repeats, runs, svc_list, cns_list) else: exit_errmsg('Invalid command: "{0}"'.format(args[1]))
def measure(suites, repeats, runs, svc_list, cns_list): filebase = datetime.now().strftime(FILE_FORMAT) log = LogFile(filebase) csv = path.join(getcwd(), filebase + CSV_SUFFIX) with file(csv, 'w') as f: f.write('Service;Consumer;Repeats;Suite;Initialization;Invocation') for suite, repeat, (svc_name, service), (cns_name, consumer), num in product( suites, repeats, svc_list.iteritems(), cns_list.iteritems(), xrange(runs)): log.log('{0} using {1} -({2}x)-> {3}, try {4}'.format( suite['title'], cns_name, repeat, svc_name, num + 1)) tst = Tester() env = dict(TIMES=str(repeat), CSV_FILE=csv, CSV_PREFIX=';'.join( (svc_name, cns_name, str(repeat), suite['title']))) for i in suite['env']: env[i] = '1' tst.extend_env(env) tst.test_pair(service, consumer)