From 6b58a93fd5f94b9b70d9f9fe58f48d006bb6fce4 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Fri, 7 Jan 2022 12:42:03 +0100 Subject: [PATCH] feat(api): custom metrics get chart --- api/chalicelib/core/custom_metrics.py | 12 +++++++++--- api/routers/core.py | 7 +++++++ api/schemas.py | 13 ++++++++++--- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/api/chalicelib/core/custom_metrics.py b/api/chalicelib/core/custom_metrics.py index f7f203fb6..7d20fd39b 100644 --- a/api/chalicelib/core/custom_metrics.py +++ b/api/chalicelib/core/custom_metrics.py @@ -12,19 +12,25 @@ def try_live(project_id, data: schemas.TryCustomMetricsSchema): s.filter.startDate = data.startDate s.filter.endDate = data.endDate results.append(sessions.search2_series(data=s.filter, project_id=project_id, density=data.density, - view_type=data.view_type)) - if data.view_type == schemas.MetricViewType.progress: + view_type=data.viewType)) + if data.viewType == schemas.MetricViewType.progress: r = {"count": results[-1]} diff = s.filter.endDate - s.filter.startDate s.filter.startDate = data.endDate s.filter.endDate = data.endDate - diff r["previousCount"] = sessions.search2_series(data=s.filter, project_id=project_id, density=data.density, - view_type=data.view_type) + view_type=data.viewType) r["countProgress"] = helper.__progress(old_val=r["previousCount"], new_val=r["count"]) results[-1] = r 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) + metric: schemas.TryCustomMetricsSchema = schemas.TryCustomMetricsSchema.parse_obj({**data.dict(), **metric}) + return try_live(project_id=project_id, data=metric) + + def create(project_id, user_id, data: schemas.CreateCustomMetricsSchema): with pg_client.PostgresClient() as cur: _data = {} diff --git a/api/routers/core.py b/api/routers/core.py index c2099779d..cf76140f7 100644 --- a/api/routers/core.py +++ b/api/routers/core.py @@ -1114,6 +1114,13 @@ def get_custom_metric(projectId: int, metric_id: int, context: schemas.CurrentCo return {"data": custom_metrics.get(project_id=projectId, user_id=context.user_id, metric_id=metric_id)} +@app.post('/{projectId}/custom_metrics/{metric_id}/chart', tags=["customMetrics"]) +def get_custom_metric_chart(projectId: int, metric_id: int, data: schemas.CustomMetricChartPayloadSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): + return {"data": custom_metrics.make_chart(project_id=projectId, user_id=context.user_id, metric_id=metric_id, + data=data)} + + @app.post('/{projectId}/custom_metrics/{metric_id}', tags=["customMetrics"]) @app.put('/{projectId}/custom_metrics/{metric_id}', tags=["customMetrics"]) def update_custom_metric(projectId: int, metric_id: int, data: schemas.UpdateCustomMetricsSchema = Body(...), diff --git a/api/schemas.py b/api/schemas.py index 35983175d..d783241e7 100644 --- a/api/schemas.py +++ b/api/schemas.py @@ -586,7 +586,7 @@ class CustomMetricSeriesFilterSchema(SessionsSearchPayloadSchema): class CustomMetricCreateSeriesSchema(BaseModel): - title: Optional[str] = Field(None) + name: Optional[str] = Field(None) index: Optional[int] = Field(None) filter: Optional[CustomMetricSeriesFilterSchema] = Field([]) @@ -605,11 +605,18 @@ class MetricViewType(str, Enum): progress = "progress" -class TryCustomMetricsSchema(CreateCustomMetricsSchema): +class CustomMetricChartPayloadSchema(BaseModel): startDate: int = Field(TimeUTC.now(-7)) endDate: int = Field(TimeUTC.now()) density: int = Field(7) - view_type: MetricViewType = Field(MetricViewType.line_chart) + viewType: MetricViewType = Field(MetricViewType.line_chart) + + class Config: + alias_generator = attribute_to_camel_case + + +class TryCustomMetricsSchema(CreateCustomMetricsSchema, CustomMetricChartPayloadSchema): + name: Optional[str] = Field(None) class CustomMetricUpdateSeriesSchema(CustomMetricCreateSeriesSchema):