def compare(proc_count=None): res = [] labels = [] adapters = [] if not proc_count: proc_count = int(MAX_PROCESSES / 2) for t, adapter_and_test_id in dict(request.query).iteritems(): adapter, test_id = tuple(adapter_and_test_id.split('|')) atr = adapter_factory(adapter) test_name = atr.get_test_name_by_id(test_id) if not test_name: abort(404, "Test with id %s not found" % str(test_id)) res.append(atr.get_result_by_processes(test_id, proc_count)) labels.append("%s (%s) %d proc" % (adapter, test_name, proc_count)) adapters.append("%s (%s)" % (adapter, test_id)) return prepare_template('compare', json_data=res, labels=dumps(labels), current_proc_count=proc_count, max_proc=MAX_PROCESSES, graph_title="Compare %s" % ', '.join(adapters))
def update_users(params): user_id = params['user_id'] db_adapter = params['db_adapter'] start = time.time() is_deleted = bool(random.randint(0, 1)) adapter = adapter_factory(db_adapter) adapter.update_user(user_id, {"is_deleted": is_deleted}) return time.time() - start
def run(self, test_name=None, db_adapter=None): if db_adapter is None: db_adapter = DEFAULT_DATABASE_ADAPTER if test_name is None: test_name = '_'.join([db_adapter, datetime.datetime.now().strftime("%Y-%m-%d %H:%M")]) print ''.join(['Running "', test_name, '" test']) print 'Prepare database' adapter = adapter_factory(db_adapter) adapter.prepare_db() test_id = adapter.create_new_test(test_name) print '' print 'Create user documents' pool = Pool(processes=10) params = [{'user_id': i, 'docs_per_user': DOCS_PER_USER, 'db_adapter': db_adapter} for i in range(1, USERS_COUNT + 1)] start = time.time() try: pool.map(create_users, params) print 'Full time:', time.time() - start finally: pool.terminate() del pool print 'OK! Users were created!' print '' for i in range(1, MAX_PROCESSES + 1): print 'Run test with %d proceses' % i pool = Pool(processes=i) params = [{'user_id': j, 'db_adapter': db_adapter} for j in range(1, USERS_COUNT + 1)] start = time.time() try: res = pool.map(update_users, params) full_time = time.time() - start finally: pool.terminate() del pool print 'Test is finished! Save results' print '' adapter.save_results(test_id, res, i) print 'Full time:', full_time print '' print 'Finish!'
def make(self, test_name, report_dir, db_adapter): if db_adapter is None: db_adapter = DEFAULT_DATABASE_ADAPTER if report_dir is None: report_dir = CSV_REPORTS_DEFAULT_DIR adapter = adapter_factory(db_adapter) test_id = None tests = adapter.get_available_tests() for v in tests: if (test_name is None) and ((test_id is None) or (test_id > v['id'])): test_id = v['id'] test_name = v['name'] elif test_name == v['name']: test_id = v['id'] if test_id is None: raise Exception("Undefined test name") csv_path = os.path.join( report_dir, 'result-%s %s.csv' % (str(db_adapter), str(datetime.datetime.now()))) print "Creating csv report for test '%s' (%s)" % (test_name, csv_path) result = [] for i in xrange(1, MAX_PROCESSES + 1): res = adapter.get_result_by_processes(test_id, i) result.append([str(v[1]) for v in res]) with open(csv_path, 'w+') as f: writer = csv.writer(f) writer.writerow([ ''.join(['proc', str(i)]) for i in range(1, MAX_PROCESSES + 1) ]) for i in xrange(USERS_COUNT): tmp_lst = [] for v in result: try: tmp_lst.append(v[i]) except IndexError: tmp_lst.append("") writer.writerow(tmp_lst) print 'Finish!'
def result(adapter, test_id): atr = adapter_factory(adapter) res = [] proc_count = [1] if MAX_PROCESSES > 2: middle_proc_count = int(MAX_PROCESSES / 2) if middle_proc_count > 1: proc_count.append(middle_proc_count) proc_count.append(MAX_PROCESSES) test_name = atr.get_test_name_by_id(test_id) if not test_name: abort(404, "Test with id %s not found" % str(test_id)) for i in proc_count: res.append(atr.get_result_by_processes(test_id, i)) return prepare_template('result', json_data=res, graph_title=': '.join([atr.get_name(), test_name]), labels=['proc count: %s' % i for i in proc_count])
def create_users(params): start = time.time() user_id = params['user_id'] docs_per_user = params['docs_per_user'] db_adapter = params['db_adapter'] is_deleted = bool(random.randint(0, 1)) new_users = [] for i in xrange(docs_per_user): name = 'Document %d for User %d' % (i, user_id) email = 'doc%d@user%d.com' % (i, user_id) new_users.append({'user_id': user_id, 'name': name, 'email': email, 'is_deleted': is_deleted}) adapter = adapter_factory(db_adapter) adapter.create_users(new_users) return time.time() - start
def create_users(params): start = time.time() user_id = params['user_id'] docs_per_user = params['docs_per_user'] db_adapter = params['db_adapter'] is_deleted = bool(random.randint(0, 1)) new_users = [] for i in xrange(docs_per_user): name = 'Document %d for User %d' % (i, user_id) email = 'doc%d@user%d.com' % (i, user_id) new_users.append({ 'user_id': user_id, 'name': name, 'email': email, 'is_deleted': is_deleted }) adapter = adapter_factory(db_adapter) adapter.create_users(new_users) return time.time() - start
def run(self, test_name=None, db_adapter=None): if db_adapter is None: db_adapter = DEFAULT_DATABASE_ADAPTER if test_name is None: test_name = '_'.join([ db_adapter, datetime.datetime.now().strftime("%Y-%m-%d %H:%M") ]) print ''.join(['Running "', test_name, '" test']) print 'Prepare database' adapter = adapter_factory(db_adapter) adapter.prepare_db() test_id = adapter.create_new_test(test_name) print '' print 'Create user documents' pool = Pool(processes=10) params = [{ 'user_id': i, 'docs_per_user': DOCS_PER_USER, 'db_adapter': db_adapter } for i in range(1, USERS_COUNT + 1)] start = time.time() try: pool.map(create_users, params) print 'Full time:', time.time() - start finally: pool.terminate() del pool print 'OK! Users were created!' print '' for i in range(1, MAX_PROCESSES + 1): print 'Run test with %d proceses' % i pool = Pool(processes=i) params = [{ 'user_id': j, 'db_adapter': db_adapter } for j in range(1, USERS_COUNT + 1)] start = time.time() try: res = pool.map(update_users, params) full_time = time.time() - start finally: pool.terminate() del pool print 'Test is finished! Save results' print '' adapter.save_results(test_id, res, i) print 'Full time:', full_time print '' print 'Finish!'