From ce572f09f2692e276237fcf7f3f4841cb0a24e3b Mon Sep 17 00:00:00 2001 From: Robin Bisping Date: Sat, 22 Oct 2022 19:00:57 +0200 Subject: [PATCH] Fix missing function argument of getFilterQuery In getEventMetrics no `column` argument is passed to getFilterQuery. Thus, the subsequent arguments are shifted by one. This leads to wrong API responses, since the filters are not properly applied. One option is to pass a null value as the `column` argument. However, it is not used in getFilterQuery. Therefore, I removed it. --- lib/clickhouse.js | 10 +++++----- lib/prisma.js | 10 +++++----- queries/analytics/pageview/getPageviewMetrics.js | 2 -- queries/analytics/pageview/getPageviewParams.js | 3 +-- queries/analytics/pageview/getPageviewStats.js | 8 +------- queries/analytics/session/getSessionMetrics.js | 8 +------- queries/analytics/stats/getWebsiteStats.js | 8 +------- 7 files changed, 14 insertions(+), 35 deletions(-) diff --git a/lib/clickhouse.js b/lib/clickhouse.js index 519899f2..351c8930 100644 --- a/lib/clickhouse.js +++ b/lib/clickhouse.js @@ -62,7 +62,7 @@ function getBetweenDates(field, start_at, end_at) { and ${getDateFormat(end_at)}`; } -function getFilterQuery(table, column, filters = {}, params = []) { +function getFilterQuery(table, filters = {}, params = []) { const query = Object.keys(filters).reduce((arr, key) => { const filter = filters[key]; @@ -122,7 +122,7 @@ function getFilterQuery(table, column, filters = {}, params = []) { return query.join('\n'); } -function parseFilters(table, column, filters = {}, params = [], sessionKey = 'session_id') { +function parseFilters(table, filters = {}, params = [], sessionKey = 'session_id') { const { domain, url, event_url, referrer, os, browser, device, country, event_name, query } = filters; @@ -139,9 +139,9 @@ function parseFilters(table, column, filters = {}, params = [], sessionKey = 'se os || browser || device || country ? `inner join session on ${table}.${sessionKey} = session.${sessionKey}` : '', - pageviewQuery: getFilterQuery('pageview', column, pageviewFilters, params), - sessionQuery: getFilterQuery('session', column, sessionFilters, params), - eventQuery: getFilterQuery('event', column, eventFilters, params), + pageviewQuery: getFilterQuery('pageview', pageviewFilters, params), + sessionQuery: getFilterQuery('session', sessionFilters, params), + eventQuery: getFilterQuery('event', eventFilters, params), }; } diff --git a/lib/prisma.js b/lib/prisma.js index b93afafa..bc7e06ee 100644 --- a/lib/prisma.js +++ b/lib/prisma.js @@ -85,7 +85,7 @@ function getTimestampInterval(field) { } } -function getFilterQuery(table, column, filters = {}, params = []) { +function getFilterQuery(table, filters = {}, params = []) { const query = Object.keys(filters).reduce((arr, key) => { const filter = filters[key]; @@ -145,7 +145,7 @@ function getFilterQuery(table, column, filters = {}, params = []) { return query.join('\n'); } -function parseFilters(table, column, filters = {}, params = [], sessionKey = 'session_id') { +function parseFilters(table, filters = {}, params = [], sessionKey = 'session_id') { const { domain, url, event_url, referrer, os, browser, device, country, event_name, query } = filters; @@ -162,9 +162,9 @@ function parseFilters(table, column, filters = {}, params = [], sessionKey = 'se os || browser || device || country ? `inner join session on ${table}.${sessionKey} = session.${sessionKey}` : '', - pageviewQuery: getFilterQuery('pageview', column, pageviewFilters, params), - sessionQuery: getFilterQuery('session', column, sessionFilters, params), - eventQuery: getFilterQuery('event', column, eventFilters, params), + pageviewQuery: getFilterQuery('pageview', pageviewFilters, params), + sessionQuery: getFilterQuery('session', sessionFilters, params), + eventQuery: getFilterQuery('event', eventFilters, params), }; } diff --git a/queries/analytics/pageview/getPageviewMetrics.js b/queries/analytics/pageview/getPageviewMetrics.js index d34f4c17..abf2d12d 100644 --- a/queries/analytics/pageview/getPageviewMetrics.js +++ b/queries/analytics/pageview/getPageviewMetrics.js @@ -14,7 +14,6 @@ async function relationalQuery(website_id, start_at, end_at, column, table, filt const params = [website_id, start_at, end_at]; const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters( table, - column, filters, params, ); @@ -39,7 +38,6 @@ async function clickhouseQuery(website_id, start_at, end_at, column, table, filt const params = [website_id]; const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters( table, - column, filters, params, 'session_uuid', diff --git a/queries/analytics/pageview/getPageviewParams.js b/queries/analytics/pageview/getPageviewParams.js index fa445da5..79817659 100644 --- a/queries/analytics/pageview/getPageviewParams.js +++ b/queries/analytics/pageview/getPageviewParams.js @@ -8,12 +8,11 @@ export async function getPageviewParams(...args) { }); } -async function relationalQuery(website_id, start_at, end_at, column, table, filters = {}) { +async function relationalQuery(website_id, start_at, end_at, table, filters = {}) { const { parseFilters, rawQuery } = prisma; const params = [website_id, start_at, end_at]; const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters( table, - column, filters, params, ); diff --git a/queries/analytics/pageview/getPageviewStats.js b/queries/analytics/pageview/getPageviewStats.js index da25ab0c..3c7c3147 100644 --- a/queries/analytics/pageview/getPageviewStats.js +++ b/queries/analytics/pageview/getPageviewStats.js @@ -21,12 +21,7 @@ async function relationalQuery( ) { const { getDateQuery, parseFilters, rawQuery } = prisma; const params = [website_id, start_at, end_at]; - const { pageviewQuery, sessionQuery, joinSession } = parseFilters( - 'pageview', - null, - filters, - params, - ); + const { pageviewQuery, sessionQuery, joinSession } = parseFilters('pageview', filters, params); return rawQuery( `select ${getDateQuery('pageview.created_at', unit, timezone)} t, @@ -56,7 +51,6 @@ async function clickhouseQuery( const params = [website_id]; const { pageviewQuery, sessionQuery, joinSession } = parseFilters( 'pageview', - null, filters, params, sessionKey, diff --git a/queries/analytics/session/getSessionMetrics.js b/queries/analytics/session/getSessionMetrics.js index 36eb7568..d95e1512 100644 --- a/queries/analytics/session/getSessionMetrics.js +++ b/queries/analytics/session/getSessionMetrics.js @@ -12,12 +12,7 @@ export async function getSessionMetrics(...args) { async function relationalQuery(website_id, start_at, end_at, field, filters = {}) { const { parseFilters, rawQuery } = prisma; const params = [website_id, start_at, end_at]; - const { pageviewQuery, sessionQuery, joinSession } = parseFilters( - 'pageview', - null, - filters, - params, - ); + const { pageviewQuery, sessionQuery, joinSession } = parseFilters('pageview', filters, params); return rawQuery( `select ${field} x, count(*) y @@ -42,7 +37,6 @@ async function clickhouseQuery(website_id, start_at, end_at, field, filters = {} const params = [website_id]; const { pageviewQuery, sessionQuery, joinSession } = parseFilters( 'pageview', - null, filters, params, 'session_uuid', diff --git a/queries/analytics/stats/getWebsiteStats.js b/queries/analytics/stats/getWebsiteStats.js index 5d280563..1f9ba565 100644 --- a/queries/analytics/stats/getWebsiteStats.js +++ b/queries/analytics/stats/getWebsiteStats.js @@ -12,12 +12,7 @@ export async function getWebsiteStats(...args) { async function relationalQuery(website_id, start_at, end_at, filters = {}) { const { getDateQuery, getTimestampInterval, parseFilters, rawQuery } = prisma; const params = [website_id, start_at, end_at]; - const { pageviewQuery, sessionQuery, joinSession } = parseFilters( - 'pageview', - null, - filters, - params, - ); + const { pageviewQuery, sessionQuery, joinSession } = parseFilters('pageview', filters, params); return rawQuery( `select sum(t.c) as "pageviews", @@ -46,7 +41,6 @@ async function clickhouseQuery(website_id, start_at, end_at, filters = {}) { const params = [website_id]; const { pageviewQuery, sessionQuery, joinSession } = parseFilters( 'pageview', - null, filters, params, 'session_uuid',