on master help sign in
[enh] new stat: average request duration
43ac547asciimoo
searx/engines/__init__.py+9−2
@@ -25,6 +25,7 @@ from urlparse import urlparse
25from searx import settings
25from searx import settings
26import ConfigParser
26import ConfigParser
27import sys
27import sys
28+from datetime import datetime
28
29
29engine_dir = dirname(realpath(__file__))
30engine_dir = dirname(realpath(__file__))
30searx_dir = join(engine_dir, '../../')
31searx_dir = join(engine_dir, '../../')
@@ -67,7 +68,7 @@ for section in engines_config.sections():
67 print '[E] Engine config error: Missing attribute "{0}.{1}"'.format(engine.name, engine_attr)
68 print '[E] Engine config error: Missing attribute "{0}.{1}"'.format(engine.name, engine_attr)
68 sys.exit(1)
69 sys.exit(1)
69 engines[engine.name] = engine
70 engines[engine.name] = engine
70− engine.stats = {'result_count': 0, 'search_count': 0}
71+ engine.stats = {'result_count': 0, 'search_count': 0, 'page_load_time': 0}
71 if hasattr(engine, 'categories'):
72 if hasattr(engine, 'categories'):
72 for category_name in engine.categories:
73 for category_name in engine.categories:
73 categories.setdefault(category_name, []).append(engine)
74 categories.setdefault(category_name, []).append(engine)
@@ -81,6 +82,7 @@ def make_callback(engine_name, results, callback, params):
81 def process_callback(response, **kwargs):
82 def process_callback(response, **kwargs):
82 cb_res = []
83 cb_res = []
83 response.search_params = params
84 response.search_params = params
85+ engines[engine_name].stats['page_load_time'] += (datetime.now() - params['started']).total_seconds()
84 for result in callback(response):
86 for result in callback(response):
85 result['engine'] = engine_name
87 result['engine'] = engine_name
86 cb_res.append(result)
88 cb_res.append(result)
@@ -104,6 +106,7 @@ def search(query, request, selected_categories):
104 request_params = default_request_params()
106 request_params = default_request_params()
105 request_params['headers']['User-Agent'] = user_agent
107 request_params['headers']['User-Agent'] = user_agent
106 request_params['category'] = selected_engine['category']
108 request_params['category'] = selected_engine['category']
109+ request_params['started'] = datetime.now()
107 request_params = engine.request(query, request_params)
110 request_params = engine.request(query, request_params)
108 callback = make_callback(selected_engine['name'], results, engine.response, request_params)
111 callback = make_callback(selected_engine['name'], results, engine.response, request_params)
109 if request_params['method'] == 'GET':
112 if request_params['method'] == 'GET':
@@ -161,6 +164,10 @@ def get_engines_stats():
161 for engine in engines.values():
164 for engine in engines.values():
162 if engine.stats['search_count'] == 0:
165 if engine.stats['search_count'] == 0:
163 continue
166 continue
167+ results_num = engine.stats['result_count']/float(engine.stats['search_count'])
168+ load_times = engine.stats['page_load_time']/float(engine.stats['search_count'])
164− stats[engine.name] = {'Average number of results': engine.stats['result_count']/float(engine.stats['search_count'])}
169+ stats[engine.name] = {'Average number of results': results_num
170+ ,'Average page load time': load_times
171+ }
165
172
166 return stats
173 return stats