@@ -226,12 +226,14 @@ def search(query, request, selected_engines):
226226 return results, suggestions
227227
228228def get_engines_stats():
229+ # TODO refactor
229230 pageloads = []
230231 results = []
231232 scores = []
232233 errors = []
234+ scores_per_result = []
233235
234− max_pageload = max_results = max_score = max_errors = 0
236+ max_pageload = max_results = max_score = max_errors = max_score_per_result = 0
235237 for engine in engines.values():
236238 if engine.stats['search_count'] == 0:
237239 continue
@@ -239,16 +241,19 @@ def get_engines_stats():
239241 load_times = engine.stats['page_load_time']/float(engine.stats['search_count'])
240242 if results_num:
241243 score = engine.stats['score_count'] / float(engine.stats['search_count'])
244+ score_per_result = score / results_num
242245 else:
243− score = 0
246+ score = score_per_result = 0.0
244247 max_results = max(results_num, max_results)
245248 max_pageload = max(load_times, max_pageload)
246249 max_score = max(score, max_score)
250+ max_score_per_result = max(score_per_result, max_score_per_result)
247251 max_errors = max(max_errors, engine.stats['errors'])
248252 pageloads.append({'avg': load_times, 'name': engine.name})
249253 results.append({'avg': results_num, 'name': engine.name})
250254 scores.append({'avg': score, 'name': engine.name})
251255 errors.append({'avg': engine.stats['errors'], 'name': engine.name})
256+ scores_per_result.append({'avg': score_per_result, 'name': engine.name})
252257
253258 for engine in pageloads:
254259 engine['percentage'] = int(engine['avg']/max_pageload*100)
@@ -259,6 +264,9 @@ def get_engines_stats():
259264 for engine in scores:
260265 engine['percentage'] = int(engine['avg']/max_score*100)
261266
267+ for engine in scores_per_result:
268+ engine['percentage'] = int(engine['avg']/max_score_per_result*100)
269+
262270 for engine in errors:
263271 if max_errors:
264272 engine['percentage'] = int(float(engine['avg'])/max_errors*100)
@@ -269,5 +277,6 @@ def get_engines_stats():
269277 return [('Page loads (sec)', sorted(pageloads, key=itemgetter('avg')))
270278 ,('Number of results', sorted(results, key=itemgetter('avg'), reverse=True))
271279 ,('Scores', sorted(scores, key=itemgetter('avg'), reverse=True))
280+ ,('Scores per result', sorted(scores_per_result, key=itemgetter('avg'), reverse=True))
272281 ,('Errors', sorted(errors, key=itemgetter('avg'), reverse=True))
273282 ]