feat(chalice): cards 1/5
This commit is contained in:
parent
7bb6c25f17
commit
e634bacc3a
8 changed files with 85 additions and 523 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue