From a99d32c8f1fdb0db566d861dc06c1e45f799072a Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Wed, 9 Mar 2022 13:15:21 +0100 Subject: [PATCH] feat(api): optimized errors-stats query --- api/chalicelib/core/errors.py | 32 +++++++++++++++----------------- ee/api/chalicelib/core/errors.py | 30 ++++++++++++++---------------- 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/api/chalicelib/core/errors.py b/api/chalicelib/core/errors.py index 2bd4a8d80..48e6b7bd9 100644 --- a/api/chalicelib/core/errors.py +++ b/api/chalicelib/core/errors.py @@ -754,22 +754,20 @@ def format_first_stack_frame(error): def stats(project_id, user_id, startTimestamp=TimeUTC.now(delta_days=-7), endTimestamp=TimeUTC.now()): with pg_client.PostgresClient() as cur: query = cur.mogrify( - """ - SELECT COUNT(errors.*) AS unresolved_and_unviewed - FROM public.errors - INNER JOIN (SELECT root_error.error_id - FROM events.errors - INNER JOIN public.errors AS root_error USING (error_id) - WHERE project_id = %(project_id)s - AND timestamp >= %(startTimestamp)s - AND timestamp <= %(endTimestamp)s - AND source = 'js_exception') AS timed_errors USING (error_id) - LEFT JOIN (SELECT error_id FROM public.user_viewed_errors WHERE user_id = %(user_id)s) AS user_viewed - USING (error_id) - WHERE user_viewed.error_id ISNULL - AND errors.project_id = %(project_id)s - AND errors.status = 'unresolved' - AND errors.source = 'js_exception';""", + """WITH user_viewed AS (SELECT error_id FROM public.user_viewed_errors WHERE user_id = %(user_id)s) + SELECT COUNT(timed_errors.*) AS unresolved_and_unviewed + FROM (SELECT root_error.error_id + FROM events.errors + INNER JOIN public.errors AS root_error USING (error_id) + LEFT JOIN user_viewed USING (error_id) + WHERE project_id = %(project_id)s + AND timestamp >= %(startTimestamp)s + AND timestamp <= %(endTimestamp)s + AND source = 'js_exception' + AND root_error.status = 'unresolved' + AND user_viewed.error_id ISNULL + LIMIT 1 + ) AS timed_errors;""", {"project_id": project_id, "user_id": user_id, "startTimestamp": startTimestamp, "endTimestamp": endTimestamp}) cur.execute(query=query) @@ -777,4 +775,4 @@ def stats(project_id, user_id, startTimestamp=TimeUTC.now(delta_days=-7), endTim return { "data": helper.dict_to_camel_case(row) - } \ No newline at end of file + } diff --git a/ee/api/chalicelib/core/errors.py b/ee/api/chalicelib/core/errors.py index b25efee7b..04efdbb32 100644 --- a/ee/api/chalicelib/core/errors.py +++ b/ee/api/chalicelib/core/errors.py @@ -766,22 +766,20 @@ def format_first_stack_frame(error): def stats(project_id, user_id, startTimestamp=TimeUTC.now(delta_days=-7), endTimestamp=TimeUTC.now()): with pg_client.PostgresClient() as cur: query = cur.mogrify( - """ - SELECT COUNT(errors.*) AS unresolved_and_unviewed - FROM public.errors - INNER JOIN (SELECT root_error.error_id - FROM events.errors - INNER JOIN public.errors AS root_error USING (error_id) - WHERE project_id = %(project_id)s - AND timestamp >= %(startTimestamp)s - AND timestamp <= %(endTimestamp)s - AND source = 'js_exception') AS timed_errors USING (error_id) - LEFT JOIN (SELECT error_id FROM public.user_viewed_errors WHERE user_id = %(user_id)s) AS user_viewed - USING (error_id) - WHERE user_viewed.error_id ISNULL - AND errors.project_id = %(project_id)s - AND errors.status = 'unresolved' - AND errors.source = 'js_exception';""", + """WITH user_viewed AS (SELECT error_id FROM public.user_viewed_errors WHERE user_id = %(user_id)s) + SELECT COUNT(timed_errors.*) AS unresolved_and_unviewed + FROM (SELECT root_error.error_id + FROM events.errors + INNER JOIN public.errors AS root_error USING (error_id) + LEFT JOIN user_viewed USING (error_id) + WHERE project_id = %(project_id)s + AND timestamp >= %(startTimestamp)s + AND timestamp <= %(endTimestamp)s + AND source = 'js_exception' + AND root_error.status = 'unresolved' + AND user_viewed.error_id ISNULL + LIMIT 1 + ) AS timed_errors;""", {"project_id": project_id, "user_id": user_id, "startTimestamp": startTimestamp, "endTimestamp": endTimestamp}) cur.execute(query=query)