feat(chalice): filter sessions by incidents
This commit is contained in:
parent
c84aa417e1
commit
2d58cf2da4
5 changed files with 70 additions and 7 deletions
|
|
@ -379,6 +379,34 @@ def search_query_parts_ch(data: schemas.SessionsSearchPayloadSchema, error_statu
|
||||||
events_conditions_where = ["main.project_id = %(projectId)s",
|
events_conditions_where = ["main.project_id = %(projectId)s",
|
||||||
"main.created_at >= toDateTime(%(startDate)s/1000)",
|
"main.created_at >= toDateTime(%(startDate)s/1000)",
|
||||||
"main.created_at <= toDateTime(%(endDate)s/1000)"]
|
"main.created_at <= toDateTime(%(endDate)s/1000)"]
|
||||||
|
any_incident = False
|
||||||
|
for i, e in enumerate(data.events):
|
||||||
|
if e.type == schemas.EventType.INCIDENT and e.operator == schemas.SearchEventOperator.IS_ANY:
|
||||||
|
any_incident = True
|
||||||
|
data.events.pop(i)
|
||||||
|
# don't stop here because we could have multiple filters looking for any incident
|
||||||
|
|
||||||
|
if any_incident:
|
||||||
|
any_incident = False
|
||||||
|
for f in data.filters:
|
||||||
|
if f.type == schemas.FilterType.ISSUE:
|
||||||
|
any_incident = True
|
||||||
|
if f.value.index(schemas.IssueType.INCIDENT) < 0:
|
||||||
|
f.value.append(schemas.IssueType.INCIDENT)
|
||||||
|
if f.operator == schemas.SearchEventOperator.IS_ANY:
|
||||||
|
f.operator = schemas.SearchEventOperator.IS
|
||||||
|
break
|
||||||
|
|
||||||
|
if not any_incident:
|
||||||
|
data.filters.append(schemas.SessionSearchFilterSchema(**{
|
||||||
|
"type": "issue",
|
||||||
|
"isEvent": False,
|
||||||
|
"value": [
|
||||||
|
"incident"
|
||||||
|
],
|
||||||
|
"operator": "is"
|
||||||
|
}))
|
||||||
|
|
||||||
if len(data.filters) > 0:
|
if len(data.filters) > 0:
|
||||||
meta_keys = None
|
meta_keys = None
|
||||||
# to reduce include a sub-query of sessions inside events query, in order to reduce the selected data
|
# to reduce include a sub-query of sessions inside events query, in order to reduce the selected data
|
||||||
|
|
@ -522,7 +550,7 @@ def search_query_parts_ch(data: schemas.SessionsSearchPayloadSchema, error_statu
|
||||||
ss_constraints.append(
|
ss_constraints.append(
|
||||||
sh.multi_conditions(f"ms.base_referrer {op} toString(%({f_k})s)", f.value, is_not=is_not,
|
sh.multi_conditions(f"ms.base_referrer {op} toString(%({f_k})s)", f.value, is_not=is_not,
|
||||||
value_key=f_k))
|
value_key=f_k))
|
||||||
elif filter_type == schemas.EventType.METADATA:
|
elif filter_type == schemas.FilterType.METADATA:
|
||||||
# get metadata list only if you need it
|
# get metadata list only if you need it
|
||||||
if meta_keys is None:
|
if meta_keys is None:
|
||||||
meta_keys = metadata.get(project_id=project_id)
|
meta_keys = metadata.get(project_id=project_id)
|
||||||
|
|
@ -1257,6 +1285,39 @@ def search_query_parts_ch(data: schemas.SessionsSearchPayloadSchema, error_statu
|
||||||
_column = "label"
|
_column = "label"
|
||||||
event_where.append(f"main.`$event_name`=%({e_k})s AND main.session_id>0")
|
event_where.append(f"main.`$event_name`=%({e_k})s AND main.session_id>0")
|
||||||
events_conditions.append({"type": event_where[-1], "condition": ""})
|
events_conditions.append({"type": event_where[-1], "condition": ""})
|
||||||
|
elif event_type == schemas.EventType.INCIDENT:
|
||||||
|
event_from = event_from % f"{MAIN_EVENTS_TABLE} AS main "
|
||||||
|
_column = "label"
|
||||||
|
event_where.append(
|
||||||
|
f"main.`$event_name`='{exp_ch_helper.get_event_type(event_type, platform=platform)}'")
|
||||||
|
events_conditions.append({"type": event_where[-1]})
|
||||||
|
|
||||||
|
if is_not:
|
||||||
|
# event_where.append(json_condition(
|
||||||
|
# "sub", "$properties", _column, op, event.value, e_k
|
||||||
|
# ))
|
||||||
|
event_where.append(
|
||||||
|
sh.multi_conditions(
|
||||||
|
get_sub_condition(col_name=f"sub.`$properties`.{_column}",
|
||||||
|
val_name=e_k, operator=event.operator),
|
||||||
|
event.value, value_key=e_k)
|
||||||
|
)
|
||||||
|
events_conditions_not.append(
|
||||||
|
{
|
||||||
|
"type": f"sub.`$event_name`='{exp_ch_helper.get_event_type(event_type, platform=platform)}'"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
events_conditions_not[-1]["condition"] = event_where[-1]
|
||||||
|
else:
|
||||||
|
|
||||||
|
event_where.append(
|
||||||
|
sh.multi_conditions(
|
||||||
|
get_sub_condition(col_name=f"main.`$properties`.{_column}",
|
||||||
|
val_name=e_k, operator=event.operator),
|
||||||
|
event.value, value_key=e_k)
|
||||||
|
)
|
||||||
|
events_conditions[-1]["condition"] = event_where[-1]
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
|
|
|
||||||
|
|
@ -411,7 +411,7 @@ def search_query_parts_ch(data: schemas.SessionsSearchPayloadSchema, error_statu
|
||||||
ss_constraints.append(
|
ss_constraints.append(
|
||||||
_multiple_conditions(f"ms.base_referrer {op} toString(%({f_k})s)", f.value, is_not=is_not,
|
_multiple_conditions(f"ms.base_referrer {op} toString(%({f_k})s)", f.value, is_not=is_not,
|
||||||
value_key=f_k))
|
value_key=f_k))
|
||||||
elif filter_type == schemas.EventType.METADATA:
|
elif filter_type == schemas.FilterType.METADATA:
|
||||||
# get metadata list only if you need it
|
# get metadata list only if you need it
|
||||||
if meta_keys is None:
|
if meta_keys is None:
|
||||||
meta_keys = metadata.get(project_id=project_id)
|
meta_keys = metadata.get(project_id=project_id)
|
||||||
|
|
|
||||||
|
|
@ -440,7 +440,7 @@ def search_query_parts(data: schemas.SessionsSearchPayloadSchema, error_status,
|
||||||
extra_constraints.append(
|
extra_constraints.append(
|
||||||
sh.multi_conditions(f"s.base_referrer {op} %({f_k})s", f.value, is_not=is_not,
|
sh.multi_conditions(f"s.base_referrer {op} %({f_k})s", f.value, is_not=is_not,
|
||||||
value_key=f_k))
|
value_key=f_k))
|
||||||
elif filter_type == schemas.EventType.METADATA:
|
elif filter_type == schemas.FilterType.METADATA:
|
||||||
# get metadata list only if you need it
|
# get metadata list only if you need it
|
||||||
if meta_keys is None:
|
if meta_keys is None:
|
||||||
meta_keys = metadata.get(project_id=project_id)
|
meta_keys = metadata.get(project_id=project_id)
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,8 @@ def get_event_type(event_type: Union[schemas.EventType, schemas.PerformanceEvent
|
||||||
schemas.EventType.ERROR: "ERROR",
|
schemas.EventType.ERROR: "ERROR",
|
||||||
schemas.PerformanceEventType.LOCATION_AVG_CPU_LOAD: 'PERFORMANCE',
|
schemas.PerformanceEventType.LOCATION_AVG_CPU_LOAD: 'PERFORMANCE',
|
||||||
schemas.PerformanceEventType.LOCATION_AVG_MEMORY_USAGE: 'PERFORMANCE',
|
schemas.PerformanceEventType.LOCATION_AVG_MEMORY_USAGE: 'PERFORMANCE',
|
||||||
schemas.FetchFilterType.FETCH_URL: 'REQUEST'
|
schemas.FetchFilterType.FETCH_URL: 'REQUEST',
|
||||||
|
schemas.EventType.INCIDENT: "INCIDENT",
|
||||||
}
|
}
|
||||||
defs_mobile = {
|
defs_mobile = {
|
||||||
schemas.EventType.CLICK_MOBILE: "TAP",
|
schemas.EventType.CLICK_MOBILE: "TAP",
|
||||||
|
|
@ -65,7 +66,8 @@ def get_event_type(event_type: Union[schemas.EventType, schemas.PerformanceEvent
|
||||||
schemas.EventType.REQUEST_MOBILE: "REQUEST",
|
schemas.EventType.REQUEST_MOBILE: "REQUEST",
|
||||||
schemas.EventType.ERROR_MOBILE: "CRASH",
|
schemas.EventType.ERROR_MOBILE: "CRASH",
|
||||||
schemas.EventType.VIEW_MOBILE: "VIEW",
|
schemas.EventType.VIEW_MOBILE: "VIEW",
|
||||||
schemas.EventType.SWIPE_MOBILE: "SWIPE"
|
schemas.EventType.SWIPE_MOBILE: "SWIPE",
|
||||||
|
schemas.EventType.INCIDENT: "INCIDENT"
|
||||||
}
|
}
|
||||||
if platform != "web" and event_type in defs_mobile:
|
if platform != "web" and event_type in defs_mobile:
|
||||||
return defs_mobile.get(event_type)
|
return defs_mobile.get(event_type)
|
||||||
|
|
|
||||||
|
|
@ -507,8 +507,8 @@ class IssueType(str, Enum):
|
||||||
CUSTOM = 'custom'
|
CUSTOM = 'custom'
|
||||||
JS_EXCEPTION = 'js_exception'
|
JS_EXCEPTION = 'js_exception'
|
||||||
MOUSE_THRASHING = 'mouse_thrashing'
|
MOUSE_THRASHING = 'mouse_thrashing'
|
||||||
# IOS
|
TAP_RAGE = 'tap_rage' # IOS
|
||||||
TAP_RAGE = 'tap_rage'
|
INCIDENT = 'incident'
|
||||||
|
|
||||||
|
|
||||||
class MetricFormatType(str, Enum):
|
class MetricFormatType(str, Enum):
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue