mirror of
https://github.com/umami-software/umami.git
synced 2025-12-08 05:12:36 +01:00
Allow filtering on session fields.
This commit is contained in:
parent
edd1645bab
commit
fb2dc9f5ab
19 changed files with 275 additions and 211 deletions
|
|
@ -37,7 +37,7 @@ export default function App({ Component, pageProps }) {
|
|||
<link rel="mask-icon" href={`${basePath}/safari-pinned-tab.svg`} color="#5bbad5" />
|
||||
<link
|
||||
rel="preload"
|
||||
href={`https://i.umami.is/umami.png?v=${version}`}
|
||||
href={`https://i.umami.is/icon.png?v=${version}`}
|
||||
as="image"
|
||||
type="image/png"
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -14,8 +14,9 @@ export default async (req, res) => {
|
|||
return ok(res);
|
||||
}
|
||||
|
||||
if (process.env.IGNORE_IP) {
|
||||
const ips = process.env.IGNORE_IP.split(',').map(n => n.trim());
|
||||
const ignoreIps = process.env.IGNORE_IP;
|
||||
if (ignoreIps) {
|
||||
const ips = ignoreIps.split(',').map(n => n.trim());
|
||||
const ip = getIpAddress(req);
|
||||
const blocked = ips.find(i => {
|
||||
if (i === ip) return true;
|
||||
|
|
|
|||
|
|
@ -33,22 +33,31 @@ export default async (req, res) => {
|
|||
return unauthorized(res);
|
||||
}
|
||||
|
||||
const { id, type, start_at, end_at, url, referrer } = req.query;
|
||||
const { id, type, start_at, end_at, url, referrer, os, browser, device, country } = req.query;
|
||||
|
||||
const websiteId = +id;
|
||||
const startDate = new Date(+start_at);
|
||||
const endDate = new Date(+end_at);
|
||||
|
||||
if (sessionColumns.includes(type)) {
|
||||
let data = await getSessionMetrics(websiteId, startDate, endDate, type, { url, referrer });
|
||||
let data = await getSessionMetrics(websiteId, startDate, endDate, type, {
|
||||
os,
|
||||
browser,
|
||||
device,
|
||||
country,
|
||||
});
|
||||
|
||||
if (type === 'language') {
|
||||
let combined = {};
|
||||
|
||||
for (let { x, y } of data) {
|
||||
x = String(x).toLowerCase().split('-')[0];
|
||||
if (!combined[x]) combined[x] = { x, y };
|
||||
else combined[x].y += y;
|
||||
|
||||
if (!combined[x]) {
|
||||
combined[x] = { x, y };
|
||||
} else {
|
||||
combined[x].y += y;
|
||||
}
|
||||
}
|
||||
|
||||
data = Object.values(combined);
|
||||
|
|
@ -77,8 +86,12 @@ export default async (req, res) => {
|
|||
getTable(type),
|
||||
{
|
||||
domain,
|
||||
url: type !== 'url' && url,
|
||||
referrer,
|
||||
url: type !== 'url' ? url : undefined,
|
||||
referrer: type !== 'referrer' ? referrer : undefined,
|
||||
os: type !== 'os' ? os : undefined,
|
||||
browser: type !== 'browser' ? browser : undefined,
|
||||
device: type !== 'device' ? device : undefined,
|
||||
country: type !== 'country' ? country : undefined,
|
||||
},
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,8 @@ export default async (req, res) => {
|
|||
return unauthorized(res);
|
||||
}
|
||||
|
||||
const { id, start_at, end_at, unit, tz, url, referrer } = req.query;
|
||||
const { id, start_at, end_at, unit, tz, url, referrer, os, browser, device, country } =
|
||||
req.query;
|
||||
|
||||
const websiteId = +id;
|
||||
const startDate = new Date(+start_at);
|
||||
|
|
@ -25,10 +26,20 @@ export default async (req, res) => {
|
|||
}
|
||||
|
||||
const [pageviews, sessions] = await Promise.all([
|
||||
getPageviewStats(websiteId, startDate, endDate, tz, unit, '*', { url, referrer }),
|
||||
getPageviewStats(websiteId, startDate, endDate, tz, unit, 'distinct session_id', {
|
||||
getPageviewStats(websiteId, startDate, endDate, tz, unit, '*', {
|
||||
url,
|
||||
referrer,
|
||||
os,
|
||||
browser,
|
||||
device,
|
||||
country,
|
||||
}),
|
||||
getPageviewStats(websiteId, startDate, endDate, tz, unit, 'distinct pageview.session_id', {
|
||||
url,
|
||||
os,
|
||||
browser,
|
||||
device,
|
||||
country,
|
||||
}),
|
||||
]);
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ export default async (req, res) => {
|
|||
return unauthorized(res);
|
||||
}
|
||||
|
||||
const { id, start_at, end_at, url, referrer } = req.query;
|
||||
const { id, start_at, end_at, url, referrer, os, browser, device, country } = req.query;
|
||||
|
||||
const websiteId = +id;
|
||||
const startDate = new Date(+start_at);
|
||||
|
|
@ -21,10 +21,21 @@ export default async (req, res) => {
|
|||
const prevStartDate = new Date(+start_at - distance);
|
||||
const prevEndDate = new Date(+end_at - distance);
|
||||
|
||||
const metrics = await getWebsiteStats(websiteId, startDate, endDate, { url, referrer });
|
||||
const metrics = await getWebsiteStats(websiteId, startDate, endDate, {
|
||||
url,
|
||||
referrer,
|
||||
os,
|
||||
browser,
|
||||
device,
|
||||
country,
|
||||
});
|
||||
const prevPeriod = await getWebsiteStats(websiteId, prevStartDate, prevEndDate, {
|
||||
url,
|
||||
referrer,
|
||||
os,
|
||||
browser,
|
||||
device,
|
||||
country,
|
||||
});
|
||||
|
||||
const stats = Object.keys(metrics[0]).reduce((obj, key) => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue