mirror of
https://github.com/kremalicious/umami.git
synced 2024-11-14 17:25:02 +01:00
Update device filtering.
This commit is contained in:
parent
e17c9da3d5
commit
9d09d89aef
@ -105,7 +105,7 @@ export default function WebsiteDetails({ websiteId, defaultDateRange = '7day' })
|
|||||||
<div className={sessionClasses}>
|
<div className={sessionClasses}>
|
||||||
<RankingsChart
|
<RankingsChart
|
||||||
title="Devices"
|
title="Devices"
|
||||||
type="screen"
|
type="device"
|
||||||
heading="Visitors"
|
heading="Visitors"
|
||||||
websiteId={websiteId}
|
websiteId={websiteId}
|
||||||
startDate={startDate}
|
startDate={startDate}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
export const AUTH_COOKIE_NAME = 'umami.auth';
|
export const AUTH_COOKIE_NAME = 'umami.auth';
|
||||||
|
|
||||||
export const DESKTOP_SCREEN_WIDTH = 1920;
|
export const DESKTOP_SCREEN_WIDTH = 1920;
|
||||||
|
export const LAPTOP_SCREEN_WIDTH = 1024;
|
||||||
export const MOBILE_SCREEN_WIDTH = 479;
|
export const MOBILE_SCREEN_WIDTH = 479;
|
||||||
|
|
||||||
export const OPERATING_SYSTEMS = [
|
export const OPERATING_SYSTEMS = [
|
||||||
@ -56,6 +57,13 @@ export const DESKTOP_OS = [
|
|||||||
|
|
||||||
export const MOBILE_OS = ['iOS', 'Android OS', 'BlackBerry OS', 'Windows Mobile', 'Amazon OS'];
|
export const MOBILE_OS = ['iOS', 'Android OS', 'BlackBerry OS', 'Windows Mobile', 'Amazon OS'];
|
||||||
|
|
||||||
|
export const DEVICES = {
|
||||||
|
desktop: 'Desktop',
|
||||||
|
laptop: 'Laptop',
|
||||||
|
tablet: 'Tablet',
|
||||||
|
mobile: 'Mobile',
|
||||||
|
};
|
||||||
|
|
||||||
export const BROWSERS = {
|
export const BROWSERS = {
|
||||||
aol: 'AOL',
|
aol: 'AOL',
|
||||||
edge: 'Edge',
|
edge: 'Edge',
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { BROWSERS, ISO_COUNTRIES } from './constants';
|
import { BROWSERS, ISO_COUNTRIES, DEVICES } from './constants';
|
||||||
|
|
||||||
export const browserFilter = data =>
|
export const browserFilter = data =>
|
||||||
data.map(({ x, ...props }) => ({ x: BROWSERS[x] || x, ...props }));
|
data.map(({ x, ...props }) => ({ x: BROWSERS[x] || x, ...props }));
|
||||||
@ -8,28 +8,8 @@ export const urlFilter = data => data.filter(({ x }) => x !== '' && !x.startsWit
|
|||||||
export const refFilter = data =>
|
export const refFilter = data =>
|
||||||
data.filter(({ x }) => x !== '' && !x.startsWith('/') && !x.startsWith('#'));
|
data.filter(({ x }) => x !== '' && !x.startsWith('/') && !x.startsWith('#'));
|
||||||
|
|
||||||
export const deviceFilter = data => {
|
export const deviceFilter = data =>
|
||||||
if (data.length === 0) return [];
|
data.map(({ x, ...props }) => ({ x: DEVICES[x] || x, ...props }));
|
||||||
|
|
||||||
const devices = data.reduce(
|
|
||||||
(obj, { x, y }) => {
|
|
||||||
const [width] = x.split('x');
|
|
||||||
if (width >= 1920) {
|
|
||||||
obj.Desktop += +y;
|
|
||||||
} else if (width >= 1024) {
|
|
||||||
obj.Laptop += +y;
|
|
||||||
} else if (width >= 767) {
|
|
||||||
obj.Tablet += +y;
|
|
||||||
} else {
|
|
||||||
obj.Mobile += +y;
|
|
||||||
}
|
|
||||||
return obj;
|
|
||||||
},
|
|
||||||
{ Desktop: 0, Laptop: 0, Tablet: 0, Mobile: 0 },
|
|
||||||
);
|
|
||||||
|
|
||||||
return percentFilter(Object.keys(devices).map(key => ({ x: key, y: devices[key] })));
|
|
||||||
};
|
|
||||||
|
|
||||||
export const countryFilter = data =>
|
export const countryFilter = data =>
|
||||||
data.map(({ x, ...props }) => ({ x: ISO_COUNTRIES[x] || x, ...props }));
|
data.map(({ x, ...props }) => ({ x: ISO_COUNTRIES[x] || x, ...props }));
|
||||||
|
@ -3,7 +3,13 @@ import { browserName, detectOS } from 'detect-browser';
|
|||||||
import isLocalhost from 'is-localhost-ip';
|
import isLocalhost from 'is-localhost-ip';
|
||||||
import maxmind from 'maxmind';
|
import maxmind from 'maxmind';
|
||||||
import geolite2 from 'geolite2-redist';
|
import geolite2 from 'geolite2-redist';
|
||||||
import { DESKTOP_OS, MOBILE_OS, DESKTOP_SCREEN_WIDTH, MOBILE_SCREEN_WIDTH } from './constants';
|
import {
|
||||||
|
DESKTOP_OS,
|
||||||
|
MOBILE_OS,
|
||||||
|
DESKTOP_SCREEN_WIDTH,
|
||||||
|
LAPTOP_SCREEN_WIDTH,
|
||||||
|
MOBILE_SCREEN_WIDTH,
|
||||||
|
} from './constants';
|
||||||
|
|
||||||
export function getIpAddress(req) {
|
export function getIpAddress(req) {
|
||||||
// Cloudflare
|
// Cloudflare
|
||||||
@ -15,6 +21,8 @@ export function getIpAddress(req) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getDevice(screen, browser, os) {
|
export function getDevice(screen, browser, os) {
|
||||||
|
if (!screen) return;
|
||||||
|
|
||||||
const [width] = screen.split('x');
|
const [width] = screen.split('x');
|
||||||
|
|
||||||
if (DESKTOP_OS.includes(os)) {
|
if (DESKTOP_OS.includes(os)) {
|
||||||
@ -28,6 +36,16 @@ export function getDevice(screen, browser, os) {
|
|||||||
}
|
}
|
||||||
return 'mobile';
|
return 'mobile';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (width >= DESKTOP_SCREEN_WIDTH) {
|
||||||
|
return 'desktop';
|
||||||
|
} else if (width >= LAPTOP_SCREEN_WIDTH) {
|
||||||
|
return 'laptop';
|
||||||
|
} else if (width >= MOBILE_SCREEN_WIDTH) {
|
||||||
|
return 'tablet';
|
||||||
|
} else {
|
||||||
|
return 'mobile';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getCountry(req, ip) {
|
export async function getCountry(req, ip) {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { getRankings } from 'lib/db';
|
import { getRankings } from 'lib/db';
|
||||||
import { useAuth } from 'lib/middleware';
|
import { useAuth } from 'lib/middleware';
|
||||||
|
|
||||||
const sessionColumns = ['browser', 'os', 'screen', 'country'];
|
const sessionColumns = ['browser', 'os', 'device', 'country'];
|
||||||
const pageviewColumns = ['url', 'referrer'];
|
const pageviewColumns = ['url', 'referrer'];
|
||||||
|
|
||||||
export default async (req, res) => {
|
export default async (req, res) => {
|
||||||
|
Loading…
Reference in New Issue
Block a user