diff --git a/api/routers/subs/health.py b/api/routers/subs/health.py index 65c39ad4f..81e5294ea 100644 --- a/api/routers/subs/health.py +++ b/api/routers/subs/health.py @@ -7,14 +7,14 @@ public_app, app, app_apikey = get_routers() @app.get('/healthz', tags=["health-check"]) -def get_global_health_status(): +async def get_global_health_status(): return {"data": health.get_health()} if not tenants.tenants_exists(use_pool=False): @public_app.get('/health', tags=["health-check"]) - def get_public_health_status(): + async def get_public_health_status(): if tenants.tenants_exists(): raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Not Found") - return get_global_health_status() + return await get_global_health_status() diff --git a/api/routers/subs/insights.py b/api/routers/subs/insights.py index cce4917d4..c27e4d704 100644 --- a/api/routers/subs/insights.py +++ b/api/routers/subs/insights.py @@ -9,79 +9,79 @@ public_app, app, app_apikey = get_routers() @app.post('/{projectId}/insights/journey', tags=["insights"]) @app.get('/{projectId}/insights/journey', tags=["insights"]) -def get_insights_journey(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_insights_journey(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.journey(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/users_acquisition', tags=["insights"]) @app.get('/{projectId}/insights/users_acquisition', tags=["insights"]) -def get_users_acquisition(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_users_acquisition(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.users_acquisition(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/users_retention', tags=["insights"]) @app.get('/{projectId}/insights/users_retention', tags=["insights"]) -def get_users_retention(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_users_retention(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.users_retention(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/feature_retention', tags=["insights"]) @app.get('/{projectId}/insights/feature_retention', tags=["insights"]) -def get_feature_rentention(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_feature_rentention(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.feature_retention(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/feature_acquisition', tags=["insights"]) @app.get('/{projectId}/insights/feature_acquisition', tags=["insights"]) -def get_feature_acquisition(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_feature_acquisition(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.feature_acquisition(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/feature_popularity_frequency', tags=["insights"]) @app.get('/{projectId}/insights/feature_popularity_frequency', tags=["insights"]) -def get_feature_popularity_frequency(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_feature_popularity_frequency(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.feature_popularity_frequency(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/feature_intensity', tags=["insights"]) @app.get('/{projectId}/insights/feature_intensity', tags=["insights"]) -def get_feature_intensity(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_feature_intensity(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.feature_intensity(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/feature_adoption', tags=["insights"]) @app.get('/{projectId}/insights/feature_adoption', tags=["insights"]) -def get_feature_adoption(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_feature_adoption(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.feature_adoption(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/feature_adoption_top_users', tags=["insights"]) @app.get('/{projectId}/insights/feature_adoption_top_users', tags=["insights"]) -def get_feature_adoption(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_feature_adoption(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.feature_adoption_top_users(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/users_active', tags=["insights"]) @app.get('/{projectId}/insights/users_active', tags=["insights"]) -def get_users_active(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_users_active(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.users_active(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/users_power', tags=["insights"]) @app.get('/{projectId}/insights/users_power', tags=["insights"]) -def get_users_power(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_users_power(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.users_power(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/users_slipping', tags=["insights"]) @app.get('/{projectId}/insights/users_slipping', tags=["insights"]) -def get_users_slipping(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_users_slipping(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.users_slipping(project_id=projectId, **data.dict())} # # # @app.route('/{projectId}/dashboard/{widget}/search', methods=['GET']) -# def get_dashboard_autocomplete(projectId:int, widget): +# async def get_dashboard_autocomplete(projectId:int, widget): # params = app.current_request.query_params # if params is None or params.get('q') is None or len(params.get('q')) == 0: # return {"data": []} diff --git a/api/routers/subs/metrics.py b/api/routers/subs/metrics.py index ac54842da..8af41425c 100644 --- a/api/routers/subs/metrics.py +++ b/api/routers/subs/metrics.py @@ -12,18 +12,18 @@ public_app, app, app_apikey = get_routers() @app.post('/{projectId}/dashboards', tags=["dashboard"]) @app.put('/{projectId}/dashboards', tags=["dashboard"]) -def create_dashboards(projectId: int, data: schemas.CreateDashboardSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def create_dashboards(projectId: int, data: schemas.CreateDashboardSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return dashboards.create_dashboard(project_id=projectId, user_id=context.user_id, data=data) @app.get('/{projectId}/dashboards', tags=["dashboard"]) -def get_dashboards(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): +async def get_dashboards(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): return {"data": dashboards.get_dashboards(project_id=projectId, user_id=context.user_id)} @app.get('/{projectId}/dashboards/{dashboardId}', tags=["dashboard"]) -def get_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)): +async def get_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)): data = dashboards.get_dashboard(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId) if data is None: return {"errors": ["dashboard not found"]} @@ -32,59 +32,59 @@ def get_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentCont @app.post('/{projectId}/dashboards/{dashboardId}', tags=["dashboard"]) @app.put('/{projectId}/dashboards/{dashboardId}', tags=["dashboard"]) -def update_dashboard(projectId: int, dashboardId: int, data: schemas.EditDashboardSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def update_dashboard(projectId: int, dashboardId: int, data: schemas.EditDashboardSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return {"data": dashboards.update_dashboard(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId, data=data)} @app.delete('/{projectId}/dashboards/{dashboardId}', tags=["dashboard"]) -def delete_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)): +async def delete_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)): return dashboards.delete_dashboard(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId) @app.get('/{projectId}/dashboards/{dashboardId}/pin', tags=["dashboard"]) -def pin_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)): +async def pin_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)): return {"data": dashboards.pin_dashboard(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId)} @app.post('/{projectId}/dashboards/{dashboardId}/cards', tags=["cards"]) @app.post('/{projectId}/dashboards/{dashboardId}/widgets', tags=["dashboard"]) @app.put('/{projectId}/dashboards/{dashboardId}/widgets', tags=["dashboard"]) -def add_card_to_dashboard(projectId: int, dashboardId: int, - data: schemas.AddWidgetToDashboardPayloadSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def add_card_to_dashboard(projectId: int, dashboardId: int, + data: schemas.AddWidgetToDashboardPayloadSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return {"data": dashboards.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.CreateCardSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def create_metric_and_add_to_dashboard(projectId: int, dashboardId: int, + data: schemas.CreateCardSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return {"data": dashboards.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"]) -def update_widget_in_dashboard(projectId: int, dashboardId: int, widgetId: int, - data: schemas.UpdateWidgetPayloadSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def update_widget_in_dashboard(projectId: int, dashboardId: int, widgetId: int, + data: schemas.UpdateWidgetPayloadSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return dashboards.update_widget(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId, widget_id=widgetId, data=data) @app.delete('/{projectId}/dashboards/{dashboardId}/widgets/{widgetId}', tags=["dashboard"]) -def remove_widget_from_dashboard(projectId: int, dashboardId: int, widgetId: int, - context: schemas.CurrentContext = Depends(OR_context)): +async def remove_widget_from_dashboard(projectId: int, dashboardId: int, widgetId: int, + context: schemas.CurrentContext = Depends(OR_context)): return dashboards.remove_widget(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId, widget_id=widgetId) # @app.post('/{projectId}/dashboards/{dashboardId}/widgets/{widgetId}/chart', tags=["dashboard"]) -# def get_widget_chart(projectId: int, dashboardId: int, widgetId: int, +# async def get_widget_chart(projectId: int, dashboardId: int, widgetId: int, # data: schemas.CardChartSchema = Body(...), # context: schemas.CurrentContext = Depends(OR_context)): # data = dashboards.make_chart_widget(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId, @@ -99,16 +99,16 @@ def remove_widget_from_dashboard(projectId: int, dashboardId: int, widgetId: int @app.put('/{projectId}/metrics/try', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/try', tags=["customMetrics"]) @app.put('/{projectId}/custom_metrics/try', tags=["customMetrics"]) -def try_card(projectId: int, data: schemas.CreateCardSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def try_card(projectId: int, data: schemas.CreateCardSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return {"data": custom_metrics.merged_live(project_id=projectId, data=data, user_id=context.user_id)} @app.post('/{projectId}/cards/try/sessions', tags=["cards"]) @app.post('/{projectId}/metrics/try/sessions', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/try/sessions', tags=["customMetrics"]) -def try_card_sessions(projectId: int, data: schemas.CardSessionsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def try_card_sessions(projectId: int, data: schemas.CardSessionsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.try_sessions(project_id=projectId, user_id=context.user_id, data=data) return {"data": data} @@ -116,8 +116,8 @@ def try_card_sessions(projectId: int, data: schemas.CardSessionsSchema = Body(.. @app.post('/{projectId}/cards/try/issues', tags=["cards"]) @app.post('/{projectId}/metrics/try/issues', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/try/issues', tags=["customMetrics"]) -def try_card_funnel_issues(projectId: int, data: schemas.CardSessionsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def try_card_funnel_issues(projectId: int, data: schemas.CardSessionsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): if len(data.series) == 0: return {"data": []} data.series[0].filter.startDate = data.startTimestamp @@ -129,7 +129,7 @@ def try_card_funnel_issues(projectId: int, data: schemas.CardSessionsSchema = Bo @app.get('/{projectId}/cards', tags=["cards"]) @app.get('/{projectId}/metrics', tags=["dashboard"]) @app.get('/{projectId}/custom_metrics', tags=["customMetrics"]) -def get_cards(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): +async def get_cards(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): return {"data": custom_metrics.get_all(project_id=projectId, user_id=context.user_id)} @@ -138,23 +138,23 @@ def get_cards(projectId: int, context: schemas.CurrentContext = Depends(OR_conte @app.put('/{projectId}/metrics', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics', tags=["customMetrics"]) @app.put('/{projectId}/custom_metrics', tags=["customMetrics"]) -def create_card(projectId: int, data: schemas.CreateCardSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def create_card(projectId: int, data: schemas.CreateCardSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return custom_metrics.create(project_id=projectId, user_id=context.user_id, data=data) @app.post('/{projectId}/cards/search', tags=["cards"]) @app.post('/{projectId}/metrics/search', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/search', tags=["customMetrics"]) -def search_cards(projectId: int, data: schemas.SearchCardsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def search_cards(projectId: int, data: schemas.SearchCardsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return {"data": custom_metrics.search_all(project_id=projectId, user_id=context.user_id, data=data)} @app.get('/{projectId}/cards/{metric_id}', tags=["cards"]) @app.get('/{projectId}/metrics/{metric_id}', tags=["dashboard"]) @app.get('/{projectId}/custom_metrics/{metric_id}', tags=["customMetrics"]) -def get_card(projectId: int, metric_id: Union[int, str], context: schemas.CurrentContext = Depends(OR_context)): +async def get_card(projectId: int, metric_id: Union[int, str], context: schemas.CurrentContext = Depends(OR_context)): if not isinstance(metric_id, int): return {"errors": ["invalid card_id"]} data = custom_metrics.get_card(project_id=projectId, user_id=context.user_id, metric_id=metric_id) @@ -164,7 +164,7 @@ def get_card(projectId: int, metric_id: Union[int, str], context: schemas.Curren # @app.get('/{projectId}/cards/{metric_id}/thumbnail', tags=["cards"]) -# def sign_thumbnail_for_upload(projectId: int, metric_id: Union[int, str], +# async def sign_thumbnail_for_upload(projectId: int, metric_id: Union[int, str], # context: schemas.CurrentContext = Depends(OR_context)): # if not isinstance(metric_id, int): # return {"errors": ["invalid card_id"]} @@ -174,9 +174,9 @@ def get_card(projectId: int, metric_id: Union[int, str], context: schemas.Curren @app.post('/{projectId}/cards/{metric_id}/sessions', tags=["cards"]) @app.post('/{projectId}/metrics/{metric_id}/sessions', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/sessions', tags=["customMetrics"]) -def get_card_sessions(projectId: int, metric_id: int, - data: schemas.CardSessionsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def get_card_sessions(projectId: int, metric_id: int, + data: schemas.CardSessionsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.get_sessions(project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data) if data is None: return {"errors": ["custom metric not found"]} @@ -186,9 +186,9 @@ def get_card_sessions(projectId: int, metric_id: int, @app.post('/{projectId}/cards/{metric_id}/issues', tags=["cards"]) @app.post('/{projectId}/metrics/{metric_id}/issues', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/issues', tags=["customMetrics"]) -def get_card_funnel_issues(projectId: int, metric_id: Union[int, str], - data: schemas.CardSessionsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def get_card_funnel_issues(projectId: int, metric_id: Union[int, str], + data: schemas.CardSessionsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): if not isinstance(metric_id, int): return {"errors": [f"invalid card_id: {metric_id}"]} @@ -202,9 +202,9 @@ def get_card_funnel_issues(projectId: int, metric_id: Union[int, str], @app.post('/{projectId}/cards/{metric_id}/issues/{issueId}/sessions', tags=["dashboard"]) @app.post('/{projectId}/metrics/{metric_id}/issues/{issueId}/sessions', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/issues/{issueId}/sessions', tags=["customMetrics"]) -def get_metric_funnel_issue_sessions(projectId: int, metric_id: int, issueId: str, - data: schemas.CardSessionsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def get_metric_funnel_issue_sessions(projectId: int, metric_id: int, issueId: str, + data: schemas.CardSessionsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.get_funnel_sessions_by_issue(project_id=projectId, user_id=context.user_id, metric_id=metric_id, issue_id=issueId, data=data) if data is None: @@ -215,9 +215,9 @@ def get_metric_funnel_issue_sessions(projectId: int, metric_id: int, issueId: st @app.post('/{projectId}/cards/{metric_id}/errors', tags=["dashboard"]) @app.post('/{projectId}/metrics/{metric_id}/errors', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/errors', tags=["customMetrics"]) -def get_custom_metric_errors_list(projectId: int, metric_id: int, - data: schemas.CardSessionsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def get_custom_metric_errors_list(projectId: int, metric_id: int, + data: schemas.CardSessionsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.get_errors_list(project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data) if data is None: @@ -228,8 +228,8 @@ def get_custom_metric_errors_list(projectId: int, metric_id: int, @app.post('/{projectId}/cards/{metric_id}/chart', tags=["card"]) @app.post('/{projectId}/metrics/{metric_id}/chart', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/chart', tags=["customMetrics"]) -def get_card_chart(projectId: int, metric_id: int, request: Request, data: schemas.CardChartSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def get_card_chart(projectId: int, metric_id: int, request: Request, data: schemas.CardChartSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.make_chart_from_card(project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data) return {"data": data} @@ -240,8 +240,8 @@ def get_card_chart(projectId: int, metric_id: int, request: Request, data: schem @app.put('/{projectId}/metrics/{metric_id}', tags=["dashboard"]) @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.UpdateCardSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def update_custom_metric(projectId: int, metric_id: int, data: schemas.UpdateCardSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.update(project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data) if data is None: return {"errors": ["custom metric not found"]} @@ -253,9 +253,9 @@ def update_custom_metric(projectId: int, metric_id: int, data: schemas.UpdateCar @app.put('/{projectId}/metrics/{metric_id}/status', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/status', tags=["customMetrics"]) @app.put('/{projectId}/custom_metrics/{metric_id}/status', tags=["customMetrics"]) -def update_custom_metric_state(projectId: int, metric_id: int, - data: schemas.UpdateCustomMetricsStatusSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def update_custom_metric_state(projectId: int, metric_id: int, + data: schemas.UpdateCustomMetricsStatusSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return { "data": custom_metrics.change_state(project_id=projectId, user_id=context.user_id, metric_id=metric_id, status=data.active)} @@ -264,5 +264,5 @@ def update_custom_metric_state(projectId: int, metric_id: int, @app.delete('/{projectId}/cards/{metric_id}', tags=["dashboard"]) @app.delete('/{projectId}/metrics/{metric_id}', tags=["dashboard"]) @app.delete('/{projectId}/custom_metrics/{metric_id}', tags=["customMetrics"]) -def delete_custom_metric(projectId: int, metric_id: int, context: schemas.CurrentContext = Depends(OR_context)): +async def delete_custom_metric(projectId: int, metric_id: int, context: schemas.CurrentContext = Depends(OR_context)): return {"data": custom_metrics.delete(project_id=projectId, user_id=context.user_id, metric_id=metric_id)} diff --git a/api/routers/subs/v1_api.py b/api/routers/subs/v1_api.py index 2af0b398a..0759d0c31 100644 --- a/api/routers/subs/v1_api.py +++ b/api/routers/subs/v1_api.py @@ -10,7 +10,7 @@ public_app, app, app_apikey = get_routers() @app_apikey.get('/v1/{projectKey}/users/{userId}/sessions', tags=["api"]) -def get_user_sessions(projectKey: str, userId: str, start_date: int = None, end_date: int = None): +async def get_user_sessions(projectKey: str, userId: str, start_date: int = None, end_date: int = None): projectId = projects.get_internal_project_id(projectKey) if projectId is None: return {"errors": ["invalid projectKey"]} @@ -25,7 +25,7 @@ def get_user_sessions(projectKey: str, userId: str, start_date: int = None, end_ @app_apikey.get('/v1/{projectKey}/sessions/{sessionId}/events', tags=["api"]) -def get_session_events(projectKey: str, sessionId: int): +async def get_session_events(projectKey: str, sessionId: int): projectId = projects.get_internal_project_id(projectKey) if projectId is None: return {"errors": ["invalid projectKey"]} @@ -38,7 +38,7 @@ def get_session_events(projectKey: str, sessionId: int): @app_apikey.get('/v1/{projectKey}/users/{userId}', tags=["api"]) -def get_user_details(projectKey: str, userId: str): +async def get_user_details(projectKey: str, userId: str): projectId = projects.get_internal_project_id(projectKey) if projectId is None: return {"errors": ["invalid projectKey"]} @@ -51,7 +51,7 @@ def get_user_details(projectKey: str, userId: str): @app_apikey.delete('/v1/{projectKey}/users/{userId}', tags=["api"]) -def schedule_to_delete_user_data(projectKey: str, userId: str): +async def schedule_to_delete_user_data(projectKey: str, userId: str): projectId = projects.get_internal_project_id(projectKey) if projectId is None: return {"errors": ["invalid projectKey"]} @@ -66,7 +66,7 @@ def schedule_to_delete_user_data(projectKey: str, userId: str): @app_apikey.get('/v1/{projectKey}/jobs', tags=["api"]) -def get_jobs(projectKey: str): +async def get_jobs(projectKey: str): projectId = projects.get_internal_project_id(projectKey) if projectId is None: return {"errors": ["invalid projectKey"]} @@ -76,14 +76,14 @@ def get_jobs(projectKey: str): @app_apikey.get('/v1/{projectKey}/jobs/{jobId}', tags=["api"]) -def get_job(projectKey: str, jobId: int): +async def get_job(projectKey: str, jobId: int): return { 'data': jobs.get(job_id=jobId) } @app_apikey.delete('/v1/{projectKey}/jobs/{jobId}', tags=["api"]) -def cancel_job(projectKey: str, jobId: int): +async def cancel_job(projectKey: str, jobId: int): job = jobs.get(job_id=jobId) job_not_found = len(job.keys()) == 0 @@ -99,7 +99,7 @@ def cancel_job(projectKey: str, jobId: int): @app_apikey.get('/v1/projects', tags=["api"]) -def get_projects(context: schemas.CurrentContext = Depends(OR_context)): +async def get_projects(context: schemas.CurrentContext = Depends(OR_context)): records = projects.get_projects(tenant_id=context.tenant_id) for record in records: del record['projectId'] @@ -110,15 +110,15 @@ def get_projects(context: schemas.CurrentContext = Depends(OR_context)): @app_apikey.get('/v1/projects/{projectKey}', tags=["api"]) -def get_project(projectKey: str, context: schemas.CurrentContext = Depends(OR_context)): +async def get_project(projectKey: str, context: schemas.CurrentContext = Depends(OR_context)): return { 'data': projects.get_project_by_key(tenant_id=context.tenant_id, project_key=projectKey) } @app_apikey.post('/v1/projects', tags=["api"]) -def create_project(data: schemas.CreateProjectSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def create_project(data: schemas.CreateProjectSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): record = projects.create( tenant_id=context.tenant_id, user_id=None, diff --git a/ee/api/routers/subs/insights.py b/ee/api/routers/subs/insights.py index aa3ca2674..5bd68d313 100644 --- a/ee/api/routers/subs/insights.py +++ b/ee/api/routers/subs/insights.py @@ -11,79 +11,79 @@ public_app, app, app_apikey = get_routers([OR_scope(Permissions.metrics)]) @app.post('/{projectId}/insights/journey', tags=["insights"]) @app.get('/{projectId}/insights/journey', tags=["insights"]) -def get_insights_journey(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_insights_journey(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.journey(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/users_acquisition', tags=["insights"]) @app.get('/{projectId}/insights/users_acquisition', tags=["insights"]) -def get_users_acquisition(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_users_acquisition(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.users_acquisition(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/users_retention', tags=["insights"]) @app.get('/{projectId}/insights/users_retention', tags=["insights"]) -def get_users_retention(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_users_retention(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.users_retention(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/feature_retention', tags=["insights"]) @app.get('/{projectId}/insights/feature_retention', tags=["insights"]) -def get_feature_rentention(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_feature_rentention(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.feature_retention(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/feature_acquisition', tags=["insights"]) @app.get('/{projectId}/insights/feature_acquisition', tags=["insights"]) -def get_feature_acquisition(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_feature_acquisition(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.feature_acquisition(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/feature_popularity_frequency', tags=["insights"]) @app.get('/{projectId}/insights/feature_popularity_frequency', tags=["insights"]) -def get_feature_popularity_frequency(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_feature_popularity_frequency(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.feature_popularity_frequency(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/feature_intensity', tags=["insights"]) @app.get('/{projectId}/insights/feature_intensity', tags=["insights"]) -def get_feature_intensity(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_feature_intensity(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.feature_intensity(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/feature_adoption', tags=["insights"]) @app.get('/{projectId}/insights/feature_adoption', tags=["insights"]) -def get_feature_adoption(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_feature_adoption(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.feature_adoption(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/feature_adoption_top_users', tags=["insights"]) @app.get('/{projectId}/insights/feature_adoption_top_users', tags=["insights"]) -def get_feature_adoption(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_feature_adoption(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.feature_adoption_top_users(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/users_active', tags=["insights"]) @app.get('/{projectId}/insights/users_active', tags=["insights"]) -def get_users_active(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_users_active(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.users_active(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/users_power', tags=["insights"]) @app.get('/{projectId}/insights/users_power', tags=["insights"]) -def get_users_power(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_users_power(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.users_power(project_id=projectId, **data.dict())} @app.post('/{projectId}/insights/users_slipping', tags=["insights"]) @app.get('/{projectId}/insights/users_slipping', tags=["insights"]) -def get_users_slipping(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): +async def get_users_slipping(projectId: int, data: schemas.MetricPayloadSchema = Body(...)): return {"data": insights.users_slipping(project_id=projectId, **data.dict())} # # # @app.route('/{projectId}/dashboard/{widget}/search', methods=['GET']) -# def get_dashboard_autocomplete(projectId:int, widget): +# async def get_dashboard_autocomplete(projectId:int, widget): # params = app.current_request.query_params # if params is None or params.get('q') is None or len(params.get('q')) == 0: # return {"data": []} diff --git a/ee/api/routers/subs/metrics.py b/ee/api/routers/subs/metrics.py index 274c8e256..ec489fc92 100644 --- a/ee/api/routers/subs/metrics.py +++ b/ee/api/routers/subs/metrics.py @@ -14,18 +14,18 @@ public_app, app, app_apikey = get_routers([OR_scope(Permissions.metrics)]) @app.post('/{projectId}/dashboards', tags=["dashboard"]) @app.put('/{projectId}/dashboards', tags=["dashboard"]) -def create_dashboards(projectId: int, data: schemas.CreateDashboardSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def create_dashboards(projectId: int, data: schemas.CreateDashboardSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return dashboards.create_dashboard(project_id=projectId, user_id=context.user_id, data=data) @app.get('/{projectId}/dashboards', tags=["dashboard"]) -def get_dashboards(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): +async def get_dashboards(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): return {"data": dashboards.get_dashboards(project_id=projectId, user_id=context.user_id)} @app.get('/{projectId}/dashboards/{dashboardId}', tags=["dashboard"]) -def get_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)): +async def get_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)): data = dashboards.get_dashboard(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId) if data is None: return {"errors": ["dashboard not found"]} @@ -34,59 +34,59 @@ def get_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentCont @app.post('/{projectId}/dashboards/{dashboardId}', tags=["dashboard"]) @app.put('/{projectId}/dashboards/{dashboardId}', tags=["dashboard"]) -def update_dashboard(projectId: int, dashboardId: int, data: schemas.EditDashboardSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def update_dashboard(projectId: int, dashboardId: int, data: schemas.EditDashboardSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return {"data": dashboards.update_dashboard(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId, data=data)} @app.delete('/{projectId}/dashboards/{dashboardId}', tags=["dashboard"]) -def delete_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)): +async def delete_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)): return dashboards.delete_dashboard(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId) @app.get('/{projectId}/dashboards/{dashboardId}/pin', tags=["dashboard"]) -def pin_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)): +async def pin_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)): return {"data": dashboards.pin_dashboard(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId)} @app.post('/{projectId}/dashboards/{dashboardId}/cards', tags=["cards"]) @app.post('/{projectId}/dashboards/{dashboardId}/widgets', tags=["dashboard"]) @app.put('/{projectId}/dashboards/{dashboardId}/widgets', tags=["dashboard"]) -def add_card_to_dashboard(projectId: int, dashboardId: int, - data: schemas.AddWidgetToDashboardPayloadSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def add_card_to_dashboard(projectId: int, dashboardId: int, + data: schemas.AddWidgetToDashboardPayloadSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return {"data": dashboards.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_ee.CreateCardSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def create_metric_and_add_to_dashboard(projectId: int, dashboardId: int, + data: schemas_ee.CreateCardSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return {"data": dashboards.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"]) -def update_widget_in_dashboard(projectId: int, dashboardId: int, widgetId: int, - data: schemas.UpdateWidgetPayloadSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def update_widget_in_dashboard(projectId: int, dashboardId: int, widgetId: int, + data: schemas.UpdateWidgetPayloadSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return dashboards.update_widget(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId, widget_id=widgetId, data=data) @app.delete('/{projectId}/dashboards/{dashboardId}/widgets/{widgetId}', tags=["dashboard"]) -def remove_widget_from_dashboard(projectId: int, dashboardId: int, widgetId: int, - context: schemas.CurrentContext = Depends(OR_context)): +async def remove_widget_from_dashboard(projectId: int, dashboardId: int, widgetId: int, + context: schemas.CurrentContext = Depends(OR_context)): return dashboards.remove_widget(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId, widget_id=widgetId) # @app.post('/{projectId}/dashboards/{dashboardId}/widgets/{widgetId}/chart', tags=["dashboard"]) -# def get_widget_chart(projectId: int, dashboardId: int, widgetId: int, +# async def get_widget_chart(projectId: int, dashboardId: int, widgetId: int, # data: schemas.CardChartSchema = Body(...), # context: schemas.CurrentContext = Depends(OR_context)): # data = dashboards.make_chart_widget(project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId, @@ -101,16 +101,16 @@ def remove_widget_from_dashboard(projectId: int, dashboardId: int, widgetId: int @app.put('/{projectId}/metrics/try', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/try', tags=["customMetrics"]) @app.put('/{projectId}/custom_metrics/try', tags=["customMetrics"]) -def try_card(projectId: int, data: schemas_ee.CreateCardSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def try_card(projectId: int, data: schemas_ee.CreateCardSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return {"data": custom_metrics.merged_live(project_id=projectId, data=data, user_id=context.user_id)} @app.post('/{projectId}/cards/try/sessions', tags=["cards"]) @app.post('/{projectId}/metrics/try/sessions', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/try/sessions', tags=["customMetrics"]) -def try_card_sessions(projectId: int, data: schemas.CardSessionsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def try_card_sessions(projectId: int, data: schemas.CardSessionsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.try_sessions(project_id=projectId, user_id=context.user_id, data=data) return {"data": data} @@ -118,8 +118,8 @@ def try_card_sessions(projectId: int, data: schemas.CardSessionsSchema = Body(.. @app.post('/{projectId}/cards/try/issues', tags=["cards"]) @app.post('/{projectId}/metrics/try/issues', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/try/issues', tags=["customMetrics"]) -def try_card_funnel_issues(projectId: int, data: schemas.CardSessionsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def try_card_funnel_issues(projectId: int, data: schemas.CardSessionsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): if len(data.series) == 0: return {"data": []} data.series[0].filter.startDate = data.startTimestamp @@ -131,7 +131,7 @@ def try_card_funnel_issues(projectId: int, data: schemas.CardSessionsSchema = Bo @app.get('/{projectId}/cards', tags=["cards"]) @app.get('/{projectId}/metrics', tags=["dashboard"]) @app.get('/{projectId}/custom_metrics', tags=["customMetrics"]) -def get_cards(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): +async def get_cards(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): return {"data": custom_metrics.get_all(project_id=projectId, user_id=context.user_id)} @@ -140,23 +140,23 @@ def get_cards(projectId: int, context: schemas.CurrentContext = Depends(OR_conte @app.put('/{projectId}/metrics', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics', tags=["customMetrics"]) @app.put('/{projectId}/custom_metrics', tags=["customMetrics"]) -def create_card(projectId: int, data: schemas_ee.CreateCardSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def create_card(projectId: int, data: schemas_ee.CreateCardSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return custom_metrics.create(project_id=projectId, user_id=context.user_id, data=data) @app.post('/{projectId}/cards/search', tags=["cards"]) @app.post('/{projectId}/metrics/search', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/search', tags=["customMetrics"]) -def search_cards(projectId: int, data: schemas.SearchCardsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def search_cards(projectId: int, data: schemas.SearchCardsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return {"data": custom_metrics.search_all(project_id=projectId, user_id=context.user_id, data=data)} @app.get('/{projectId}/cards/{metric_id}', tags=["cards"]) @app.get('/{projectId}/metrics/{metric_id}', tags=["dashboard"]) @app.get('/{projectId}/custom_metrics/{metric_id}', tags=["customMetrics"]) -def get_card(projectId: int, metric_id: Union[int, str], context: schemas.CurrentContext = Depends(OR_context)): +async def get_card(projectId: int, metric_id: Union[int, str], context: schemas.CurrentContext = Depends(OR_context)): if not isinstance(metric_id, int): return {"errors": ["invalid card_id"]} data = custom_metrics.get_card(project_id=projectId, user_id=context.user_id, metric_id=metric_id) @@ -166,7 +166,7 @@ def get_card(projectId: int, metric_id: Union[int, str], context: schemas.Curren # @app.get('/{projectId}/cards/{metric_id}/thumbnail', tags=["cards"]) -# def sign_thumbnail_for_upload(projectId: int, metric_id: Union[int, str], +# async def sign_thumbnail_for_upload(projectId: int, metric_id: Union[int, str], # context: schemas.CurrentContext = Depends(OR_context)): # if not isinstance(metric_id, int): # return {"errors": ["invalid card_id"]} @@ -176,9 +176,9 @@ def get_card(projectId: int, metric_id: Union[int, str], context: schemas.Curren @app.post('/{projectId}/cards/{metric_id}/sessions', tags=["cards"]) @app.post('/{projectId}/metrics/{metric_id}/sessions', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/sessions', tags=["customMetrics"]) -def get_card_sessions(projectId: int, metric_id: int, - data: schemas.CardSessionsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def get_card_sessions(projectId: int, metric_id: int, + data: schemas.CardSessionsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.get_sessions(project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data) if data is None: return {"errors": ["custom metric not found"]} @@ -188,9 +188,9 @@ def get_card_sessions(projectId: int, metric_id: int, @app.post('/{projectId}/cards/{metric_id}/issues', tags=["cards"]) @app.post('/{projectId}/metrics/{metric_id}/issues', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/issues', tags=["customMetrics"]) -def get_card_funnel_issues(projectId: int, metric_id: Union[int, str], - data: schemas.CardSessionsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def get_card_funnel_issues(projectId: int, metric_id: Union[int, str], + data: schemas.CardSessionsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): if not isinstance(metric_id, int): return {"errors": [f"invalid card_id: {metric_id}"]} @@ -204,9 +204,9 @@ def get_card_funnel_issues(projectId: int, metric_id: Union[int, str], @app.post('/{projectId}/cards/{metric_id}/issues/{issueId}/sessions', tags=["dashboard"]) @app.post('/{projectId}/metrics/{metric_id}/issues/{issueId}/sessions', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/issues/{issueId}/sessions', tags=["customMetrics"]) -def get_metric_funnel_issue_sessions(projectId: int, metric_id: int, issueId: str, - data: schemas.CardSessionsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def get_metric_funnel_issue_sessions(projectId: int, metric_id: int, issueId: str, + data: schemas.CardSessionsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.get_funnel_sessions_by_issue(project_id=projectId, user_id=context.user_id, metric_id=metric_id, issue_id=issueId, data=data) if data is None: @@ -217,9 +217,9 @@ def get_metric_funnel_issue_sessions(projectId: int, metric_id: int, issueId: st @app.post('/{projectId}/cards/{metric_id}/errors', tags=["dashboard"]) @app.post('/{projectId}/metrics/{metric_id}/errors', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/errors', tags=["customMetrics"]) -def get_custom_metric_errors_list(projectId: int, metric_id: int, - data: schemas.CardSessionsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def get_custom_metric_errors_list(projectId: int, metric_id: int, + data: schemas.CardSessionsSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.get_errors_list(project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data) if data is None: @@ -230,8 +230,8 @@ def get_custom_metric_errors_list(projectId: int, metric_id: int, @app.post('/{projectId}/cards/{metric_id}/chart', tags=["card"]) @app.post('/{projectId}/metrics/{metric_id}/chart', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/chart', tags=["customMetrics"]) -def get_card_chart(projectId: int, metric_id: int, request: Request, data: schemas.CardChartSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def get_card_chart(projectId: int, metric_id: int, request: Request, data: schemas.CardChartSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.make_chart_from_card(project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data) return {"data": data} @@ -242,8 +242,8 @@ def get_card_chart(projectId: int, metric_id: int, request: Request, data: schem @app.put('/{projectId}/metrics/{metric_id}', tags=["dashboard"]) @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_ee.UpdateCardSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def update_custom_metric(projectId: int, metric_id: int, data: schemas_ee.UpdateCardSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.update(project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data) if data is None: return {"errors": ["custom metric not found"]} @@ -255,9 +255,9 @@ def update_custom_metric(projectId: int, metric_id: int, data: schemas_ee.Update @app.put('/{projectId}/metrics/{metric_id}/status', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics/{metric_id}/status', tags=["customMetrics"]) @app.put('/{projectId}/custom_metrics/{metric_id}/status', tags=["customMetrics"]) -def update_custom_metric_state(projectId: int, metric_id: int, - data: schemas.UpdateCustomMetricsStatusSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def update_custom_metric_state(projectId: int, metric_id: int, + data: schemas.UpdateCustomMetricsStatusSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): return { "data": custom_metrics.change_state(project_id=projectId, user_id=context.user_id, metric_id=metric_id, status=data.active)} @@ -266,5 +266,5 @@ def update_custom_metric_state(projectId: int, metric_id: int, @app.delete('/{projectId}/cards/{metric_id}', tags=["dashboard"]) @app.delete('/{projectId}/metrics/{metric_id}', tags=["dashboard"]) @app.delete('/{projectId}/custom_metrics/{metric_id}', tags=["customMetrics"]) -def delete_custom_metric(projectId: int, metric_id: int, context: schemas.CurrentContext = Depends(OR_context)): +async def delete_custom_metric(projectId: int, metric_id: int, context: schemas.CurrentContext = Depends(OR_context)): return {"data": custom_metrics.delete(project_id=projectId, user_id=context.user_id, metric_id=metric_id)} diff --git a/ee/api/routers/subs/v1_api_ee.py b/ee/api/routers/subs/v1_api_ee.py index a4706ff5a..7bfc406f8 100644 --- a/ee/api/routers/subs/v1_api_ee.py +++ b/ee/api/routers/subs/v1_api_ee.py @@ -11,7 +11,7 @@ public_app, app, app_apikey = get_routers() @app_apikey.get('/v1/assist/credentials', tags=["api"]) -def get_assist_credentials(): +async def get_assist_credentials(): credentials = assist_helper.get_temporary_credentials() if "errors" in credentials: return credentials @@ -19,17 +19,17 @@ def get_assist_credentials(): @app_apikey.get('/v1/{projectKey}/assist/sessions', tags=["api"]) -def get_sessions_live(projectKey: str, userId: str = None, context: schemas.CurrentContext = Depends(OR_context)): +async def get_sessions_live(projectKey: str, userId: str = None, context: schemas.CurrentContext = Depends(OR_context)): projectId = projects.get_internal_project_id(projectKey) if projectId is None: return {"errors": ["invalid projectKey"]} - return core.get_sessions_live(projectId=projectId, userId=userId, context=context) + return await core.get_sessions_live(projectId=projectId, userId=userId, context=context) @app_apikey.post('/v1/{projectKey}/assist/sessions', tags=["api"]) -def sessions_live(projectKey: str, data: schemas.LiveSessionsSearchPayloadSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +async def sessions_live(projectKey: str, data: schemas.LiveSessionsSearchPayloadSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): projectId = projects.get_internal_project_id(projectKey) if projectId is None: return {"errors": ["invalid projectKey"]} - return core.sessions_live(projectId=projectId, data=data, context=context) + return await core.sessions_live(projectId=projectId, data=data, context=context)