From e322e9c3d0a415148ef97a88774c202de9824bc0 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 26 Apr 2022 18:10:25 +0200 Subject: [PATCH] feat(api): round time metrics --- api/chalicelib/core/metrics.py | 34 ++++++++++--------- api/chalicelib/utils/helper.py | 20 +++++++++++- api/schemas.py | 1 + ee/api/chalicelib/core/metrics.py | 54 +++++++++++++++++-------------- 4 files changed, 67 insertions(+), 42 deletions(-) diff --git a/api/chalicelib/core/metrics.py b/api/chalicelib/core/metrics.py index fb8241440..05c5233f8 100644 --- a/api/chalicelib/core/metrics.py +++ b/api/chalicelib/core/metrics.py @@ -967,7 +967,7 @@ def get_pages_dom_build_time(project_id, startTimestamp=TimeUTC.now(delta_days=- cur.execute(cur.mogrify(pg_query, params)) row = cur.fetchone() - row["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(row) return row @@ -1126,7 +1126,9 @@ def get_pages_response_time(project_id, startTimestamp=TimeUTC.now(delta_days=-1 WHERE {" AND ".join(pg_sub_query)};""" cur.execute(cur.mogrify(pg_query, params)) avg = cur.fetchone()["avg"] - return {"value": avg, "chart": rows, "unit": schemas.TemplatePredefinedUnits.millisecond} + result = {"value": avg, "chart": rows} + helper.__time_value(result) + return result def get_pages_response_time_distribution(project_id, startTimestamp=TimeUTC.now(delta_days=-1), @@ -1348,7 +1350,7 @@ def get_time_to_render(project_id, startTimestamp=TimeUTC.now(delta_days=-1), "endTimestamp": endTimestamp, "value": url, **__get_constraint_values(args)} cur.execute(cur.mogrify(pg_query, params)) row = cur.fetchone() - row["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(row) return row @@ -2241,7 +2243,7 @@ def get_application_activity_avg_image_load_time(project_id, startTimestamp=Time row = __get_application_activity_avg_image_load_time(cur, project_id, startTimestamp, endTimestamp, **args) previous = helper.dict_to_camel_case(row) results["progress"] = helper.__progress(old_val=previous["value"], new_val=results["value"]) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return results @@ -2300,7 +2302,7 @@ def __get_application_activity_avg_page_load_time(cur, project_id, startTimestam cur.execute(cur.mogrify(pg_query, params)) row = cur.fetchone() - row["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(row) return row @@ -2316,7 +2318,7 @@ def get_application_activity_avg_page_load_time(project_id, startTimestamp=TimeU row = __get_application_activity_avg_page_load_time(cur, project_id, startTimestamp, endTimestamp, **args) previous = helper.dict_to_camel_case(row) results["progress"] = helper.__progress(old_val=previous["value"], new_val=results["value"]) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return results @@ -2369,7 +2371,7 @@ def __get_application_activity_avg_request_load_time(cur, project_id, startTimes "endTimestamp": endTimestamp, **__get_constraint_values(args)})) row = cur.fetchone() - row["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(row) return row @@ -2385,7 +2387,7 @@ def get_application_activity_avg_request_load_time(project_id, startTimestamp=Ti row = __get_application_activity_avg_request_load_time(cur, project_id, startTimestamp, endTimestamp, **args) previous = helper.dict_to_camel_case(row) results["progress"] = helper.__progress(old_val=previous["value"], new_val=results["value"]) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return results @@ -2442,7 +2444,7 @@ def get_page_metrics_avg_dom_content_load_start(project_id, startTimestamp=TimeU row = __get_page_metrics_avg_dom_content_load_start(cur, project_id, startTimestamp, endTimestamp, **args) previous = helper.dict_to_camel_case(row) results["progress"] = helper.__progress(old_val=previous["value"], new_val=results["value"]) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return results @@ -2512,7 +2514,7 @@ def get_page_metrics_avg_first_contentful_pixel(project_id, startTimestamp=TimeU if len(rows) > 0: previous = helper.dict_to_camel_case(rows[0]) results["progress"] = helper.__progress(old_val=previous["value"], new_val=results["value"]) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return results @@ -2645,7 +2647,7 @@ def get_user_activity_avg_session_duration(project_id, startTimestamp=TimeUTC.no previous = helper.dict_to_camel_case(row) results["progress"] = helper.__progress(old_val=previous["value"], new_val=results["value"]) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return results @@ -2731,7 +2733,7 @@ def get_top_metrics_avg_response_time(project_id, startTimestamp=TimeUTC.now(del cur.execute(cur.mogrify(pg_query, params)) rows = cur.fetchall() row["chart"] = helper.list_to_camel_case(rows) - row["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(row) return helper.dict_to_camel_case(row) @@ -2772,7 +2774,7 @@ def get_top_metrics_avg_first_paint(project_id, startTimestamp=TimeUTC.now(delta cur.execute(cur.mogrify(pg_query, params)) rows = cur.fetchall() row["chart"] = helper.list_to_camel_case(rows) - row["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(row) return helper.dict_to_camel_case(row) @@ -2816,7 +2818,7 @@ def get_top_metrics_avg_dom_content_loaded(project_id, startTimestamp=TimeUTC.no cur.execute(cur.mogrify(pg_query, params)) rows = cur.fetchall() row["chart"] = helper.list_to_camel_case(rows) - row["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(row) return helper.dict_to_camel_case(row) @@ -2857,7 +2859,7 @@ def get_top_metrics_avg_till_first_bit(project_id, startTimestamp=TimeUTC.now(de cur.execute(cur.mogrify(pg_query, params)) rows = cur.fetchall() row["chart"] = helper.list_to_camel_case(rows) - row["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(row) return helper.dict_to_camel_case(row) @@ -2899,7 +2901,7 @@ def get_top_metrics_avg_time_to_interactive(project_id, startTimestamp=TimeUTC.n cur.execute(cur.mogrify(pg_query, params)) rows = cur.fetchall() row["chart"] = helper.list_to_camel_case(rows) - row["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(row) return helper.dict_to_camel_case(row) diff --git a/api/chalicelib/utils/helper.py b/api/chalicelib/utils/helper.py index 8cfab8a3f..042b2a94b 100644 --- a/api/chalicelib/utils/helper.py +++ b/api/chalicelib/utils/helper.py @@ -1,12 +1,13 @@ +import math import random import re import string from typing import Union -import math import requests import schemas +from chalicelib.utils.TimeUTC import TimeUTC local_prefix = 'local-' from decouple import config @@ -384,3 +385,20 @@ def custom_alert_to_front(values): if values.get("seriesId") is not None and values["query"]["left"] == schemas.AlertColumn.custom: values["query"]["left"] = values["seriesId"] return values + + +def __time_value(row): + row["unit"] = schemas.TemplatePredefinedUnits.millisecond + factor = 1 + if row["value"] > TimeUTC.MS_MINUTE: + row["value"] = row["value"] / TimeUTC.MS_MINUTE + row["unit"] = schemas.TemplatePredefinedUnits.minute + factor = TimeUTC.MS_MINUTE + elif row["value"] > 1 * 1000: + row["value"] = row["value"] / 1000 + row["unit"] = schemas.TemplatePredefinedUnits.second + factor = 1000 + + if "chart" in row and factor > 1: + for r in row["chart"]: + r["value"] /= factor diff --git a/api/schemas.py b/api/schemas.py index f1daef481..bb697d03f 100644 --- a/api/schemas.py +++ b/api/schemas.py @@ -966,6 +966,7 @@ class TemplatePredefinedKeys(str, Enum): class TemplatePredefinedUnits(str, Enum): millisecond = "ms" + second = "s" minute = "min" memory = "mb" frame = "f/s" diff --git a/ee/api/chalicelib/core/metrics.py b/ee/api/chalicelib/core/metrics.py index 668ce4760..2d6aa7201 100644 --- a/ee/api/chalicelib/core/metrics.py +++ b/ee/api/chalicelib/core/metrics.py @@ -943,11 +943,13 @@ def get_pages_dom_build_time(project_id, startTimestamp=TimeUTC.now(delta_days=- FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} WHERE {" AND ".join(ch_sub_query_chart)};""" avg = ch.execute(query=ch_query, params=params)[0]["avg"] if len(rows) > 0 else 0 - return {"value": avg, - "chart": __complete_missing_steps(rows=rows, start_time=startTimestamp, - end_time=endTimestamp, - density=density, neutral={"value": 0}), - "unit": schemas.TemplatePredefinedUnits.millisecond} + + results = {"value": avg, + "chart": __complete_missing_steps(rows=rows, start_time=startTimestamp, + end_time=endTimestamp, + density=density, neutral={"value": 0})} + helper.__time_value(results) + return results def get_slowest_resources(project_id, startTimestamp=TimeUTC.now(delta_days=-1), @@ -1088,11 +1090,12 @@ def get_pages_response_time(project_id, startTimestamp=TimeUTC.now(delta_days=-1 FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} WHERE {" AND ".join(ch_sub_query_chart)};""" avg = ch.execute(query=ch_query, params=params)[0]["avg"] if len(rows) > 0 else 0 - return {"value": avg, - "chart": __complete_missing_steps(rows=rows, start_time=startTimestamp, - end_time=endTimestamp, - density=density, neutral={"value": 0}), - "unit": schemas.TemplatePredefinedUnits.millisecond} + results = {"value": avg, + "chart": __complete_missing_steps(rows=rows, start_time=startTimestamp, + end_time=endTimestamp, + density=density, neutral={"value": 0})} + helper.__time_value(results) + return results def get_pages_response_time_distribution(project_id, startTimestamp=TimeUTC.now(delta_days=-1), @@ -1288,10 +1291,11 @@ def get_time_to_render(project_id, startTimestamp=TimeUTC.now(delta_days=-1), FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} WHERE {" AND ".join(ch_sub_query_chart)};""" avg = ch.execute(query=ch_query, params=params)[0]["avg"] if len(rows) > 0 else 0 - return {"value": avg, "chart": __complete_missing_steps(rows=rows, start_time=startTimestamp, - end_time=endTimestamp, density=density, - neutral={"value": 0}), - "unit": schemas.TemplatePredefinedUnits.millisecond} + results = {"value": avg, "chart": __complete_missing_steps(rows=rows, start_time=startTimestamp, + end_time=endTimestamp, density=density, + neutral={"value": 0})} + helper.__time_value(results) + return results def get_impacted_sessions_by_slow_pages(project_id, startTimestamp=TimeUTC.now(delta_days=-1), @@ -2102,7 +2106,7 @@ def get_application_activity_avg_page_load_time(project_id, startTimestamp=TimeU row = __get_application_activity_avg_page_load_time(ch, project_id, startTimestamp, endTimestamp, **args) previous = helper.dict_to_camel_case(row) results["progress"] = helper.__progress(old_val=previous["value"], new_val=results["value"]) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return results @@ -2179,7 +2183,7 @@ def get_application_activity_avg_image_load_time(project_id, startTimestamp=Time row = __get_application_activity_avg_image_load_time(ch, project_id, startTimestamp, endTimestamp, **args) previous = helper.dict_to_camel_case(row) results["progress"] = helper.__progress(old_val=previous["value"], new_val=results["value"]) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return results @@ -2255,7 +2259,7 @@ def get_application_activity_avg_request_load_time(project_id, startTimestamp=Ti row = __get_application_activity_avg_request_load_time(ch, project_id, startTimestamp, endTimestamp, **args) previous = helper.dict_to_camel_case(row) results["progress"] = helper.__progress(old_val=previous["value"], new_val=results["value"]) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return results @@ -2334,7 +2338,7 @@ def get_page_metrics_avg_dom_content_load_start(project_id, startTimestamp=TimeU if len(rows) > 0: previous = helper.dict_to_camel_case(rows[0]) results["progress"] = helper.__progress(old_val=previous["value"], new_val=results["value"]) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return results @@ -2395,7 +2399,7 @@ def get_page_metrics_avg_first_contentful_pixel(project_id, startTimestamp=TimeU if len(rows) > 0: previous = helper.dict_to_camel_case(rows[0]) results["progress"] = helper.__progress(old_val=previous["value"], new_val=results["value"]) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return results @@ -2529,7 +2533,7 @@ def get_user_activity_avg_session_duration(project_id, startTimestamp=TimeUTC.no if len(rows) > 0: previous = helper.dict_to_camel_case(rows[0]) results["progress"] = helper.__progress(old_val=previous["value"], new_val=results["value"]) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return results @@ -2608,7 +2612,7 @@ def get_top_metrics_avg_response_time(project_id, startTimestamp=TimeUTC.now(del end_time=endTimestamp, density=density, neutral={"value": 0}) results["chart"] = rows - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return helper.dict_to_camel_case(results) @@ -2684,7 +2688,7 @@ def get_top_metrics_avg_first_paint(project_id, startTimestamp=TimeUTC.now(delta density=density, neutral={"value": 0})) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return helper.dict_to_camel_case(results) @@ -2726,7 +2730,7 @@ def get_top_metrics_avg_dom_content_loaded(project_id, startTimestamp=TimeUTC.no end_time=endTimestamp, density=density, neutral={"value": 0})) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return results @@ -2768,7 +2772,7 @@ def get_top_metrics_avg_till_first_bit(project_id, startTimestamp=TimeUTC.now(de end_time=endTimestamp, density=density, neutral={"value": 0})) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return helper.dict_to_camel_case(results) @@ -2810,5 +2814,5 @@ def get_top_metrics_avg_time_to_interactive(project_id, startTimestamp=TimeUTC.n end_time=endTimestamp, density=density, neutral={"value": 0})) - results["unit"] = schemas.TemplatePredefinedUnits.millisecond + helper.__time_value(results) return helper.dict_to_camel_case(results)