浏览代码

[enh] engine statistics

asciimoo 11 年前
父节点
当前提交
b8191f43e7
共有 1 个文件被更改,包括 14 次插入0 次删除
  1. 14
    0
      searx/engines/__init__.py

+ 14
- 0
searx/engines/__init__.py 查看文件

67
             print '[E] Engine config error: Missing attribute "{0}.{1}"'.format(engine.name, engine_attr)
67
             print '[E] Engine config error: Missing attribute "{0}.{1}"'.format(engine.name, engine_attr)
68
             sys.exit(1)
68
             sys.exit(1)
69
     engines[engine.name] = engine
69
     engines[engine.name] = engine
70
+    engine.stats = {'result_count': 0, 'search_count': 0}
70
     if hasattr(engine, 'categories'):
71
     if hasattr(engine, 'categories'):
71
         for category_name in engine.categories:
72
         for category_name in engine.categories:
72
             categories.setdefault(category_name, []).append(engine)
73
             categories.setdefault(category_name, []).append(engine)
120
                                 )
121
                                 )
121
         requests.append(req)
122
         requests.append(req)
122
     grequests.map(requests)
123
     grequests.map(requests)
124
+    for engine_name,engine_results in results.items():
125
+        engines[engine_name].stats['search_count'] += 1
126
+        engines[engine_name].stats['result_count'] += len(engine_results)
123
     flat_res = filter(None, chain.from_iterable(izip_longest(*results.values())))
127
     flat_res = filter(None, chain.from_iterable(izip_longest(*results.values())))
124
     flat_len = len(flat_res)
128
     flat_len = len(flat_res)
125
     results = []
129
     results = []
150
             results.append(res)
154
             results.append(res)
151
 
155
 
152
     return sorted(results, key=itemgetter('score'), reverse=True)
156
     return sorted(results, key=itemgetter('score'), reverse=True)
157
+
158
+def get_engines_stats():
159
+    stats = {}
160
+
161
+    for engine in engines.values():
162
+        if engine.stats['search_count'] == 0:
163
+            continue
164
+        stats[engine.name] = {'Average number of results': engine.stats['result_count']/float(engine.stats['search_count'])}
165
+
166
+    return stats