feat(DB): ch sessions search
This commit is contained in:
parent
c0ff7c9ab3
commit
e8769a16ee
3 changed files with 46 additions and 5 deletions
|
|
@ -50,6 +50,7 @@ s.errors_count AS errors_count,
|
|||
s.user_anonymous_id AS user_anonymous_id,
|
||||
s.platform AS platform,
|
||||
0 AS issue_score,
|
||||
s.issue_types AS issue_types,
|
||||
-- ,
|
||||
-- to_jsonb(s.issue_types) AS issue_types,
|
||||
isNotNull(favorite_sessions.session_id) AS favorite,
|
||||
|
|
@ -1441,6 +1442,9 @@ def search_query_parts_ch(data, error_status, errors_only, favorite_only, issue,
|
|||
ss_constraints.append(f"hasAny(ms.issue_types,%({f_k})s)")
|
||||
# _multiple_conditions(f"%({f_k})s {op} ANY (ms.issue_types)", f.value, is_not=is_not,
|
||||
# value_key=f_k))
|
||||
if is_not:
|
||||
extra_constraints[-1] = f"not({extra_constraints[-1]})"
|
||||
ss_constraints[-1] = f"not({ss_constraints[-1]})"
|
||||
elif filter_type == schemas.FilterType.events_count:
|
||||
extra_constraints.append(
|
||||
_multiple_conditions(f"s.events_count {op} %({f_k})s", f.value, is_not=is_not,
|
||||
|
|
@ -1598,14 +1602,21 @@ def search_query_parts_ch(data, error_status, errors_only, favorite_only, issue,
|
|||
events_conditions[-1]["condition"] = " AND ".join(events_conditions[-1]["condition"])
|
||||
|
||||
elif event_type == schemas.PerformanceEventType.fetch_failed:
|
||||
event_from = event_from % f"{events.event_type.REQUEST.table} AS main "
|
||||
event_from = event_from % f"final.events AS main "
|
||||
event_where.append(f"main.event_type='REQUEST'")
|
||||
events_conditions.append({"type": event_where[-1]})
|
||||
events_conditions[-1]["condition"] = []
|
||||
if not is_any:
|
||||
event_where.append(
|
||||
_multiple_conditions(f"main.{events.event_type.REQUEST.column} {op} %({e_k})s",
|
||||
event.value, value_key=e_k))
|
||||
events_conditions[-1]["condition"].append(event_where[-1])
|
||||
col = performance_event.get_col(event_type)
|
||||
colname = col["column"]
|
||||
event_where.append(f"main.{colname} = FALSE")
|
||||
event_where.append(f"main.{colname} = 0")
|
||||
events_conditions[-1]["condition"].append(event_where[-1])
|
||||
events_conditions[-1]["condition"] = " AND ".join(events_conditions[-1]["condition"])
|
||||
|
||||
# elif event_type == schemas.PerformanceEventType.fetch_duration:
|
||||
# event_from = event_from % f"{events.event_type.REQUEST.table} AS main "
|
||||
# if not is_any:
|
||||
|
|
@ -1626,7 +1637,10 @@ def search_query_parts_ch(data, error_status, errors_only, favorite_only, issue,
|
|||
schemas.PerformanceEventType.location_avg_cpu_load,
|
||||
schemas.PerformanceEventType.location_avg_memory_usage
|
||||
]:
|
||||
event_from = event_from % f"{events.event_type.LOCATION.table} AS main "
|
||||
event_from = event_from % f"final.events AS main "
|
||||
event_where.append(f"main.event_type='PAGE'")
|
||||
events_conditions.append({"type": event_where[-1]})
|
||||
events_conditions[-1]["condition"] = []
|
||||
col = performance_event.get_col(event_type)
|
||||
colname = col["column"]
|
||||
tname = "main"
|
||||
|
|
@ -1639,12 +1653,15 @@ def search_query_parts_ch(data, error_status, errors_only, favorite_only, issue,
|
|||
event_where.append(
|
||||
_multiple_conditions(f"main.{events.event_type.LOCATION.column} {op} %({e_k})s",
|
||||
event.value, value_key=e_k))
|
||||
events_conditions[-1]["condition"].append(event_where[-1])
|
||||
e_k += "_custom"
|
||||
full_args = {**full_args, **_multiple_values(event.source, value_key=e_k)}
|
||||
|
||||
event_where.append(f"{tname}.{colname} IS NOT NULL AND {tname}.{colname}>0 AND " +
|
||||
event_where.append(f"isNotNull({tname}.{colname}) AND {tname}.{colname}>0 AND " +
|
||||
_multiple_conditions(f"{tname}.{colname} {event.sourceOperator} %({e_k})s",
|
||||
event.source, value_key=e_k))
|
||||
events_conditions[-1]["condition"].append(event_where[-1])
|
||||
events_conditions[-1]["condition"] = " AND ".join(events_conditions[-1]["condition"])
|
||||
elif event_type == schemas.PerformanceEventType.time_between_events:
|
||||
event_from = event_from % f"{getattr(events.event_type, event.value[0].type).table} AS main INNER JOIN {getattr(events.event_type, event.value[1].type).table} AS main2 USING(session_id) "
|
||||
if not isinstance(event.value[0].value, list):
|
||||
|
|
|
|||
|
|
@ -43,3 +43,27 @@ class TrailSearchPayloadSchema(schemas._PaginatedSchema):
|
|||
|
||||
class Config:
|
||||
alias_generator = schemas.attribute_to_camel_case
|
||||
|
||||
|
||||
class SessionModel(BaseModel):
|
||||
viewed: bool = Field(default=False)
|
||||
userId: Optional[str]
|
||||
userOs: str
|
||||
duration: int
|
||||
favorite: bool = Field(default=False)
|
||||
platform: str
|
||||
startTs: int
|
||||
userUuid: str
|
||||
projectId: int
|
||||
sessionId: str
|
||||
issueScore: int
|
||||
issueTypes: List[schemas.IssueType] = Field(default=[])
|
||||
pagesCount: int
|
||||
userDevice: Optional[str]
|
||||
errorsCount: int
|
||||
eventsCount: int
|
||||
userBrowser: str
|
||||
userCountry: str
|
||||
userDeviceType: str
|
||||
userAnonymousId: Optional[str]
|
||||
metadata: dict = Field(default={})
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ CREATE TABLE IF NOT EXISTS events_s
|
|||
load_event_start Nullable(UInt16),
|
||||
load_event_end Nullable(UInt16),
|
||||
first_paint Nullable(UInt16),
|
||||
first_contentful_paint Nullable(UInt16),
|
||||
first_contentful_paint_time Nullable(UInt16),
|
||||
speed_index Nullable(UInt16),
|
||||
visually_complete Nullable(UInt16),
|
||||
time_to_interactive Nullable(UInt16),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue