feat(chalice): cards 3/5
This commit is contained in:
parent
3569f46399
commit
c52a6cc9b4
5 changed files with 101 additions and 168 deletions
|
|
@ -2,7 +2,7 @@ import json
|
|||
from typing import Union
|
||||
|
||||
import schemas
|
||||
from chalicelib.core import sessions, funnels, errors, issues
|
||||
from chalicelib.core import sessions, funnels, errors, issues, metrics
|
||||
from chalicelib.utils import helper, pg_client
|
||||
from chalicelib.utils.TimeUTC import TimeUTC
|
||||
|
||||
|
|
@ -95,20 +95,19 @@ def __get_sessions_list(project_id, user_id, data):
|
|||
|
||||
|
||||
def __is_predefined(data):
|
||||
return data.metric_type in (schemas.MetricType.errors, schemas.MetricType.performance,
|
||||
schemas.MetricType.resources, schemas.MetricType.web_vital)
|
||||
return data.is_template
|
||||
|
||||
|
||||
def merged_live(project_id, data: schemas.CreateCardSchema, user_id=None):
|
||||
if __is_funnel_chart(data):
|
||||
if data.is_template:
|
||||
return get_predefined_metric(key=data.metric_of, project_id=project_id, data=data.dict())
|
||||
elif __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)
|
||||
elif __is_sessions_list(data):
|
||||
return __get_sessions_list(project_id=project_id, user_id=user_id, data=data)
|
||||
elif __is_predefined(data):
|
||||
pass
|
||||
print(">>>>>>>nin")
|
||||
|
||||
series_charts = __try_live(project_id=project_id, data=data)
|
||||
if data.view_type == schemas.MetricTimeseriesViewType.progress or data.metric_type == schemas.MetricType.table:
|
||||
return series_charts
|
||||
|
|
@ -553,3 +552,67 @@ def get_funnel_sessions_by_issue(user_id, project_id, metric_id, issue_id,
|
|||
issue=issue, data=s.filter)
|
||||
if issue is not None else {"total": 0, "sessions": []},
|
||||
"issue": issue}
|
||||
|
||||
|
||||
def make_chart_from_card(project_id, user_id, metric_id, data: schemas.CardChartSchema):
|
||||
raw_metric = get_with_template(metric_id=metric_id, project_id=project_id, user_id=user_id,
|
||||
include_dashboard=False)
|
||||
if raw_metric is None:
|
||||
return None
|
||||
metric: schemas.CreateCardSchema = schemas.CreateCardSchema(**raw_metric)
|
||||
if metric.is_template:
|
||||
return get_predefined_metric(key=metric.metric_of, project_id=project_id, data=data.dict())
|
||||
else:
|
||||
return make_chart(project_id=project_id, user_id=user_id, metric_id=metric_id, data=data, metric=raw_metric)
|
||||
|
||||
|
||||
PREDEFINED = {schemas.MetricOfWebVitals.count_sessions: metrics.get_processed_sessions,
|
||||
schemas.MetricOfWebVitals.avg_image_load_time: metrics.get_application_activity_avg_image_load_time,
|
||||
schemas.MetricOfWebVitals.avg_page_load_time: metrics.get_application_activity_avg_page_load_time,
|
||||
schemas.MetricOfWebVitals.avg_request_load_time: metrics.get_application_activity_avg_request_load_time,
|
||||
schemas.MetricOfWebVitals.avg_dom_content_load_start: metrics.get_page_metrics_avg_dom_content_load_start,
|
||||
schemas.MetricOfWebVitals.avg_first_contentful_pixel: metrics.get_page_metrics_avg_first_contentful_pixel,
|
||||
schemas.MetricOfWebVitals.avg_visited_pages: metrics.get_user_activity_avg_visited_pages,
|
||||
schemas.MetricOfWebVitals.avg_session_duration: metrics.get_user_activity_avg_session_duration,
|
||||
schemas.MetricOfWebVitals.avg_pages_dom_buildtime: metrics.get_pages_dom_build_time,
|
||||
schemas.MetricOfWebVitals.avg_pages_response_time: metrics.get_pages_response_time,
|
||||
schemas.MetricOfWebVitals.avg_response_time: metrics.get_top_metrics_avg_response_time,
|
||||
schemas.MetricOfWebVitals.avg_first_paint: metrics.get_top_metrics_avg_first_paint,
|
||||
schemas.MetricOfWebVitals.avg_dom_content_loaded: metrics.get_top_metrics_avg_dom_content_loaded,
|
||||
schemas.MetricOfWebVitals.avg_till_first_byte: metrics.get_top_metrics_avg_till_first_bit,
|
||||
schemas.MetricOfWebVitals.avg_time_to_interactive: metrics.get_top_metrics_avg_time_to_interactive,
|
||||
schemas.MetricOfWebVitals.count_requests: metrics.get_top_metrics_count_requests,
|
||||
schemas.MetricOfWebVitals.avg_time_to_render: metrics.get_time_to_render,
|
||||
schemas.MetricOfWebVitals.avg_used_js_heap_size: metrics.get_memory_consumption,
|
||||
schemas.MetricOfWebVitals.avg_cpu: metrics.get_avg_cpu,
|
||||
schemas.MetricOfWebVitals.avg_fps: metrics.get_avg_fps,
|
||||
schemas.MetricOfErrors.impacted_sessions_by_js_errors: metrics.get_impacted_sessions_by_js_errors,
|
||||
schemas.MetricOfErrors.domains_errors_4xx: metrics.get_domains_errors_4xx,
|
||||
schemas.MetricOfErrors.domains_errors_5xx: metrics.get_domains_errors_5xx,
|
||||
schemas.MetricOfErrors.errors_per_domains: metrics.get_errors_per_domains,
|
||||
schemas.MetricOfErrors.calls_errors: metrics.get_calls_errors,
|
||||
schemas.MetricOfErrors.errors_per_type: metrics.get_errors_per_type,
|
||||
schemas.MetricOfErrors.resources_by_party: metrics.get_resources_by_party,
|
||||
schemas.MetricOfPerformance.speed_location: metrics.get_speed_index_location,
|
||||
schemas.MetricOfPerformance.slowest_domains: metrics.get_slowest_domains,
|
||||
schemas.MetricOfPerformance.sessions_per_browser: metrics.get_sessions_per_browser,
|
||||
schemas.MetricOfPerformance.time_to_render: metrics.get_time_to_render,
|
||||
schemas.MetricOfPerformance.impacted_sessions_by_slow_pages: metrics.get_impacted_sessions_by_slow_pages,
|
||||
schemas.MetricOfPerformance.memory_consumption: metrics.get_memory_consumption,
|
||||
schemas.MetricOfPerformance.cpu: metrics.get_avg_cpu,
|
||||
schemas.MetricOfPerformance.fps: metrics.get_avg_fps,
|
||||
schemas.MetricOfPerformance.crashes: metrics.get_crashes,
|
||||
schemas.MetricOfPerformance.resources_vs_visually_complete: metrics.get_resources_vs_visually_complete,
|
||||
schemas.MetricOfPerformance.pages_dom_buildtime: metrics.get_pages_dom_build_time,
|
||||
schemas.MetricOfPerformance.pages_response_time: metrics.get_pages_response_time,
|
||||
schemas.MetricOfPerformance.pages_response_time_distribution: metrics.get_pages_response_time_distribution,
|
||||
schemas.MetricOfResources.missing_resources: metrics.get_missing_resources_trend,
|
||||
schemas.MetricOfResources.slowest_resources: metrics.get_slowest_resources,
|
||||
schemas.MetricOfResources.resources_loading_time: metrics.get_resources_loading_time,
|
||||
schemas.MetricOfResources.resource_type_vs_response_end: metrics.resource_type_vs_response_end,
|
||||
schemas.MetricOfResources.resources_count_by_type: metrics.get_resources_count_by_type, }
|
||||
|
||||
|
||||
def get_predefined_metric(key: Union[schemas.MetricOfWebVitals, schemas.MetricOfErrors, \
|
||||
schemas.MetricOfPerformance, schemas.MetricOfResources], project_id: int, data: dict):
|
||||
return PREDEFINED.get(key, lambda *args: None)(project_id=project_id, **data)
|
||||
|
|
|
|||
|
|
@ -211,74 +211,6 @@ def create_metric_add_widget(project_id, user_id, dashboard_id, data: schemas.Cr
|
|||
return add_widget(project_id=project_id, user_id=user_id, dashboard_id=dashboard_id,
|
||||
data=schemas.AddWidgetToDashboardPayloadSchema(metricId=metric_id))
|
||||
|
||||
|
||||
PREDEFINED = {schemas.TemplatePredefinedKeys.count_sessions: metrics.get_processed_sessions,
|
||||
schemas.TemplatePredefinedKeys.avg_image_load_time: metrics.get_application_activity_avg_image_load_time,
|
||||
schemas.TemplatePredefinedKeys.avg_page_load_time: metrics.get_application_activity_avg_page_load_time,
|
||||
schemas.TemplatePredefinedKeys.avg_request_load_time: metrics.get_application_activity_avg_request_load_time,
|
||||
schemas.TemplatePredefinedKeys.avg_dom_content_load_start: metrics.get_page_metrics_avg_dom_content_load_start,
|
||||
schemas.TemplatePredefinedKeys.avg_first_contentful_pixel: metrics.get_page_metrics_avg_first_contentful_pixel,
|
||||
schemas.TemplatePredefinedKeys.avg_visited_pages: metrics.get_user_activity_avg_visited_pages,
|
||||
schemas.TemplatePredefinedKeys.avg_session_duration: metrics.get_user_activity_avg_session_duration,
|
||||
schemas.TemplatePredefinedKeys.avg_pages_dom_buildtime: metrics.get_pages_dom_build_time,
|
||||
schemas.TemplatePredefinedKeys.avg_pages_response_time: metrics.get_pages_response_time,
|
||||
schemas.TemplatePredefinedKeys.avg_response_time: metrics.get_top_metrics_avg_response_time,
|
||||
schemas.TemplatePredefinedKeys.avg_first_paint: metrics.get_top_metrics_avg_first_paint,
|
||||
schemas.TemplatePredefinedKeys.avg_dom_content_loaded: metrics.get_top_metrics_avg_dom_content_loaded,
|
||||
schemas.TemplatePredefinedKeys.avg_till_first_bit: metrics.get_top_metrics_avg_till_first_bit,
|
||||
schemas.TemplatePredefinedKeys.avg_time_to_interactive: metrics.get_top_metrics_avg_time_to_interactive,
|
||||
schemas.TemplatePredefinedKeys.count_requests: metrics.get_top_metrics_count_requests,
|
||||
schemas.TemplatePredefinedKeys.avg_time_to_render: metrics.get_time_to_render,
|
||||
schemas.TemplatePredefinedKeys.avg_used_js_heap_size: metrics.get_memory_consumption,
|
||||
schemas.TemplatePredefinedKeys.avg_cpu: metrics.get_avg_cpu,
|
||||
schemas.TemplatePredefinedKeys.avg_fps: metrics.get_avg_fps,
|
||||
schemas.TemplatePredefinedKeys.impacted_sessions_by_js_errors: metrics.get_impacted_sessions_by_js_errors,
|
||||
schemas.TemplatePredefinedKeys.domains_errors_4xx: metrics.get_domains_errors_4xx,
|
||||
schemas.TemplatePredefinedKeys.domains_errors_5xx: metrics.get_domains_errors_5xx,
|
||||
schemas.TemplatePredefinedKeys.errors_per_domains: metrics.get_errors_per_domains,
|
||||
schemas.TemplatePredefinedKeys.calls_errors: metrics.get_calls_errors,
|
||||
schemas.TemplatePredefinedKeys.errors_by_type: metrics.get_errors_per_type,
|
||||
schemas.TemplatePredefinedKeys.errors_by_origin: metrics.get_resources_by_party,
|
||||
schemas.TemplatePredefinedKeys.speed_index_by_location: metrics.get_speed_index_location,
|
||||
schemas.TemplatePredefinedKeys.slowest_domains: metrics.get_slowest_domains,
|
||||
schemas.TemplatePredefinedKeys.sessions_per_browser: metrics.get_sessions_per_browser,
|
||||
schemas.TemplatePredefinedKeys.time_to_render: metrics.get_time_to_render,
|
||||
schemas.TemplatePredefinedKeys.impacted_sessions_by_slow_pages: metrics.get_impacted_sessions_by_slow_pages,
|
||||
schemas.TemplatePredefinedKeys.memory_consumption: metrics.get_memory_consumption,
|
||||
schemas.TemplatePredefinedKeys.cpu_load: metrics.get_avg_cpu,
|
||||
schemas.TemplatePredefinedKeys.frame_rate: metrics.get_avg_fps,
|
||||
schemas.TemplatePredefinedKeys.crashes: metrics.get_crashes,
|
||||
schemas.TemplatePredefinedKeys.resources_vs_visually_complete: metrics.get_resources_vs_visually_complete,
|
||||
schemas.TemplatePredefinedKeys.pages_dom_buildtime: metrics.get_pages_dom_build_time,
|
||||
schemas.TemplatePredefinedKeys.pages_response_time: metrics.get_pages_response_time,
|
||||
schemas.TemplatePredefinedKeys.pages_response_time_distribution: metrics.get_pages_response_time_distribution,
|
||||
schemas.TemplatePredefinedKeys.missing_resources: metrics.get_missing_resources_trend,
|
||||
schemas.TemplatePredefinedKeys.slowest_resources: metrics.get_slowest_resources,
|
||||
schemas.TemplatePredefinedKeys.resources_fetch_time: metrics.get_resources_loading_time,
|
||||
schemas.TemplatePredefinedKeys.resource_type_vs_response_end: metrics.resource_type_vs_response_end,
|
||||
schemas.TemplatePredefinedKeys.resources_count_by_type: metrics.get_resources_count_by_type,
|
||||
}
|
||||
|
||||
|
||||
def get_predefined_metric(key: schemas.TemplatePredefinedKeys, project_id: int, data: dict):
|
||||
return PREDEFINED.get(key, lambda *args: None)(project_id=project_id, **data)
|
||||
|
||||
|
||||
def make_chart_metrics(project_id, user_id, metric_id, data: schemas.CardChartSchema):
|
||||
raw_metric = custom_metrics.get_with_template(metric_id=metric_id, project_id=project_id, user_id=user_id,
|
||||
include_dashboard=False)
|
||||
if raw_metric is None:
|
||||
return None
|
||||
metric: schemas.CustomMetricAndTemplate = schemas.CustomMetricAndTemplate(**raw_metric)
|
||||
if metric.is_template and metric.predefined_key is None:
|
||||
return None
|
||||
if metric.is_template:
|
||||
return get_predefined_metric(key=metric.predefined_key, project_id=project_id, data=data.dict())
|
||||
else:
|
||||
return custom_metrics.make_chart(project_id=project_id, user_id=user_id, metric_id=metric_id, data=data,
|
||||
metric=raw_metric)
|
||||
|
||||
|
||||
# def make_chart_widget(dashboard_id, project_id, user_id, widget_id, data: schemas.CardChartSchema):
|
||||
# raw_metric = get_widget(widget_id=widget_id, project_id=project_id, user_id=user_id, dashboard_id=dashboard_id)
|
||||
# if raw_metric is None:
|
||||
|
|
|
|||
|
|
@ -342,7 +342,7 @@ def get_dashboard_group(projectId: int, data: schemas.MetricPayloadSchema = Body
|
|||
{"key": "avg_time_to_render", "data": metrics.get_time_to_render(project_id=projectId, **data.dict())},
|
||||
{"key": "avg_used_js_heap_size", "data": metrics.get_memory_consumption(project_id=projectId, **data.dict())},
|
||||
{"key": "avg_cpu", "data": metrics.get_avg_cpu(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_fps,
|
||||
{"key": schemas.MetricOfWebVitals.avg_fps,
|
||||
"data": metrics.get_avg_fps(project_id=projectId, **data.dict())}
|
||||
]
|
||||
results = sorted(results, key=lambda r: r["key"])
|
||||
|
|
@ -353,45 +353,45 @@ def get_dashboard_group(projectId: int, data: schemas.MetricPayloadSchema = Body
|
|||
@app.get('/{projectId}/dashboard/overview2', tags=["dashboard", "metrics"])
|
||||
def get_dashboard_group(projectId: int, data: schemas.MetricPayloadSchema = Body(...)):
|
||||
results = [
|
||||
{"key": schemas.TemplatePredefinedKeys.count_sessions,
|
||||
{"key": schemas.MetricOfWebVitals.count_sessions,
|
||||
"data": metrics.get_processed_sessions(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_image_load_time,
|
||||
{"key": schemas.MetricOfWebVitals.avg_image_load_time,
|
||||
"data": metrics.get_application_activity_avg_image_load_time(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_page_load_time,
|
||||
{"key": schemas.MetricOfWebVitals.avg_page_load_time,
|
||||
"data": metrics.get_application_activity_avg_page_load_time(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_request_load_time,
|
||||
{"key": schemas.MetricOfWebVitals.avg_request_load_time,
|
||||
"data": metrics.get_application_activity_avg_request_load_time(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_dom_content_load_start,
|
||||
{"key": schemas.MetricOfWebVitals.avg_dom_content_load_start,
|
||||
"data": metrics.get_page_metrics_avg_dom_content_load_start(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_first_contentful_pixel,
|
||||
{"key": schemas.MetricOfWebVitals.avg_first_contentful_pixel,
|
||||
"data": metrics.get_page_metrics_avg_first_contentful_pixel(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_visited_pages,
|
||||
{"key": schemas.MetricOfWebVitals.avg_visited_pages,
|
||||
"data": metrics.get_user_activity_avg_visited_pages(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_session_duration,
|
||||
{"key": schemas.MetricOfWebVitals.avg_session_duration,
|
||||
"data": metrics.get_user_activity_avg_session_duration(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_pages_dom_buildtime,
|
||||
{"key": schemas.MetricOfWebVitals.avg_pages_dom_buildtime,
|
||||
"data": metrics.get_pages_dom_build_time(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_pages_response_time,
|
||||
{"key": schemas.MetricOfWebVitals.avg_pages_response_time,
|
||||
"data": metrics.get_pages_response_time(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_response_time,
|
||||
{"key": schemas.MetricOfWebVitals.avg_response_time,
|
||||
"data": metrics.get_top_metrics_avg_response_time(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_first_paint,
|
||||
{"key": schemas.MetricOfWebVitals.avg_first_paint,
|
||||
"data": metrics.get_top_metrics_avg_first_paint(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_dom_content_loaded,
|
||||
{"key": schemas.MetricOfWebVitals.avg_dom_content_loaded,
|
||||
"data": metrics.get_top_metrics_avg_dom_content_loaded(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_till_first_bit,
|
||||
{"key": schemas.MetricOfWebVitals.avg_till_first_byte,
|
||||
"data": metrics.get_top_metrics_avg_till_first_bit(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_time_to_interactive,
|
||||
{"key": schemas.MetricOfWebVitals.avg_time_to_interactive,
|
||||
"data": metrics.get_top_metrics_avg_time_to_interactive(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.count_requests,
|
||||
{"key": schemas.MetricOfWebVitals.count_requests,
|
||||
"data": metrics.get_top_metrics_count_requests(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_time_to_render,
|
||||
{"key": schemas.MetricOfWebVitals.avg_time_to_render,
|
||||
"data": metrics.get_time_to_render(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_used_js_heap_size,
|
||||
{"key": schemas.MetricOfWebVitals.avg_used_js_heap_size,
|
||||
"data": metrics.get_memory_consumption(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_cpu,
|
||||
{"key": schemas.MetricOfWebVitals.avg_cpu,
|
||||
"data": metrics.get_avg_cpu(project_id=projectId, **data.dict())},
|
||||
{"key": schemas.TemplatePredefinedKeys.avg_fps,
|
||||
{"key": schemas.MetricOfWebVitals.avg_fps,
|
||||
"data": metrics.get_avg_fps(project_id=projectId, **data.dict())}
|
||||
]
|
||||
results = sorted(results, key=lambda r: r["key"])
|
||||
|
|
|
|||
|
|
@ -215,8 +215,8 @@ def get_custom_metric_errors_list(projectId: int, metric_id: int,
|
|||
@app.post('/{projectId}/custom_metrics/{metric_id}/chart', tags=["customMetrics"])
|
||||
def get_card_chart(projectId: int, metric_id: int, data: schemas.CardChartSchema = Body(...),
|
||||
context: schemas.CurrentContext = Depends(OR_context)):
|
||||
data = dashboards.make_chart_metrics(project_id=projectId, user_id=context.user_id, metric_id=metric_id,
|
||||
data=data)
|
||||
data = custom_metrics.make_chart_from_card(project_id=projectId, user_id=context.user_id, metric_id=metric_id,
|
||||
data=data)
|
||||
if data is None:
|
||||
return {"errors": ["custom metric not found"]}
|
||||
return {"data": data}
|
||||
|
|
|
|||
|
|
@ -803,7 +803,7 @@ class MetricType(str, Enum):
|
|||
errors = "errors"
|
||||
performance = "performance"
|
||||
resources = "resources"
|
||||
web_vital = "webVital"
|
||||
web_vital = "webVitals"
|
||||
pathAnalysis = "pathAnalysis"
|
||||
retention = "retention"
|
||||
stickiness = "stickiness"
|
||||
|
|
@ -886,7 +886,7 @@ class MetricOfTimeseries(str, Enum):
|
|||
class CardSessionsSchema(FlatSessionsSearch, _PaginatedSchema):
|
||||
startTimestamp: int = Field(TimeUTC.now(-7))
|
||||
endTimestamp: int = Field(TimeUTC.now())
|
||||
series: Optional[List[CustomMetricCreateSeriesSchema]] = Field(default=None)
|
||||
series: List[CustomMetricCreateSeriesSchema] = Field(default=[])
|
||||
|
||||
class Config:
|
||||
alias_generator = attribute_to_camel_case
|
||||
|
|
@ -907,20 +907,22 @@ class CardConfigSchema(BaseModel):
|
|||
|
||||
class CreateCardSchema(CardChartSchema):
|
||||
name: Optional[str] = Field(...)
|
||||
series: List[CustomMetricCreateSeriesSchema] = Field(default=[])
|
||||
is_public: bool = Field(default=True)
|
||||
view_type: Union[MetricTimeseriesViewType, MetricTableViewType, MetricOtherViewType] \
|
||||
= Field(MetricTimeseriesViewType.line_chart)
|
||||
metric_type: Union[MetricType] = Field(default=MetricType.timeseries)
|
||||
view_type: Union[MetricTimeseriesViewType, \
|
||||
MetricTableViewType, MetricOtherViewType] = Field(MetricTimeseriesViewType.line_chart)
|
||||
metric_type: MetricType = Field(default=MetricType.timeseries)
|
||||
metric_of: Union[MetricOfTimeseries, MetricOfTable, MetricOfErrors, \
|
||||
MetricOfPerformance, MetricOfResources, MetricOfWebVitals] = Field(MetricOfTable.user_id)
|
||||
metric_value: List[IssueType] = Field([])
|
||||
metric_format: Optional[MetricFormatType] = Field(None)
|
||||
default_config: CardConfigSchema = Field(..., alias="config")
|
||||
is_template: bool = Field(default=False)
|
||||
|
||||
# This is used to handle wrong values sent by the UI
|
||||
@root_validator(pre=True)
|
||||
def transform(cls, values):
|
||||
values["isTemplate"] = values["metricType"] in [MetricType.errors, MetricType.performance,
|
||||
MetricType.resources, MetricType.web_vital]
|
||||
if values.get("metricType") == MetricType.timeseries \
|
||||
or values.get("metricType") == MetricType.table \
|
||||
and values.get("metricOf") != MetricOfTable.issues:
|
||||
|
|
@ -1027,55 +1029,6 @@ class AddWidgetToDashboardPayloadSchema(UpdateWidgetPayloadSchema):
|
|||
alias_generator = attribute_to_camel_case
|
||||
|
||||
|
||||
# these values should match the keys in metrics table
|
||||
class TemplatePredefinedKeys(str, Enum):
|
||||
count_sessions = "count_sessions"
|
||||
avg_request_load_time = "avg_request_load_time"
|
||||
avg_page_load_time = "avg_page_load_time"
|
||||
avg_image_load_time = "avg_image_load_time"
|
||||
avg_dom_content_load_start = "avg_dom_content_load_start"
|
||||
avg_first_contentful_pixel = "avg_first_contentful_pixel"
|
||||
avg_visited_pages = "avg_visited_pages"
|
||||
avg_session_duration = "avg_session_duration"
|
||||
avg_pages_dom_buildtime = "avg_pages_dom_buildtime"
|
||||
avg_pages_response_time = "avg_pages_response_time"
|
||||
avg_response_time = "avg_response_time"
|
||||
avg_first_paint = "avg_first_paint"
|
||||
avg_dom_content_loaded = "avg_dom_content_loaded"
|
||||
avg_till_first_bit = "avg_till_first_byte"
|
||||
avg_time_to_interactive = "avg_time_to_interactive"
|
||||
count_requests = "count_requests"
|
||||
avg_time_to_render = "avg_time_to_render"
|
||||
avg_used_js_heap_size = "avg_used_js_heap_size"
|
||||
avg_cpu = "avg_cpu"
|
||||
avg_fps = "avg_fps"
|
||||
impacted_sessions_by_js_errors = "impacted_sessions_by_js_errors"
|
||||
domains_errors_4xx = "domains_errors_4xx"
|
||||
domains_errors_5xx = "domains_errors_5xx"
|
||||
errors_per_domains = "errors_per_domains"
|
||||
calls_errors = "calls_errors"
|
||||
errors_by_type = "errors_per_type"
|
||||
errors_by_origin = "resources_by_party"
|
||||
speed_index_by_location = "speed_location"
|
||||
slowest_domains = "slowest_domains"
|
||||
sessions_per_browser = "sessions_per_browser"
|
||||
time_to_render = "time_to_render"
|
||||
impacted_sessions_by_slow_pages = "impacted_sessions_by_slow_pages"
|
||||
memory_consumption = "memory_consumption"
|
||||
cpu_load = "cpu"
|
||||
frame_rate = "fps"
|
||||
crashes = "crashes"
|
||||
resources_vs_visually_complete = "resources_vs_visually_complete"
|
||||
pages_dom_buildtime = "pages_dom_buildtime"
|
||||
pages_response_time = "pages_response_time"
|
||||
pages_response_time_distribution = "pages_response_time_distribution"
|
||||
missing_resources = "missing_resources"
|
||||
slowest_resources = "slowest_resources"
|
||||
resources_fetch_time = "resources_loading_time"
|
||||
resource_type_vs_response_end = "resource_type_vs_response_end"
|
||||
resources_count_by_type = "resources_count_by_type"
|
||||
|
||||
|
||||
class TemplatePredefinedUnits(str, Enum):
|
||||
millisecond = "ms"
|
||||
second = "s"
|
||||
|
|
@ -1086,21 +1039,6 @@ class TemplatePredefinedUnits(str, Enum):
|
|||
count = "count"
|
||||
|
||||
|
||||
class CustomMetricAndTemplate(BaseModel):
|
||||
is_template: bool = Field(...)
|
||||
project_id: Optional[int] = Field(...)
|
||||
predefined_key: Optional[TemplatePredefinedKeys] = Field(...)
|
||||
|
||||
@root_validator(pre=True)
|
||||
def transform(cls, values):
|
||||
values["isTemplate"] = values["metricType"] in [MetricType.errors, MetricType.performance,
|
||||
MetricType.resources, MetricType.web_vital]
|
||||
return values
|
||||
|
||||
class Config:
|
||||
alias_generator = attribute_to_camel_case
|
||||
|
||||
|
||||
class LiveFilterType(str, Enum):
|
||||
user_os = FilterType.user_os.value
|
||||
user_browser = FilterType.user_browser.value
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue