Changeset 1794fac in Klonkt for src/services/StatsService.js
- Timestamp:
- 06/19/2026 04:07:24 AM (3 months ago)
- Branches:
- main
- Children:
- 6be57b4
- Parents:
- 37edecd
- File:
-
- 1 edited
-
src/services/StatsService.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/StatsService.js
r37edecd r1794fac 58 58 bumpPost: db.prepare('UPDATE posts SET view_count = COALESCE(view_count, 0) + 1 WHERE id = ?'), 59 59 bumpTrack: db.prepare('UPDATE audio_tracks SET play_count = COALESCE(play_count, 0) + 1 WHERE id = ?'), 60 bumpReferrer: db.prepare(` 61 INSERT INTO stat_referrer (site_id, host, count) VALUES (?, ?, 1) 62 ON CONFLICT(site_id, host) DO UPDATE SET count = count + 1 63 `), 60 64 }; 61 65 return _s; 66 } 67 68 // Externe referrer-host uit de Referer-header (pro-stats #5). Lege/eigen-site/ 69 // ongeldige referrers worden overgeslagen → alleen echte externe bronnen tellen. 70 function recordReferrer(siteId, req) { 71 try { 72 const ref = req && req.headers && (req.headers.referer || req.headers.referrer); 73 if (!ref) return; 74 const host = new URL(ref).host.replace(/^www\./, '').toLowerCase(); 75 if (!host) return; 76 const own = ((req.headers && req.headers.host) || '').replace(/^www\./, '').toLowerCase(); 77 if (host === own) return; // interne navigatie telt niet als bron 78 stmts().bumpReferrer.run(siteId, host.slice(0, 120)); 79 } catch { /* geen geldige referrer-URL → overslaan */ } 62 80 } 63 81 … … 68 86 stmts().bumpDaily.run(siteId, d); 69 87 stmts().addVisitor.run(siteId, d, visitorHash(req)); 88 recordReferrer(siteId, req); 70 89 } catch { /* statistieken mogen nooit een request breken */ } 71 90 } … … 86 105 // Instance-brede statistieken (solo = de site, hub = alle sites samen). 87 106 export function getStats(days = 14) { 107 days = [7, 14, 30, 90].includes(Number(days)) ? Number(days) : 14; 88 108 const pvMap = Object.fromEntries( 89 109 db.prepare('SELECT day, SUM(pageviews) AS pv FROM stat_daily GROUP BY day').all().map((r) => [r.day, r.pv]), … … 113 133 ORDER BY play_count DESC LIMIT 5 114 134 `).all(); 115 return { totals, series, topPosts, topTracks, days }; 135 // Top externe bronnen (pro #5) — instance-breed geaggregeerd per host. 136 let referrers = []; 137 try { 138 referrers = db.prepare( 139 'SELECT host, SUM(count) AS n FROM stat_referrer GROUP BY host ORDER BY n DESC LIMIT 10' 140 ).all(); 141 } catch { referrers = []; } 142 // All-time totalen (cookieloze unieke bezoekers = som van dag-uniques). 143 const allTime = { 144 pageviews: db.prepare('SELECT COALESCE(SUM(pageviews),0) AS n FROM stat_daily').get().n, 145 visitorDays: db.prepare('SELECT COUNT(*) AS n FROM stat_visitor_day').get().n, 146 }; 147 return { totals, series, topPosts, topTracks, referrers, allTime, days }; 116 148 }
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)