on master help sign in
[enh] oscar theme: display engine response times in the preferences
d4d2dd9Alexandre Flament
searx/templates/oscar/preferences.html+36−9
@@ -134,21 +134,48 @@
134 <div class="tab-pane{% if loop.first %} active{% endif %} active_if_nojs" id="tab_engine_{{ categ|replace(' ', '_') }}">
134 <div class="tab-pane{% if loop.first %} active{% endif %} active_if_nojs" id="tab_engine_{{ categ|replace(' ', '_') }}">
135 <div class="container-fluid">
135 <div class="container-fluid">
136 <fieldset>
136 <fieldset>
137+ <div class="table-responsive">
138+ <table class="table table-hover table-condensed table-striped">
139+ <tr>
140+ {% if not rtl %}
141+ <th>{{ _("Allow") }}</th>
142+ <th>{{ _("Engine name") }}</th>
143+ <th>{{ _("Shortcut") }}</th>
144+ <th>{{ _("SafeSearch") }}</th>
145+ <th>{{ _("Avg. time") }}</th>
146+ <th>{{ _("Max time") }}</th>
147+ {% else %}
148+ <th>{{ _("Max time") }}</th>
149+ <th>{{ _("Avg. time") }}</th>
150+ <th>{{ _("SafeSearch") }}</th>
151+ <th>{{ _("Shortcut") }}</th>
152+ <th>{{ _("Engine name") }}</th>
153+ <th>{{ _("Allow") }}</th>
154+ {% endif %}
155+ </tr>
137 {% for search_engine in engines_by_category[categ] %}
156 {% for search_engine in engines_by_category[categ] %}
138 {% if not search_engine.private %}
157 {% if not search_engine.private %}
139− <div class="row">
158+ <tr>
140 {% if not rtl %}
159 {% if not rtl %}
160+ <td>{{ checkbox_toggle('engine_' + search_engine.name|replace(' ', '_') + '__' + categ|replace(' ', '_'), (search_engine.name, categ) in blocked_engines) }}</td>
161+ <th>{{ search_engine.name }}</th>
162+ <td>{{ shortcuts[search_engine.name] }}</td>
163+ <td><input type="checkbox" {{ "checked" if search_engine.safesearch==True else ""}} readonly="readonly" disabled="disabled"></td>
164+ <td class="{{ 'danger' if stats[search_engine.name]['warn_time'] else '' }}">{{ 'N/A' if stats[search_engine.name].time==None else stats[search_engine.name].time }}</td>
165+ <td class="{{ 'danger' if stats[search_engine.name]['warn_timeout'] else '' }}">{{ search_engine.timeout }}</td>
166+ {% else %}
167+ <td class="{{ 'danger' if stats[search_engine.name]['warn_timeout'] else '' }}">{{ search_engine.timeout }}</td>
168+ <td class="{{ 'danger' if stats[search_engine.name]['warn_time'] else '' }}">{{ 'N/A' if stats[search_engine.name].time==None else stats[search_engine.name].time }}</td>
169+ <td><input type="checkbox" {{ "checked" if search_engine.safesearch==True else ""}} readonly="readonly" disabled="disabled"></td>
141− <div class="col-xs-6 col-sm-4 col-md-4">{{ search_engine.name }} ({{ shortcuts[search_engine.name] }})</div>
170+ <td>{{ shortcuts[search_engine.name] }}</td>
171+ <th>{{ search_engine.name }}</th>
172+ <td>{{ checkbox_toggle('engine_' + search_engine.name|replace(' ', '_') + '__' + categ|replace(' ', '_'), (search_engine.name, categ) in blocked_engines) }}</td>
142 {% endif %}
173 {% endif %}
143− <div class="col-xs-6 col-sm-4 col-md-4">
174+ </tr>
144− {{ checkbox_toggle('engine_' + search_engine.name|replace(' ', '_') + '__' + categ|replace(' ', '_'), (search_engine.name, categ) in blocked_engines) }}
145− </div>
146− {% if rtl %}
147− <div class="col-xs-6 col-sm-4 col-md-4">{{ search_engine.name }} ({{ shortcuts[search_engine.name] }})&lrm;</div>
148− {% endif %}
149− </div>
150 {% endif %}
175 {% endif %}
151 {% endfor %}
176 {% endfor %}
177+ </table>
178+ </div>
152 </fieldset>
179 </fieldset>
153 </div>
180 </div>
154 </div>
181 </div>
searx/webapp.py+19
@@ -623,6 +623,24 @@ def preferences():
623 resp.set_cookie('theme', theme, max_age=cookie_max_age)
623 resp.set_cookie('theme', theme, max_age=cookie_max_age)
624
624
625 return resp
625 return resp
626+
627+ # stats for preferences page
628+ stats = {}
629+
630+ for c in categories:
631+ for e in categories[c]:
632+ stats[e.name] = {'time': None,
633+ 'warn_timeout': False,
634+ 'warn_time': False}
635+ if e.timeout > settings['server']['request_timeout']:
636+ stats[e.name]['warn_timeout'] = True
637+
638+ for engine_stat in get_engines_stats()[0][1]:
639+ stats[engine_stat.get('name')]['time'] = round(engine_stat.get('avg'), 3)
640+ if engine_stat.get('avg') > settings['server']['request_timeout']:
641+ stats[engine_stat.get('name')]['warn_time'] = True
642+ # end of stats
643+
626 return render('preferences.html',
644 return render('preferences.html',
627 locales=settings['locales'],
645 locales=settings['locales'],
628 current_locale=get_locale(),
646 current_locale=get_locale(),
@@ -630,6 +648,7 @@ def preferences():
630 image_proxy=image_proxy,
648 image_proxy=image_proxy,
631 language_codes=language_codes,
649 language_codes=language_codes,
632 engines_by_category=categories,
650 engines_by_category=categories,
651+ stats=stats,
633 blocked_engines=blocked_engines,
652 blocked_engines=blocked_engines,
634 autocomplete_backends=autocomplete_backends,
653 autocomplete_backends=autocomplete_backends,
635 shortcuts={y: x for x, y in engine_shortcuts.items()},
654 shortcuts={y: x for x, y in engine_shortcuts.items()},