@@ -69,17 +69,17 @@ def get_context_data(self, **kwargs):
6969 context = super (HomeView , self ).get_context_data (** kwargs )
7070 context ['show_reports' ] = settings .SHOW_REPORTS
7171 context ['show_historical' ] = settings .SHOW_HISTORICAL
72- historical_settings = ['SHOW_HISTORICAL' , 'DEF_BASELINE ' , 'DEF_EXECUTABLE ' ]
72+ historical_settings = ['SHOW_HISTORICAL' , 'DEF_BASELINES ' , 'DEF_EXECUTABLES ' ]
7373 if not all (getattr (settings , var ) for var in historical_settings ):
7474 context ['show_historical' ] = False
7575 return context
7676
7777 try :
7878 baseline_exe = Executable .objects .get (
79- name = settings .DEF_BASELINE ['executable' ])
79+ name = settings .DEF_BASELINES [ 0 ] ['executable' ])
8080 context ['baseline' ] = baseline_exe
81- def_name = settings .DEF_EXECUTABLE ['name' ]
82- def_project = Project .objects .get (name = settings .DEF_EXECUTABLE ['project' ])
81+ def_name = settings .DEF_EXECUTABLES [ 0 ] ['name' ]
82+ def_project = Project .objects .get (name = settings .DEF_EXECUTABLES [ 0 ] ['project' ])
8383 default_exe = Executable .objects .get (name = def_name ,
8484 project = def_project ,
8585 )
@@ -101,44 +101,55 @@ def gethistoricaldata(request):
101101 env = env .first ()
102102
103103 # Fetch Baseline data, filter by executable
104- baseline_exe = Executable .objects .get (
105- name = settings .DEF_BASELINE ['executable' ])
106- baseline_revs = Revision .objects .filter (
107- branch__project = baseline_exe .project ).order_by ('-date' )
108- baseline_lastrev = baseline_revs [0 ]
109- for rev in baseline_revs :
110- baseline_results = Result .objects .filter (
111- executable = baseline_exe , revision = rev , environment = env )
112- if baseline_results :
113- baseline_lastrev = rev
114- break
115- if len (baseline_results ) == 0 :
116- logger .error ('Could not find results for {} rev="{}" env="{}"' .format (
117- baseline_exe , baseline_lastrev , env ))
118- data ['baseline' ] = '{} {}' .format (
119- settings .DEF_BASELINE ['executable' ], baseline_lastrev .tag )
120-
121- def_name = settings .DEF_EXECUTABLE ['name' ]
122- def_project = Project .objects .get (name = settings .DEF_EXECUTABLE ['project' ])
123- default_exe = Executable .objects .get (name = def_name , project = def_project )
124- default_branch = Branch .objects .get (
125- name = default_exe .project .default_branch ,
126- project = default_exe .project )
104+ baseline_results = []
105+ for b in settings .DEF_BASELINES :
106+ baseline_exe = Executable .objects .get (
107+ name = b ['executable' ])
108+ tag = b ['revision' ]
109+ rev = Revision .objects .filter (branch__project = baseline_exe .project , tag = tag )
110+ if len (rev ) < 1 :
111+ return HttpResponse (json .dumps (
112+ f"Could not find { tag = } for { b ['executable' ]} in database" )
113+ )
114+ rev0 = rev [0 ]
115+ resname = '{} {}' .format (b ['executable' ], rev0 .tag )
116+ baseline_results .append ((resname , Result .objects .filter (
117+ executable = baseline_exe , revision = rev0 , environment = env )))
118+ if not baseline_results [- 1 ][1 ]:
119+ logger .error ('Could not find results for {} rev="{}" env="{}"' .format (
120+ baseline_exe , rev0 , env ))
127121
128- # Fetch tagged revisions for executable
129- default_taggedrevs = Revision .objects .filter (
130- branch = default_branch
131- ).exclude (tag = "" ).order_by ('date' )
132122 default_results = {}
133- for rev in default_taggedrevs :
134- res = Result .objects .filter (
135- executable = default_exe , revision = rev , environment = env )
136- if not res :
137- logger .info ('no results for %s %s %s' % (str (default_exe ), str (rev ), str (env )))
138- continue
139- default_results [rev .tag ] = res
140- data ['tagged_revs' ] = [rev .tag for rev in default_taggedrevs if rev .tag in default_results ]
123+ all_taggedrevs = []
124+ for executable in settings .DEF_EXECUTABLES :
125+ _def_name = executable ['name' ]
126+ _def_project = Project .objects .get (name = executable ['project' ])
127+ _default_exe = Executable .objects .get (name = _def_name , project = _def_project )
128+ _default_branch = Branch .objects .get (
129+ name = _default_exe .project .default_branch ,
130+ project = _default_exe .project )
131+
132+ # Fetch tagged revisions for executable
133+ default_taggedrevs = Revision .objects .filter (
134+ branch = _default_branch
135+ ).exclude (tag = "" ).order_by ('date' )
136+ all_taggedrevs += default_taggedrevs
137+ for rev in default_taggedrevs :
138+ res = Result .objects .filter (
139+ executable = _default_exe , revision = rev , environment = env )
140+ if not res :
141+ logger .info ("no results for '%s' '%s' '%s'" % (str (_default_exe ), str (rev ), str (env )))
142+ continue
143+ default_results [rev .tag ] = res
144+ data ['tagged_revs' ] = [rev .tag for rev in all_taggedrevs if rev .tag in default_results ]
141145 # Fetch data for latest results
146+ executable = settings .DEF_EXECUTABLES [0 ]
147+ def_name = executable ['name' ]
148+ def_project = Project .objects .get (name = executable ['project' ])
149+ default_exe = Executable .objects .get (name = def_name , project = def_project )
150+ default_branch = Branch .objects .get (
151+ name = default_exe .project .default_branch ,
152+ project = default_exe .project )
142153 revs = Revision .objects .filter (
143154 branch = default_branch ).order_by ('-date' )[:100 ]
144155 default_lastrev = None
@@ -153,17 +164,30 @@ def gethistoricaldata(request):
153164
154165 # Collect data
155166 benchmarks = []
156- for res in baseline_results :
167+ # Collate first baseline and all the default_results
168+ resset = baseline_results [0 ][1 ]
169+ resname = baseline_results [0 ][0 ]
170+ data ['baseline' ] = resname
171+ for res in resset :
157172 if res == 0 :
158173 continue
159174 benchmarks .append (res .benchmark .name )
160- data ['results' ][res .benchmark .name ] = {data [ 'baseline' ] : res .value }
175+ data ['results' ][res .benchmark .name ] = {resname : res .value }
161176 for rev_name in default_results :
162177 val = 0
163178 for default_res in default_results [rev_name ]:
164179 if default_res .benchmark .name == res .benchmark .name :
165180 val = default_res .value
166- data ['results' ][res .benchmark .name ][rev_name ] = val
181+ data ['results' ][res .benchmark .name ][rev_name ] = val
182+ # Collate other baseline
183+ for resname , resset in baseline_results [1 :]:
184+ for res in resset :
185+ if res == 0 :
186+ continue
187+ if not res .benchmark .name in data ['results' ]:
188+ continue
189+ data ['results' ][res .benchmark .name ][resname ] = res .value
190+ data ['tagged_revs' ].insert (0 , resname )
167191 benchmarks .sort ()
168192 data ['benchmarks' ] = benchmarks
169193 return HttpResponse (json .dumps (data ))
@@ -896,7 +920,7 @@ def displaylogs(request):
896920 log ['commit_browse_url' ] = project .commit_browsing_url .format (** log )
897921
898922 return render (
899- request ,
923+ request ,
900924 'codespeed/changes_logs.html' ,
901925 {
902926 'error' : error , 'logs' : logs ,
0 commit comments