feat(chalice): CH search for custom metrics table of sessions
feat(chalice): CH search for custom metrics table of JS ERRORS feat(chalice): CH search for custom metrics table of Issues feat(chalice): CH search for custom metrics table of Browsers feat(chalice): CH search for custom metrics table of Devices feat(chalice): CH search for custom metrics table of Countries feat(chalice): CH search for custom metrics table of URLs
This commit is contained in:
parent
922788b771
commit
23d0335e0f
1 changed files with 26 additions and 14 deletions
|
|
@ -470,7 +470,13 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d
|
|||
density=density))
|
||||
extra_event = None
|
||||
if metric_of == schemas.TableMetricOfType.visited_url:
|
||||
extra_event = "events.pages"
|
||||
extra_event = lambda MAIN_EVENTS_TABLE: \
|
||||
f"""SELECT DISTINCT ev.session_id, ev.path
|
||||
FROM {MAIN_EVENTS_TABLE} AS ev
|
||||
WHERE ev.datetime >= toDateTime(%(startDate)s / 1000)
|
||||
AND ev.datetime <= toDateTime(%(endDate)s / 1000)
|
||||
AND ev.project_id = %(project_id)s
|
||||
AND ev.event_type = 'LOCATION'"""
|
||||
elif metric_of == schemas.TableMetricOfType.issues and len(metric_value) > 0:
|
||||
data.filters.append(schemas.SessionSearchFilterSchema(value=metric_value, type=schemas.FilterType.issue,
|
||||
operator=schemas.SearchEventOperator._is))
|
||||
|
|
@ -510,18 +516,21 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d
|
|||
full_args["limit_e"] = 200
|
||||
if isinstance(metric_of, schemas.TableMetricOfType):
|
||||
main_col = "user_id"
|
||||
extra_col = ""
|
||||
extra_col = "s.user_id"
|
||||
extra_where = ""
|
||||
pre_query = ""
|
||||
if metric_of == schemas.TableMetricOfType.user_country:
|
||||
main_col = "user_country"
|
||||
extra_col = "s.user_country"
|
||||
elif metric_of == schemas.TableMetricOfType.user_device:
|
||||
main_col = "user_device"
|
||||
extra_col = "s.user_device"
|
||||
elif metric_of == schemas.TableMetricOfType.user_browser:
|
||||
main_col = "user_browser"
|
||||
extra_col = "s.user_browser"
|
||||
elif metric_of == schemas.TableMetricOfType.issues:
|
||||
main_col = "issue"
|
||||
extra_col = f", UNNEST(s.issue_types) AS {main_col}"
|
||||
extra_col = f"arrayJoin(s.issue_types) AS {main_col}"
|
||||
if len(metric_value) > 0:
|
||||
extra_where = []
|
||||
for i in range(len(metric_value)):
|
||||
|
|
@ -531,15 +540,13 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d
|
|||
extra_where = f"WHERE ({' OR '.join(extra_where)})"
|
||||
elif metric_of == schemas.TableMetricOfType.visited_url:
|
||||
main_col = "path"
|
||||
extra_col = ", path"
|
||||
extra_col = "s.path"
|
||||
main_query = cur.format(f"""{pre_query}
|
||||
SELECT COUNT(DISTINCT {main_col}) OVER () AS main_count,
|
||||
{main_col} AS name,
|
||||
count(session_id) AS session_count
|
||||
FROM (SELECT DISTINCT ON(s.session_id) s.session_id, s.user_uuid,
|
||||
s.user_id, s.user_os,
|
||||
s.user_browser, s.user_device,
|
||||
s.user_device_type, s.user_country, s.issue_types{extra_col}
|
||||
count(DISTINCT session_id) AS session_count
|
||||
FROM (SELECT s.session_id,
|
||||
{extra_col}
|
||||
{query_part}
|
||||
ORDER BY s.session_id desc) AS filtred_sessions
|
||||
{extra_where}
|
||||
|
|
@ -1241,7 +1248,8 @@ def search_query_parts_ch(data, error_status, errors_only, favorite_only, issue,
|
|||
if data.startDate >= TimeUTC.now(delta_days=-7):
|
||||
MAIN_EVENTS_TABLE = "final.events_l7d_mv"
|
||||
MAIN_SESSIONS_TABLE = "final.sessions_l7d_mv"
|
||||
|
||||
full_args["MAIN_EVENTS_TABLE"] = MAIN_EVENTS_TABLE
|
||||
full_args["MAIN_SESSIONS_TABLE"] = MAIN_SESSIONS_TABLE
|
||||
extra_constraints = [
|
||||
"s.project_id = %(project_id)s",
|
||||
"isNotNull(s.duration)"
|
||||
|
|
@ -2078,10 +2086,14 @@ def search_query_parts_ch(data, error_status, errors_only, favorite_only, issue,
|
|||
"""
|
||||
full_args["issue_contextString"] = issue["contextString"]
|
||||
full_args["issue_type"] = issue["type"]
|
||||
|
||||
if extra_event:
|
||||
extra_join += f"""INNER JOIN {extra_event} AS ev USING(session_id)"""
|
||||
extra_constraints.append("ev.timestamp>=%(startDate)s")
|
||||
extra_constraints.append("ev.timestamp<=%(endDate)s")
|
||||
extra_event = f"INNER JOIN ({extra_event(MAIN_EVENTS_TABLE)}) AS extra_event USING(session_id)"
|
||||
# extra_join = f"""INNER JOIN {extra_event} AS ev USING(session_id)"""
|
||||
# extra_constraints.append("ev.timestamp>=%(startDate)s")
|
||||
# extra_constraints.append("ev.timestamp<=%(endDate)s")
|
||||
else:
|
||||
extra_event = ""
|
||||
if errors_only:
|
||||
query_part = f"""{f"({events_query_part}) AS f" if len(events_query_part) > 0 else ""}"""
|
||||
else:
|
||||
|
|
@ -2091,7 +2103,7 @@ def search_query_parts_ch(data, error_status, errors_only, favorite_only, issue,
|
|||
WHERE {" AND ".join(extra_constraints)}) AS s ON(s.session_id=f.session_id)"""
|
||||
else:
|
||||
extra_join += f"""(SELECT *
|
||||
FROM {MAIN_SESSIONS_TABLE} AS s
|
||||
FROM {MAIN_SESSIONS_TABLE} AS s {extra_event}
|
||||
WHERE {" AND ".join(extra_constraints)}) AS s"""
|
||||
query_part = f"""\
|
||||
FROM {f"({events_query_part}) AS f" if len(events_query_part) > 0 else ""}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue