refactor(chalice): removed favorite attribute from sessions search response as it is not used by UI
refactor(chalice): use json.loads instead of ast.literal_eval for faster metadata parsing
This commit is contained in:
parent
70d2bbd9b9
commit
ad3f72a10b
2 changed files with 12 additions and 8 deletions
|
|
@ -1,10 +1,10 @@
|
||||||
import ast
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import schemas
|
import schemas
|
||||||
from chalicelib.core import metadata, projects
|
from chalicelib.core import metadata, projects
|
||||||
from . import sessions_favorite, sessions_search_legacy, sessions_ch as sessions, sessions_legacy_mobil
|
|
||||||
from chalicelib.utils import pg_client, helper, ch_client, exp_ch_helper
|
from chalicelib.utils import pg_client, helper, ch_client, exp_ch_helper
|
||||||
|
from . import sessions_favorite, sessions_search_legacy, sessions_ch as sessions, sessions_legacy_mobil
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
@ -56,6 +56,8 @@ SESSION_PROJECTION_COLS_CH_MAP = """\
|
||||||
'viewed', toString(viewed_sessions.session_id > 0)
|
'viewed', toString(viewed_sessions.session_id > 0)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def __parse_metadata(metadata_map):
|
||||||
|
return json.loads(metadata_map.replace("'", '"').replace("NULL", 'null'))
|
||||||
|
|
||||||
# This function executes the query and return result
|
# This function executes the query and return result
|
||||||
def search_sessions(data: schemas.SessionsSearchPayloadSchema, project: schemas.ProjectContext,
|
def search_sessions(data: schemas.SessionsSearchPayloadSchema, project: schemas.ProjectContext,
|
||||||
|
|
@ -123,7 +125,8 @@ def search_sessions(data: schemas.SessionsSearchPayloadSchema, project: schemas.
|
||||||
|
|
||||||
meta_keys = metadata.get(project_id=project.project_id)
|
meta_keys = metadata.get(project_id=project.project_id)
|
||||||
meta_map = ",map(%s) AS 'metadata'" \
|
meta_map = ",map(%s) AS 'metadata'" \
|
||||||
% ','.join([f"'{m['key']}',coalesce(metadata_{m['index']},'None')" for m in meta_keys])
|
% ','.join(
|
||||||
|
[f"'{m['key']}',coalesce(metadata_{m['index']},CAST(NULL AS Nullable(String)))" for m in meta_keys])
|
||||||
main_query = cur.mogrify(f"""SELECT COUNT(*) AS count,
|
main_query = cur.mogrify(f"""SELECT COUNT(*) AS count,
|
||||||
COALESCE(JSONB_AGG(users_sessions)
|
COALESCE(JSONB_AGG(users_sessions)
|
||||||
FILTER (WHERE rn>%(sessions_limit_s)s AND rn<=%(sessions_limit_e)s), '[]'::JSONB) AS sessions
|
FILTER (WHERE rn>%(sessions_limit_s)s AND rn<=%(sessions_limit_e)s), '[]'::JSONB) AS sessions
|
||||||
|
|
@ -158,7 +161,8 @@ def search_sessions(data: schemas.SessionsSearchPayloadSchema, project: schemas.
|
||||||
|
|
||||||
meta_keys = metadata.get(project_id=project.project_id)
|
meta_keys = metadata.get(project_id=project.project_id)
|
||||||
meta_map = ",'metadata',toString(map(%s))" \
|
meta_map = ",'metadata',toString(map(%s))" \
|
||||||
% ','.join([f"'{m['key']}',coalesce(metadata_{m['index']},'None')" for m in meta_keys])
|
% ','.join(
|
||||||
|
[f"'{m['key']}',coalesce(metadata_{m['index']},CAST(NULL AS Nullable(String)))" for m in meta_keys])
|
||||||
main_query = cur.format(query=f"""SELECT any(total) AS count,
|
main_query = cur.format(query=f"""SELECT any(total) AS count,
|
||||||
groupArray(%(sessions_limit)s)(details) AS sessions
|
groupArray(%(sessions_limit)s)(details) AS sessions
|
||||||
FROM (SELECT total, details
|
FROM (SELECT total, details
|
||||||
|
|
@ -200,11 +204,12 @@ def search_sessions(data: schemas.SessionsSearchPayloadSchema, project: schemas.
|
||||||
for i, s in enumerate(sessions_list):
|
for i, s in enumerate(sessions_list):
|
||||||
sessions_list[i] = {**s.pop("last_session")[0], **s}
|
sessions_list[i] = {**s.pop("last_session")[0], **s}
|
||||||
sessions_list[i].pop("rn")
|
sessions_list[i].pop("rn")
|
||||||
sessions_list[i]["metadata"] = ast.literal_eval(sessions_list[i]["metadata"])
|
sessions_list[i]["metadata"] = __parse_metadata(sessions_list[i]["metadata"])
|
||||||
else:
|
else:
|
||||||
|
import json
|
||||||
for i in range(len(sessions_list)):
|
for i in range(len(sessions_list)):
|
||||||
sessions_list[i]["metadata"] = ast.literal_eval(sessions_list[i]["metadata"])
|
sessions_list[i]["metadata"] = __parse_metadata(sessions_list[i]["metadata"])
|
||||||
sessions_list[i] = schemas.SessionModel.parse_obj(helper.dict_to_camel_case(sessions_list[i]))
|
sessions_list[i] = schemas.SessionModel.model_validate(helper.dict_to_camel_case(sessions_list[i]))
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'total': total,
|
'total': total,
|
||||||
|
|
|
||||||
|
|
@ -1588,7 +1588,6 @@ class SessionModel(BaseModel):
|
||||||
duration: int
|
duration: int
|
||||||
errorsCount: int
|
errorsCount: int
|
||||||
eventsCount: int
|
eventsCount: int
|
||||||
favorite: bool = Field(default=False)
|
|
||||||
issueScore: int
|
issueScore: int
|
||||||
issueTypes: List[IssueType] = Field(default=[])
|
issueTypes: List[IssueType] = Field(default=[])
|
||||||
metadata: dict = Field(default={})
|
metadata: dict = Field(default={})
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue