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.FlatClickMapSessionsSearch, 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.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)
|