# Analytics-Modul Dokumentation

## Übersicht

Das Analytics-Modul ist ein internes Tracking- und Analysesystem, das ohne externe Abhängigkeiten Benutzeraktivitäten, Systemereignisse und Leistungsdaten erfasst und analysiert.

## Kernkomponenten

### Analytics (Analytics.php)

Die Hauptklasse, die als zentraler Einstiegspunkt für das Tracking von Events dient.

**Hauptfunktionen:**
- `track()`: Zeichnet ein generisches Event auf
- `page()`: Spezifisch für Seitenaufrufe
- `user()`: Verfolgt Benutzeridentifikation
- `performance()`: Erfasst Leistungsmetriken
- `error()`: Protokolliert Fehler und Ausnahmen

### AnalyticsManager (AnalyticsManager.php)

Verwaltet die Verarbeitung und Speicherung von Events.

**Hauptfunktionen:**
- `track()`: Verarbeitet Events und wendet Middleware an
- `addMiddleware()`: Fügt Verarbeitungsfunktionen hinzu
- `flush()`: Schreibt gepufferte Events in den Speicher

### StorageInterface und FileStorage

Das Interface definiert die Speichermethoden, FileStorage implementiert die Speicherung in Dateien.

**Hauptoperationen:**
- `store()`: Speichert Events
- `retrieve()`: Ruft Events mit Filtern ab
- `clear()`: Löscht alle gespeicherten Daten

### AnalyticsInitializer (AnalyticsInitializer.php)

Konfiguriert und initialisiert den Analytics-Service beim Anwendungsstart.

**Konfigurationsoptionen:**
- Aktivierung/Deaktivierung
- Auto-Flush und Batch-Größe
- Storage-Typ und Pfad

### AnalyticsMiddleware (AnalyticsMiddleware.php)

HTTP-Middleware zum automatischen Tracking von Requests und Responses.

### AnalyticsDashboard (AnalyticsDashboard.php)

Stellt Methoden für Datenanalyse und -aggregation bereit:
- `getEventStats()`: Ereignisstatistiken
- `getTopPages()`: Meistbesuchte Seiten
- `getUserStats()`: Benutzerstatistiken
- `getErrorStats()`: Fehlerstatistiken
- `getPerformanceStats()`: Leistungsmetriken

### Events

Vordefinierte Event-Typen:
- `AnalyticsEvent`: Basis-Event-Klasse
- `PageViewEvent`: Speziell für Seitenaufrufe

### Controllers

`AdminAnalyticsController`: Stellt das Admin-Dashboard bereit mit:
- Übersichtsseite
- Seitenstatistiken
- Fehlerstatistiken
- Leistungsstatistiken

### Console

`AnalyticsClearCommand`: Konsolenbefehl zum Löschen von Analytics-Daten.

## Konfiguration

Die Konfiguration erfolgt in `src/Config/analytics.php` mit folgenden Optionen:

```php
return [
    'enabled' => true,           // Aktiviert/deaktiviert das Tracking
    'auto_flush' => true,         // Automatisches Speichern nach Batch-Größe
    'batch_size' => 50,           // Anzahl Events pro Batch
    'storage' => 'file',          // Storage-Backend
    'storage_path' => '...',      // Speicherpfad
    'anonymize_ip' => true,       // IP-Anonymisierung
    'track_events' => [...]       // Zu trackende Events
];
```

## Verwendung

### Basis-Tracking

```php
// Event tracken
$analytics->track('button_click', ['button' => 'signup']);

// Seitenaufruf tracken
$analytics->page('/dashboard', ['section' => 'analytics']);

// Benutzer identifizieren
$analytics->user('user123', ['plan' => 'premium']);
```

### Middleware einrichten

```php
$this->addMiddleware(App\Framework\Analytics\AnalyticsMiddleware::class);
```

### Eigene Middleware hinzufügen

```php
$analyticsManager->addMiddleware(function(array $event) {
    // Daten verarbeiten oder filtern
    return $event;
});
```

## Datenschutz

Das System bietet integrierte Funktionen zur Anonymisierung personenbezogener Daten:
- IP-Adressen-Anonymisierung (letztes Oktett wird entfernt)
- Konfigurierbare Filterung sensibler Daten durch Middleware

## Erweiterbarkeit

### Eigene Storage-Provider

Implementieren Sie das `StorageInterface` für benutzerdefinierte Speicherlösungen:

```php
class CustomStorage implements StorageInterface
{
    public function store(array $events): void { /* ... */ }
    public function retrieve(array $filters = []): array { /* ... */ }
    public function clear(): void { /* ... */ }
}
```

### Event-Typen erweitern

Erstellen Sie benutzerdefinierte Event-Klassen, die von `AnalyticsEvent` erben:

```php
class CustomEvent extends AnalyticsEvent
{
    public function __construct(string $customData, array $additionalProps = [])
    {
        parent::__construct('custom_event', 
            array_merge(['custom_data' => $customData], $additionalProps));
    }
}
```
