From 58005caad6dc788d51469ed3237b7baffaa5dff0 Mon Sep 17 00:00:00 2001
From: Heidi
Date: Sat, 16 May 2026 07:54:27 +0100
Subject: [PATCH] update viewers page
---
server.cjs | 27 ++++++++++++++++++++++-----
src/App.jsx | 10 ++++++----
2 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/server.cjs b/server.cjs
index a09c26e..58188db 100644
--- a/server.cjs
+++ b/server.cjs
@@ -664,16 +664,33 @@ function viewerDashboard() {
const daySince = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()
const thirtyDaysSince = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString()
const active = db.prepare(`
- select session_id, visitor_id, first_seen_at, last_seen_at, page_path, page_title,
- referrer, browser, os, device, screen, language, timezone,
- country, region, city, latitude, longitude
+ select
+ visitor_id,
+ page_path,
+ page_title,
+ min(first_seen_at) as first_seen_at,
+ max(last_seen_at) as last_seen_at,
+ max(referrer) as referrer,
+ max(browser) as browser,
+ max(os) as os,
+ max(device) as device,
+ max(screen) as screen,
+ max(language) as language,
+ max(timezone) as timezone,
+ max(country) as country,
+ max(region) as region,
+ max(city) as city,
+ avg(latitude) as latitude,
+ avg(longitude) as longitude,
+ count(*) as sessions
from active_viewers
where last_seen_at >= ?
+ group by visitor_id, page_path, page_title
order by last_seen_at desc
limit 100
`).all(activeSince).map((row) => ({
- session: row.session_id.slice(0, 8),
visitor: row.visitor_id.slice(0, 8),
+ sessions: row.sessions || 1,
first_seen_at: row.first_seen_at,
last_seen_at: row.last_seen_at,
page_path: row.page_path,
@@ -705,7 +722,7 @@ function viewerDashboard() {
last_seen_at: viewer.last_seen_at,
}
- existing.viewers += 1
+ existing.viewers += viewer.sessions || 1
existing.visitors.add(viewer.visitor)
if (viewer.country) existing.countries.add(viewer.country)
const clientKey = `${viewer.browser} on ${viewer.os}`
diff --git a/src/App.jsx b/src/App.jsx
index 9dc103f..4836ff3 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -2254,7 +2254,7 @@ function ViewersPage({ viewers }) {
- {formatNumber(active.length)} active sessions
+ {formatNumber(active.length)} active visitors
@@ -2295,9 +2295,9 @@ function ViewersPage({ viewers }) {
-
Active sessions
+
Active visitors
- Individual sessions currently contributing to the active page counts
+ Visitors currently contributing to the active page counts
{active.map((viewer) => (
@@ -2319,7 +2319,9 @@ function ViewersPage({ viewers }) {
{viewer.language || 'unknown language'}
Seen {relativeSeconds(viewer.last_seen_at)}
- #{viewer.session}
+
+ {formatNumber(viewer.sessions || 1)} {(viewer.sessions || 1) === 1 ? 'tab' : 'tabs'} ยท #{viewer.visitor}
+
))}
{!active.length ? (