From c28120aa8067bc6adb17fde7064601ec9b674d13 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 24 Jan 2023 18:47:45 +0100 Subject: [PATCH] feat(chalice): fixed clickMaps payload override --- api/schemas.py | 6 ++-- ee/api/chalicelib/core/sessions.py | 36 ++--------------------- ee/api/chalicelib/core/sessions_exp.py | 40 +++----------------------- 3 files changed, 10 insertions(+), 72 deletions(-) diff --git a/api/schemas.py b/api/schemas.py index f1aef97ab..aeacc0b54 100644 --- a/api/schemas.py +++ b/api/schemas.py @@ -979,7 +979,7 @@ class MetricOfClickMap(str, Enum): click_map_url = "clickMapUrl" -class CardSessionsSchema(FlatSessionsSearch, _PaginatedSchema,_TimedSchema): +class CardSessionsSchema(FlatSessionsSearch, _PaginatedSchema, _TimedSchema): startTimestamp: int = Field(TimeUTC.now(-7)) endTimestamp: int = Field(TimeUTC.now()) series: List[CardCreateSeriesSchema] = Field(default=[]) @@ -1295,7 +1295,7 @@ class FlatClickMapSessionsSearch(SessionsSearchPayloadSchema): @root_validator(pre=True) def transform(cls, values): - for f in values.get("filters"): + for f in values.get("filters", []): if f.get("type") == FilterType.duration: return values values["filters"] = values.get("filters", []) @@ -1305,6 +1305,8 @@ class FlatClickMapSessionsSearch(SessionsSearchPayloadSchema): @root_validator() def flat_to_original(cls, values): + if len(values["events"]) > 0: + return values n_filters = [] n_events = [] for v in values.get("filters", []): diff --git a/ee/api/chalicelib/core/sessions.py b/ee/api/chalicelib/core/sessions.py index ed9ca1758..bc3e0ebab 100644 --- a/ee/api/chalicelib/core/sessions.py +++ b/ee/api/chalicelib/core/sessions.py @@ -5,7 +5,8 @@ import schemas_ee from chalicelib.core import events, metadata, events_ios, \ sessions_mobs, issues, projects, resources, assist, performance_event, sessions_favorite, \ sessions_devtool, sessions_notes -from chalicelib.utils import pg_client, helper, metrics_helper, errors_helper +from chalicelib.utils import errors_helper +from chalicelib.utils import pg_client, helper, metrics_helper from chalicelib.utils import sql_helper as sh SESSION_PROJECTION_COLS = """s.project_id, @@ -1088,39 +1089,6 @@ def search_by_metadata(tenant_id, user_id, m_key, m_value, project_id=None): return results -def search_by_issue(user_id, issue, project_id, start_date, end_date): - constraints = ["s.project_id = %(projectId)s", - "p_issues.context_string = %(issueContextString)s", - "p_issues.type = %(issueType)s"] - if start_date is not None: - constraints.append("start_ts >= %(startDate)s") - if end_date is not None: - constraints.append("start_ts <= %(endDate)s") - with pg_client.PostgresClient() as cur: - cur.execute( - cur.mogrify( - f"""SELECT DISTINCT ON(favorite_sessions.session_id, s.session_id) {SESSION_PROJECTION_COLS} - FROM public.sessions AS s - INNER JOIN events_common.issues USING (session_id) - INNER JOIN public.issues AS p_issues USING (issue_id) - LEFT JOIN (SELECT user_id, session_id - FROM public.user_favorite_sessions - WHERE user_id = %(userId)s) AS favorite_sessions - USING (session_id) - WHERE {" AND ".join(constraints)} - ORDER BY s.session_id DESC;""", - { - "issueContextString": issue["contextString"], - "issueType": issue["type"], "userId": user_id, - "projectId": project_id, - "startDate": start_date, - "endDate": end_date - })) - - rows = cur.fetchall() - return helper.list_to_camel_case(rows) - - def get_user_sessions(project_id, user_id, start_date, end_date): with pg_client.PostgresClient() as cur: constraints = ["s.project_id = %(projectId)s", "s.user_id = %(userId)s"] diff --git a/ee/api/chalicelib/core/sessions_exp.py b/ee/api/chalicelib/core/sessions_exp.py index b51069d50..38c25448d 100644 --- a/ee/api/chalicelib/core/sessions_exp.py +++ b/ee/api/chalicelib/core/sessions_exp.py @@ -1038,8 +1038,8 @@ def search_query_parts_ch(data: schemas.SessionsSearchPayloadSchema, error_statu # _multiple_conditions(f"main2.timestamp - main.timestamp {event.sourceOperator} %({e_k})s", # event.source, value_key=e_k)) # events_conditions[-2]["time"] = f"(?t{event.sourceOperator} %({e_k})s)" - events_conditions[-2]["time"] = _multiple_conditions(f"?t{event.sourceOperator.value}%({e_k})s", event.source, - value_key=e_k) + events_conditions[-2]["time"] = _multiple_conditions(f"?t{event.sourceOperator.value}%({e_k})s", + event.source, value_key=e_k) event_index += 1 # TODO: no isNot for RequestDetails elif event_type == schemas.EventType.request_details: @@ -1075,7 +1075,8 @@ def search_query_parts_ch(data: schemas.SessionsSearchPayloadSchema, error_statu apply = True elif f.type == schemas.FetchFilterType._duration: event_where.append( - _multiple_conditions(f"main.duration {f.operator.value} %({e_k_f})s", f.value, value_key=e_k_f)) + _multiple_conditions(f"main.duration {f.operator.value} %({e_k_f})s", f.value, + value_key=e_k_f)) events_conditions[-1]["condition"].append(event_where[-1]) apply = True elif f.type == schemas.FetchFilterType._request_body: @@ -1414,39 +1415,6 @@ def search_by_metadata(tenant_id, user_id, m_key, m_value, project_id=None): return results -def search_by_issue(user_id, issue, project_id, start_date, end_date): - constraints = ["s.project_id = %(projectId)s", - "p_issues.context_string = %(issueContextString)s", - "p_issues.type = %(issueType)s"] - if start_date is not None: - constraints.append("start_ts >= %(startDate)s") - if end_date is not None: - constraints.append("start_ts <= %(endDate)s") - with pg_client.PostgresClient() as cur: - cur.execute( - cur.mogrify( - f"""SELECT DISTINCT ON(favorite_sessions.session_id, s.session_id) {SESSION_PROJECTION_COLS} - FROM public.sessions AS s - INNER JOIN events_common.issues USING (session_id) - INNER JOIN public.issues AS p_issues USING (issue_id) - LEFT JOIN (SELECT user_id, session_id - FROM public.user_favorite_sessions - WHERE user_id = %(userId)s) AS favorite_sessions - USING (session_id) - WHERE {" AND ".join(constraints)} - ORDER BY s.session_id DESC;""", - { - "issueContextString": issue["contextString"], - "issueType": issue["type"], "userId": user_id, - "projectId": project_id, - "startDate": start_date, - "endDate": end_date - })) - - rows = cur.fetchall() - return helper.list_to_camel_case(rows) - - def get_user_sessions(project_id, user_id, start_date, end_date): with pg_client.PostgresClient() as cur: constraints = ["s.project_id = %(projectId)s", "s.user_id = %(userId)s"]