Update realtime chart.

This commit is contained in:
Mike Cao 2020-10-08 23:26:05 -07:00
parent e64a555652
commit fdc92d087b
32 changed files with 240 additions and 58 deletions

View file

@ -1,19 +1,48 @@
import { subMinutes } from 'date-fns';
import { useAuth } from 'lib/middleware';
import { ok, unauthorized, methodNotAllowed } from 'lib/response';
import { ok, methodNotAllowed, badRequest } from 'lib/response';
import { getEvents, getPageviews, getSessions, getUserWebsites } from 'lib/queries';
import { createToken, parseToken } from 'lib/crypto';
export default async (req, res) => {
await useAuth(req, res);
const { is_admin } = req.auth;
if (!is_admin) {
return unauthorized(res);
async function getData(websites, time) {
return Promise.all([
getPageviews(websites, time),
getSessions(websites, time),
getEvents(websites, time),
]);
}
if (req.method === 'GET') {
const [pageviews, sessions, events] = await Promise.all([[], [], []]);
const { type } = req.query;
const { user_id } = req.auth;
return ok(res, { pageviews, sessions, events });
if (type === 'init') {
const websites = await getUserWebsites(user_id);
const ids = websites.map(({ website_id }) => website_id);
const [pageviews, sessions, events] = await getData(ids, subMinutes(new Date(), 30));
const token = await createToken({ websites: ids });
return ok(res, { websites, token, data: { pageviews, sessions, events } });
}
if (type === 'update') {
const token = req.headers['x-umami-token'];
if (!token) {
return badRequest(res);
}
const { websites } = await parseToken(token);
const [pageviews, sessions, events] = await getData(websites, new Date());
return ok(res, { pageviews, sessions, events });
}
return badRequest(res);
}
return methodNotAllowed(res);

View file

@ -1,5 +1,5 @@
import moment from 'moment-timezone';
import { getEvents } from 'lib/queries';
import { getEventMetrics } from 'lib/queries';
import { ok, badRequest, methodNotAllowed, unauthorized } from 'lib/response';
import { allowQuery } from 'lib/auth';
@ -21,7 +21,7 @@ export default async (req, res) => {
const startDate = new Date(+start_at);
const endDate = new Date(+end_at);
const events = await getEvents(websiteId, startDate, endDate, tz, unit, { url });
const events = await getEventMetrics(websiteId, startDate, endDate, tz, unit, { url });
return ok(res, events);
}

View file

@ -21,12 +21,12 @@ export default async (req, res) => {
return badRequest(res);
}
const [pageviews, uniques] = await Promise.all([
const [pageviews, sessions] = await Promise.all([
getPageviewStats(websiteId, startDate, endDate, tz, unit, '*', url),
getPageviewStats(websiteId, startDate, endDate, tz, unit, 'distinct session_id', url),
]);
return ok(res, { pageviews, uniques });
return ok(res, { pageviews, sessions });
}
return methodNotAllowed(res);