Api v1.3.0changes (#140)
* feat(api): get session: live flag checks for duration * feat(api): assist search by user_id * feat(api): assist limit results to 500
This commit is contained in:
parent
1a97e8afa5
commit
0790921124
3 changed files with 35 additions and 7 deletions
|
|
@ -884,6 +884,15 @@ def sessions_live(projectId, context):
|
|||
return {'data': data}
|
||||
|
||||
|
||||
@app.route('/{projectId}/assist/sessions', methods=['POST'])
|
||||
def sessions_live_search(projectId, context):
|
||||
data = app.current_request.json_body
|
||||
if data is None:
|
||||
data = {}
|
||||
data = assist.get_live_sessions(projectId, filters=data.get("filters"))
|
||||
return {'data': data}
|
||||
|
||||
|
||||
@app.route('/{projectId}/heatmaps/url', methods=['POST'])
|
||||
def get_heatmaps_by_url(projectId, context):
|
||||
data = app.current_request.json_body
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
from chalicelib.utils import pg_client, helper
|
||||
from chalicelib.core import projects
|
||||
from chalicelib.core import projects, sessions, sessions_metas
|
||||
import requests
|
||||
from chalicelib.utils.helper import environ
|
||||
|
||||
|
|
@ -19,7 +19,7 @@ SESSION_PROJECTION_COLS = """s.project_id,
|
|||
"""
|
||||
|
||||
|
||||
def get_live_sessions(project_id):
|
||||
def get_live_sessions(project_id, filters=None):
|
||||
project_key = projects.get_project_key(project_id)
|
||||
connected_peers = requests.get(environ["peers"] + f"/{project_key}")
|
||||
if connected_peers.status_code != 200:
|
||||
|
|
@ -31,13 +31,31 @@ def get_live_sessions(project_id):
|
|||
if len(connected_peers) == 0:
|
||||
return []
|
||||
connected_peers = tuple(connected_peers)
|
||||
extra_constraints = ["project_id = %(project_id)s", "session_id IN %(connected_peers)s"]
|
||||
extra_params = {}
|
||||
if filters is not None:
|
||||
for i, f in enumerate(filters):
|
||||
if not isinstance(f.get("value"), list):
|
||||
f["value"] = [f.get("value")]
|
||||
if len(f["value"]) == 0 or f["value"][0] is None:
|
||||
continue
|
||||
filter_type = f["type"].upper()
|
||||
f["value"] = sessions.__get_sql_value_multiple(f["value"])
|
||||
if filter_type == sessions_metas.meta_type.USERID:
|
||||
op = sessions.__get_sql_operator(f["operator"])
|
||||
extra_constraints.append(f"user_id {op} %(value_{i})s")
|
||||
extra_params[f"value_{i}"] = helper.string_to_sql_like_with_op(f["value"][0], op)
|
||||
|
||||
with pg_client.PostgresClient() as cur:
|
||||
query = cur.mogrify(f"""\
|
||||
SELECT {SESSION_PROJECTION_COLS}, %(project_key)s||'-'|| session_id AS peer_id
|
||||
FROM public.sessions AS s
|
||||
WHERE s.project_id = %(project_id)s
|
||||
AND session_id IN %(connected_peers)s;""",
|
||||
{"project_id": project_id, "connected_peers": connected_peers, "project_key": project_key})
|
||||
WHERE {" AND ".join(extra_constraints)}
|
||||
LIMIT 500;""",
|
||||
{"project_id": project_id,
|
||||
"connected_peers": connected_peers,
|
||||
"project_key": project_key,
|
||||
**extra_params})
|
||||
cur.execute(query)
|
||||
results = cur.fetchall()
|
||||
return helper.list_to_camel_case(results)
|
||||
|
|
|
|||
|
|
@ -99,8 +99,9 @@ def get_by_id2_pg(project_id, session_id, user_id, full_data=False, include_fav_
|
|||
|
||||
data['metadata'] = __group_metadata(project_metadata=data.pop("projectMetadata"), session=data)
|
||||
data['issues'] = issues.get_by_session_id(session_id=session_id)
|
||||
data['live'] = assist.is_live(project_id=project_id, session_id=session_id,
|
||||
project_key=data["projectKey"])
|
||||
data['live'] = data["duration"] in [None, 0] and assist.is_live(project_id=project_id,
|
||||
session_id=session_id,
|
||||
project_key=data["projectKey"])
|
||||
|
||||
return data
|
||||
return None
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue