diff --git a/api/chalicelib/core/custom_metrics.py b/api/chalicelib/core/custom_metrics.py index 6709b88d5..ae5ec7fc8 100644 --- a/api/chalicelib/core/custom_metrics.py +++ b/api/chalicelib/core/custom_metrics.py @@ -59,7 +59,7 @@ def __get_funnel_chart(project_id, data: schemas.CreateCardSchema): def __is_errors_list(data): return data.metric_type == schemas.MetricType.table \ - and data.metric_of == schemas.TableMetricOfType.errors + and data.metric_of == schemas.MetricOfTable.errors def __get_errors_list(project_id, user_id, data): @@ -77,7 +77,7 @@ def __get_errors_list(project_id, user_id, data): def __is_sessions_list(data): return data.metric_type == schemas.MetricType.table \ - and data.metric_of == schemas.TableMetricOfType.sessions + and data.metric_of == schemas.MetricOfTable.sessions def __get_sessions_list(project_id, user_id, data): @@ -267,7 +267,7 @@ def update(metric_id, user_id, project_id, data: schemas.UpdateCardSchema): "user_id": user_id, "project_id": project_id, "view_type": data.view_type, "metric_type": data.metric_type, "metric_of": data.metric_of, "metric_value": data.metric_value, "metric_format": data.metric_format, - "config": json.dumps(data.config.dict())} + "config": json.dumps(data.default_config.dict())} for i, s in enumerate(data.series): prefix = "u_" if s.index is None: diff --git a/api/routers/subs/metrics.py b/api/routers/subs/metrics.py index 1f80a9a43..b015f31b2 100644 --- a/api/routers/subs/metrics.py +++ b/api/routers/subs/metrics.py @@ -201,6 +201,7 @@ def get_custom_metric_errors_list(projectId: int, metric_id: int, return {"data": data} +@app.post('/{projectId}/cards/{metric_id}/chart', tags=["dashboard"]) @app.post('/{projectId}/metrics/{metric_id}/chart', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/chart', tags=["customMetrics"]) def get_custom_metric_chart(projectId: int, metric_id: int, data: schemas.CustomMetricChartPayloadSchema = Body(...), diff --git a/api/schemas.py b/api/schemas.py index 70cb83106..865573fc3 100644 --- a/api/schemas.py +++ b/api/schemas.py @@ -916,7 +916,7 @@ class CreateCardSchema(CustomMetricChartPayloadSchema): MetricOfResources, MetricOfWebVitals] = Field(MetricOfTable.user_id) metric_value: List[IssueType] = Field([]) metric_format: Optional[MetricFormatType] = Field(None) - default_config: CustomMetricsConfigSchema = Field(...) + default_config: CustomMetricsConfigSchema = Field(..., alias="config") # This is used to handle wrong values sent by the UI @root_validator(pre=True) @@ -929,6 +929,7 @@ class CreateCardSchema(CustomMetricChartPayloadSchema): if values.get("metric_type") == MetricType.funnel.value and \ values.get("series") is not None and len(values["series"]) > 1: values["series"] = [values["series"][0]] + return values @root_validator diff --git a/ee/api/chalicelib/core/custom_metrics.py b/ee/api/chalicelib/core/custom_metrics.py index 3fef819b3..12b3d1364 100644 --- a/ee/api/chalicelib/core/custom_metrics.py +++ b/ee/api/chalicelib/core/custom_metrics.py @@ -22,7 +22,7 @@ else: PIE_CHART_GROUP = 5 -def __try_live(project_id, data: schemas.TryCustomMetricsPayloadSchema): +def __try_live(project_id, data: schemas.CreateCardSchema): results = [] for i, s in enumerate(data.series): s.filter.startDate = data.startTimestamp @@ -55,11 +55,11 @@ def __try_live(project_id, data: schemas.TryCustomMetricsPayloadSchema): return results -def __is_funnel_chart(data: schemas.TryCustomMetricsPayloadSchema): +def __is_funnel_chart(data: schemas.CreateCardSchema): return data.metric_type == schemas.MetricType.funnel -def __get_funnel_chart(project_id, data: schemas.TryCustomMetricsPayloadSchema): +def __get_funnel_chart(project_id, data: schemas.CreateCardSchema): if len(data.series) == 0: return { "stages": [], @@ -72,7 +72,7 @@ def __get_funnel_chart(project_id, data: schemas.TryCustomMetricsPayloadSchema): def __is_errors_list(data): return data.metric_type == schemas.MetricType.table \ - and data.metric_of == schemas.TableMetricOfType.errors + and data.metric_of == schemas.MetricOfTable.errors def __get_errors_list(project_id, user_id, data): @@ -90,7 +90,7 @@ def __get_errors_list(project_id, user_id, data): def __is_sessions_list(data): return data.metric_type == schemas.MetricType.table \ - and data.metric_of == schemas.TableMetricOfType.sessions + and data.metric_of == schemas.MetricOfTable.sessions def __get_sessions_list(project_id, user_id, data): @@ -107,7 +107,7 @@ 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 merged_live(project_id, data: schemas.TryCustomMetricsPayloadSchema, user_id=None): +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) elif __is_errors_list(data): @@ -127,11 +127,11 @@ def merged_live(project_id, data: schemas.TryCustomMetricsPayloadSchema, user_id def __merge_metric_with_data(metric, data: Union[schemas.CustomMetricChartPayloadSchema, - schemas.CustomMetricSessionsPayloadSchema]) \ - -> Union[schemas.CreateCustomMetricsSchema, None]: +schemas.CustomMetricSessionsPayloadSchema]) \ + -> Union[schemas.CreateCardSchema, None]: if data.series is not None and len(data.series) > 0: metric["series"] = data.series - metric: schemas.CreateCustomMetricsSchema = schemas.CreateCustomMetricsSchema.parse_obj({**data.dict(), **metric}) + metric: schemas.CreateCardSchema = schemas.CreateCardSchema.parse_obj({**data.dict(), **metric}) if len(data.filters) > 0 or len(data.events) > 0: for s in metric.series: if len(data.filters) > 0: @@ -146,7 +146,7 @@ def make_chart(project_id, user_id, metric_id, data: schemas.CustomMetricChartPa metric = get(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False) if metric is None: return None - metric: schemas.CreateCustomMetricsSchema = __merge_metric_with_data(metric=metric, data=data) + 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): @@ -169,7 +169,7 @@ def get_sessions(project_id, user_id, metric_id, data: schemas.CustomMetricSessi metric = get(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False) if metric is None: return None - metric: schemas.CreateCustomMetricsSchema = __merge_metric_with_data(metric=metric, data=data) + metric: schemas.CreateCardSchema = __merge_metric_with_data(metric=metric, data=data) if metric is None: return None results = [] @@ -188,7 +188,7 @@ def get_funnel_issues(project_id, user_id, metric_id, data: schemas.CustomMetric metric = get(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False) if metric is None: return None - metric: schemas.CreateCustomMetricsSchema = __merge_metric_with_data(metric=metric, data=data) + metric: schemas.CreateCardSchema = __merge_metric_with_data(metric=metric, data=data) if metric is None: return None for s in metric.series: @@ -204,7 +204,7 @@ def get_errors_list(project_id, user_id, metric_id, data: schemas.CustomMetricSe metric = get(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False) if metric is None: return None - metric: schemas.CreateCustomMetricsSchema = __merge_metric_with_data(metric=metric, data=data) + metric: schemas.CreateCardSchema = __merge_metric_with_data(metric=metric, data=data) if metric is None: return None for s in metric.series: @@ -231,7 +231,7 @@ def try_sessions(project_id, user_id, data: schemas.CustomMetricSessionsPayloadS return results -def create(project_id, user_id, data: schemas.CreateCustomMetricsSchema, dashboard=False): +def create(project_id, user_id, data: schemas.CreateCardSchema, dashboard=False): with pg_client.PostgresClient() as cur: _data = {} for i, s in enumerate(data.series): @@ -242,7 +242,7 @@ def create(project_id, user_id, data: schemas.CreateCustomMetricsSchema, dashboa series_len = len(data.series) data.series = None params = {"user_id": user_id, "project_id": project_id, - "default_config": json.dumps(data.config.dict()), + "default_config": json.dumps(data.default_config.dict()), **data.dict(), **_data} query = cur.mogrify(f"""\ WITH m AS (INSERT INTO metrics (project_id, user_id, name, is_public, @@ -522,7 +522,7 @@ def get_funnel_sessions_by_issue(user_id, project_id, metric_id, issue_id, metric = get(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False) if metric is None: return None - metric: schemas.CreateCustomMetricsSchema = __merge_metric_with_data(metric=metric, data=data) + metric: schemas.CreateCardSchema = __merge_metric_with_data(metric=metric, data=data) if metric is None: return None for s in metric.series: