From 03919c23af2dc7f3839ef56694e63112a50f2bd3 Mon Sep 17 00:00:00 2001 From: Kraiem Taha Yassine Date: Wed, 21 Jul 2021 14:56:07 +0200 Subject: [PATCH] Api heatmaps (#99) * feta(api): heatmaps by url * feta(db): delta and indexes for heatmaps by url --- api/chalicelib/blueprints/bp_core.py | 8 ++++- api/chalicelib/core/heatmaps.py | 30 +++++++++++++++++++ .../db/init_dbs/postgresql/1.3.0/1.3.0.sql | 7 +++++ .../db/init_dbs/postgresql/init_schema.sql | 4 +++ .../db/init_dbs/postgresql/1.3.0/1.3.0.sql | 7 +++++ .../db/init_dbs/postgresql/init_schema.sql | 4 +++ 6 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 api/chalicelib/core/heatmaps.py create mode 100644 ee/scripts/helm/db/init_dbs/postgresql/1.3.0/1.3.0.sql create mode 100644 scripts/helm/db/init_dbs/postgresql/1.3.0/1.3.0.sql diff --git a/api/chalicelib/blueprints/bp_core.py b/api/chalicelib/blueprints/bp_core.py index 83502b637..cd50ce545 100644 --- a/api/chalicelib/blueprints/bp_core.py +++ b/api/chalicelib/blueprints/bp_core.py @@ -11,7 +11,7 @@ from chalicelib.core import log_tool_rollbar, sourcemaps, events, sessions_assig log_tool_stackdriver, reset_password, sessions_favorite_viewed, \ 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 + assist, heatmaps from chalicelib.core.collaboration_slack import Slack from chalicelib.utils import email_helper @@ -882,3 +882,9 @@ def removed_endpoints(projectId=None, context=None): def sessions_live(projectId, context): data = assist.get_live_sessions(projectId) return {'data': data} + + +@app.route('/{projectId}/heatmaps/url', methods=['POST']) +def get_heatmaps_by_url(projectId, context): + data = app.current_request.json_body + return {"data": heatmaps.get_by_url(project_id=projectId, data=data)} diff --git a/api/chalicelib/core/heatmaps.py b/api/chalicelib/core/heatmaps.py new file mode 100644 index 000000000..1434cbf8d --- /dev/null +++ b/api/chalicelib/core/heatmaps.py @@ -0,0 +1,30 @@ +from chalicelib.utils.TimeUTC import TimeUTC +from chalicelib.utils import helper, pg_client +from chalicelib.utils import dev + + +@dev.timed +def get_by_url(project_id, data): + args = {"startDate": data.get('startDate', TimeUTC.now(delta_days=-30)), + "endDate": data.get('endDate', TimeUTC.now()), + "projectId": project_id, "url": data["url"]} + + with pg_client.PostgresClient() as cur: + query = cur.mogrify("""SELECT selector, count(1) AS count + FROM events.clicks + INNER JOIN sessions USING (session_id) + WHERE project_id = 1 + AND url = %(url)s + AND timestamp >= %(startDate)s + AND timestamp <= %(endDate)s + AND start_ts >= %(startDate)s + AND start_ts <= %(endDate)s + AND duration IS NOT NULL + GROUP BY selector;""", + args) + + cur.execute( + query + ) + rows = cur.fetchall() + return helper.dict_to_camel_case(rows) diff --git a/ee/scripts/helm/db/init_dbs/postgresql/1.3.0/1.3.0.sql b/ee/scripts/helm/db/init_dbs/postgresql/1.3.0/1.3.0.sql new file mode 100644 index 000000000..45298a467 --- /dev/null +++ b/ee/scripts/helm/db/init_dbs/postgresql/1.3.0/1.3.0.sql @@ -0,0 +1,7 @@ +BEGIN ; + +CREATE INDEX clicks_url_idx ON events.clicks (url); +CREATE INDEX clicks_url_gin_idx ON events.clicks USING GIN (url gin_trgm_ops); +CREATE INDEX clicks_url_session_id_timestamp_selector_idx ON events.clicks (url, session_id, timestamp,selector); + +COMMIT ; \ No newline at end of file diff --git a/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql b/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql index 323774ed1..889000497 100644 --- a/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql +++ b/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql @@ -691,6 +691,10 @@ CREATE INDEX ON events.clicks (session_id); CREATE INDEX ON events.clicks (label); CREATE INDEX clicks_label_gin_idx ON events.clicks USING GIN (label gin_trgm_ops); CREATE INDEX ON events.clicks (timestamp); +CREATE INDEX clicks_url_idx ON events.clicks (url); +CREATE INDEX clicks_url_gin_idx ON events.clicks USING GIN (url gin_trgm_ops); +CREATE INDEX clicks_url_session_id_timestamp_selector_idx ON events.clicks (url, session_id, timestamp,selector); + CREATE TABLE events.inputs ( diff --git a/scripts/helm/db/init_dbs/postgresql/1.3.0/1.3.0.sql b/scripts/helm/db/init_dbs/postgresql/1.3.0/1.3.0.sql new file mode 100644 index 000000000..45298a467 --- /dev/null +++ b/scripts/helm/db/init_dbs/postgresql/1.3.0/1.3.0.sql @@ -0,0 +1,7 @@ +BEGIN ; + +CREATE INDEX clicks_url_idx ON events.clicks (url); +CREATE INDEX clicks_url_gin_idx ON events.clicks USING GIN (url gin_trgm_ops); +CREATE INDEX clicks_url_session_id_timestamp_selector_idx ON events.clicks (url, session_id, timestamp,selector); + +COMMIT ; \ No newline at end of file diff --git a/scripts/helm/db/init_dbs/postgresql/init_schema.sql b/scripts/helm/db/init_dbs/postgresql/init_schema.sql index 18c6838ce..84c3fa108 100644 --- a/scripts/helm/db/init_dbs/postgresql/init_schema.sql +++ b/scripts/helm/db/init_dbs/postgresql/init_schema.sql @@ -686,6 +686,10 @@ CREATE INDEX ON events.clicks (session_id); CREATE INDEX ON events.clicks (label); CREATE INDEX clicks_label_gin_idx ON events.clicks USING GIN (label gin_trgm_ops); CREATE INDEX ON events.clicks (timestamp); +CREATE INDEX clicks_url_idx ON events.clicks (url); +CREATE INDEX clicks_url_gin_idx ON events.clicks USING GIN (url gin_trgm_ops); +CREATE INDEX clicks_url_session_id_timestamp_selector_idx ON events.clicks (url, session_id, timestamp,selector); + CREATE TABLE events.inputs (