From 53fc845f9a9febdf65b81fc3f6f571700435d965 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Wed, 8 Jun 2022 19:03:06 +0200 Subject: [PATCH] feat(api): errors widget chart feat(api): funnels widget chart --- api/chalicelib/core/custom_metrics.py | 61 +++++++++++++++++++-------- api/chalicelib/core/events.py | 10 ++++- api/chalicelib/core/sessions.py | 4 +- 3 files changed, 54 insertions(+), 21 deletions(-) diff --git a/api/chalicelib/core/custom_metrics.py b/api/chalicelib/core/custom_metrics.py index 7c04b6c6b..5f7e12656 100644 --- a/api/chalicelib/core/custom_metrics.py +++ b/api/chalicelib/core/custom_metrics.py @@ -42,16 +42,34 @@ def __try_live(project_id, data: schemas.TryCustomMetricsPayloadSchema): return results +def __is_funnel_chart(data: schemas.TryCustomMetricsPayloadSchema): + return data.metric_type == schemas.MetricType.funnel + + +def __get_funnel_chart(project_id, data: schemas.TryCustomMetricsPayloadSchema): + if len(data.series) == 0: + return {} + return funnels.get_top_insights_on_the_fly_widget(project_id=project_id, data=data.series[0].filter) + + +def __is_errors_list(data): + return data.metric_type == schemas.MetricType.table \ + and data.metric_of == schemas.TableMetricOfType.issues \ + and len(data.metric_value) == 1 and data.metric_value[0] == schemas.IssueType.js_exception \ + and data.metric_format == schemas.MetricFormatType.errors_list + + +def __get_errors_list(project_id, user_id, data): + if len(data.series) == 0: + return [] + return errors.search(data.series[0].filter, project_id=project_id, user_id=user_id) + + def merged_live(project_id, data: schemas.TryCustomMetricsPayloadSchema, user_id=None): - if data.metric_type == schemas.MetricType.funnel: - if len(data.series) == 0: - return {} - return funnels.get_top_insights_on_the_fly_widget(project_id=project_id, data=data.series[0].filter) - elif data.metric_type == schemas.MetricType.table \ - and data.metric_of == schemas.TableMetricOfType.issues \ - and len(data.metric_value) == 1 and data.metric_value[0] == schemas.IssueType.js_exception \ - and data.metric_format == schemas.MetricFormatType.errors_list: - return errors.search(data.series[0].filter, project_id=project_id, user_id=user_id) + if __is_funnel_chart(data): + return __get_funnel_chart(project_id=project_id, data=data) + elif __is_errors_list(data): + return __get_errors_list(project_id=project_id, user_id=user_id, data=data) series_charts = __try_live(project_id=project_id, data=data) if data.view_type == schemas.MetricTimeseriesViewType.progress or data.metric_type == schemas.MetricType.table: @@ -85,15 +103,22 @@ def make_chart(project_id, user_id, metric_id, data: schemas.CustomMetricChartPa if metric is None: return None metric: schemas.CreateCustomMetricsSchema = __merge_metric_with_data(metric=metric, data=data) - series_charts = __try_live(project_id=project_id, data=metric) - if metric.view_type == schemas.MetricTimeseriesViewType.progress or metric.metric_type == schemas.MetricType.table: - return series_charts - results = [{}] * len(series_charts[0]) - for i in range(len(results)): - for j, series_chart in enumerate(series_charts): - results[i] = {**results[i], "timestamp": series_chart[i]["timestamp"], - metric.series[j].name: series_chart[i]["count"]} - return results + + return merged_live(project_id=project_id, data=metric, user_id=user_id) + # if __is_funnel_chart(metric): + # return __get_funnel_chart(project_id=project_id, data=metric) + # elif __is_errors_list(metric): + # return __get_errors_list(project_id=project_id, user_id=user_id, data=metric) + # + # series_charts = __try_live(project_id=project_id, data=metric) + # if metric.view_type == schemas.MetricTimeseriesViewType.progress or metric.metric_type == schemas.MetricType.table: + # return series_charts + # results = [{}] * len(series_charts[0]) + # for i in range(len(results)): + # for j, series_chart in enumerate(series_charts): + # results[i] = {**results[i], "timestamp": series_chart[i]["timestamp"], + # metric.series[j].name: series_chart[i]["count"]} + # return results def get_sessions(project_id, user_id, metric_id, data: schemas.CustomMetricSessionsPayloadSchema): diff --git a/api/chalicelib/core/events.py b/api/chalicelib/core/events.py index 272b86002..d07cf1042 100644 --- a/api/chalicelib/core/events.py +++ b/api/chalicelib/core/events.py @@ -435,7 +435,15 @@ def __get_autocomplete_table(value, project_id): query = cur.mogrify(" UNION ".join(sub_queries) + ";", {"project_id": project_id, "value": helper.string_to_sql_like(value), "svalue": helper.string_to_sql_like("^" + value)}) - cur.execute(query) + try: + cur.execute(query) + except Exception as err: + print("--------- AUTOCOMPLETE SEARCH QUERY EXCEPTION -----------") + print(query.decode('UTF-8')) + print("--------- VALUE -----------") + print(value) + print("--------------------") + raise err results = helper.list_to_camel_case(cur.fetchall()) return results diff --git a/api/chalicelib/core/sessions.py b/api/chalicelib/core/sessions.py index e717f1d07..7543f9c9d 100644 --- a/api/chalicelib/core/sessions.py +++ b/api/chalicelib/core/sessions.py @@ -254,9 +254,9 @@ def search2_pg(data: schemas.SessionsSearchPayloadSchema, project_id, user_id, e cur.execute(main_query) except Exception as err: print("--------- SESSIONS SEARCH QUERY EXCEPTION -----------") - print(main_query) + print(main_query.decode('UTF-8')) print("--------- PAYLOAD -----------") - print(data.dict()) + print(data.json()) print("--------------------") raise err if errors_only: