From f9c7129a3e279ee6167fc6ebe19c7fd3fda4bc9e Mon Sep 17 00:00:00 2001 From: Francis Cao Date: Tue, 13 Aug 2024 08:45:52 -0700 Subject: [PATCH] implement visit duration --- .../sessions/[sessionId]/SessionStats.tsx | 6 +++ .../analytics/sessions/getWebsiteSession.ts | 38 ++++++++++++++----- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionStats.tsx b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionStats.tsx index 3265e592..ea606582 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionStats.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionStats.tsx @@ -1,6 +1,7 @@ import { useMessages } from 'components/hooks'; import MetricCard from 'components/metrics/MetricCard'; import MetricsBar from 'components/metrics/MetricsBar'; +import { formatShortTime } from 'lib/format'; export function SessionStats({ data }) { const { formatMessage, labels } = useMessages(); @@ -10,6 +11,11 @@ export function SessionStats({ data }) { + `${+n < 0 ? '-' : ''}${formatShortTime(Math.abs(~~n), ['m', 's'], ' ')}`} + /> ); } diff --git a/src/queries/analytics/sessions/getWebsiteSession.ts b/src/queries/analytics/sessions/getWebsiteSession.ts index ca527dba..22c18642 100644 --- a/src/queries/analytics/sessions/getWebsiteSession.ts +++ b/src/queries/analytics/sessions/getWebsiteSession.ts @@ -23,9 +23,8 @@ async function clickhouseQuery(websiteId: string, sessionId: string) { return rawQuery( ` - select - session_id as id, - website_id as websiteId, + select id, + websiteId, hostname, browser, os, @@ -37,13 +36,32 @@ async function clickhouseQuery(websiteId: string, sessionId: string) { city, min(min_time) as firstAt, max(max_time) as lastAt, - uniq(visit_id) as visits, - sumIf(views, event_type = 1) as views, - length(groupArrayArray(event_name)) as events - from website_event_stats_hourly - 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; + uniq(visit_id) visits, + sum(views) as views, + sum(events) as events, + sum(max_time-min_time) as totaltime + from (select + session_id as id, + visit_id, + website_id as websiteId, + hostname, + browser, + os, + device, + screen, + language, + country, + subdivision1, + city, + min(min_time) as min_time, + max(max_time) as max_time, + sum(views) as views, + length(groupArrayArray(event_name)) as events + from website_event_stats_hourly + where website_id = {websiteId:UUID} + and session_id = {sessionId:UUID} + group by session_id, visit_id, website_id, hostname, browser, os, device, screen, language, country, subdivision1, city) t + group by id, websiteId, hostname, browser, os, device, screen, language, country, subdivision1, city; `, { websiteId, sessionId }, ).then(result => result?.[0]);