|
2 | 2 | from __future__ import absolute_import |
3 | 3 |
|
4 | 4 | from django.conf import settings |
5 | | - |
6 | | -from codespeed.models import Executable, Revision, Project, Branch |
| 5 | +from django.core.exceptions import ObjectDoesNotExist |
| 6 | +from codespeed.models import Executable, Revision, Project, Branch,\ |
| 7 | + Environment, Benchmark, Result |
7 | 8 |
|
8 | 9 |
|
9 | 10 | def get_default_environment(enviros, data, multi=False): |
@@ -147,3 +148,83 @@ def getcomparisonexes(): |
147 | 148 | all_executables[proj] = executables |
148 | 149 | exekeys += executablekeys |
149 | 150 | return all_executables, exekeys |
| 151 | + |
| 152 | + |
| 153 | +def get_benchmark_results(data): |
| 154 | + environment = Environment.objects.get(name=data['env']) |
| 155 | + project = Project.objects.get(name=data['proj']) |
| 156 | + executable = Executable.objects.get(name=data['exe'], project=project) |
| 157 | + branch = Branch.objects.get(name=data['branch'], project=project) |
| 158 | + benchmark = Benchmark.objects.get(name=data['ben']) |
| 159 | + |
| 160 | + number_of_revs = int(data.get('revs', 10)) |
| 161 | + |
| 162 | + baseline_commit_name = (data['base_commit'] if 'base_commit' in data |
| 163 | + else None) |
| 164 | + relative_results = ( |
| 165 | + ('relative' in data and data['relative'] in ['1', 'yes']) or |
| 166 | + baseline_commit_name is not None) |
| 167 | + |
| 168 | + result_query = Result.objects.filter( |
| 169 | + benchmark=benchmark |
| 170 | + ).filter( |
| 171 | + environment=environment |
| 172 | + ).filter( |
| 173 | + executable=executable |
| 174 | + ).filter( |
| 175 | + revision__project=project |
| 176 | + ).filter( |
| 177 | + revision__branch=branch |
| 178 | + ).select_related( |
| 179 | + "revision" |
| 180 | + ).order_by('-date')[:number_of_revs] |
| 181 | + |
| 182 | + if len(result_query) == 0: |
| 183 | + raise ObjectDoesNotExist("No results were found!") |
| 184 | + |
| 185 | + result_list = [item for item in result_query] |
| 186 | + result_list.reverse() |
| 187 | + |
| 188 | + if relative_results: |
| 189 | + ref_value = result_list[0].value |
| 190 | + |
| 191 | + if baseline_commit_name is not None: |
| 192 | + baseline_env = environment |
| 193 | + baseline_proj = project |
| 194 | + baseline_exe = executable |
| 195 | + baseline_branch = branch |
| 196 | + |
| 197 | + if 'base_env' in data: |
| 198 | + baseline_env = Environment.objects.get(name=data['base_env']) |
| 199 | + if 'base_proj' in data: |
| 200 | + baseline_proj = Project.objects.get(name=data['base_proj']) |
| 201 | + if 'base_exe' in data: |
| 202 | + baseline_exe = Executable.objects.get(name=data['base_exe'], |
| 203 | + project=baseline_proj) |
| 204 | + if 'base_branch' in data: |
| 205 | + baseline_branch = Branch.objects.get(name=data['base_branch'], |
| 206 | + project=baseline_proj) |
| 207 | + |
| 208 | + base_data = Result.objects.get( |
| 209 | + benchmark=benchmark, |
| 210 | + environment=baseline_env, |
| 211 | + executable=baseline_exe, |
| 212 | + revision__project=baseline_proj, |
| 213 | + revision__branch=baseline_branch, |
| 214 | + revision__commitid=baseline_commit_name) |
| 215 | + |
| 216 | + ref_value = base_data.value |
| 217 | + |
| 218 | + if relative_results: |
| 219 | + for element in result_list: |
| 220 | + element.value = (100 * (element.value - ref_value)) / ref_value |
| 221 | + |
| 222 | + return { |
| 223 | + 'environment': environment, |
| 224 | + 'project': project, |
| 225 | + 'executable': executable, |
| 226 | + 'branch': branch, |
| 227 | + 'benchmark': benchmark, |
| 228 | + 'results': result_list, |
| 229 | + 'relative': relative_results, |
| 230 | + } |
0 commit comments