diff --git a/api/chalicelib/core/custom_metrics.py b/api/chalicelib/core/custom_metrics.py index de2beca03..602f1f7d2 100644 --- a/api/chalicelib/core/custom_metrics.py +++ b/api/chalicelib/core/custom_metrics.py @@ -456,8 +456,8 @@ def get_card(metric_id, project_id, user_id, flatten: bool = True, include_data: query = cur.mogrify( f"""SELECT metric_id, project_id, user_id, name, is_public, created_at, deleted_at, edited_at, metric_type, view_type, metric_of, metric_value, metric_format, is_pinned, default_config, - thumbnail, default_config AS config, - series, dashboards, owner_email {',data' if include_data else ''} + default_config AS config,series, dashboards, owner_email + {',data' if include_data else ''} FROM metrics LEFT JOIN LATERAL (SELECT COALESCE(jsonb_agg(metric_series.* ORDER BY index),'[]'::jsonb) AS series FROM metric_series @@ -580,6 +580,7 @@ def make_chart_from_card(project_id, user_id, metric_id, data: schemas.CardChart if metric.is_template: return get_predefined_metric(key=metric.metric_of, project_id=project_id, data=data.dict()) elif __is_click_map(metric): + # TODO: remove this when UI is able to stop this endpoint calls for clickMap if from_dashboard: return None if raw_metric["data"]: diff --git a/api/routers/subs/metrics.py b/api/routers/subs/metrics.py index 195c4a361..9bd92174d 100644 --- a/api/routers/subs/metrics.py +++ b/api/routers/subs/metrics.py @@ -230,13 +230,10 @@ def get_custom_metric_errors_list(projectId: int, metric_id: int, @app.post('/{projectId}/custom_metrics/{metric_id}/chart', tags=["customMetrics"]) def get_card_chart(projectId: int, metric_id: int, request: Request, data: schemas.CardChartSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): - print("--- headers ---") - print(request.headers) + # TODO: remove this when UI is able to stop this endpoint calls for clickMap import re - pattern = re.compile("[0-9]+\/dashboard\/[0-9]+$") - from_dashboard = pattern.match(request.headers.get('HTTP_REFERER')) if request.headers.get('HTTP_REFERER') \ - else False - print(f"from_dashboard:{from_dashboard}") + from_dashboard = re.match(r".*\/[0-9]+\/dashboard\/[0-9]+$", request.headers.get('referer')) is not None \ + if request.headers.get('referer') else False data = custom_metrics.make_chart_from_card(project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data, from_dashboard=from_dashboard) return {"data": data} diff --git a/ee/api/chalicelib/core/custom_metrics.py b/ee/api/chalicelib/core/custom_metrics.py index fc7f7cfde..0eb0c3333 100644 --- a/ee/api/chalicelib/core/custom_metrics.py +++ b/ee/api/chalicelib/core/custom_metrics.py @@ -206,18 +206,18 @@ def get_sessions(project_id, user_id, metric_id, data: schemas.CardSessionsSchem if metric is None: return None results = [] - is_click_map = False - if __is_click_map(metric) and raw_metric.get("data") is not None: - is_click_map = True + # is_click_map = False + # if __is_click_map(metric) and raw_metric.get("data") is not None: + # is_click_map = True for s in metric.series: s.filter.startDate = data.startTimestamp s.filter.endDate = data.endTimestamp s.filter.limit = data.limit s.filter.page = data.page - if is_click_map: - results.append( - {"seriesId": s.series_id, "seriesName": s.name, "total": 1, "sessions": [raw_metric["data"]]}) - break + # if is_click_map: + # results.append( + # {"seriesId": s.series_id, "seriesName": s.name, "total": 1, "sessions": [raw_metric["data"]]}) + # break results.append({"seriesId": s.series_id, "seriesName": s.name, **sessions.search_sessions(data=s.filter, project_id=project_id, user_id=user_id)}) @@ -512,8 +512,8 @@ def get_card(metric_id, project_id, user_id, flatten: bool = True, include_data: query = cur.mogrify( f"""SELECT metric_id, project_id, user_id, name, is_public, created_at, deleted_at, edited_at, metric_type, view_type, metric_of, metric_value, metric_format, is_pinned, default_config, - thumbnail, default_config AS config, - series, dashboards, owner_email {',data' if include_data else ''} + default_config AS config,series, dashboards, owner_email + {',data' if include_data else ''} FROM metrics LEFT JOIN LATERAL (SELECT COALESCE(jsonb_agg(metric_series.* ORDER BY index),'[]'::jsonb) AS series FROM metric_series @@ -628,27 +628,31 @@ def get_funnel_sessions_by_issue(user_id, project_id, metric_id, issue_id, "issue": issue} -def make_chart_from_card(project_id, user_id, metric_id, data: schemas.CardChartSchema): +def make_chart_from_card(project_id, user_id, metric_id, data: schemas.CardChartSchema, from_dashboard=False): raw_metric: dict = get_card(metric_id=metric_id, project_id=project_id, user_id=user_id, include_data=True) if raw_metric is None: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="card not found") metric: schemas_ee.CreateCardSchema = schemas_ee.CreateCardSchema(**raw_metric) if metric.is_template: return get_predefined_metric(key=metric.metric_of, project_id=project_id, data=data.dict()) - elif __is_click_map(metric) and raw_metric["data"]: - keys = sessions_mobs. \ - __get_mob_keys(project_id=project_id, session_id=raw_metric["data"]["sessionId"]) - mob_exists = False - for k in keys: - if s3.exists(bucket=config("sessions_bucket"), key=k): - mob_exists = True - break - if mob_exists: - raw_metric["data"]['domURL'] = sessions_mobs.get_urls(session_id=raw_metric["data"]["sessionId"], - project_id=project_id) - raw_metric["data"]['mobsUrl'] = sessions_mobs.get_urls_depercated( - session_id=raw_metric["data"]["sessionId"]) - return raw_metric["data"] + elif __is_click_map(metric): + # TODO: remove this when UI is able to stop this endpoint calls for clickMap + if from_dashboard: + return None + if raw_metric["data"]: + keys = sessions_mobs. \ + __get_mob_keys(project_id=project_id, session_id=raw_metric["data"]["sessionId"]) + mob_exists = False + for k in keys: + if s3.exists(bucket=config("sessions_bucket"), key=k): + mob_exists = True + break + if mob_exists: + raw_metric["data"]['domURL'] = sessions_mobs.get_urls(session_id=raw_metric["data"]["sessionId"], + project_id=project_id) + raw_metric["data"]['mobsUrl'] = sessions_mobs.get_urls_depercated( + session_id=raw_metric["data"]["sessionId"]) + return raw_metric["data"] return make_chart(project_id=project_id, user_id=user_id, data=data, metric=metric) diff --git a/ee/api/routers/subs/metrics.py b/ee/api/routers/subs/metrics.py index 902908d46..540147a73 100644 --- a/ee/api/routers/subs/metrics.py +++ b/ee/api/routers/subs/metrics.py @@ -1,6 +1,6 @@ from typing import Union -from fastapi import Body, Depends +from fastapi import Body, Depends, Request import schemas import schemas_ee @@ -230,10 +230,14 @@ def get_custom_metric_errors_list(projectId: int, metric_id: int, @app.post('/{projectId}/cards/{metric_id}/chart', tags=["card"]) @app.post('/{projectId}/metrics/{metric_id}/chart', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/chart', tags=["customMetrics"]) -def get_card_chart(projectId: int, metric_id: int, data: schemas.CardChartSchema = Body(...), +def get_card_chart(projectId: int, metric_id: int, request: Request, data: schemas.CardChartSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): + # TODO: remove this when UI is able to stop this endpoint calls for clickMap + import re + from_dashboard = re.match(r".*\/[0-9]+\/dashboard\/[0-9]+$", request.headers.get('referer')) is not None \ + if request.headers.get('referer') else False data = custom_metrics.make_chart_from_card(project_id=projectId, user_id=context.user_id, metric_id=metric_id, - data=data) + data=data, from_dashboard=from_dashboard) return {"data": data}