Sessions page.

This commit is contained in:
Mike Cao 2024-07-28 19:51:14 -07:00
parent cd0f185f77
commit ac60d08ee5
17 changed files with 414 additions and 16 deletions

View file

@ -1,9 +1,46 @@
import prisma from 'lib/prisma';
import clickhouse from 'lib/clickhouse';
import { runQuery, PRISMA, CLICKHOUSE } from 'lib/db';
export async function getSession(id: string) {
export async function getSession(...args: [websiteId: string, sessionId: string]) {
return runQuery({
[PRISMA]: () => relationalQuery(...args),
[CLICKHOUSE]: () => clickhouseQuery(...args),
});
}
async function relationalQuery(websiteId: string, sessionId: string) {
return prisma.client.session.findUnique({
where: {
id,
id: sessionId,
},
});
}
async function clickhouseQuery(websiteId: string, sessionId: string) {
const { rawQuery } = clickhouse;
return rawQuery(
`
select
session_id as id,
website_id as websiteId,
min(created_at) as firstAt,
max(created_at) as lastAt,
hostname,
browser,
os,
device,
screen,
language,
country,
subdivision1,
city
from website_event
where website_id = {websiteId:UUID}
and session_id = {sessionId:UUID}
group by session_id, website_id, hostname, browser, os, device, screen, language, country, subdivision1, city
`,
{ websiteId, sessionId },
).then(result => result?.[0]);
}

View file

@ -24,7 +24,7 @@ async function relationalQuery(websiteId: string, filters: QueryFilters, pagePar
}
async function clickhouseQuery(websiteId: string, filters: QueryFilters, pageParams?: PageParams) {
const { pagedQuery, parseFilters, getDateStringSQL } = clickhouse;
const { pagedQuery, parseFilters } = clickhouse;
const { params, dateQuery, filterQuery } = await parseFilters(websiteId, filters);
return pagedQuery(
@ -32,7 +32,7 @@ async function clickhouseQuery(websiteId: string, filters: QueryFilters, pagePar
select
session_id as id,
website_id as websiteId,
${getDateStringSQL('created_at', 'second', filters.timezone)} as createdAt,
min(created_at) as createdAt,
hostname,
browser,
os,
@ -41,13 +41,13 @@ async function clickhouseQuery(websiteId: string, filters: QueryFilters, pagePar
language,
country,
subdivision1,
subdivision2,
city
from website_event
where website_id = {websiteId:UUID}
${dateQuery}
${filterQuery}
order by created_at desc
group by session_id, website_id, hostname, browser, os, device, screen, language, country, subdivision1, city
order by createdAt desc
`,
params,
pageParams,