Website-Statistik: neuer GoAccess-basierter Admin-Tab #31

Closed
DasAoD wants to merge 0 commits from feature/admin-analytics-tab into main
Owner

Was

Neuer "Statistik"-Tab im Admin-Bereich, der eine automatisch generierte GoAccess-Auswertung der nginx-Access-Logs zeigt (Seiten, Browser, Referrer, Herkunftsland via DB-IP-Lite-GeoIP).

Wie

  • api/admin_stats.php: liefert den statischen GoAccess-HTML-Report aus, admin-gated (requireAdminAPI()), gleiches Muster wie der DB-Backup-Download in admin_system.php
  • admin.php / admin.js: neuer Tab "Statistik", iframe wird erst bei erstem Öffnen des Tabs geladen (lazy)
  • Report selbst entsteht server-seitig per Cronjob (GoAccess wertet sfguilds_access.log aus) – auf dns1 bereits eingerichtet und getestet, dokumentiert in install/ANALYTICS_INSTALL.md
  • .gitignore: data/analytics/ und data/geoip/ als Runtime-Ordner ergänzt (Muster wie data/logs/)

Sicherheit / Datenschutz

  • Kein neuer offener Port, kein zweiter Login – Report-Datei liegt außerhalb von public/, nur über den admin-geschützten Endpoint erreichbar
  • Zugriffsschutz bewusst identisch zum Rest von admin.php (Login + Admin-Rolle), keine zusätzliche IP-Sperre
  • Enthält Besucher-IPs (auch von nicht eingeloggten Besuchern) – Details dazu in install/ANALYTICS_INSTALL.md

Getestet

  • Server-Setup auf dns1 manuell durchlaufen: goaccess installiert, GeoIP-DB geladen, Report-Script erzeugt gültiges HTML, Cronjobs unter www-data aktiv
  • App-Code lokal noch nicht gegen den Live-Report verifiziert (erfolgt nach Merge + Deploy)

🤖 Generated with Claude Code

## Was Neuer "Statistik"-Tab im Admin-Bereich, der eine automatisch generierte GoAccess-Auswertung der nginx-Access-Logs zeigt (Seiten, Browser, Referrer, Herkunftsland via DB-IP-Lite-GeoIP). ## Wie - `api/admin_stats.php`: liefert den statischen GoAccess-HTML-Report aus, admin-gated (`requireAdminAPI()`), gleiches Muster wie der DB-Backup-Download in `admin_system.php` - `admin.php` / `admin.js`: neuer Tab "Statistik", iframe wird erst bei erstem Öffnen des Tabs geladen (lazy) - Report selbst entsteht server-seitig per Cronjob (GoAccess wertet `sfguilds_access.log` aus) – **auf dns1 bereits eingerichtet und getestet**, dokumentiert in `install/ANALYTICS_INSTALL.md` - `.gitignore`: `data/analytics/` und `data/geoip/` als Runtime-Ordner ergänzt (Muster wie `data/logs/`) ## Sicherheit / Datenschutz - Kein neuer offener Port, kein zweiter Login – Report-Datei liegt außerhalb von `public/`, nur über den admin-geschützten Endpoint erreichbar - Zugriffsschutz bewusst identisch zum Rest von `admin.php` (Login + Admin-Rolle), keine zusätzliche IP-Sperre - Enthält Besucher-IPs (auch von nicht eingeloggten Besuchern) – Details dazu in `install/ANALYTICS_INSTALL.md` ## Getestet - Server-Setup auf dns1 manuell durchlaufen: goaccess installiert, GeoIP-DB geladen, Report-Script erzeugt gültiges HTML, Cronjobs unter `www-data` aktiv - App-Code lokal noch nicht gegen den Live-Report verifiziert (erfolgt nach Merge + Deploy) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
- new api/admin_stats.php serves the static GoAccess HTML report
  (admin-gated via requireAdminAPI(), same pattern as the DB backup
  download in admin_system.php)
- new 'Statistik' tab in admin.php embeds the report via iframe,
  lazy-loaded on first tab activation (admin.js)
- report itself is generated server-side by a cron job analyzing the
  existing nginx access log with GoAccess + DB-IP Lite GeoIP data
  (setup documented in install/ANALYTICS_INSTALL.md, already applied
  to dns1: goaccess installed, scripts + www-data cronjobs in place)
- .gitignore: keep data/analytics/ and data/geoip/ dirs via .gitkeep,
  ignore their generated/downloaded contents
- bump JS asset version in template.php so admin.js cache-busts

Co-authored-by: Claude <claude@anthropic.com>
DasAoD closed this pull request 2026-08-20 20:43:30 +02:00

Pull request closed

Sign in to join this conversation.
No description provided.