diff --git a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionStats.tsx b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionStats.tsx index a25f7af3..6953405e 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionStats.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionStats.tsx @@ -1,15 +1,31 @@ -import MetricCard from 'components/metrics/MetricCard'; 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(); + const duration = (new Date(data?.lastAt).getTime() - new Date(data?.firstAt).getTime()) / 1000; + let dateFormat; + + if (duration > 86400) { + dateFormat = ['d', 'm']; + } else if (duration > 3600) { + dateFormat = ['h', 'm']; + } else { + dateFormat = ['m', 's']; + } return ( + `${+n < 0 ? '-' : ''}${formatShortTime(Math.abs(~~n), dateFormat, ' ')}`} + /> ); } diff --git a/src/components/messages.ts b/src/components/messages.ts index f711a4f6..0b32d0d8 100644 --- a/src/components/messages.ts +++ b/src/components/messages.ts @@ -141,6 +141,7 @@ export const labels = defineMessages({ bounceRate: { id: 'label.bounce-rate', defaultMessage: 'Bounce rate' }, viewsPerVisit: { id: 'label.views-per-visit', defaultMessage: 'Views per visit' }, visitDuration: { id: 'label.visit-duration', defaultMessage: 'Visit duration' }, + sessionDuration: { id: 'label.session-duration', defaultMessage: 'Session duration' }, desktop: { id: 'label.desktop', defaultMessage: 'Desktop' }, laptop: { id: 'label.laptop', defaultMessage: 'Laptop' }, tablet: { id: 'label.tablet', defaultMessage: 'Tablet' }, diff --git a/src/lib/load.ts b/src/lib/load.ts index 970247dd..8cddeaa9 100644 --- a/src/lib/load.ts +++ b/src/lib/load.ts @@ -18,17 +18,17 @@ export async function fetchWebsite(websiteId: string): Promise { return website; } -export async function fetchSession(sessionId: string): Promise { +export async function fetchSession(websiteId: string, sessionId: string): Promise { let session = null; if (redis.enabled) { session = await redis.client.fetch( `session:${sessionId}`, - () => getWebsiteSession(sessionId), + () => getWebsiteSession(websiteId, sessionId), 86400, ); } else { - session = await getWebsiteSession(sessionId); + session = await getWebsiteSession(websiteId, sessionId); } if (!session) { diff --git a/src/lib/session.ts b/src/lib/session.ts index cf30aa71..ca145c04 100644 --- a/src/lib/session.ts +++ b/src/lib/session.ts @@ -62,7 +62,7 @@ export async function getSession(req: NextApiRequestCollect): Promise