mirror of
				https://github.com/searxng/searxng.git
				synced 2025-11-02 18:47:05 -05:00 
			
		
		
		
	show engine errors in infobox && add new error alert
This commit is contained in:
		
							parent
							
								
									3bd5ce6595
								
							
						
					
					
						commit
						243d3e4298
					
				@ -135,6 +135,7 @@ class ResultContainer(object):
 | 
			
		||||
        self._number_of_results = []
 | 
			
		||||
        self._ordered = False
 | 
			
		||||
        self.paging = False
 | 
			
		||||
        self.unresponsive_engines = []
 | 
			
		||||
 | 
			
		||||
    def extend(self, engine_name, results):
 | 
			
		||||
        for result in list(results):
 | 
			
		||||
@ -304,3 +305,6 @@ class ResultContainer(object):
 | 
			
		||||
        if not resultnum_sum or not self._number_of_results:
 | 
			
		||||
            return 0
 | 
			
		||||
        return resultnum_sum / len(self._number_of_results)
 | 
			
		||||
 | 
			
		||||
    def add_unresponsive_engine(self, engine_name):
 | 
			
		||||
        self.unresponsive_engines.append(engine_name)
 | 
			
		||||
 | 
			
		||||
@ -20,6 +20,7 @@ import sys
 | 
			
		||||
import threading
 | 
			
		||||
from time import time
 | 
			
		||||
from uuid import uuid4
 | 
			
		||||
from flask_babel import gettext
 | 
			
		||||
import requests.exceptions
 | 
			
		||||
import searx.poolrequests as requests_lib
 | 
			
		||||
from searx.engines import (
 | 
			
		||||
@ -133,18 +134,21 @@ def search_one_request_safe(engine_name, query, request_params, result_container
 | 
			
		||||
        requests_exception = False
 | 
			
		||||
 | 
			
		||||
        if (issubclass(e.__class__, requests.exceptions.Timeout)):
 | 
			
		||||
            result_container.add_unresponsive_engine((engine_name, gettext('timeout')))
 | 
			
		||||
            # requests timeout (connect or read)
 | 
			
		||||
            logger.error("engine {0} : HTTP requests timeout"
 | 
			
		||||
                         "(search duration : {1} s, timeout: {2} s) : {3}"
 | 
			
		||||
                         .format(engine_name, search_duration, timeout_limit, e.__class__.__name__))
 | 
			
		||||
            requests_exception = True
 | 
			
		||||
        elif (issubclass(e.__class__, requests.exceptions.RequestException)):
 | 
			
		||||
            result_container.add_unresponsive_engine((engine_name, gettext('request exception')))
 | 
			
		||||
            # other requests exception
 | 
			
		||||
            logger.exception("engine {0} : requests exception"
 | 
			
		||||
                             "(search duration : {1} s, timeout: {2} s) : {3}"
 | 
			
		||||
                             .format(engine_name, search_duration, timeout_limit, e))
 | 
			
		||||
            requests_exception = True
 | 
			
		||||
        else:
 | 
			
		||||
            result_container.add_unresponsive_engine((engine_name, gettext('unexpected crash')))
 | 
			
		||||
            # others errors
 | 
			
		||||
            logger.exception('engine {0} : exception : {1}'.format(engine_name, e))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,12 @@
 | 
			
		||||
{% from 'oscar/macros.html' import icon %}
 | 
			
		||||
{% if unresponsive_engines %}
 | 
			
		||||
<div class="alert alert-danger fade in" role="alert">
 | 
			
		||||
    <p><strong class="lead">{{ icon('remove-sign') }} {{ _('Error!') }}</strong> {{ _('Engines cannot retrieve results.') }}</p>
 | 
			
		||||
    <p><small>{{ _('Please, try again later or find another searx instance.') }}</small></p>
 | 
			
		||||
</div>
 | 
			
		||||
{% else %}
 | 
			
		||||
<div class="alert alert-info fade in" role="alert">
 | 
			
		||||
    <button class="close" data-dismiss="alert" type="button">
 | 
			
		||||
        <span aria-hidden="true">×</span>
 | 
			
		||||
        <span class="sr-only">{{ _('Close') }}</span>
 | 
			
		||||
    </button>
 | 
			
		||||
    <strong class="lead">{{ icon('info-sign') }} {{ _('Sorry!') }}</strong>
 | 
			
		||||
    {{ _('we didn\'t find any results. Please use another query or search in more categories.') }}
 | 
			
		||||
</div>
 | 
			
		||||
{% endif %}
 | 
			
		||||
 | 
			
		||||
@ -94,6 +94,16 @@
 | 
			
		||||
            {% if number_of_results != '0' %}
 | 
			
		||||
                <p><small>{{ _('Number of results') }}: {{ number_of_results }}</small></p>
 | 
			
		||||
            {% endif %}
 | 
			
		||||
 | 
			
		||||
            {% if unresponsive_engines and results|length >= 1 %}
 | 
			
		||||
            <div class="alert alert-danger fade in" role="alert">
 | 
			
		||||
                <p>{{ _('Engines cannot retrieve results') }}:</p>
 | 
			
		||||
                {% for engine_name, error_type in unresponsive_engines %}
 | 
			
		||||
                {{ engine_name }} ({{ error_type }}){% if not loop.last %}, {% endif %}
 | 
			
		||||
                {% endfor %}
 | 
			
		||||
            </div>
 | 
			
		||||
            {% endif %}
 | 
			
		||||
 | 
			
		||||
            {% if infoboxes %}
 | 
			
		||||
                {% for infobox in infoboxes %}
 | 
			
		||||
                    {% include 'oscar/infobox.html' %}
 | 
			
		||||
 | 
			
		||||
@ -534,7 +534,8 @@ def index():
 | 
			
		||||
                                    'answers': list(result_container.answers),
 | 
			
		||||
                                    'corrections': list(result_container.corrections),
 | 
			
		||||
                                    'infoboxes': result_container.infoboxes,
 | 
			
		||||
                                    'suggestions': list(result_container.suggestions)}),
 | 
			
		||||
                                    'suggestions': list(result_container.suggestions),
 | 
			
		||||
                                    'unresponsive_engines': list(result_container.unresponsive_engines)}),
 | 
			
		||||
                        mimetype='application/json')
 | 
			
		||||
    elif output_format == 'csv':
 | 
			
		||||
        csv = UnicodeWriter(StringIO())
 | 
			
		||||
@ -573,6 +574,7 @@ def index():
 | 
			
		||||
        corrections=result_container.corrections,
 | 
			
		||||
        infoboxes=result_container.infoboxes,
 | 
			
		||||
        paging=result_container.paging,
 | 
			
		||||
        unresponsive_engines=result_container.unresponsive_engines,
 | 
			
		||||
        current_language=search_query.lang,
 | 
			
		||||
        base_url=get_base_url(),
 | 
			
		||||
        theme=get_current_theme_name(),
 | 
			
		||||
 | 
			
		||||
@ -39,6 +39,7 @@ class ViewsTestCase(SearxTestCase):
 | 
			
		||||
                                                corrections=set(),
 | 
			
		||||
                                                suggestions=set(),
 | 
			
		||||
                                                infoboxes=[],
 | 
			
		||||
                                                unresponsive_engines=[],
 | 
			
		||||
                                                results=self.test_results,
 | 
			
		||||
                                                results_number=lambda: 3,
 | 
			
		||||
                                                results_length=lambda: len(self.test_results))
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user