From d9e5336700d6a85dba5a59efde556f554d374481 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Sun, 6 Feb 2022 16:11:32 +0100 Subject: [PATCH] feat(api): custom metrics get sessions by series --- api/chalicelib/core/custom_metrics.py | 14 ++++++++++++++ api/routers/core.py | 14 ++++++++++++++ api/schemas.py | 17 +++++++++++++---- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/api/chalicelib/core/custom_metrics.py b/api/chalicelib/core/custom_metrics.py index 10e86024c..e3934ff7b 100644 --- a/api/chalicelib/core/custom_metrics.py +++ b/api/chalicelib/core/custom_metrics.py @@ -33,6 +33,20 @@ def make_chart(project_id, user_id, metric_id, data: schemas.CustomMetricChartPa return try_live(project_id=project_id, data=metric) +def get_sessions(project_id, user_id, metric_id, data: schemas.CustomMetricRawPayloadSchema): + 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}) + results = [] + 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)) + + return results + + 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 01df90ec6..4342a8472 100644 --- a/api/routers/core.py +++ b/api/routers/core.py @@ -1085,6 +1085,13 @@ def try_custom_metric(projectId: int, data: schemas.TryCustomMetricsSchema = Bod return {"data": custom_metrics.try_live(project_id=projectId, data=data)} +@app.post('/{projectId}/custom_metrics/sessions', tags=["customMetrics"]) +def get_custom_metric_sessions(projectId: int, data: schemas.CustomMetricRawPayloadSchema2 = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): + return {"data": custom_metrics.get_sessions(project_id=projectId, user_id=context.user_id, metric_id=data.metric_id, + data=data)} + + @app.post('/{projectId}/custom_metrics/chart', tags=["customMetrics"]) @app.put('/{projectId}/custom_metrics/chart', tags=["customMetrics"]) def get_custom_metric_chart(projectId: int, data: schemas.CustomMetricChartPayloadSchema2 = Body(...), @@ -1110,6 +1117,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}/sessions', tags=["customMetrics"]) +def get_custom_metric_sessions(projectId: int, metric_id: int, data: schemas.CustomMetricRawPayloadSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): + return {"data": custom_metrics.get_sessions(project_id=projectId, user_id=context.user_id, metric_id=metric_id, + data=data)} + + @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)): diff --git a/api/schemas.py b/api/schemas.py index 66950a89a..33b0fad52 100644 --- a/api/schemas.py +++ b/api/schemas.py @@ -673,15 +673,24 @@ class MetricViewType(str, Enum): progress = "progress" -class CustomMetricChartPayloadSchema(BaseModel): +class CustomMetricRawPayloadSchema(BaseModel): + startDate: int = Field(TimeUTC.now(-7)) + endDate: int = Field(TimeUTC.now()) + + class Config: + alias_generator = attribute_to_camel_case + + +class CustomMetricRawPayloadSchema2(CustomMetricRawPayloadSchema): + metric_id: int = Field(...) + + +class CustomMetricChartPayloadSchema(CustomMetricRawPayloadSchema): startDate: int = Field(TimeUTC.now(-7)) endDate: int = Field(TimeUTC.now()) density: int = Field(7) viewType: MetricViewType = Field(MetricViewType.line_chart) - class Config: - alias_generator = attribute_to_camel_case - class CustomMetricChartPayloadSchema2(CustomMetricChartPayloadSchema): metric_id: int = Field(...)