feat(api): custom metrics preview view type (line&progress)

This commit is contained in:
Taha Yassine Kraiem 2022-01-06 17:15:12 +01:00
parent f7cc837944
commit 74694eb5b4
3 changed files with 38 additions and 14 deletions

View file

@ -11,7 +11,17 @@ def try_live(project_id, data: schemas.TryCustomMetricsSchema):
for s in data.series:
s.filter.startDate = data.startDate
s.filter.endDate = data.endDate
results.append(sessions.search2_series(data=s.filter, project_id=project_id, density=data.density))
results.append(sessions.search2_series(data=s.filter, project_id=project_id, density=data.density,
view_type=data.view_type))
if data.view_type == schemas.MetricViewType.progress:
r = {"count": results[-1]}
diff = s.filter.endDate - s.filter.startDate
s.filter.startDate = data.endDate
s.filter.endDate = data.endDate - diff
r["previousCount"] = sessions.search2_series(data=s.filter, project_id=project_id, density=data.density,
view_type=data.view_type)
r["countProgress"] = helper.__progress(old_val=r["previousCount"], new_val=r["count"])
results[-1] = r
return results

View file

@ -231,7 +231,8 @@ def search2_pg(data: schemas.SessionsSearchPayloadSchema, project_id, user_id, f
@dev.timed
def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, density: int):
def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, density: int,
view_type: schemas.MetricViewType):
step_size = metrics_helper.__get_step_size(endTimestamp=data.endDate, startTimestamp=data.startDate,
density=density, factor=1)
full_args, query_part, sort = search_query_parts(data=data, error_status=None, errors_only=False,
@ -239,23 +240,30 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d
user_id=None)
full_args["step_size"] = step_size
with pg_client.PostgresClient() as cur:
main_query = cur.mogrify(f"""WITH full_sessions AS (SELECT DISTINCT ON(s.session_id) s.session_id, s.start_ts
{query_part})
SELECT generated_timestamp AS timestamp,
COUNT(s) AS count
FROM generate_series(%(startDate)s, %(endDate)s, %(step_size)s) AS generated_timestamp
LEFT JOIN LATERAL ( SELECT 1 AS s
FROM full_sessions
WHERE start_ts >= generated_timestamp
AND start_ts < generated_timestamp + %(step_size)s) AS sessions ON (TRUE)
GROUP BY generated_timestamp
ORDER BY generated_timestamp;""", full_args)
if view_type == schemas.MetricViewType.line_chart:
main_query = cur.mogrify(f"""WITH full_sessions AS (SELECT DISTINCT ON(s.session_id) s.session_id, s.start_ts
{query_part})
SELECT generated_timestamp AS timestamp,
COUNT(s) AS count
FROM generate_series(%(startDate)s, %(endDate)s, %(step_size)s) AS generated_timestamp
LEFT JOIN LATERAL ( SELECT 1 AS s
FROM full_sessions
WHERE start_ts >= generated_timestamp
AND start_ts < generated_timestamp + %(step_size)s) AS sessions ON (TRUE)
GROUP BY generated_timestamp
ORDER BY generated_timestamp;""", full_args)
else:
main_query = cur.mogrify(f"""SELECT count(DISTINCT s.session_id) AS count
{query_part};""", full_args)
# print("--------------------")
# print(main_query)
cur.execute(main_query)
# print("--------------------")
sessions = cur.fetchall()
if view_type == schemas.MetricViewType.line_chart:
sessions = cur.fetchall()
else:
sessions = cur.fetchone()["count"]
return sessions

View file

@ -600,10 +600,16 @@ class CreateCustomMetricsSchema(BaseModel):
alias_generator = attribute_to_camel_case
class MetricViewType(str, Enum):
line_chart = "lineChart"
progress = "progress"
class TryCustomMetricsSchema(CreateCustomMetricsSchema):
startDate: int = Field(TimeUTC.now(-7))
endDate: int = Field(TimeUTC.now())
density: int = Field(7)
view_type: MetricViewType = Field(MetricViewType.line_chart)
class CustomMetricUpdateSeriesSchema(CustomMetricCreateSeriesSchema):