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