33
44import json
55import logging
6- import django
76
7+ import django
88from django .conf import settings
99from django .urls import reverse
1010from django .core .exceptions import ValidationError , ObjectDoesNotExist
1414from django .shortcuts import get_object_or_404 , render_to_response
1515from django .views .decorators .http import require_GET , require_POST
1616from django .views .decorators .csrf import csrf_exempt
17+ from django .views .generic .base import TemplateView
1718
1819from .auth import basic_auth_required
1920from .models import (Environment , Report , Project , Revision , Result ,
@@ -61,6 +62,92 @@ def no_data_found(request):
6162 })
6263
6364
65+ class HomeView (TemplateView ):
66+ template_name = "home.html"
67+
68+ def get_context_data (self , ** kwargs ):
69+ context = super ().get_context_data (** kwargs )
70+ context ['show_reports' ] = settings .SHOW_REPORTS
71+ context ['show_historical' ] = settings .SHOW_HISTORICAL
72+ historical_settings = ['SHOW_HISTORICAL' , 'DEF_BASELINE' , 'DEF_EXECUTABLE' ]
73+ if not all (getattr (settings , var ) for var in historical_settings ):
74+ context ['show_historical' ] = False
75+ return context
76+
77+ baseline_exe = Executable .objects .get (
78+ name = settings .DEF_BASELINE ['executable' ])
79+ context ['baseline' ] = baseline_exe
80+ default_exe = Executable .objects .get (name = settings .DEF_EXECUTABLE )
81+ context ['default_exe' ] = default_exe
82+ return context
83+
84+
85+ @require_GET
86+ def gethistoricaldata (request ):
87+ data = {'results' : {}, 'benchmarks' : []}
88+ env = Environment .objects .all ()
89+ if settings .DEF_ENVIRONMENT :
90+ env = env .get (name = settings .DEF_ENVIRONMENT )
91+ else :
92+ env = env .first ()
93+
94+ # Fetch Baseline data
95+ baseline_exe = Executable .objects .get (
96+ name = settings .DEF_BASELINE ['executable' ])
97+ baseline_lastrev = Revision .objects .filter (
98+ branch__project = baseline_exe .project ).order_by ('-date' )[0 ]
99+ data ['baseline' ] = '{} {}' .format (
100+ settings .DEF_BASELINE ['executable' ], baseline_lastrev .tag )
101+ baseline_results = Result .objects .filter (
102+ executable = baseline_exe , revision = baseline_lastrev , environment = env )
103+
104+ default_exe = Executable .objects .get (name = settings .DEF_EXECUTABLE )
105+ default_branch = Branch .objects .get (
106+ name = default_exe .project .default_branch ,
107+ project = default_exe .project )
108+
109+ # Fetch tagged revisions for default executable
110+ default_taggedrevs = Revision .objects .filter (
111+ branch = default_branch
112+ ).exclude (tag = "" ).order_by ('date' )
113+ data ['tagged_revs' ] = [rev .tag for rev in default_taggedrevs ]
114+ default_results = {}
115+ for rev in default_taggedrevs :
116+ default_results [rev .tag ] = Result .objects .filter (
117+ executable = default_exe , revision = rev , environment = env )
118+
119+ # Fetch data for latest results
120+ revs = Revision .objects .filter (
121+ branch = default_branch ).order_by ('-date' )[:5 ]
122+ default_lastrev = None
123+ for i in range (4 ):
124+ default_lastrev = revs [i ]
125+ if default_lastrev .results .filter (executable = default_exe ):
126+ break
127+ default_lastrev = None
128+ if default_lastrev is None :
129+ return HttpResponse (json .dumps (data ))
130+ default_results ['latest' ] = Result .objects .filter (
131+ executable = default_exe , revision = default_lastrev , environment = env )
132+
133+ # Collect data
134+ benchmarks = []
135+ for res in baseline_results :
136+ if res == 0 :
137+ continue
138+ benchmarks .append (res .benchmark .name )
139+ data ['results' ][res .benchmark .name ] = {data ['baseline' ]: res .value }
140+ for rev_name in default_results :
141+ val = 0
142+ for default_res in default_results [rev_name ]:
143+ if default_res .benchmark .name == res .benchmark .name :
144+ val = default_res .value
145+ data ['results' ][res .benchmark .name ][rev_name ] = val
146+ benchmarks .sort ()
147+ data ['benchmarks' ] = benchmarks
148+ return HttpResponse (json .dumps (data ))
149+
150+
64151@require_GET
65152def getcomparisondata (request ):
66153 executables , exekeys = getcomparisonexes ()
@@ -75,8 +162,8 @@ def getcomparisondata(request):
75162 for env in environments :
76163 compdata [exe ['key' ]][env .id ] = {}
77164
78- # Load all results for this env/executable/revision in a dict
79- # for fast lookup
165+ # Load all results for this env/executable/revision in a
166+ # dict for fast lookup
80167 results = dict (Result .objects .filter (
81168 environment = env ,
82169 executable = exe ['executable' ],
0 commit comments