diff --git a/searx/metrics/__init__.py b/searx/metrics/__init__.py index 2932ae92c..245490564 100644 --- a/searx/metrics/__init__.py +++ b/searx/metrics/__init__.py @@ -13,7 +13,7 @@ from .error_recorder import count_error, count_exception, errors_per_engines __all__ = [ "initialize", - "get_engines_stats", + "get_engines_metrics", "get_engine_errors", "histogram", "histogram_observe", @@ -189,7 +189,36 @@ def get_reliabilities(engline_name_list, checker_results) -> Dict[str, EngineRel return reliabilities -def get_engines_stats(engine_name_list): +class EngineStat(TypedDict): + """Metrics for one engine. To do: check the types""" + + name: str + total: Optional[float] + total_p80: Optional[float] + totla_p95: Optional[float] + http: Optional[float] + http_p80: Optional[float] + http_p95: Optional[float] + processing: Optional[float] + processing_p80: Optional[float] + processing_p95: Optional[float] + score: float + score_per_result: float + result_count: int + + +class EngineStatResult(TypedDict): + time: List[EngineStat] + """List of engine stat""" + + max_time: float + """Maximum response time for all the engines""" + + max_result_count: int + """Maximum number of result for all the engines""" + + +def get_engines_metrics(engine_name_list) -> EngineStatResult: assert counter_storage is not None assert histogram_storage is not None diff --git a/searx/webapp.py b/searx/webapp.py index bf7e5dcd8..929910ca5 100755 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -103,7 +103,7 @@ from searx.answerers import ( ask, ) from searx.metrics import ( - get_engines_stats, + get_engines_metrics, get_engine_errors, get_reliabilities, histogram, @@ -1222,7 +1222,7 @@ def stats(): checker_results['engines'] if checker_results['status'] == 'ok' and 'engines' in checker_results else {} ) - engine_stats = get_engines_stats(filtered_engines) + engine_metrics = get_engines_metrics(filtered_engines) engine_reliabilities = get_reliabilities(filtered_engines, checker_results) if sort_order not in STATS_SORT_PARAMETERS: @@ -1242,12 +1242,12 @@ def stats(): reliability_order = 1 - reliability_order return (reliability_order, key, engine_stat['name']) - engine_stats['time'] = sorted(engine_stats['time'], reverse=reverse, key=get_key) + engine_metrics['time'] = sorted(engine_metrics['time'], reverse=reverse, key=get_key) return render( # fmt: off 'stats.html', sort_order = sort_order, - engine_stats = engine_stats, + engine_stats = engine_metrics, engine_reliabilities = engine_reliabilities, selected_engine_name = selected_engine_name, searx_git_branch = GIT_BRANCH,