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 ? (