* feat(DB): rearranged queries feat(DB): ready for v1.15.0 * refactor(chalice): upgraded dependencies refactor(crons): upgraded dependencies refactor(alerts): upgraded dependencies * fix(chalice): return error when updating inexistant webhook * feat(chalice): fixed delete webhook response * feat(chalice): limit webhooks name length * feat(chalice): upgraded dependencies feat(alerts): upgraded dependencies feat(crons): upgraded dependencies * fix(chalice): remove urllib3 dependency * feat(chalice): remove FOSS to pydantic v2 * fix(chalice): freeze urllib3 to not have conflicts between boto3 and requests * feat(chalice): refactoring schema in progress * feat(chalice): refactoring schema in progress * feat(chalice): refactoring schema in progress * feat(chalice): refactoring schema in progress feat(chalice): upgraded dependencies * feat(chalice): refactored schema * fix(chalice): pull rebase dev * feat(DB): transfer size support * feat(chalice): support service account * feat(chalice): support service account * fix(chalice): fixed refactored PayloadSchema-name * feat(chalice): path analysis * feat(chalice): support service account 1/2 * feat(DB): timezone support * feat(chalice): upgraded dependencies feat(alerts): upgraded dependencies feat(crons): upgraded dependencies feat(assist): upgraded dependencies feat(sourcemaps): upgraded dependencies * feat(chalice): path analysis schema changes * feat(chalice): path analysis query change * feat(chalice): path analysis query change * feat(chalice): ios replay support * feat(chalice): ios replay support * feat(chalice): path analysis changes * feat(chalice): upgraded dependencies * feat(chalice): simple hide minor paths * feat(chalice): path analysis density * feat(chalice): session's replay ios events * feat(chalice): fixed typo * feat(chalice): support project's platform * feat(DB): support project's platform * feat(chalice): path analysis EE in progress * feat(chalice): project's platform API * feat(chalice): fixed create project * feat(chalice): EE path analysis in progress * feat(chalice): EE path analysis refactor(chalice): support specific database name for clickhouse-client * feat(chalice): upgraded dependencies feat(chalice): path analysis specific event type for startPoint feat(chalice): path analysis specific event type for endPoint feat(chalice): path analysis specific event type for exclude * refactoring(chalice): changed IOS click event type
77 lines
3.2 KiB
Python
77 lines
3.2 KiB
Python
import schemas
|
|
from chalicelib.core import sessions_mobs, sessions_legacy as sessions_search, events
|
|
from chalicelib.utils import pg_client, helper
|
|
|
|
SESSION_PROJECTION_COLS = """s.project_id,
|
|
s.session_id::text AS 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.start_ts,
|
|
s.duration,
|
|
s.events_count,
|
|
s.pages_count,
|
|
s.errors_count,
|
|
s.user_anonymous_id,
|
|
s.platform,
|
|
s.issue_score,
|
|
to_jsonb(s.issue_types) AS issue_types,
|
|
favorite_sessions.session_id NOTNULL AS favorite,
|
|
COALESCE((SELECT TRUE
|
|
FROM public.user_viewed_sessions AS fs
|
|
WHERE s.session_id = fs.session_id
|
|
AND fs.user_id = %(userId)s LIMIT 1), FALSE) AS viewed """
|
|
|
|
|
|
def search_short_session(data: schemas.ClickMapSessionsSearch, project_id, user_id, include_mobs: bool = True):
|
|
no_platform = True
|
|
for f in data.filters:
|
|
if f.type == schemas.FilterType.platform:
|
|
no_platform = False
|
|
break
|
|
if no_platform:
|
|
data.filters.append(schemas.SessionSearchFilterSchema(type=schemas.FilterType.platform,
|
|
value=[schemas.PlatformType.desktop],
|
|
operator=schemas.SearchEventOperator._is))
|
|
|
|
full_args, query_part = sessions_search.search_query_parts(data=data, error_status=None, errors_only=False,
|
|
favorite_only=data.bookmarked, issue=None,
|
|
project_id=project_id, user_id=user_id)
|
|
|
|
with pg_client.PostgresClient() as cur:
|
|
data.order = schemas.SortOrderType.desc
|
|
data.sort = 'duration'
|
|
|
|
# meta_keys = metadata.get(project_id=project_id)
|
|
meta_keys = []
|
|
main_query = cur.mogrify(f"""SELECT {SESSION_PROJECTION_COLS}
|
|
{"," if len(meta_keys) > 0 else ""}{",".join([f'metadata_{m["index"]}' for m in meta_keys])}
|
|
{query_part}
|
|
ORDER BY {data.sort} {data.order.value}
|
|
LIMIT 1;""", full_args)
|
|
# print("--------------------")
|
|
# print(main_query)
|
|
# print("--------------------")
|
|
try:
|
|
cur.execute(main_query)
|
|
except Exception as err:
|
|
print("--------- CLICK MAP SHORT SESSION SEARCH QUERY EXCEPTION -----------")
|
|
print(main_query.decode('UTF-8'))
|
|
print("--------- PAYLOAD -----------")
|
|
print(data.model_dump_json())
|
|
print("--------------------")
|
|
raise err
|
|
|
|
session = cur.fetchone()
|
|
if session:
|
|
if include_mobs:
|
|
session['domURL'] = sessions_mobs.get_urls(session_id=session["session_id"], project_id=project_id)
|
|
session['mobsUrl'] = sessions_mobs.get_urls_depercated(session_id=session["session_id"])
|
|
session['events'] = events.get_by_session_id(project_id=project_id, session_id=session["session_id"],
|
|
event_type=schemas.EventType.location)
|
|
|
|
return helper.dict_to_camel_case(session)
|