From aeca1a59d3a46725871323321ef213de2000c2a6 Mon Sep 17 00:00:00 2001 From: Kraiem Taha Yassine Date: Fri, 10 Nov 2023 15:26:12 +0100 Subject: [PATCH] Api v1.15.0 (#1645) * feature(chalice): support exact issue search for PG * feature(chalice): support exact issue search for CH --- api/chalicelib/core/sessions.py | 1 - ee/api/chalicelib/core/custom_metrics.py | 4 ++-- ee/api/chalicelib/core/sessions_exp.py | 22 ++++++++++++++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/api/chalicelib/core/sessions.py b/api/chalicelib/core/sessions.py index de4f39a11..f3b52318d 100644 --- a/api/chalicelib/core/sessions.py +++ b/api/chalicelib/core/sessions.py @@ -1045,7 +1045,6 @@ def search_query_parts(data: schemas.SessionsSearchPayloadSchema, error_status, full_args["issue_contextString"] = issue["contextString"] full_args["issue_type"] = issue["type"] elif len(issues) > 0: - print(issues) issues_conditions = [] for i, f in enumerate(issues): f_k_v = f"f_issue_v{i}" diff --git a/ee/api/chalicelib/core/custom_metrics.py b/ee/api/chalicelib/core/custom_metrics.py index c1dc52ad7..0e82567d8 100644 --- a/ee/api/chalicelib/core/custom_metrics.py +++ b/ee/api/chalicelib/core/custom_metrics.py @@ -18,9 +18,9 @@ else: from . import errors as errors if config("EXP_SESSIONS_SEARCH_METRIC", cast=bool, default=False): - from chalicelib.core import sessions_legacy as sessions -else: from chalicelib.core import sessions +else: + from chalicelib.core import sessions_legacy as sessions logger = logging.getLogger(__name__) PIE_CHART_GROUP = 5 diff --git a/ee/api/chalicelib/core/sessions_exp.py b/ee/api/chalicelib/core/sessions_exp.py index 80c5b5b5a..5fc0041db 100644 --- a/ee/api/chalicelib/core/sessions_exp.py +++ b/ee/api/chalicelib/core/sessions_exp.py @@ -417,6 +417,7 @@ def search_query_parts_ch(data: schemas.SessionsSearchPayloadSchema, error_statu WHERE user_id = %(userId)s)""") extra_from = "" events_query_part = "" + issues = [] __events_where_basic = ["project_id = %(projectId)s", "datetime >= toDateTime(%(startDate)s/1000)", "datetime <= toDateTime(%(endDate)s/1000)"] @@ -643,6 +644,9 @@ def search_query_parts_ch(data: schemas.SessionsSearchPayloadSchema, error_statu extra_constraints.append("notEmpty(s.issue_types)") ss_constraints.append("notEmpty(ms.issue_types)") else: + if f.source: + issues.append(f) + extra_constraints.append(f"hasAny(s.issue_types,%({f_k})s)") # _multiple_conditions(f"%({f_k})s {op} ANY (s.issue_types)", f.value, is_not=is_not, # value_key=f_k)) @@ -1324,6 +1328,24 @@ def search_query_parts_ch(data: schemas.SessionsSearchPayloadSchema, error_statu """ full_args["issue_contextString"] = issue["contextString"] full_args["issue_type"] = issue["type"] + elif len(issues) > 0: + issues_conditions = [] + for i, f in enumerate(issues): + f_k_v = f"f_issue_v{i}" + f_k_s = f_k_v + "_source" + full_args = {**full_args, **_multiple_values(f.value, value_key=f_k_v), f_k_s: f.source} + issues_conditions.append(_multiple_conditions(f"issues.type=%({f_k_v})s", f.value, + value_key=f_k_v)) + issues_conditions[-1] = f"({issues_conditions[-1]} AND issues.context_string=%({f_k_s})s)" + extra_join = f"""INNER JOIN (SELECT DISTINCT events.session_id + FROM experimental.issues + INNER JOIN experimental.events USING (issue_id) + WHERE issues.project_id = %(projectId)s + AND events.project_id = %(projectId)s + AND events.datetime >= toDateTime(%(startDate)s/1000) + AND events.datetime <= toDateTime(%(endDate)s/1000) + AND {" OR ".join(issues_conditions)} + ) AS issues USING (session_id)""" if extra_event: extra_event = f"INNER JOIN ({extra_event}) AS extra_event USING(session_id)"