From 3569f463994bd9fd48e02b8635acdab87872dcfb Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 13 Dec 2022 13:36:01 +0100 Subject: [PATCH] feat(chalice): cards 3/5 --- api/chalicelib/core/custom_metrics.py | 52 +++++++++++++------------- api/chalicelib/core/dashboards.py | 22 +++++------ api/chalicelib/core/sessions.py | 12 +++--- api/routers/subs/metrics.py | 35 +++++++++-------- api/schemas.py | 38 ++++++++++--------- ee/api/chalicelib/core/sessions.py | 18 ++++----- ee/api/chalicelib/core/sessions_exp.py | 18 ++++----- 7 files changed, 100 insertions(+), 95 deletions(-) diff --git a/api/chalicelib/core/custom_metrics.py b/api/chalicelib/core/custom_metrics.py index 382d11f8e..317c3694b 100644 --- a/api/chalicelib/core/custom_metrics.py +++ b/api/chalicelib/core/custom_metrics.py @@ -94,6 +94,11 @@ def __get_sessions_list(project_id, user_id, data): return sessions.search_sessions(data=data.series[0].filter, project_id=project_id, user_id=user_id) +def __is_predefined(data): + return data.metric_type in (schemas.MetricType.errors, schemas.MetricType.performance, + schemas.MetricType.resources, schemas.MetricType.web_vital) + + def merged_live(project_id, data: schemas.CreateCardSchema, user_id=None): if __is_funnel_chart(data): return __get_funnel_chart(project_id=project_id, data=data) @@ -101,7 +106,9 @@ def merged_live(project_id, data: schemas.CreateCardSchema, user_id=None): return __get_errors_list(project_id=project_id, user_id=user_id, data=data) elif __is_sessions_list(data): return __get_sessions_list(project_id=project_id, user_id=user_id, data=data) - + elif __is_predefined(data): + pass + print(">>>>>>>nin") series_charts = __try_live(project_id=project_id, data=data) if data.view_type == schemas.MetricTimeseriesViewType.progress or data.metric_type == schemas.MetricType.table: return series_charts @@ -113,8 +120,8 @@ def merged_live(project_id, data: schemas.CreateCardSchema, user_id=None): return results -def __merge_metric_with_data(metric, data: Union[schemas.CustomMetricChartPayloadSchema, -schemas.CustomMetricSessionsPayloadSchema]) \ +def __merge_metric_with_data(metric, data: Union[schemas.CardChartSchema, +schemas.CardSessionsSchema]) \ -> Union[schemas.CreateCardSchema, None]: if data.series is not None and len(data.series) > 0: metric["series"] = data.series @@ -128,7 +135,7 @@ schemas.CustomMetricSessionsPayloadSchema]) \ return metric -def make_chart(project_id, user_id, metric_id, data: schemas.CustomMetricChartPayloadSchema, metric=None): +def make_chart(project_id, user_id, metric_id, data: schemas.CardChartSchema, metric=None): if metric is None: metric = get_card(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False) if metric is None: @@ -136,23 +143,9 @@ def make_chart(project_id, user_id, metric_id, data: schemas.CustomMetricChartPa metric: schemas.CreateCardSchema = __merge_metric_with_data(metric=metric, data=data) return merged_live(project_id=project_id, data=metric, user_id=user_id) - # if __is_funnel_chart(metric): - # return __get_funnel_chart(project_id=project_id, data=metric) - # elif __is_errors_list(metric): - # return __get_errors_list(project_id=project_id, user_id=user_id, data=metric) - # - # series_charts = __try_live(project_id=project_id, data=metric) - # if metric.view_type == schemas.MetricTimeseriesViewType.progress or metric.metric_type == schemas.MetricType.table: - # return series_charts - # results = [{}] * len(series_charts[0]) - # for i in range(len(results)): - # for j, series_chart in enumerate(series_charts): - # results[i] = {**results[i], "timestamp": series_chart[i]["timestamp"], - # metric.series[j].name: series_chart[i]["count"]} - # return results -def get_sessions(project_id, user_id, metric_id, data: schemas.CustomMetricSessionsPayloadSchema): +def get_sessions(project_id, user_id, metric_id, data: schemas.CardSessionsSchema): metric = get_card(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False) if metric is None: return None @@ -171,7 +164,7 @@ def get_sessions(project_id, user_id, metric_id, data: schemas.CustomMetricSessi return results -def get_funnel_issues(project_id, user_id, metric_id, data: schemas.CustomMetricSessionsPayloadSchema): +def get_funnel_issues(project_id, user_id, metric_id, data: schemas.CardSessionsSchema): metric = get_card(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False) if metric is None: return None @@ -187,7 +180,7 @@ def get_funnel_issues(project_id, user_id, metric_id, data: schemas.CustomMetric **funnels.get_issues_on_the_fly_widget(project_id=project_id, data=s.filter)} -def get_errors_list(project_id, user_id, metric_id, data: schemas.CustomMetricSessionsPayloadSchema): +def get_errors_list(project_id, user_id, metric_id, data: schemas.CardSessionsSchema): metric = get_card(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False) if metric is None: return None @@ -203,7 +196,7 @@ def get_errors_list(project_id, user_id, metric_id, data: schemas.CustomMetricSe **errors.search(data=s.filter, project_id=project_id, user_id=user_id)} -def try_sessions(project_id, user_id, data: schemas.CustomMetricSessionsPayloadSchema): +def try_sessions(project_id, user_id, data: schemas.CardSessionsSchema): results = [] if data.series is None: return results @@ -328,8 +321,6 @@ def update(metric_id, user_id, project_id, data: schemas.UpdateCardSchema): def search_all(project_id, user_id, data: schemas.SearchCardsSchema, include_series=False): - print('>>>>') - print(data) constraints = ["metrics.project_id = %(project_id)s", "metrics.deleted_at ISNULL"] params = {"project_id": project_id, "user_id": user_id, @@ -389,6 +380,17 @@ def search_all(project_id, user_id, data: schemas.SearchCardsSchema, include_ser return rows +def get_all(project_id, user_id): + default_search = schemas.SearchCardsSchema() + result = rows = search_all(project_id=project_id, user_id=user_id, data=default_search) + while len(rows) == default_search.limit: + default_search.page += 1 + rows = search_all(project_id=project_id, user_id=user_id, data=default_search) + result += rows + + return result + + def delete(project_id, metric_id, user_id): with pg_client.PostgresClient() as cur: cur.execute( @@ -516,7 +518,7 @@ def change_state(project_id, metric_id, user_id, status): def get_funnel_sessions_by_issue(user_id, project_id, metric_id, issue_id, - data: schemas.CustomMetricSessionsPayloadSchema + data: schemas.CardSessionsSchema # , range_value=None, start_date=None, end_date=None ): metric = get_card(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False) diff --git a/api/chalicelib/core/dashboards.py b/api/chalicelib/core/dashboards.py index fa04f0fad..b3832f78d 100644 --- a/api/chalicelib/core/dashboards.py +++ b/api/chalicelib/core/dashboards.py @@ -264,7 +264,7 @@ def get_predefined_metric(key: schemas.TemplatePredefinedKeys, project_id: int, return PREDEFINED.get(key, lambda *args: None)(project_id=project_id, **data) -def make_chart_metrics(project_id, user_id, metric_id, data: schemas.CustomMetricChartPayloadSchema): +def make_chart_metrics(project_id, user_id, metric_id, data: schemas.CardChartSchema): raw_metric = custom_metrics.get_with_template(metric_id=metric_id, project_id=project_id, user_id=user_id, include_dashboard=False) if raw_metric is None: @@ -279,13 +279,13 @@ def make_chart_metrics(project_id, user_id, metric_id, data: schemas.CustomMetri metric=raw_metric) -def make_chart_widget(dashboard_id, project_id, user_id, widget_id, data: schemas.CustomMetricChartPayloadSchema): - raw_metric = get_widget(widget_id=widget_id, project_id=project_id, user_id=user_id, dashboard_id=dashboard_id) - if raw_metric is None: - return None - metric = schemas.CustomMetricAndTemplate = schemas.CustomMetricAndTemplate(**raw_metric) - if metric.is_template: - return get_predefined_metric(key=metric.predefined_key, project_id=project_id, data=data.dict()) - else: - return custom_metrics.make_chart(project_id=project_id, user_id=user_id, metric_id=raw_metric["metricId"], - data=data, metric=raw_metric) +# def make_chart_widget(dashboard_id, project_id, user_id, widget_id, data: schemas.CardChartSchema): +# raw_metric = get_widget(widget_id=widget_id, project_id=project_id, user_id=user_id, dashboard_id=dashboard_id) +# if raw_metric is None: +# return None +# metric = schemas.CustomMetricAndTemplate = schemas.CustomMetricAndTemplate(**raw_metric) +# if metric.is_template: +# return get_predefined_metric(key=metric.predefined_key, project_id=project_id, data=data.dict()) +# else: +# return custom_metrics.make_chart(project_id=project_id, user_id=user_id, metric_id=raw_metric["metricId"], +# data=data, metric=raw_metric) diff --git a/api/chalicelib/core/sessions.py b/api/chalicelib/core/sessions.py index 0a0b42614..c4c0f7d59 100644 --- a/api/chalicelib/core/sessions.py +++ b/api/chalicelib/core/sessions.py @@ -353,18 +353,18 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d else: sessions = cur.fetchone()["count"] elif metric_type == schemas.MetricType.table: - if isinstance(metric_of, schemas.TableMetricOfType): + if isinstance(metric_of, schemas.MetricOfTable): main_col = "user_id" extra_col = "" extra_where = "" pre_query = "" - if metric_of == schemas.TableMetricOfType.user_country: + if metric_of == schemas.MetricOfTable.user_country: main_col = "user_country" - elif metric_of == schemas.TableMetricOfType.user_device: + elif metric_of == schemas.MetricOfTable.user_device: main_col = "user_device" - elif metric_of == schemas.TableMetricOfType.user_browser: + elif metric_of == schemas.MetricOfTable.user_browser: main_col = "user_browser" - elif metric_of == schemas.TableMetricOfType.issues: + elif metric_of == schemas.MetricOfTable.issues: main_col = "issue" extra_col = f", UNNEST(s.issue_types) AS {main_col}" if len(metric_value) > 0: @@ -374,7 +374,7 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d extra_where.append(f"{main_col} = %({arg_name})s") full_args[arg_name] = metric_value[i] extra_where = f"WHERE ({' OR '.join(extra_where)})" - elif metric_of == schemas.TableMetricOfType.visited_url: + elif metric_of == schemas.MetricOfTable.visited_url: main_col = "path" extra_col = ", path" main_query = cur.mogrify(f"""{pre_query} diff --git a/api/routers/subs/metrics.py b/api/routers/subs/metrics.py index 11521716f..37f86fcad 100644 --- a/api/routers/subs/metrics.py +++ b/api/routers/subs/metrics.py @@ -81,15 +81,15 @@ def remove_widget_from_dashboard(projectId: int, dashboardId: int, widgetId: int widget_id=widgetId) -@app.post('/{projectId}/dashboards/{dashboardId}/widgets/{widgetId}/chart', tags=["dashboard"]) -def get_widget_chart(projectId: int, dashboardId: int, widgetId: int, - data: schemas.CustomMetricChartPayloadSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): - data = dashboards.make_chart_widget(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId, - widget_id=widgetId, data=data) - if data is None: - return {"errors": ["widget not found"]} - return {"data": data} +# @app.post('/{projectId}/dashboards/{dashboardId}/widgets/{widgetId}/chart', tags=["dashboard"]) +# def get_widget_chart(projectId: int, dashboardId: int, widgetId: int, +# data: schemas.CardChartSchema = Body(...), +# context: schemas.CurrentContext = Depends(OR_context)): +# data = dashboards.make_chart_widget(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId, +# widget_id=widgetId, data=data) +# if data is None: +# return {"errors": ["widget not found"]} +# return {"data": data} @app.post('/{projectId}/cards/try', tags=["cards"]) @@ -105,7 +105,7 @@ def try_card(projectId: int, data: schemas.CreateCardSchema = Body(...), @app.post('/{projectId}/cards/try/sessions', tags=["cards"]) @app.post('/{projectId}/metrics/try/sessions', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/try/sessions', tags=["customMetrics"]) -def try_card_sessions(projectId: int, data: schemas.CustomMetricSessionsPayloadSchema = Body(...), +def try_card_sessions(projectId: int, data: schemas.CardSessionsSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.try_sessions(project_id=projectId, user_id=context.user_id, data=data) return {"data": data} @@ -114,7 +114,7 @@ def try_card_sessions(projectId: int, data: schemas.CustomMetricSessionsPayloadS @app.post('/{projectId}/card/try/issues', tags=["cards"]) @app.post('/{projectId}/metrics/try/issues', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/try/issues', tags=["customMetrics"]) -def try_card_funnel_issues(projectId: int, data: schemas.CustomMetricSessionsPayloadSchema = Body(...), +def try_card_funnel_issues(projectId: int, data: schemas.CardSessionsSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): if len(data.series) == 0: return {"data": []} @@ -128,8 +128,7 @@ def try_card_funnel_issues(projectId: int, data: schemas.CustomMetricSessionsPay @app.get('/{projectId}/metrics', tags=["dashboard"]) @app.get('/{projectId}/custom_metrics', tags=["customMetrics"]) def get_cards(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): - return {"data": custom_metrics.search_all(project_id=projectId, user_id=context.user_id, - data=schemas.SearchCardsSchema())} + return {"data": custom_metrics.get_all(project_id=projectId, user_id=context.user_id)} @app.post('/{projectId}/cards', tags=["cards"]) @@ -166,7 +165,7 @@ def get_card(projectId: int, metric_id: str, context: schemas.CurrentContext = D @app.post('/{projectId}/metrics/{metric_id}/sessions', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/sessions', tags=["customMetrics"]) def get_card_sessions(projectId: int, metric_id: int, - data: schemas.CustomMetricSessionsPayloadSchema = Body(...), + data: schemas.CardSessionsSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.get_sessions(project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data) if data is None: @@ -178,7 +177,7 @@ def get_card_sessions(projectId: int, metric_id: int, @app.post('/{projectId}/metrics/{metric_id}/issues', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/issues', tags=["customMetrics"]) def get_card_funnel_issues(projectId: int, metric_id: int, - data: schemas.CustomMetricSessionsPayloadSchema = Body(...), + data: schemas.CardSessionsSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.get_funnel_issues(project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data) @@ -190,7 +189,7 @@ def get_card_funnel_issues(projectId: int, metric_id: int, @app.post('/{projectId}/metrics/{metric_id}/issues/{issueId}/sessions', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/issues/{issueId}/sessions', tags=["customMetrics"]) def get_metric_funnel_issue_sessions(projectId: int, metric_id: int, issueId: str, - data: schemas.CustomMetricSessionsPayloadSchema = Body(...), + data: schemas.CardSessionsSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.get_funnel_sessions_by_issue(project_id=projectId, user_id=context.user_id, metric_id=metric_id, issue_id=issueId, data=data) @@ -202,7 +201,7 @@ def get_metric_funnel_issue_sessions(projectId: int, metric_id: int, issueId: st @app.post('/{projectId}/metrics/{metric_id}/errors', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/errors', tags=["customMetrics"]) def get_custom_metric_errors_list(projectId: int, metric_id: int, - data: schemas.CustomMetricSessionsPayloadSchema = Body(...), + data: schemas.CardSessionsSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.get_errors_list(project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data) @@ -214,7 +213,7 @@ 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.CustomMetricChartPayloadSchema = Body(...), +def get_card_chart(projectId: int, metric_id: int, data: schemas.CardChartSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): data = dashboards.make_chart_metrics(project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data) diff --git a/api/schemas.py b/api/schemas.py index 7ed8df648..264c21808 100644 --- a/api/schemas.py +++ b/api/schemas.py @@ -883,7 +883,7 @@ class MetricOfTimeseries(str, Enum): session_count = "sessionCount" -class CustomMetricSessionsPayloadSchema(FlatSessionsSearch, _PaginatedSchema): +class CardSessionsSchema(FlatSessionsSearch, _PaginatedSchema): startTimestamp: int = Field(TimeUTC.now(-7)) endTimestamp: int = Field(TimeUTC.now()) series: Optional[List[CustomMetricCreateSeriesSchema]] = Field(default=None) @@ -892,31 +892,31 @@ class CustomMetricSessionsPayloadSchema(FlatSessionsSearch, _PaginatedSchema): alias_generator = attribute_to_camel_case -class CustomMetricChartPayloadSchema(CustomMetricSessionsPayloadSchema, _PaginatedSchema): +class CardChartSchema(CardSessionsSchema): density: int = Field(7) class Config: alias_generator = attribute_to_camel_case -class CustomMetricsConfigSchema(BaseModel): +class CardConfigSchema(BaseModel): col: Optional[int] = Field(...) row: Optional[int] = Field(default=2) position: Optional[int] = Field(default=0) -class CreateCardSchema(CustomMetricChartPayloadSchema): +class CreateCardSchema(CardChartSchema): name: Optional[str] = Field(...) series: List[CustomMetricCreateSeriesSchema] = Field(default=[]) is_public: bool = Field(default=True) view_type: Union[MetricTimeseriesViewType, MetricTableViewType, MetricOtherViewType] \ = Field(MetricTimeseriesViewType.line_chart) metric_type: Union[MetricType] = Field(default=MetricType.timeseries) - metric_of: Union[MetricOfTimeseries, MetricOfTable, MetricOfErrors, MetricOfPerformance, - MetricOfResources, MetricOfWebVitals] = Field(MetricOfTable.user_id) + metric_of: Union[MetricOfTimeseries, MetricOfTable, MetricOfErrors, \ + MetricOfPerformance, MetricOfResources, MetricOfWebVitals] = Field(MetricOfTable.user_id) metric_value: List[IssueType] = Field([]) metric_format: Optional[MetricFormatType] = Field(None) - default_config: CustomMetricsConfigSchema = Field(..., alias="config") + default_config: CardConfigSchema = Field(..., alias="config") # This is used to handle wrong values sent by the UI @root_validator(pre=True) @@ -934,19 +934,22 @@ class CreateCardSchema(CustomMetricChartPayloadSchema): @root_validator def validator(cls, values): - if values.get("metric_type") == MetricType.table: - assert isinstance(values.get("view_type"), MetricTableViewType), \ - f"viewType must be of type {MetricTableViewType} for metricType:{MetricType.table}" - assert isinstance(values.get("metric_of"), MetricOfTable), \ - f"metricOf must be of type {MetricOfTable} for metricType:{MetricType.table}" - if values.get("metric_of") != MetricOfTable.issues: - assert values.get("metric_value") is None or len(values.get("metric_value")) == 0, \ - f"metricValue is only available for metricOf:{MetricOfTable.issues}" - elif values.get("metric_type") == MetricType.timeseries: + if values.get("metric_type") == MetricType.timeseries: assert isinstance(values.get("view_type"), MetricTimeseriesViewType), \ f"viewType must be of type {MetricTimeseriesViewType} for metricType:{MetricType.timeseries}" assert isinstance(values.get("metric_of"), MetricOfTimeseries), \ f"metricOf must be of type {MetricOfTimeseries} for metricType:{MetricType.timeseries}" + elif values.get("metric_type") == MetricType.table: + assert isinstance(values.get("view_type"), MetricTableViewType), \ + f"viewType must be of type {MetricTableViewType} for metricType:{MetricType.table}" + assert isinstance(values.get("metric_of"), MetricOfTable), \ + f"metricOf must be of type {MetricOfTable} for metricType:{MetricType.table}" + if values.get("metric_of") in (MetricOfTable.sessions, MetricOfTable.errors): + assert values.get("view_type") == MetricTableViewType.table, \ + f"viewType must be '{MetricTableViewType.table}' for metricOf:{values['metric_of']}" + if values.get("metric_of") != MetricOfTable.issues: + assert values.get("metric_value") is None or len(values.get("metric_value")) == 0, \ + f"metricValue is only available for metricOf:{MetricOfTable.issues}" elif values.get("metric_type") == MetricType.funnel: # assert isinstance(values.get("view_type"), MetricTimeseriesViewType), \ # f"viewType must be of type {MetricTimeseriesViewType} for metricType:{MetricType.timeseries}" @@ -1090,7 +1093,8 @@ class CustomMetricAndTemplate(BaseModel): @root_validator(pre=True) def transform(cls, values): - values["isTemplate"] = values["metricType"] not in [MetricType.timeseries, MetricType.table, MetricType.funnel] + values["isTemplate"] = values["metricType"] in [MetricType.errors, MetricType.performance, + MetricType.resources, MetricType.web_vital] return values class Config: diff --git a/ee/api/chalicelib/core/sessions.py b/ee/api/chalicelib/core/sessions.py index 7d999fe6c..e158f45d0 100644 --- a/ee/api/chalicelib/core/sessions.py +++ b/ee/api/chalicelib/core/sessions.py @@ -307,13 +307,13 @@ def search_sessions(data: schemas.SessionsSearchPayloadSchema, project_id, user_ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, density: int, view_type: schemas.MetricTimeseriesViewType, metric_type: schemas.MetricType, - metric_of: schemas.TableMetricOfType, metric_value: List): + metric_of: schemas.MetricOfTable, metric_value: List): step_size = int(metrics_helper.__get_step_size(endTimestamp=data.endDate, startTimestamp=data.startDate, density=density, factor=1, decimal=True)) extra_event = None - if metric_of == schemas.TableMetricOfType.visited_url: + if metric_of == schemas.MetricOfTable.visited_url: extra_event = "events.pages" - elif metric_of == schemas.TableMetricOfType.issues and len(metric_value) > 0: + elif metric_of == schemas.MetricOfTable.issues and len(metric_value) > 0: data.filters.append(schemas.SessionSearchFilterSchema(value=metric_value, type=schemas.FilterType.issue, operator=schemas.SearchEventOperator._is)) full_args, query_part = search_query_parts(data=data, error_status=None, errors_only=False, @@ -356,18 +356,18 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d else: sessions = cur.fetchone()["count"] elif metric_type == schemas.MetricType.table: - if isinstance(metric_of, schemas.TableMetricOfType): + if isinstance(metric_of, schemas.MetricOfTable): main_col = "user_id" extra_col = "" extra_where = "" pre_query = "" - if metric_of == schemas.TableMetricOfType.user_country: + if metric_of == schemas.MetricOfTable.user_country: main_col = "user_country" - elif metric_of == schemas.TableMetricOfType.user_device: + elif metric_of == schemas.MetricOfTable.user_device: main_col = "user_device" - elif metric_of == schemas.TableMetricOfType.user_browser: + elif metric_of == schemas.MetricOfTable.user_browser: main_col = "user_browser" - elif metric_of == schemas.TableMetricOfType.issues: + elif metric_of == schemas.MetricOfTable.issues: main_col = "issue" extra_col = f", UNNEST(s.issue_types) AS {main_col}" if len(metric_value) > 0: @@ -377,7 +377,7 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d extra_where.append(f"{main_col} = %({arg_name})s") full_args[arg_name] = metric_value[i] extra_where = f"WHERE ({' OR '.join(extra_where)})" - elif metric_of == schemas.TableMetricOfType.visited_url: + elif metric_of == schemas.MetricOfTable.visited_url: main_col = "path" extra_col = ", path" main_query = cur.mogrify(f"""{pre_query} diff --git a/ee/api/chalicelib/core/sessions_exp.py b/ee/api/chalicelib/core/sessions_exp.py index 0b77563f9..3e37f7eb2 100644 --- a/ee/api/chalicelib/core/sessions_exp.py +++ b/ee/api/chalicelib/core/sessions_exp.py @@ -335,18 +335,18 @@ def search_sessions(data: schemas.SessionsSearchPayloadSchema, project_id, user_ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, density: int, view_type: schemas.MetricTimeseriesViewType, metric_type: schemas.MetricType, - metric_of: schemas.TableMetricOfType, metric_value: List): + metric_of: schemas.MetricOfTable, metric_value: List): step_size = int(metrics_helper.__get_step_size(endTimestamp=data.endDate, startTimestamp=data.startDate, density=density)) extra_event = None - if metric_of == schemas.TableMetricOfType.visited_url: + if metric_of == schemas.MetricOfTable.visited_url: extra_event = f"""SELECT DISTINCT ev.session_id, ev.url_path FROM {exp_ch_helper.get_main_events_table(data.startDate)} 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: + elif metric_of == schemas.MetricOfTable.issues and len(metric_value) > 0: data.filters.append(schemas.SessionSearchFilterSchema(value=metric_value, type=schemas.FilterType.issue, operator=schemas.SearchEventOperator._is)) full_args, query_part = search_query_parts_ch(data=data, error_status=None, errors_only=False, @@ -383,21 +383,21 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d elif metric_type == schemas.MetricType.table: full_args["limit_s"] = 0 full_args["limit_e"] = 200 - if isinstance(metric_of, schemas.TableMetricOfType): + if isinstance(metric_of, schemas.MetricOfTable): main_col = "user_id" extra_col = "s.user_id" extra_where = "" pre_query = "" - if metric_of == schemas.TableMetricOfType.user_country: + if metric_of == schemas.MetricOfTable.user_country: main_col = "user_country" extra_col = "s.user_country" - elif metric_of == schemas.TableMetricOfType.user_device: + elif metric_of == schemas.MetricOfTable.user_device: main_col = "user_device" extra_col = "s.user_device" - elif metric_of == schemas.TableMetricOfType.user_browser: + elif metric_of == schemas.MetricOfTable.user_browser: main_col = "user_browser" extra_col = "s.user_browser" - elif metric_of == schemas.TableMetricOfType.issues: + elif metric_of == schemas.MetricOfTable.issues: main_col = "issue" extra_col = f"arrayJoin(s.issue_types) AS {main_col}" if len(metric_value) > 0: @@ -407,7 +407,7 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d extra_where.append(f"{main_col} = %({arg_name})s") full_args[arg_name] = metric_value[i] extra_where = f"WHERE ({' OR '.join(extra_where)})" - elif metric_of == schemas.TableMetricOfType.visited_url: + elif metric_of == schemas.MetricOfTable.visited_url: main_col = "url_path" extra_col = "s.url_path" main_query = cur.format(f"""{pre_query}