From c7c6cd2187b8d49559e395f2923ebf2d3110e885 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Mon, 13 Jun 2022 19:56:27 +0200 Subject: [PATCH] feat(api):metrics get sessions related to issue --- api/chalicelib/core/custom_metrics.py | 31 +++++++++++++++++++++++++++ api/routers/core.py | 2 +- api/routers/subs/metrics.py | 12 +++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/api/chalicelib/core/custom_metrics.py b/api/chalicelib/core/custom_metrics.py index 2967b7fec..b92934912 100644 --- a/api/chalicelib/core/custom_metrics.py +++ b/api/chalicelib/core/custom_metrics.py @@ -500,3 +500,34 @@ def change_state(project_id, metric_id, user_id, status): {"metric_id": metric_id, "status": status, "user_id": user_id}) ) return get(metric_id=metric_id, project_id=project_id, user_id=user_id) + + +def get_funnel_sessions_by_issue(user_id, project_id, metric_id, issue_id, + data: schemas.CustomMetricSessionsPayloadSchema + # , range_value=None, start_date=None, end_date=None + ): + metric = get(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False) + if metric is None: + return None + metric: schemas.CreateCustomMetricsSchema = __merge_metric_with_data(metric=metric, data=data) + if metric is None: + return None + results = [] + for s in metric.series: + s.filter.startDate = data.startTimestamp + s.filter.endDate = data.endTimestamp + s.filter.limit = data.limit + s.filter.page = data.page + issues = funnels.get_issues_on_the_fly_widget(project_id=project_id, data=s.filter).get("issues", {}) + issues = issues.get("significant", []) + issues.get("insignificant", []) + issue = None + for i in issues: + if i.get("issueId", "") == issue_id: + issue = i + break + results.append({"seriesId": s.series_id, "seriesName": s.name, + "sessions": sessions.search2_pg(user_id=user_id, project_id=project_id, + issue=issue, data=s.filter) + if issue is not None else {"total": 0, "sessions": []}, + "issue": issue}) + return results diff --git a/api/routers/core.py b/api/routers/core.py index c997229ba..3f3d91e80 100644 --- a/api/routers/core.py +++ b/api/routers/core.py @@ -772,7 +772,7 @@ def get_funnel_sessions_on_the_fly(projectId: int, funnelId: int, data: schemas. @app.get('/{projectId}/funnels/issues/{issueId}/sessions', tags=["funnels"]) -def get_issue_sessions(projectId: int, issueId: str, startDate: int = None, endDate: int = None, +def get_funnel_issue_sessions(projectId: int, issueId: str, startDate: int = None, endDate: int = None, context: schemas.CurrentContext = Depends(OR_context)): issue = issues.get(project_id=projectId, issue_id=issueId) if issue is None: diff --git a/api/routers/subs/metrics.py b/api/routers/subs/metrics.py index e00d2d4f7..c68eec3e9 100644 --- a/api/routers/subs/metrics.py +++ b/api/routers/subs/metrics.py @@ -172,6 +172,18 @@ def get_custom_metric_funnel_issues(projectId: int, metric_id: int, return {"data": data} +@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.CustomMetricSessionsPayloadSchema = 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: + return {"errors": ["custom metric not found"]} + return {"data": data} + + @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,