From 0da80b1ba9d31d828a7287ccf9a6d517f50abf9e Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Fri, 19 Aug 2022 14:46:43 +0100 Subject: [PATCH] feat(chalice): search favorite sessions without time limit feat(chalice): search vault sessions without time limit --- api/chalicelib/core/sessions.py | 5 ++- ...avorite_viewed.py => sessions_favorite.py} | 32 +++++++++---------- api/chalicelib/core/sessions_viewed.py | 14 ++++++++ api/routers/core.py | 11 ++++--- ee/api/.gitignore | 1 + ...avorite_viewed.py => sessions_favorite.py} | 32 +++++++++---------- ee/api/clean.sh | 1 + 7 files changed, 56 insertions(+), 40 deletions(-) rename api/chalicelib/core/{sessions_favorite_viewed.py => sessions_favorite.py} (78%) create mode 100644 api/chalicelib/core/sessions_viewed.py rename ee/api/chalicelib/core/{sessions_favorite_viewed.py => sessions_favorite.py} (84%) diff --git a/api/chalicelib/core/sessions.py b/api/chalicelib/core/sessions.py index 1c38aac40..e5a704298 100644 --- a/api/chalicelib/core/sessions.py +++ b/api/chalicelib/core/sessions.py @@ -2,7 +2,7 @@ from typing import List import schemas from chalicelib.core import events, metadata, events_ios, \ - sessions_mobs, issues, projects, errors, resources, assist, performance_event + sessions_mobs, issues, projects, errors, resources, assist, performance_event, sessions_viewed, sessions_favorite from chalicelib.utils import pg_client, helper, metrics_helper SESSION_PROJECTION_COLS = """s.project_id, @@ -175,6 +175,9 @@ def _isUndefined_operator(op: schemas.SearchEventOperator): # This function executes the query and return result def search_sessions(data: schemas.SessionsSearchPayloadSchema, project_id, user_id, errors_only=False, error_status=schemas.ErrorStatus.all, count_only=False, issue=None): + if data.bookmarked: + data.startDate,data.endDate = sessions_favorite.get_start_end_timestamp(project_id,user_id) + full_args, query_part = search_query_parts(data=data, error_status=error_status, errors_only=errors_only, favorite_only=data.bookmarked, issue=issue, project_id=project_id, user_id=user_id) diff --git a/api/chalicelib/core/sessions_favorite_viewed.py b/api/chalicelib/core/sessions_favorite.py similarity index 78% rename from api/chalicelib/core/sessions_favorite_viewed.py rename to api/chalicelib/core/sessions_favorite.py index 7f503679c..c1b3756d8 100644 --- a/api/chalicelib/core/sessions_favorite_viewed.py +++ b/api/chalicelib/core/sessions_favorite.py @@ -30,19 +30,6 @@ def remove_favorite_session(project_id, user_id, session_id): include_fav_viewed=True) -def add_viewed_session(project_id, user_id, session_id): - with pg_client.PostgresClient() as cur: - cur.execute( - cur.mogrify("""\ - INSERT INTO public.user_viewed_sessions - (user_id, session_id) - VALUES - (%(userId)s,%(sessionId)s) - ON CONFLICT DO NOTHING;""", - {"userId": user_id, "sessionId": session_id}) - ) - - def favorite_session(project_id, user_id, session_id): if favorite_session_exists(user_id=user_id, session_id=session_id): return remove_favorite_session(project_id=project_id, user_id=user_id, session_id=session_id) @@ -50,10 +37,6 @@ def favorite_session(project_id, user_id, session_id): return add_favorite_session(project_id=project_id, user_id=user_id, session_id=session_id) -def view_session(project_id, user_id, session_id): - return add_viewed_session(project_id=project_id, user_id=user_id, session_id=session_id) - - def favorite_session_exists(user_id, session_id): with pg_client.PostgresClient() as cur: cur.execute( @@ -68,3 +51,18 @@ def favorite_session_exists(user_id, session_id): ) r = cur.fetchone() return r is not None + + +def get_start_end_timestamp(project_id, user_id): + with pg_client.PostgresClient() as cur: + cur.execute( + cur.mogrify( + """SELECT max(start_ts) AS max_start_ts, min(start_ts) AS min_start_ts + FROM public.user_favorite_sessions INNER JOIN sessions USING(session_id) + WHERE + user_favorite_sessions.user_id = %(userId)s + AND project_id = %(project_id)s;""", + {"userId": user_id, "project_id": project_id}) + ) + r = cur.fetchone() + return 0, 0 if r is None else r["max_start_ts"], r["min_start_ts"] diff --git a/api/chalicelib/core/sessions_viewed.py b/api/chalicelib/core/sessions_viewed.py new file mode 100644 index 000000000..301a62d16 --- /dev/null +++ b/api/chalicelib/core/sessions_viewed.py @@ -0,0 +1,14 @@ +from chalicelib.utils import pg_client + + +def view_session(project_id, user_id, session_id): + with pg_client.PostgresClient() as cur: + cur.execute( + cur.mogrify("""\ + INSERT INTO public.user_viewed_sessions + (user_id, session_id) + VALUES + (%(userId)s,%(sessionId)s) + ON CONFLICT DO NOTHING;""", + {"userId": user_id, "sessionId": session_id}) + ) diff --git a/api/routers/core.py b/api/routers/core.py index 5d156fc97..6c5d2c59a 100644 --- a/api/routers/core.py +++ b/api/routers/core.py @@ -13,7 +13,7 @@ from chalicelib.core import log_tool_rollbar, sourcemaps, events, sessions_assig log_tool_cloudwatch, log_tool_sentry, log_tool_sumologic, log_tools, errors, sessions, \ log_tool_newrelic, announcements, log_tool_bugsnag, weekly_report, integration_jira_cloud, integration_github, \ assist, heatmaps, mobile, signup, tenants, errors_favorite_viewed, boarding, notifications, webhook, users, \ - custom_metrics, saved_search, integrations_global + custom_metrics, saved_search, integrations_global, sessions_viewed from chalicelib.core.collaboration_slack import Slack from chalicelib.utils import email_helper, helper, captcha from chalicelib.utils.TimeUTC import TimeUTC @@ -51,9 +51,10 @@ def login(data: schemas.UserLoginSchema = Body(...)): } +@app.post('/{projectId}/sessions/search', tags=["sessions"]) @app.post('/{projectId}/sessions/search2', tags=["sessions"]) -def sessions_search2(projectId: int, data: schemas.FlatSessionsSearchPayloadSchema = Body(...), - context: schemas.CurrentContext = Depends(OR_context)): +def sessions_search(projectId: int, data: schemas.FlatSessionsSearchPayloadSchema = Body(...), + context: schemas.CurrentContext = Depends(OR_context)): data = sessions.search_sessions(data=data, project_id=projectId, user_id=context.user_id) return {'data': data} @@ -69,7 +70,7 @@ def get_session2(projectId: int, sessionId: Union[int, str], background_tasks: B if data is None: return {"errors": ["session not found"]} if data.get("inDB"): - background_tasks.add_task(sessions_favorite_viewed.view_session, project_id=projectId, user_id=context.user_id, + background_tasks.add_task(sessions_viewed.view_session, project_id=projectId, user_id=context.user_id, session_id=sessionId) return { 'data': data @@ -899,7 +900,7 @@ def get_live_session(projectId: int, sessionId: str, background_tasks: Backgroun if data is None: return {"errors": ["session not found"]} if data.get("inDB"): - background_tasks.add_task(sessions_favorite_viewed.view_session, project_id=projectId, + background_tasks.add_task(sessions_viewed.view_session, project_id=projectId, user_id=context.user_id, session_id=sessionId) return {'data': data} diff --git a/ee/api/.gitignore b/ee/api/.gitignore index abfaa08d2..606fb8a68 100644 --- a/ee/api/.gitignore +++ b/ee/api/.gitignore @@ -211,6 +211,7 @@ Pipfile /chalicelib/core/sessions_assignments.py /chalicelib/core/sessions_metas.py /chalicelib/core/sessions_mobs.py +/chalicelib/core/sessions_viewed.py /chalicelib/core/significance.py /chalicelib/core/slack.py /chalicelib/core/socket_ios.py diff --git a/ee/api/chalicelib/core/sessions_favorite_viewed.py b/ee/api/chalicelib/core/sessions_favorite.py similarity index 84% rename from ee/api/chalicelib/core/sessions_favorite_viewed.py rename to ee/api/chalicelib/core/sessions_favorite.py index 896ba4a99..796273f16 100644 --- a/ee/api/chalicelib/core/sessions_favorite_viewed.py +++ b/ee/api/chalicelib/core/sessions_favorite.py @@ -31,19 +31,6 @@ def remove_favorite_session(project_id, user_id, session_id): include_fav_viewed=True) -def add_viewed_session(project_id, user_id, session_id): - with pg_client.PostgresClient() as cur: - cur.execute( - cur.mogrify("""\ - INSERT INTO public.user_viewed_sessions - (user_id, session_id) - VALUES - (%(userId)s,%(sessionId)s) - ON CONFLICT DO NOTHING;""", - {"userId": user_id, "sessionId": session_id}) - ) - - def favorite_session(project_id, user_id, session_id): if favorite_session_exists(user_id=user_id, session_id=session_id): key = str(session_id) @@ -74,10 +61,6 @@ def favorite_session(project_id, user_id, session_id): return add_favorite_session(project_id=project_id, user_id=user_id, session_id=session_id) -def view_session(project_id, user_id, session_id): - return add_viewed_session(project_id=project_id, user_id=user_id, session_id=session_id) - - def favorite_session_exists(user_id, session_id): with pg_client.PostgresClient() as cur: cur.execute( @@ -92,3 +75,18 @@ def favorite_session_exists(user_id, session_id): ) r = cur.fetchone() return r is not None + + +def get_start_end_timestamp(project_id, user_id): + with pg_client.PostgresClient() as cur: + cur.execute( + cur.mogrify( + """SELECT max(start_ts) AS max_start_ts, min(start_ts) AS min_start_ts + FROM public.user_favorite_sessions INNER JOIN sessions USING(session_id) + WHERE + user_favorite_sessions.user_id = %(userId)s + AND project_id = %(project_id)s;""", + {"userId": user_id, "project_id": project_id}) + ) + r = cur.fetchone() + return 0, 0 if r is None else r["max_start_ts"], r["min_start_ts"] diff --git a/ee/api/clean.sh b/ee/api/clean.sh index 7ea569352..72deb8fff 100755 --- a/ee/api/clean.sh +++ b/ee/api/clean.sh @@ -35,6 +35,7 @@ rm -rf ./chalicelib/core/sessions.py rm -rf ./chalicelib/core/sessions_assignments.py rm -rf ./chalicelib/core/sessions_metas.py rm -rf ./chalicelib/core/sessions_mobs.py +rm -rf ./chalicelib/core/sessions_viewed.py rm -rf ./chalicelib/core/significance.py rm -rf ./chalicelib/core/slack.py rm -rf ./chalicelib/core/socket_ios.py