URL filter functionality.

This commit is contained in:
Mike Cao 2020-09-25 22:31:18 -07:00
parent 6bc371352c
commit 4fded49b03
27 changed files with 251 additions and 117 deletions

View file

@ -21,7 +21,7 @@ export async function runQuery(query) {
});
}
export async function rawQuery(query, ...params) {
export async function rawQuery(query, params) {
const db = getDatabase();
if (db !== POSTGRESQL && db !== MYSQL) {
@ -285,7 +285,15 @@ export async function createAccount(data) {
);
}
export function getMetrics(website_id, start_at, end_at) {
export function getMetrics(website_id, start_at, end_at, url) {
const params = [website_id, start_at, end_at];
let urlFilter = '';
if (url) {
urlFilter = `and url=$${params.length + 1}`;
params.push(decodeURIComponent(url));
}
return rawQuery(
`
select sum(t.c) as "pageviews",
@ -300,12 +308,11 @@ export function getMetrics(website_id, start_at, end_at) {
from pageview
where website_id=$1
and created_at between $2 and $3
${urlFilter}
group by 1, 2
) t
`,
website_id,
start_at,
end_at,
params,
);
}
@ -316,7 +323,16 @@ export function getPageviews(
timezone = 'utc',
unit = 'day',
count = '*',
url,
) {
const params = [website_id, start_at, end_at];
let urlFilter = '';
if (url) {
urlFilter = `and url=$${params.length + 1}`;
params.push(decodeURIComponent(url));
}
return rawQuery(
`
select ${getDateQuery('created_at', unit, timezone)} t,
@ -324,16 +340,23 @@ export function getPageviews(
from pageview
where website_id=$1
and created_at between $2 and $3
${urlFilter}
group by 1
order by 1
`,
website_id,
start_at,
end_at,
params,
);
}
export function getSessionMetrics(website_id, start_at, end_at, field) {
export function getSessionMetrics(website_id, start_at, end_at, field, url) {
const params = [website_id, start_at, end_at];
let urlFilter = '';
if (url) {
urlFilter = `and url=$${params.length + 1}`;
params.push(decodeURIComponent(url));
}
return rawQuery(
`
select ${field} x, count(*) y
@ -343,18 +366,29 @@ export function getSessionMetrics(website_id, start_at, end_at, field) {
from pageview
where website_id=$1
and created_at between $2 and $3
${urlFilter}
)
group by 1
order by 2 desc
`,
website_id,
start_at,
end_at,
params,
);
}
export function getPageviewMetrics(website_id, start_at, end_at, field, table, domain) {
const filter = domain ? `and ${field} not like '%${domain}%'` : '';
export function getPageviewMetrics(website_id, start_at, end_at, field, table, domain, url) {
const params = [website_id, start_at, end_at];
let domainFilter = '';
let urlFilter = '';
if (domain) {
domainFilter = `and referrer not like $${params.length + 1}`;
params.push(`%${domain}%`);
}
if (url) {
urlFilter = `and url=$${params.length + 1}`;
params.push(decodeURIComponent(url));
}
return rawQuery(
`
@ -362,18 +396,18 @@ export function getPageviewMetrics(website_id, start_at, end_at, field, table, d
from ${table}
where website_id=$1
and created_at between $2 and $3
${filter}
${domainFilter}
${urlFilter}
group by 1
order by 2 desc
`,
website_id,
start_at,
end_at,
params,
);
}
export function getActiveVisitors(website_id) {
const date = subMinutes(new Date(), 5);
const params = [website_id, date];
return rawQuery(
`
@ -382,12 +416,19 @@ export function getActiveVisitors(website_id) {
where website_id=$1
and created_at >= $2
`,
website_id,
date,
params,
);
}
export function getEvents(website_id, start_at, end_at, timezone = 'utc', unit = 'day') {
export function getEvents(website_id, start_at, end_at, timezone = 'utc', unit = 'day', url) {
const params = [website_id, start_at, end_at];
let urlFilter = '';
if (url) {
urlFilter = `and url=$${params.length + 1}`;
params.push(decodeURIComponent(url));
}
return rawQuery(
`
select
@ -397,11 +438,10 @@ export function getEvents(website_id, start_at, end_at, timezone = 'utc', unit =
from event
where website_id=$1
and created_at between $2 and $3
${urlFilter}
group by 1, 2
order by 2
`,
website_id,
start_at,
end_at,
params,
);
}