feat(chalice): changed custom metrics cards

This commit is contained in:
Taha Yassine Kraiem 2022-12-12 12:58:59 +01:00
parent de54e0cad7
commit 25ef9b079b
4 changed files with 22 additions and 20 deletions

View file

@ -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:

View file

@ -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(...),

View file

@ -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

View file

@ -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: