Zum Hauptinhalt springen

Admin/Statistics/Index

Admin-Dashboard mit vier kumulativen Wachstums-Charts (Flux UI Chart-Komponenten) und globalem Zeitraum-Filter (Default: 1 Tag). Alle Chart-Daten werden mit 1h-TTL gecacht.

Route: /admin/statistics View: resources/views/livewire/admin/statistics/index.blade.php Location: app/Livewire/Admin/Statistics/Index.php Autorisierung: Gate::allows('admin') in mount()

Public Properties

Jeder Chart liefert seine Daten als Array für die Flux Chart-Komponente:

PraefixChartData-PropertyBeschreibung
platform$platformChartDataPlattform-Verteilung (YouTube, Instagram)
user$userChartDataWorkspaces & Watchers
status$statusChartDataUsers & Profil-Status
mail$mailChartDataMail-Zustellung

Jedes ChartData-Array enthält series (Datenreihen mit date_label im d.m.Y-Format) und wird direkt an die Flux <flux:chart> Blade-Komponente übergeben. Manuelle Tick- und Max-Berechnungen (buildDateTicks, buildNiceTicks, niceStep) wurden entfernt — Flux handhabt Achsen-Skalierung automatisch.

Ein globaler $range-Filter steuert alle 4 Charts gleichzeitig. Akzeptierte Werte: '1d' (Default), '7d', '30d', 'all'.

Charts

1. Plattform-Verteilung (calculatePlatformData)

Kumulatives Wachstum der Social Profiles pro Plattform (YouTube, Instagram).

Serien: youtube, instagram Datenquelle: SocialProfile::created_at aggregiert per DATE() Methode: Base-Count vor startDate + taegl. Inkremente

2. Workspaces & Watchers (calculateUserData)

Kumulatives Wachstum der Workspaces und Watchers.

Serien: workspaces, watchers Ausschluss: Admin-Workspace (AdminWorkspaceManager::ADMIN_WORKSPACE_ID) und Favoriten-Workspaces (FavoriteManager::FAVORITES_WORKSPACE_NAME) Datenquelle: Workspace::created_at, Watcher::created_at

3. Users & Profil-Status (calculateStatusData)

Kumulatives Wachstum von Users, Blocked Profiles, Sanitized Profiles, Profiles mit Kontaktdaten, und Profiles mit genehmigten Kontaktdaten.

Serien: users, blocked, sanitized, with_contacts, approved_contacts Datenquellen:

  • User::created_at
  • SocialProfile::blocked_at
  • SocialProfile::sanitized_at
  • SocialProfileLink::created_at (DISTINCT social_profile_id)
  • SocialProfileLink::approved_at (DISTINCT social_profile_id)

4. Mail-Zustellung (calculateMailData)

Taegliche E-Mail-Statistiken (gesendet vs. fehlgeschlagen).

Serien: sent, failed Datenquelle: NotificationStat (Channels: email, email_failed)

Actions

MethodBeschreibung
updatedRange()Alle Charts fuer neuen Zeitraum berechnen
refreshCharts()Cache aller Charts invalidieren und neu berechnen
toggleMailPause()Mailversand pausieren/fortsetzen (via MailFloodGuard)
sendTestMail()Synchrone Test-E-Mail an den eingeloggten Admin senden

Mail-System Box

Die Mail-System-Karte zeigt Echtzeit-Metriken des MailFloodGuard und bietet zwei Aktionen:

Mailversand testen

Sendet synchron (nicht via Queue) eine AdminTestMail an die E-Mail-Adresse des eingeloggten Admins. Die E-Mail enthaelt:

  • App-Informationen (Name, URL, Environment, PHP/Laravel-Version, Mail-Driver)
  • Mail-System-Status (Pausiert, Mails/Minute, Mails/Stunde)
  • User-Informationen (Name, E-Mail, ID, Zeitpunkt)

Synchroner Versand statt Queue, damit der Admin sofort Feedback bekommt ob der Mailversand funktioniert.

Mailable: App\Mail\AdminTestMail View: resources/views/emails/admin-test.blade.php

Mailversand pausieren/fortsetzen

Toggled den Pause-Status des MailFloodGuard. Pausierte E-Mails bleiben in der Queue und werden nach Freigabe automatisch verarbeitet.

Computed: mailStatus

#[Computed]
public function mailStatus(): array
// Returns: per_minute, per_hour, paused, threshold_minute, threshold_hour, sent_24h, failed_24h

Datenquellen: MailFloodGuard::getStatus() (Redis-Counters) + MailLog (24h Sent/Failed Counts).

Cache-Strategie

Jeder Chart wird unter einem Range-spezifischen Key gecacht:

admin:statistics:platforms:{range}  → 1h TTL
admin:statistics:users:{range} → 1h TTL
admin:statistics:status:{range} → 1h TTL
admin:statistics:mail:{range} → 1h TTL

refreshCharts() loescht alle 4 Cache-Keys fuer die aktuellen Ranges und berechnet die Charts neu.

Chart-Rendering

Charts nutzen native Flux UI <flux:chart> Komponenten. Achsen-Skalierung, Tooltips und Responsivität werden von Flux gehandhabt. Delta-Tooltips zeigen Δ-Werte mit signDisplay: 'always'.

Startdatum-Logik

RangeStartdatum
1dnow() - 1 Tag (Default)
7dnow() - 7 Tage
30dnow() - 30 Tage
allMIN(social_profiles.created_at) oder now() - 1 Jahr als Fallback