From c43306ff32d3b0f51bbd05b17976beefbffeb5d0 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Sun, 6 Feb 2022 18:48:22 +0100 Subject: [PATCH] feat(api): custom metrics merge get sessions by series feat(api): custom metrics merge get chart by series feat(api): custom metrics merge try --- api/chalicelib/core/custom_metrics.py | 21 +++++++++++++++++++-- api/routers/core.py | 3 ++- api/schemas.py | 4 ++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/api/chalicelib/core/custom_metrics.py b/api/chalicelib/core/custom_metrics.py index e3934ff7b..7ed182e4c 100644 --- a/api/chalicelib/core/custom_metrics.py +++ b/api/chalicelib/core/custom_metrics.py @@ -25,12 +25,28 @@ def try_live(project_id, data: schemas.TryCustomMetricsSchema): return results +def merged_live(project_id, data: schemas.TryCustomMetricsSchema): + series_charts = try_live(project_id=project_id, data=data) + 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"], + data.series[j].name if data.series[j].name else j: series_chart[i]["count"]} + return results + + def make_chart(project_id, user_id, metric_id, data: schemas.CustomMetricChartPayloadSchema): metric = get(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False) if metric is None: return None metric: schemas.TryCustomMetricsSchema = schemas.TryCustomMetricsSchema.parse_obj({**data.dict(), **metric}) - return try_live(project_id=project_id, data=metric) + series_charts = try_live(project_id=project_id, data=metric) + 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.CustomMetricRawPayloadSchema): @@ -42,7 +58,8 @@ def get_sessions(project_id, user_id, metric_id, data: schemas.CustomMetricRawPa for s in metric.series: s.filter.startDate = data.startDate s.filter.endDate = data.endDate - results.append(sessions.search2_pg(data=s.filter, project_id=project_id, user_id=user_id)) + results.append({"seriesId": s.series_id, "seriesName": s.name, + **sessions.search2_pg(data=s.filter, project_id=project_id, user_id=user_id)}) return results diff --git a/api/routers/core.py b/api/routers/core.py index 4342a8472..3dfecbe3d 100644 --- a/api/routers/core.py +++ b/api/routers/core.py @@ -1082,7 +1082,8 @@ def change_client_password(data: schemas.EditUserPasswordSchema = Body(...), @app.put('/{projectId}/custom_metrics/try', tags=["customMetrics"]) def try_custom_metric(projectId: int, data: schemas.TryCustomMetricsSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): - return {"data": custom_metrics.try_live(project_id=projectId, data=data)} + return {"data": custom_metrics.merged_live + (project_id=projectId, data=data)} @app.post('/{projectId}/custom_metrics/sessions', tags=["customMetrics"]) diff --git a/api/schemas.py b/api/schemas.py index 33b0fad52..5c5213e30 100644 --- a/api/schemas.py +++ b/api/schemas.py @@ -654,10 +654,14 @@ class CustomMetricSeriesFilterSchema(FlatSessionsSearchPayloadSchema): class CustomMetricCreateSeriesSchema(BaseModel): + series_id: Optional[int] = Field(None) name: Optional[str] = Field(None) index: Optional[int] = Field(None) filter: Optional[CustomMetricSeriesFilterSchema] = Field([]) + class Config: + alias_generator = attribute_to_camel_case + class CreateCustomMetricsSchema(BaseModel): name: str = Field(...)