diff --git a/ee/api/chalicelib/core/sessions_ee.py b/ee/api/chalicelib/core/sessions_ee.py index d4341aef2..a03a56854 100644 --- a/ee/api/chalicelib/core/sessions_ee.py +++ b/ee/api/chalicelib/core/sessions_ee.py @@ -470,7 +470,13 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d density=density)) extra_event = None if metric_of == schemas.TableMetricOfType.visited_url: - extra_event = "events.pages" + extra_event = lambda MAIN_EVENTS_TABLE: \ + f"""SELECT DISTINCT ev.session_id, ev.path + FROM {MAIN_EVENTS_TABLE} AS ev + WHERE ev.datetime >= toDateTime(%(startDate)s / 1000) + AND ev.datetime <= toDateTime(%(endDate)s / 1000) + AND ev.project_id = %(project_id)s + AND ev.event_type = 'LOCATION'""" elif metric_of == schemas.TableMetricOfType.issues and len(metric_value) > 0: data.filters.append(schemas.SessionSearchFilterSchema(value=metric_value, type=schemas.FilterType.issue, operator=schemas.SearchEventOperator._is)) @@ -510,18 +516,21 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d full_args["limit_e"] = 200 if isinstance(metric_of, schemas.TableMetricOfType): main_col = "user_id" - extra_col = "" + extra_col = "s.user_id" extra_where = "" pre_query = "" if metric_of == schemas.TableMetricOfType.user_country: main_col = "user_country" + extra_col = "s.user_country" elif metric_of == schemas.TableMetricOfType.user_device: main_col = "user_device" + extra_col = "s.user_device" elif metric_of == schemas.TableMetricOfType.user_browser: main_col = "user_browser" + extra_col = "s.user_browser" elif metric_of == schemas.TableMetricOfType.issues: main_col = "issue" - extra_col = f", UNNEST(s.issue_types) AS {main_col}" + extra_col = f"arrayJoin(s.issue_types) AS {main_col}" if len(metric_value) > 0: extra_where = [] for i in range(len(metric_value)): @@ -531,15 +540,13 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d extra_where = f"WHERE ({' OR '.join(extra_where)})" elif metric_of == schemas.TableMetricOfType.visited_url: main_col = "path" - extra_col = ", path" + extra_col = "s.path" main_query = cur.format(f"""{pre_query} SELECT COUNT(DISTINCT {main_col}) OVER () AS main_count, {main_col} AS name, - count(session_id) AS session_count - FROM (SELECT DISTINCT ON(s.session_id) s.session_id, s.user_uuid, - s.user_id, s.user_os, - s.user_browser, s.user_device, - s.user_device_type, s.user_country, s.issue_types{extra_col} + count(DISTINCT session_id) AS session_count + FROM (SELECT s.session_id, + {extra_col} {query_part} ORDER BY s.session_id desc) AS filtred_sessions {extra_where} @@ -1241,7 +1248,8 @@ def search_query_parts_ch(data, error_status, errors_only, favorite_only, issue, if data.startDate >= TimeUTC.now(delta_days=-7): MAIN_EVENTS_TABLE = "final.events_l7d_mv" MAIN_SESSIONS_TABLE = "final.sessions_l7d_mv" - + full_args["MAIN_EVENTS_TABLE"] = MAIN_EVENTS_TABLE + full_args["MAIN_SESSIONS_TABLE"] = MAIN_SESSIONS_TABLE extra_constraints = [ "s.project_id = %(project_id)s", "isNotNull(s.duration)" @@ -2078,10 +2086,14 @@ def search_query_parts_ch(data, error_status, errors_only, favorite_only, issue, """ full_args["issue_contextString"] = issue["contextString"] full_args["issue_type"] = issue["type"] + if extra_event: - extra_join += f"""INNER JOIN {extra_event} AS ev USING(session_id)""" - extra_constraints.append("ev.timestamp>=%(startDate)s") - extra_constraints.append("ev.timestamp<=%(endDate)s") + extra_event = f"INNER JOIN ({extra_event(MAIN_EVENTS_TABLE)}) AS extra_event USING(session_id)" + # extra_join = f"""INNER JOIN {extra_event} AS ev USING(session_id)""" + # extra_constraints.append("ev.timestamp>=%(startDate)s") + # extra_constraints.append("ev.timestamp<=%(endDate)s") + else: + extra_event = "" if errors_only: query_part = f"""{f"({events_query_part}) AS f" if len(events_query_part) > 0 else ""}""" else: @@ -2091,7 +2103,7 @@ def search_query_parts_ch(data, error_status, errors_only, favorite_only, issue, WHERE {" AND ".join(extra_constraints)}) AS s ON(s.session_id=f.session_id)""" else: extra_join += f"""(SELECT * - FROM {MAIN_SESSIONS_TABLE} AS s + FROM {MAIN_SESSIONS_TABLE} AS s {extra_event} WHERE {" AND ".join(extra_constraints)}) AS s""" query_part = f"""\ FROM {f"({events_query_part}) AS f" if len(events_query_part) > 0 else ""}