From 3014463fedd5a4a1e4a7077578a8095e12390c9a Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Wed, 19 May 2021 11:25:32 +0200 Subject: [fix] metrics: processing time = total time if there is no http time It was previsouly None Fix /stats --- searx/metrics/__init__.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'searx/metrics/__init__.py') diff --git a/searx/metrics/__init__.py b/searx/metrics/__init__.py index c2dcfaae4..867daa068 100644 --- a/searx/metrics/__init__.py +++ b/searx/metrics/__init__.py @@ -157,7 +157,11 @@ def get_reliabilities(engline_name_list, checker_results): def round_or_none(number, digits): - return round(number, digits) if number else number + '''return None if number is None + return 0 if number is 0 + otherwise round number with "digits numbers. + ''' + return round(number, digits) if number is not None else number def get_engines_stats(engine_name_list): @@ -192,6 +196,8 @@ def get_engines_stats(engine_name_list): max_time_total = max(time_total or 0, max_time_total or 0) max_result_count = max(result_count or 0, max_result_count or 0) + time_total_is_number = time_total is not None + list_time.append({ 'name': engine_name, 'total': round_or_none(time_total, 1), @@ -200,9 +206,9 @@ def get_engines_stats(engine_name_list): 'http': round_or_none(time_http, 1), 'http_p80': round_or_none(time_http_p80, 1), 'http_p95': round_or_none(time_http_p95, 1), - 'processing': round(time_total - time_http, 1) if time_total else None, - 'processing_p80': round(time_total_p80 - time_http_p80, 1) if time_total else None, - 'processing_p95': round(time_total_p95 - time_http_p95, 1) if time_total else None, + 'processing': round(time_total - (time_http or 0), 1) if time_total_is_number else None, + 'processing_p80': round(time_total_p80 - (time_http_p80 or 0), 1) if time_total_is_number else None, + 'processing_p95': round(time_total_p95 - (time_http_p95 or 0), 1) if time_total_is_number else None, 'score': score, 'score_per_result': score_per_result, 'result_count': result_count, -- cgit v1.2.3 From 7728e25b11698edd01be048bb8e3b866001cf5c8 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Fri, 21 May 2021 12:09:51 +0200 Subject: [refactor] metrics.get_reliabilities() - make code more readable - init stat values by None - drop round_or_none - don't try to get percentage if base is 'None' Signed-off-by: Markus Heiser --- searx/metrics/__init__.py | 89 +++++++++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 38 deletions(-) (limited to 'searx/metrics/__init__.py') diff --git a/searx/metrics/__init__.py b/searx/metrics/__init__.py index 867daa068..2ef73149b 100644 --- a/searx/metrics/__init__.py +++ b/searx/metrics/__init__.py @@ -156,63 +156,76 @@ def get_reliabilities(engline_name_list, checker_results): return reliabilities -def round_or_none(number, digits): - '''return None if number is None - return 0 if number is 0 - otherwise round number with "digits numbers. - ''' - return round(number, digits) if number is not None else number - - def get_engines_stats(engine_name_list): assert counter_storage is not None assert histogram_storage is not None list_time = [] + max_time_total = max_result_count = None - max_time_total = max_result_count = None # noqa for engine_name in engine_name_list: + sent_count = counter('engine', engine_name, 'search', 'count', 'sent') if sent_count == 0: continue - successful_count = counter('engine', engine_name, 'search', 'count', 'successful') - - time_total = histogram('engine', engine_name, 'time', 'total').percentage(50) - time_http = histogram('engine', engine_name, 'time', 'http').percentage(50) - time_total_p80 = histogram('engine', engine_name, 'time', 'total').percentage(80) - time_http_p80 = histogram('engine', engine_name, 'time', 'http').percentage(80) - time_total_p95 = histogram('engine', engine_name, 'time', 'total').percentage(95) - time_http_p95 = histogram('engine', engine_name, 'time', 'http').percentage(95) - result_count = histogram('engine', engine_name, 'result', 'count').percentage(50) result_count_sum = histogram('engine', engine_name, 'result', 'count').sum - if successful_count and result_count_sum: - score = counter('engine', engine_name, 'score') # noqa - score_per_result = score / float(result_count_sum) - else: - score = score_per_result = 0.0 + successful_count = counter('engine', engine_name, 'search', 'count', 'successful') + time_total = histogram('engine', engine_name, 'time', 'total').percentage(50) max_time_total = max(time_total or 0, max_time_total or 0) max_result_count = max(result_count or 0, max_result_count or 0) - time_total_is_number = time_total is not None - - list_time.append({ + stats = { 'name': engine_name, - 'total': round_or_none(time_total, 1), - 'total_p80': round_or_none(time_total_p80, 1), - 'total_p95': round_or_none(time_total_p95, 1), - 'http': round_or_none(time_http, 1), - 'http_p80': round_or_none(time_http_p80, 1), - 'http_p95': round_or_none(time_http_p95, 1), - 'processing': round(time_total - (time_http or 0), 1) if time_total_is_number else None, - 'processing_p80': round(time_total_p80 - (time_http_p80 or 0), 1) if time_total_is_number else None, - 'processing_p95': round(time_total_p95 - (time_http_p95 or 0), 1) if time_total_is_number else None, - 'score': score, - 'score_per_result': score_per_result, + 'total': None, + 'total_p80': None, + 'total_p95': None, + 'http': None, + 'http_p80': None, + 'http_p95': None, + 'processing': None, + 'processing_p80': None, + 'processing_p95': None, + 'score': 0, + 'score_per_result': 0, 'result_count': result_count, - }) + } + + if successful_count and result_count_sum: + score = counter('engine', engine_name, 'score') + + stats['score'] = score + stats['score_per_result'] = score / float(result_count_sum) + + time_http = histogram('engine', engine_name, 'time', 'http').percentage(50) + time_http_p80 = time_http_p95 = 0 + + if time_http is not None: + + time_http_p80 = histogram('engine', engine_name, 'time', 'http').percentage(80) + time_http_p95 = histogram('engine', engine_name, 'time', 'http').percentage(95) + + stats['http'] = round(time_http, 1) + stats['http_p80'] = round(time_http_p80, 1) + stats['http_p95'] = round(time_http_p95, 1) + + if time_total is not None: + + time_total_p80 = histogram('engine', engine_name, 'time', 'total').percentage(80) + time_total_p95 = histogram('engine', engine_name, 'time', 'total').percentage(95) + + stats['total'] = round(time_total, 1) + stats['total_p80'] = round(time_total_p80, 1) + stats['total_p95'] = round(time_total_p95, 1) + + stats['processing'] = round(time_total - (time_http or 0), 1) + stats['processing_p80'] = round(time_total_p80 - time_http_p80, 1) + stats['processing_p95'] = round(time_total_p95 - time_http_p95, 1) + + list_time.append(stats) + return { 'time': list_time, 'max_time': math.ceil(max_time_total or 0), -- cgit v1.2.3