def getcomparisondata(request): executables, exekeys = getcomparisonexes() benchmarks = Benchmark.objects.all() environments = Environment.objects.all() compdata = {} compdata['error'] = "Unknown error" for proj in executables: for exe in executables[proj]: compdata[exe['key']] = {} for env in environments: compdata[exe['key']][env.id] = {} # Load all results for this env/executable/revision in a dict # for fast lookup results = dict( Result.objects.filter( environment=env, executable=exe['executable'], revision=exe['revision'], ).values_list('benchmark', 'value')) for bench in benchmarks: compdata[exe['key']][env.id][bench.id] = results.get( bench.id, None) compdata['error'] = "None" return HttpResponse(json.dumps(compdata))
def getcomparisondata(request): executables, exekeys = getcomparisonexes() benchmarks = Benchmark.objects.all() environments = Environment.objects.all() compdata = {} compdata['error'] = "Unknown error" for proj in executables: for exe in executables[proj]: compdata[exe['key']] = {} for env in environments: compdata[exe['key']][env.id] = {} # Load all results for this env/executable/revision in a dict # for fast lookup results = dict(Result.objects.filter( environment=env, executable=exe['executable'], revision=exe['revision'], ).values_list('benchmark', 'value')) for bench in benchmarks: compdata[exe['key']][env.id][bench.id] = results.get(bench.id, None) compdata['error'] = "None" return HttpResponse(json.dumps(compdata))
def comparison(request): data = request.GET # Configuration of default parameters enviros = Environment.objects.all() if not enviros: return no_environment_error(request) checkedenviros = get_default_environment(enviros, data, multi=True) if not len(Project.objects.filter(track=True)): return no_default_project_error(request) # Check whether there exist appropiate executables if not getdefaultexecutable(): return no_executables_error(request) executables, exekeys = getcomparisonexes() checkedexecutables = [] if 'exe' in data: for i in data['exe'].split(","): if not i: continue if i in exekeys: checkedexecutables.append(i) elif hasattr(settings, 'COMP_EXECUTABLES') and settings.COMP_EXECUTABLES: for exe, rev in settings.COMP_EXECUTABLES: try: exe = Executable.objects.get(name=exe) key = str(exe.id) + "+" if rev == "L": key += rev else: rev = Revision.objects.get(commitid=rev) key += str(rev.id) key += "+default" if key in exekeys: checkedexecutables.append(key) else: #TODO: log pass except Executable.DoesNotExist: #TODO: log pass except Revision.DoesNotExist: #TODO: log pass if not checkedexecutables: checkedexecutables = exekeys units_titles = Benchmark.objects.filter( benchmark_type="C").values('units_title').distinct() units_titles = [unit['units_title'] for unit in units_titles] benchmarks = {} bench_units = {} for unit in units_titles: # Only include benchmarks marked as cross-project benchmarks[unit] = Benchmark.objects.filter(benchmark_type="C").filter( units_title=unit) units = benchmarks[unit][0].units lessisbetter = (benchmarks[unit][0].lessisbetter and ' (less is better)' or ' (more is better)') bench_units[unit] = [[b.id for b in benchmarks[unit]], lessisbetter, units] checkedbenchmarks = [] if 'ben' in data: checkedbenchmarks = [] for i in data['ben'].split(","): if not i: continue try: checkedbenchmarks.append(Benchmark.objects.get(id=int(i))) except Benchmark.DoesNotExist: pass if not checkedbenchmarks: # Only include benchmarks marked as cross-project checkedbenchmarks = Benchmark.objects.filter( benchmark_type="C", default_on_comparison=True) charts = ['normal bars', 'stacked bars', 'relative bars'] # Don't show relative charts as an option if there is only one executable # Relative charts need normalization if len(executables) == 1: charts.remove('relative bars') selectedchart = charts[0] if 'chart' in data and data['chart'] in charts: selectedchart = data['chart'] elif hasattr(settings, 'CHART_TYPE') and settings.CHART_TYPE in charts: selectedchart = settings.CHART_TYPE selectedbaseline = "none" if 'bas' in data and data['bas'] in exekeys: selectedbaseline = data['bas'] elif 'bas' in data: # bas is present but is none pass elif (len(exekeys) > 1 and hasattr(settings, 'NORMALIZATION') and settings.NORMALIZATION): try: # TODO: Avoid calling twice getbaselineexecutables selectedbaseline = getbaselineexecutables()[1]['key'] # Uncheck exe used for normalization try: checkedexecutables.remove(selectedbaseline) except ValueError: pass # The selected baseline was not checked except: pass # Keep "none" as default baseline selecteddirection = False if ('hor' in data and data['hor'] == "true" or hasattr(settings, 'CHART_ORIENTATION') and settings.CHART_ORIENTATION == 'horizontal'): selecteddirection = True return render_to_response('codespeed/comparison.html', { 'checkedexecutables': checkedexecutables, 'checkedbenchmarks': checkedbenchmarks, 'checkedenviros': checkedenviros, 'executables': executables, 'benchmarks': benchmarks, 'bench_units': json.dumps(bench_units), 'enviros': enviros, 'charts': charts, 'selectedbaseline': selectedbaseline, 'selectedchart': selectedchart, 'selecteddirection': selecteddirection }, context_instance=RequestContext(request))
def comparison(request): data = request.GET # Configuration of default parameters enviros = Environment.objects.all() if not enviros: return no_environment_error(request) checkedenviros = get_default_environment(enviros, data, multi=True) if not len(Project.objects.filter(track=True)): return no_default_project_error(request) # Check whether there exist appropiate executables if not getdefaultexecutable(): return no_executables_error(request) executables, exekeys = getcomparisonexes() checkedexecutables = [] if 'exe' in data: for i in data['exe'].split(","): if not i: continue if i in exekeys: checkedexecutables.append(i) elif hasattr(settings, 'COMP_EXECUTABLES') and settings.COMP_EXECUTABLES: for exe, rev in settings.COMP_EXECUTABLES: try: exe = Executable.objects.get(name=exe) key = str(exe.id) + "+" if rev == "L": key += rev else: rev = Revision.objects.get(commitid=rev) key += str(rev.id) key += "+default" if key in exekeys: checkedexecutables.append(key) else: #TODO: log pass except Executable.DoesNotExist: #TODO: log pass except Revision.DoesNotExist: #TODO: log pass if not checkedexecutables: checkedexecutables = exekeys units_titles = Benchmark.objects.filter( benchmark_type="C" ).values('units_title').distinct() units_titles = [unit['units_title'] for unit in units_titles] benchmarks = {} bench_units = {} for unit in units_titles: # Only include benchmarks marked as cross-project benchmarks[unit] = Benchmark.objects.filter( benchmark_type="C" ).filter(units_title=unit) units = benchmarks[unit][0].units lessisbetter = (benchmarks[unit][0].lessisbetter and ' (less is better)' or ' (more is better)') bench_units[unit] = [ [b.id for b in benchmarks[unit]], lessisbetter, units ] checkedbenchmarks = [] if 'ben' in data: checkedbenchmarks = [] for i in data['ben'].split(","): if not i: continue try: checkedbenchmarks.append(Benchmark.objects.get(id=int(i))) except Benchmark.DoesNotExist: pass if not checkedbenchmarks: # Only include benchmarks marked as cross-project checkedbenchmarks = Benchmark.objects.filter( benchmark_type="C", default_on_comparison=True) charts = ['normal bars', 'stacked bars', 'relative bars'] # Don't show relative charts as an option if there is only one executable # Relative charts need normalization if len(executables) == 1: charts.remove('relative bars') selectedchart = charts[0] if 'chart' in data and data['chart'] in charts: selectedchart = data['chart'] elif hasattr(settings, 'CHART_TYPE') and settings.CHART_TYPE in charts: selectedchart = settings.CHART_TYPE selectedbaseline = "none" if 'bas' in data and data['bas'] in exekeys: selectedbaseline = data['bas'] elif 'bas' in data: # bas is present but is none pass elif (len(exekeys) > 1 and hasattr(settings, 'NORMALIZATION') and settings.NORMALIZATION): try: # TODO: Avoid calling twice getbaselineexecutables selectedbaseline = getbaselineexecutables()[1]['key'] # Uncheck exe used for normalization try: checkedexecutables.remove(selectedbaseline) except ValueError: pass # The selected baseline was not checked except: pass # Keep "none" as default baseline selecteddirection = False if ('hor' in data and data['hor'] == "true" or hasattr(settings, 'CHART_ORIENTATION') and settings.CHART_ORIENTATION == 'horizontal'): selecteddirection = True return render_to_response('codespeed/comparison.html', { 'checkedexecutables': checkedexecutables, 'checkedbenchmarks': checkedbenchmarks, 'checkedenviros': checkedenviros, 'executables': executables, 'benchmarks': benchmarks, 'bench_units': json.dumps(bench_units), 'enviros': enviros, 'charts': charts, 'selectedbaseline': selectedbaseline, 'selectedchart': selectedchart, 'selecteddirection': selecteddirection }, context_instance=RequestContext(request))