diff --git a/api/chalicelib/core/custom_metrics.py b/api/chalicelib/core/custom_metrics.py index e0b0ed432..88f8fca10 100644 --- a/api/chalicelib/core/custom_metrics.py +++ b/api/chalicelib/core/custom_metrics.py @@ -102,7 +102,7 @@ def get_sessions(project_id, user_id, metric_id, data: schemas.CustomMetricSessi return results -def create(project_id, user_id, data: schemas.CreateCustomMetricsSchema): +def create(project_id, user_id, data: schemas.CreateCustomMetricsSchema, dashboard=False): with pg_client.PostgresClient() as cur: _data = {} for i, s in enumerate(data.series): @@ -129,6 +129,8 @@ def create(project_id, user_id, data: schemas.CreateCustomMetricsSchema): query ) r = cur.fetchone() + if dashboard: + return r["metric_id"] return {"data": get(metric_id=r["metric_id"], project_id=project_id, user_id=user_id)} diff --git a/api/chalicelib/core/dashboards2.py b/api/chalicelib/core/dashboards2.py index adb7884fe..c292ed1a0 100644 --- a/api/chalicelib/core/dashboards2.py +++ b/api/chalicelib/core/dashboards2.py @@ -1,6 +1,7 @@ import json import schemas +from chalicelib.core import custom_metrics from chalicelib.utils import helper from chalicelib.utils import pg_client @@ -162,3 +163,9 @@ def pin_dashboard(project_id, user_id, dashboard_id): cur.execute(cur.mogrify(pg_query, params)) row = cur.fetchone() return helper.dict_to_camel_case(row) + + +def create_metric_add_widget(project_id, user_id, dashboard_id, data: schemas.CreateCustomMetricsSchema): + metric_id = custom_metrics.create(project_id=project_id, user_id=user_id, data=data, dashboard=True) + return add_widget(project_id=project_id, user_id=user_id, dashboard_id=dashboard_id, + data=schemas.AddWidgetToDashboardPayloadSchema(metric_id=metric_id)) diff --git a/api/routers/subs/metrics.py b/api/routers/subs/metrics.py index 88cfd3937..bcec3d167 100644 --- a/api/routers/subs/metrics.py +++ b/api/routers/subs/metrics.py @@ -51,6 +51,12 @@ def add_widget_to_dashboard(projectId: int, dashboardId: int, return {"data": dashboards2.add_widget(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId, data=data)} +@app.post('/{projectId}/dashboards/{dashboardId}/metrics', tags=["dashboard"]) +@app.put('/{projectId}/dashboards/{dashboardId}/metrics', tags=["dashboard"]) +def create_metric_and_add_to_dashboard(projectId: int, dashboardId: int, data: schemas.CreateCustomMetricsSchema = Body(...),context: schemas.CurrentContext = Depends(OR_context)): + return {"data": dashboards2.create_metric_add_widget(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId, + data=data)} + @app.post('/{projectId}/dashboards/{dashboardId}/widgets/{widgetId}', tags=["dashboard"]) @app.put('/{projectId}/dashboards/{dashboardId}/widgets/{widgetId}', tags=["dashboard"])