mirror of
https://github.com/umami-software/umami.git
synced 2026-02-10 15:47:13 +01:00
URL filter functionality.
This commit is contained in:
parent
6bc371352c
commit
4fded49b03
27 changed files with 251 additions and 117 deletions
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue