diff --git a/ee/api/chalicelib/core/__init__.py b/ee/api/chalicelib/core/__init__.py index 4f6268b65..550327129 100644 --- a/ee/api/chalicelib/core/__init__.py +++ b/ee/api/chalicelib/core/__init__.py @@ -42,3 +42,6 @@ if config("EXP_FUNNELS", cast=bool, default=False): from . import significance_exp as significance else: from . import significance as significance + +if config("EXP_RESOURCES", cast=bool, default=False): + print(">>> Using experimental resources for session-replay") diff --git a/ee/api/chalicelib/core/resources.py b/ee/api/chalicelib/core/resources.py index 71e493a4d..ad4f0da99 100644 --- a/ee/api/chalicelib/core/resources.py +++ b/ee/api/chalicelib/core/resources.py @@ -1,4 +1,4 @@ -from chalicelib.utils import helper +from chalicelib.utils import helper, exp_ch_helper from chalicelib.utils import ch_client from chalicelib.utils.TimeUTC import TimeUTC from decouple import config @@ -9,14 +9,26 @@ def get_by_session_id(session_id, project_id, start_ts, duration): if duration is None or (type(duration) != 'int' and type(duration) != 'float') or duration < 0: duration = 0 delta = config("events_ts_delta", cast=int, default=60 * 60) * 1000 - ch_query = """\ - SELECT - datetime,url,type,duration,ttfb,header_size,encoded_body_size,decoded_body_size,success,coalesce(status,if(success, 200, status)) AS status - FROM resources - WHERE session_id = toUInt64(%(session_id)s) - AND project_id=%(project_id)s - AND datetime >= toDateTime(%(res_start_ts)s / 1000) - AND datetime <= toDateTime(%(res_end_ts)s / 1000);""" + if config("EXP_RESOURCES", cast=bool, default=False): + ch_query = f"""SELECT + datetime,url,type,duration,ttfb,header_size, + encoded_body_size,decoded_body_size,success, + if(success, 200, 400) AS status + FROM {exp_ch_helper.get_main_resources_table(start_ts)} + WHERE session_id = toUInt16(%(session_id)s) + AND project_id=%(project_id)s + AND datetime >= toDateTime(%(res_start_ts)s / 1000) + AND datetime <= toDateTime(%(res_end_ts)s / 1000);""" + else: + ch_query = """SELECT + datetime,url,type,duration,ttfb,header_size, + encoded_body_size,decoded_body_size,success, + coalesce(status,if(success, 200, status)) AS status + FROM resources + WHERE session_id = toUInt64(%(session_id)s) + AND project_id=%(project_id)s + AND datetime >= toDateTime(%(res_start_ts)s / 1000) + AND datetime <= toDateTime(%(res_end_ts)s / 1000);""" params = {"session_id": session_id, "project_id": project_id, "start_ts": start_ts, "duration": duration, "res_start_ts": start_ts - delta, "res_end_ts": start_ts + duration + delta, } rows = ch.execute(query=ch_query, params=params) diff --git a/ee/api/env.default b/ee/api/env.default index 2d4a4c1e6..3a6ec44a4 100644 --- a/ee/api/env.default +++ b/ee/api/env.default @@ -66,4 +66,5 @@ EXP_ERRORS_SEARCH=false EXP_METRICS=false EXP_7D_MV=false EXP_ALERTS=false -EXP_FUNNELS=false \ No newline at end of file +EXP_FUNNELS=false +EXP_RESOURCES=true \ No newline at end of file