diff --git a/api/chalicelib/core/custom_metrics.py b/api/chalicelib/core/custom_metrics.py index 691b8e1ba..5ea117f9a 100644 --- a/api/chalicelib/core/custom_metrics.py +++ b/api/chalicelib/core/custom_metrics.py @@ -9,7 +9,7 @@ from chalicelib.utils.TimeUTC import TimeUTC PIE_CHART_GROUP = 5 -def __try_live(project_id, data: schemas.TryCustomMetricsPayloadSchema): +def __try_live(project_id, data: schemas.TryCardSchema): results = [] for i, s in enumerate(data.series): s.filter.startDate = data.startTimestamp @@ -42,11 +42,11 @@ def __try_live(project_id, data: schemas.TryCustomMetricsPayloadSchema): return results -def __is_funnel_chart(data: schemas.TryCustomMetricsPayloadSchema): +def __is_funnel_chart(data: schemas.TryCardSchema): return data.metric_type == schemas.MetricType.funnel -def __get_funnel_chart(project_id, data: schemas.TryCustomMetricsPayloadSchema): +def __get_funnel_chart(project_id, data: schemas.TryCardSchema): if len(data.series) == 0: return { "stages": [], @@ -94,7 +94,7 @@ def __get_sessions_list(project_id, user_id, data): return sessions.search_sessions(data=data.series[0].filter, project_id=project_id, user_id=user_id) -def merged_live(project_id, data: schemas.TryCustomMetricsPayloadSchema, user_id=None): +def merged_live(project_id, data: schemas.TryCardSchema, user_id=None): if __is_funnel_chart(data): return __get_funnel_chart(project_id=project_id, data=data) elif __is_errors_list(data): @@ -115,10 +115,10 @@ def merged_live(project_id, data: schemas.TryCustomMetricsPayloadSchema, user_id def __merge_metric_with_data(metric, data: Union[schemas.CustomMetricChartPayloadSchema, schemas.CustomMetricSessionsPayloadSchema]) \ - -> Union[schemas.CreateCustomMetricsSchema, None]: + -> Union[schemas.CreateCardSchema, None]: if data.series is not None and len(data.series) > 0: metric["series"] = data.series - metric: schemas.CreateCustomMetricsSchema = schemas.CreateCustomMetricsSchema.parse_obj({**data.dict(), **metric}) + metric: schemas.CreateCardSchema = schemas.CreateCardSchema.parse_obj({**data.dict(), **metric}) if len(data.filters) > 0 or len(data.events) > 0: for s in metric.series: if len(data.filters) > 0: @@ -133,7 +133,7 @@ def make_chart(project_id, user_id, metric_id, data: schemas.CustomMetricChartPa 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) + metric: schemas.CreateCardSchema = __merge_metric_with_data(metric=metric, data=data) return merged_live(project_id=project_id, data=metric, user_id=user_id) # if __is_funnel_chart(metric): @@ -156,7 +156,7 @@ def get_sessions(project_id, user_id, metric_id, data: schemas.CustomMetricSessi 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) + metric: schemas.CreateCardSchema = __merge_metric_with_data(metric=metric, data=data) if metric is None: return None results = [] @@ -175,7 +175,7 @@ def get_funnel_issues(project_id, user_id, metric_id, data: schemas.CustomMetric 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) + metric: schemas.CreateCardSchema = __merge_metric_with_data(metric=metric, data=data) if metric is None: return None for s in metric.series: @@ -191,7 +191,7 @@ def get_errors_list(project_id, user_id, metric_id, data: schemas.CustomMetricSe 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) + metric: schemas.CreateCardSchema = __merge_metric_with_data(metric=metric, data=data) if metric is None: return None for s in metric.series: @@ -218,7 +218,7 @@ def try_sessions(project_id, user_id, data: schemas.CustomMetricSessionsPayloadS return results -def create(project_id, user_id, data: schemas.CreateCustomMetricsSchema, dashboard=False): +def create(project_id, user_id, data: schemas.CreateCardSchema, dashboard=False): with pg_client.PostgresClient() as cur: _data = {} for i, s in enumerate(data.series): @@ -254,7 +254,7 @@ def create(project_id, user_id, data: schemas.CreateCustomMetricsSchema, dashboa return {"data": get(metric_id=r["metric_id"], project_id=project_id, user_id=user_id)} -def update(metric_id, user_id, project_id, data: schemas.UpdateCustomMetricsSchema): +def update(metric_id, user_id, project_id, data: schemas.UpdateCardSchema): metric = get(metric_id=metric_id, project_id=project_id, user_id=user_id, flatten=False) if metric is None: return None @@ -509,7 +509,7 @@ def get_funnel_sessions_by_issue(user_id, project_id, metric_id, issue_id, 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) + metric: schemas.CreateCardSchema = __merge_metric_with_data(metric=metric, data=data) if metric is None: return None for s in metric.series: diff --git a/api/chalicelib/core/dashboards.py b/api/chalicelib/core/dashboards.py index ac98b44e7..d406fe550 100644 --- a/api/chalicelib/core/dashboards.py +++ b/api/chalicelib/core/dashboards.py @@ -243,7 +243,7 @@ def pin_dashboard(project_id, user_id, dashboard_id): return helper.dict_to_camel_case(row) -def create_metric_add_widget(project_id, user_id, dashboard_id, data: schemas.CreateCustomMetricsSchema): +def create_metric_add_widget(project_id, user_id, dashboard_id, data: schemas.CreateCardSchema): 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(metricId=metric_id)) diff --git a/api/routers/subs/metrics.py b/api/routers/subs/metrics.py index b8332aa85..29a2aee72 100644 --- a/api/routers/subs/metrics.py +++ b/api/routers/subs/metrics.py @@ -58,7 +58,7 @@ def add_widget_to_dashboard(projectId: int, dashboardId: int, @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(...), + 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)} @@ -100,7 +100,7 @@ def get_templates(projectId: int, context: schemas.CurrentContext = Depends(OR_c @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_custom_metric(projectId: int, data: schemas.TryCustomMetricsPayloadSchema = Body(...), +def try_custom_metric(projectId: int, data: schemas.TryCardSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): return {"data": custom_metrics.merged_live(project_id=projectId, data=data, user_id=context.user_id)} @@ -125,27 +125,60 @@ def try_custom_metric_funnel_issues(projectId: int, data: schemas.CustomMetricSe return {"data": data} +@app.post('/{projectId}/cards', tags=["cards"]) @app.post('/{projectId}/metrics', tags=["dashboard"]) @app.put('/{projectId}/metrics', tags=["dashboard"]) @app.post('/{projectId}/custom_metrics', tags=["customMetrics"]) @app.put('/{projectId}/custom_metrics', tags=["customMetrics"]) -def add_custom_metric(projectId: int, data: schemas.CreateCustomMetricsSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +def create_card(projectId: int, data: schemas.CreateCardSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): + return {"data": data.dict()} return custom_metrics.create(project_id=projectId, user_id=context.user_id, data=data) +@app.get('/{projectId}/cards', tags=["cards"]) @app.get('/{projectId}/metrics', tags=["dashboard"]) @app.get('/{projectId}/custom_metrics', tags=["customMetrics"]) -def get_custom_metrics(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): +def get_cards(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): + return { + "data": [ + { + "metricId": 1180, + "projectId": 5053, + "userId": 283, + "name": "ts1", + "isPublic": true, + "createdAt": 1669818461027, + "deletedAt": null, + "active": true, + "metricType": "timeseries", + "viewType": "lineChart", + "metricOf": "sessionCount", + "metricValue": [], + "metricFormat": "sessionCount", + "editedAt": 1669818461027, + "category": "custom", + "predefinedKey": null, + "defaultConfig": { + "col": 2, + "row": 2, + "position": 0 + }, + "dashboards": [], + "ownerEmail": "tahay@asayer.io" + } + ] + } return {"data": custom_metrics.get_all(project_id=projectId, user_id=context.user_id)} +@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_custom_metric(projectId: int, metric_id: str, context: schemas.CurrentContext = Depends(OR_context)): +def get_card(projectId: int, metric_id: str, context: schemas.CurrentContext = Depends(OR_context)): data = custom_metrics.get(project_id=projectId, user_id=context.user_id, metric_id=metric_id) if data is None: - return {"errors": ["custom metric not found"]} + return {"errors": ["card not found"]} return {"data": data} @@ -211,7 +244,7 @@ def get_custom_metric_chart(projectId: int, metric_id: int, data: schemas.Custom @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.UpdateCustomMetricsSchema = Body(...), +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: diff --git a/api/schemas.py b/api/schemas.py index a7085cbda..f2467139c 100644 --- a/api/schemas.py +++ b/api/schemas.py @@ -831,24 +831,27 @@ class CustomMetricChartPayloadSchema(CustomMetricSessionsPayloadSchema, _Paginat alias_generator = attribute_to_camel_case -class TryCustomMetricsPayloadSchema(CustomMetricChartPayloadSchema): - name: str = Field(...) +class TryCardSchema(CustomMetricChartPayloadSchema): + name: Optional[str] = Field(...) series: List[CustomMetricCreateSeriesSchema] = Field(...) is_public: bool = Field(default=True) - view_type: Union[MetricTimeseriesViewType, MetricTableViewType] = Field(MetricTimeseriesViewType.line_chart) - metric_type: MetricType = Field(MetricType.timeseries) - metric_of: Union[TableMetricOfType, TimeseriesMetricOfType] = Field(TableMetricOfType.user_id) + view_type: Union[MetricTimeseriesViewType, MetricTableViewType, str] = Field(MetricTimeseriesViewType.line_chart) + metric_type: Union[MetricType, str] = Field(MetricType.timeseries) + metric_of: Union[TableMetricOfType, TimeseriesMetricOfType, str] = Field(TableMetricOfType.user_id) metric_value: List[IssueType] = Field([]) metric_format: Optional[MetricFormatType] = Field(None) - # metricFraction: float = Field(None, gt=0, lt=1) # This is used to handle wrong values sent by the UI @root_validator(pre=True) - def remove_metric_value(cls, values): + def transform(cls, values): if values.get("metricType") == MetricType.timeseries \ or values.get("metricType") == MetricType.table \ and values.get("metricOf") != TableMetricOfType.issues: values["metricValue"] = [] + + if values.get("metric_type") == MetricType.funnel.value and \ + values.get("series") is not None and len(values["series"]) > 1: + values["series"] = [values["series"][0]] return values @root_validator @@ -878,17 +881,8 @@ class CustomMetricsConfigSchema(BaseModel): position: Optional[int] = Field(default=0) -class CreateCustomMetricsSchema(TryCustomMetricsPayloadSchema): - series: List[CustomMetricCreateSeriesSchema] = Field(..., min_items=1) - config: CustomMetricsConfigSchema = Field(...) - - @root_validator(pre=True) - def transform_series(cls, values): - if values.get("series") is not None and len(values["series"]) > 1 and values.get( - "metric_type") == MetricType.funnel.value: - values["series"] = [values["series"][0]] - - return values +class CreateCardSchema(TryCardSchema): + name: str = Field(...) class CustomMetricUpdateSeriesSchema(CustomMetricCreateSeriesSchema): @@ -898,8 +892,8 @@ class CustomMetricUpdateSeriesSchema(CustomMetricCreateSeriesSchema): alias_generator = attribute_to_camel_case -class UpdateCustomMetricsSchema(CreateCustomMetricsSchema): - series: List[CustomMetricUpdateSeriesSchema] = Field(..., min_items=1) +class UpdateCardSchema(CreateCardSchema): + series: List[CustomMetricUpdateSeriesSchema] = Field(...) class UpdateCustomMetricsStatusSchema(BaseModel): diff --git a/ee/scripts/schema/db/init_dbs/postgresql/1.9.5/1.9.5.sql b/ee/scripts/schema/db/init_dbs/postgresql/1.9.5/1.9.5.sql index 482f4fae5..f210ae1a7 100644 --- a/ee/scripts/schema/db/init_dbs/postgresql/1.9.5/1.9.5.sql +++ b/ee/scripts/schema/db/init_dbs/postgresql/1.9.5/1.9.5.sql @@ -20,4 +20,16 @@ CREATE TABLE IF NOT EXISTS assist_records ALTER TYPE webhook_type ADD VALUE IF NOT EXISTS 'msteams'; +DELETE +FROM metrics +WHERE is_predefined + AND is_template + AND metric_type = 'predefined'; + +-- TODO: transform metric_type to text +-- TODO: drop metric_type enum +-- TODO: drop is_pinned +-- TODO: drop is_predefined +-- TODO: drop is_template + COMMIT; \ No newline at end of file diff --git a/ee/scripts/schema/db/init_dbs/postgresql/init_schema.sql b/ee/scripts/schema/db/init_dbs/postgresql/init_schema.sql index 5807069b7..69137ecca 100644 --- a/ee/scripts/schema/db/init_dbs/postgresql/init_schema.sql +++ b/ee/scripts/schema/db/init_dbs/postgresql/init_schema.sql @@ -1254,244 +1254,4 @@ $$ $$ LANGUAGE plpgsql; -INSERT INTO metrics (name, category, default_config, is_predefined, is_template, is_public, predefined_key, metric_type, - view_type) -VALUES ('Captured sessions', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 -}', true, true, true, 'count_sessions', 'predefined', 'overview'), - ('Request Load Time', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_request_load_time', 'predefined', 'overview'), - ('Page Load Time', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_page_load_time', 'predefined', 'overview'), - ('Image Load Time', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_image_load_time', 'predefined', 'overview'), - ('DOM Content Load Start', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_dom_content_load_start', 'predefined', 'overview'), - ('First Meaningful paint', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_first_contentful_pixel', 'predefined', 'overview'), - ('No. of Visited Pages', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_visited_pages', 'predefined', 'overview'), - ('Session Duration', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_session_duration', 'predefined', 'overview'), - ('DOM Build Time', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_pages_dom_buildtime', 'predefined', 'overview'), - ('Pages Response Time', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_pages_response_time', 'predefined', 'overview'), - ('Response Time', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_response_time', 'predefined', 'overview'), - ('First Paint', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_first_paint', 'predefined', 'overview'), - ('DOM Content Loaded', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_dom_content_loaded', 'predefined', 'overview'), - ('Time Till First byte', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_till_first_byte', 'predefined', 'overview'), - ('Time To Interactive', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_time_to_interactive', 'predefined', 'overview'), - ('Captured requests', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'count_requests', 'predefined', 'overview'), - ('Time To Render', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_time_to_render', 'predefined', 'overview'), - ('Memory Consumption', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_used_js_heap_size', 'predefined', 'overview'), - ('CPU Load', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_cpu', 'predefined', 'overview'), - ('Frame rate', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_fps', 'predefined', 'overview'), - - ('Sessions Affected by JS Errors', 'errors', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'impacted_sessions_by_js_errors', 'predefined', 'barChart'), - ('Top Domains with 4xx Fetch Errors', 'errors', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'domains_errors_4xx', 'predefined', 'lineChart'), - ('Top Domains with 5xx Fetch Errors', 'errors', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'domains_errors_5xx', 'predefined', 'lineChart'), - ('Errors per Domain', 'errors', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'errors_per_domains', 'predefined', 'table'), - ('Fetch Calls with Errors', 'errors', '{ - "col": 4, - "row": 2, - "position": 0 - }', true, true, true, 'calls_errors', 'predefined', 'table'), - ('Errors by Type', 'errors', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'errors_per_type', 'predefined', 'barChart'), - ('Errors by Origin', 'errors', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'resources_by_party', 'predefined', 'stackedBarChart'), - - ('Speed Index by Location', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'speed_location', 'predefined', 'map'), - ('Slowest Domains', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'slowest_domains', 'predefined', 'table'), - ('Sessions per Browser', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'sessions_per_browser', 'predefined', 'table'), - ('Time To Render', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'time_to_render', 'predefined', 'areaChart'), - ('Sessions Impacted by Slow Pages', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'impacted_sessions_by_slow_pages', 'predefined', 'areaChart'), - ('Memory Consumption', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'memory_consumption', 'predefined', 'areaChart'), - ('CPU Load', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'cpu', 'predefined', 'areaChart'), - ('Frame Rate', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'fps', 'predefined', 'areaChart'), - ('Crashes', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'crashes', 'predefined', 'areaChart'), - ('Resources Loaded vs Visually Complete', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'resources_vs_visually_complete', 'predefined', 'areaChart'), - ('DOM Build Time', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'pages_dom_buildtime', 'predefined', 'areaChart'), - ('Pages Response Time', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'pages_response_time', 'predefined', 'areaChart'), - ('Pages Response Time Distribution', 'performance', '{ - "col": 4, - "row": 2, - "position": 0 - }', true, true, true, 'pages_response_time_distribution', 'predefined', 'barChart'), - - ('Missing Resources', 'resources', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'missing_resources', 'predefined', 'table'), - ('Slowest Resources', 'resources', '{ - "col": 4, - "row": 2, - "position": 0 - }', true, true, true, 'slowest_resources', 'predefined', 'table'), - ('Resources Fetch Time', 'resources', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'resources_loading_time', 'predefined', 'table'), - ('Resource Loaded vs Response End', 'resources', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'resource_type_vs_response_end', 'predefined', 'stackedBarLineChart'), - ('Breakdown of Loaded Resources', 'resources', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'resources_count_by_type', 'predefined', 'stackedBarChart') -ON CONFLICT (predefined_key) DO UPDATE - SET name=excluded.name, - category=excluded.category, - default_config=excluded.default_config, - is_predefined=excluded.is_predefined, - is_template=excluded.is_template, - is_public=excluded.is_public, - metric_type=excluded.metric_type, - view_type=excluded.view_type; - COMMIT; \ No newline at end of file diff --git a/scripts/schema/db/init_dbs/postgresql/1.9.5/1.9.5.sql b/scripts/schema/db/init_dbs/postgresql/1.9.5/1.9.5.sql index 695d782ca..3b20c53a8 100644 --- a/scripts/schema/db/init_dbs/postgresql/1.9.5/1.9.5.sql +++ b/scripts/schema/db/init_dbs/postgresql/1.9.5/1.9.5.sql @@ -5,6 +5,9 @@ $$ SELECT 'v1.9.5' $$ LANGUAGE sql IMMUTABLE; -ALTER TYPE webhook_type ADD VALUE IF NOT EXISTS 'msteams'; +DELETE +FROM metrics +WHERE is_predefined + AND is_template; COMMIT; \ No newline at end of file diff --git a/scripts/schema/db/init_dbs/postgresql/init_schema.sql b/scripts/schema/db/init_dbs/postgresql/init_schema.sql index 5d05869ea..c3c65fcaa 100644 --- a/scripts/schema/db/init_dbs/postgresql/init_schema.sql +++ b/scripts/schema/db/init_dbs/postgresql/init_schema.sql @@ -1007,244 +1007,4 @@ $$ $$ LANGUAGE plpgsql; -INSERT INTO metrics (name, category, default_config, is_predefined, is_template, is_public, predefined_key, metric_type, - view_type) -VALUES ('Captured sessions', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 -}', true, true, true, 'count_sessions', 'predefined', 'overview'), - ('Request Load Time', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_request_load_time', 'predefined', 'overview'), - ('Page Load Time', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_page_load_time', 'predefined', 'overview'), - ('Image Load Time', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_image_load_time', 'predefined', 'overview'), - ('DOM Content Load Start', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_dom_content_load_start', 'predefined', 'overview'), - ('First Meaningful paint', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_first_contentful_pixel', 'predefined', 'overview'), - ('No. of Visited Pages', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_visited_pages', 'predefined', 'overview'), - ('Session Duration', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_session_duration', 'predefined', 'overview'), - ('DOM Build Time', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_pages_dom_buildtime', 'predefined', 'overview'), - ('Pages Response Time', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_pages_response_time', 'predefined', 'overview'), - ('Response Time', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_response_time', 'predefined', 'overview'), - ('First Paint', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_first_paint', 'predefined', 'overview'), - ('DOM Content Loaded', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_dom_content_loaded', 'predefined', 'overview'), - ('Time Till First byte', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_till_first_byte', 'predefined', 'overview'), - ('Time To Interactive', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_time_to_interactive', 'predefined', 'overview'), - ('Captured requests', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'count_requests', 'predefined', 'overview'), - ('Time To Render', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_time_to_render', 'predefined', 'overview'), - ('Memory Consumption', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_used_js_heap_size', 'predefined', 'overview'), - ('CPU Load', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_cpu', 'predefined', 'overview'), - ('Frame rate', 'web vitals', '{ - "col": 1, - "row": 1, - "position": 0 - }', true, true, true, 'avg_fps', 'predefined', 'overview'), - - ('Sessions Affected by JS Errors', 'errors', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'impacted_sessions_by_js_errors', 'predefined', 'barChart'), - ('Top Domains with 4xx Fetch Errors', 'errors', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'domains_errors_4xx', 'predefined', 'lineChart'), - ('Top Domains with 5xx Fetch Errors', 'errors', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'domains_errors_5xx', 'predefined', 'lineChart'), - ('Errors per Domain', 'errors', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'errors_per_domains', 'predefined', 'table'), - ('Fetch Calls with Errors', 'errors', '{ - "col": 4, - "row": 2, - "position": 0 - }', true, true, true, 'calls_errors', 'predefined', 'table'), - ('Errors by Type', 'errors', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'errors_per_type', 'predefined', 'barChart'), - ('Errors by Origin', 'errors', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'resources_by_party', 'predefined', 'stackedBarChart'), - - ('Speed Index by Location', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'speed_location', 'predefined', 'map'), - ('Slowest Domains', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'slowest_domains', 'predefined', 'table'), - ('Sessions per Browser', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'sessions_per_browser', 'predefined', 'table'), - ('Time To Render', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'time_to_render', 'predefined', 'areaChart'), - ('Sessions Impacted by Slow Pages', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'impacted_sessions_by_slow_pages', 'predefined', 'areaChart'), - ('Memory Consumption', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'memory_consumption', 'predefined', 'areaChart'), - ('CPU Load', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'cpu', 'predefined', 'areaChart'), - ('Frame Rate', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'fps', 'predefined', 'areaChart'), - ('Crashes', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'crashes', 'predefined', 'areaChart'), - ('Resources Loaded vs Visually Complete', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'resources_vs_visually_complete', 'predefined', 'areaChart'), - ('DOM Build Time', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'pages_dom_buildtime', 'predefined', 'areaChart'), - ('Pages Response Time', 'performance', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'pages_response_time', 'predefined', 'areaChart'), - ('Pages Response Time Distribution', 'performance', '{ - "col": 4, - "row": 2, - "position": 0 - }', true, true, true, 'pages_response_time_distribution', 'predefined', 'barChart'), - - ('Missing Resources', 'resources', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'missing_resources', 'predefined', 'table'), - ('Slowest Resources', 'resources', '{ - "col": 4, - "row": 2, - "position": 0 - }', true, true, true, 'slowest_resources', 'predefined', 'table'), - ('Resources Fetch Time', 'resources', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'resources_loading_time', 'predefined', 'table'), - ('Resource Loaded vs Response End', 'resources', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'resource_type_vs_response_end', 'predefined', 'stackedBarLineChart'), - ('Breakdown of Loaded Resources', 'resources', '{ - "col": 2, - "row": 2, - "position": 0 - }', true, true, true, 'resources_count_by_type', 'predefined', 'stackedBarChart') -ON CONFLICT (predefined_key) DO UPDATE - SET name=excluded.name, - category=excluded.category, - default_config=excluded.default_config, - is_predefined=excluded.is_predefined, - is_template=excluded.is_template, - is_public=excluded.is_public, - metric_type=excluded.metric_type, - view_type=excluded.view_type; - COMMIT;