on master help sign in
Merge remote-tracking branch 'upstream/master'
289a570Dalf
searx/engines/__init__.py+11−2
@@ -226,12 +226,14 @@ def search(query, request, selected_engines):
226 return results, suggestions
226 return results, suggestions
227
227
228def get_engines_stats():
228def get_engines_stats():
229+ # TODO refactor
229 pageloads = []
230 pageloads = []
230 results = []
231 results = []
231 scores = []
232 scores = []
232 errors = []
233 errors = []
234+ scores_per_result = []
233
235
234− max_pageload = max_results = max_score = max_errors = 0
236+ max_pageload = max_results = max_score = max_errors = max_score_per_result = 0
235 for engine in engines.values():
237 for engine in engines.values():
236 if engine.stats['search_count'] == 0:
238 if engine.stats['search_count'] == 0:
237 continue
239 continue
@@ -239,16 +241,19 @@ def get_engines_stats():
239 load_times = engine.stats['page_load_time']/float(engine.stats['search_count'])
241 load_times = engine.stats['page_load_time']/float(engine.stats['search_count'])
240 if results_num:
242 if results_num:
241 score = engine.stats['score_count'] / float(engine.stats['search_count'])
243 score = engine.stats['score_count'] / float(engine.stats['search_count'])
244+ score_per_result = score / results_num
242 else:
245 else:
243− score = 0
246+ score = score_per_result = 0.0
244 max_results = max(results_num, max_results)
247 max_results = max(results_num, max_results)
245 max_pageload = max(load_times, max_pageload)
248 max_pageload = max(load_times, max_pageload)
246 max_score = max(score, max_score)
249 max_score = max(score, max_score)
250+ max_score_per_result = max(score_per_result, max_score_per_result)
247 max_errors = max(max_errors, engine.stats['errors'])
251 max_errors = max(max_errors, engine.stats['errors'])
248 pageloads.append({'avg': load_times, 'name': engine.name})
252 pageloads.append({'avg': load_times, 'name': engine.name})
249 results.append({'avg': results_num, 'name': engine.name})
253 results.append({'avg': results_num, 'name': engine.name})
250 scores.append({'avg': score, 'name': engine.name})
254 scores.append({'avg': score, 'name': engine.name})
251 errors.append({'avg': engine.stats['errors'], 'name': engine.name})
255 errors.append({'avg': engine.stats['errors'], 'name': engine.name})
256+ scores_per_result.append({'avg': score_per_result, 'name': engine.name})
252
257
253 for engine in pageloads:
258 for engine in pageloads:
254 engine['percentage'] = int(engine['avg']/max_pageload*100)
259 engine['percentage'] = int(engine['avg']/max_pageload*100)
@@ -259,6 +264,9 @@ def get_engines_stats():
259 for engine in scores:
264 for engine in scores:
260 engine['percentage'] = int(engine['avg']/max_score*100)
265 engine['percentage'] = int(engine['avg']/max_score*100)
261
266
267+ for engine in scores_per_result:
268+ engine['percentage'] = int(engine['avg']/max_score_per_result*100)
269+
262 for engine in errors:
270 for engine in errors:
263 if max_errors:
271 if max_errors:
264 engine['percentage'] = int(float(engine['avg'])/max_errors*100)
272 engine['percentage'] = int(float(engine['avg'])/max_errors*100)
@@ -269,5 +277,6 @@ def get_engines_stats():
269 return [('Page loads (sec)', sorted(pageloads, key=itemgetter('avg')))
277 return [('Page loads (sec)', sorted(pageloads, key=itemgetter('avg')))
270 ,('Number of results', sorted(results, key=itemgetter('avg'), reverse=True))
278 ,('Number of results', sorted(results, key=itemgetter('avg'), reverse=True))
271 ,('Scores', sorted(scores, key=itemgetter('avg'), reverse=True))
279 ,('Scores', sorted(scores, key=itemgetter('avg'), reverse=True))
280+ ,('Scores per result', sorted(scores_per_result, key=itemgetter('avg'), reverse=True))
272 ,('Errors', sorted(errors, key=itemgetter('avg'), reverse=True))
281 ,('Errors', sorted(errors, key=itemgetter('avg'), reverse=True))
273 ]
282 ]
searx/templates/about.html+3−3
@@ -39,11 +39,11 @@
39<p><a href="#" onclick="window.external.AddSearchProvider(window.location.protocol + '//' + window.location.host + '/opensearch.xml')">Install</a> searx as a search engine on any version of Firefox! (javascript required)</p>
39<p><a href="#" onclick="window.external.AddSearchProvider(window.location.protocol + '//' + window.location.host + '/opensearch.xml')">Install</a> searx as a search engine on any version of Firefox! (javascript required)</p>
40<h2 id="dev_faq">Developer FAQ</h2>
40<h2 id="dev_faq">Developer FAQ</h2>
41<h3>New engines?</h3>
41<h3>New engines?</h3>
42−<p><ul>
42+<ul>
43 <li>Edit your engines.cfg, see <a href="https://raw.github.com/asciimoo/searx/master/engines.cfg_sample">sample config</a></li>
43 <li>Edit your engines.cfg, see <a href="https://raw.github.com/asciimoo/searx/master/engines.cfg_sample">sample config</a></li>
44 <li>Create your custom engine module, check the <a href="https://github.com/asciimoo/searx/blob/master/examples/basic_engine.py">example engine</a></li>
44 <li>Create your custom engine module, check the <a href="https://github.com/asciimoo/searx/blob/master/examples/basic_engine.py">example engine</a></li>
45+</ul>
45− </ul>Don't forget to restart searx after config edit!
46+<p>Don't forget to restart searx after config edit!</p>
46−</p>
47<h3>WSGI support?</h3>
47<h3>WSGI support?</h3>
48<p><a href="https://about.okhin.fr/posts/Searx/">Okhin wrote</a> a great and detailed article about the setup.</p>
48<p><a href="https://about.okhin.fr/posts/Searx/">Okhin wrote</a> a great and detailed article about the setup.</p>
49<h3>How to debug engines?</h3>
49<h3>How to debug engines?</h3>