Files
michaelschiemer/src/Framework/Analytics

Analytics-System basierend auf Performance-Framework

Ein modernes, leistungsstarkes Analytics-System, das nahtlos in das Performance-Framework integriert ist und effiziente Datensammlung und -analyse ermöglicht.

🚀 Warum neu implementiert?

Das alte Analytics-System wurde komplett entfernt und neu implementiert mit folgenden Verbesserungen:

Performance-Integration: Nutzt das bewährte Performance-Framework
Effizienz: Minimaler Overhead durch optimierte Datenstrukturen
Modularität: Event-basierte Architektur ohne Vererbung
Skalierbarkeit: Sampling und Aggregation für große Datenmengen
Flexibilität: Einfache Erweiterung für neue Analytics-Arten

🏗️ Architektur

Kernkomponenten

┌─────────────────────┐    ┌──────────────────────┐    ┌─────────────────────┐
│   HTTP Request      │    │   AnalyticsCollector │    │  PerformanceSystem  │
│                     │───▶│                      │───▶│                     │
│ AnalyticsMiddleware │    │  - trackPageView()   │    │  - Metriken         │
└─────────────────────┘    │  - trackAction()     │    │  - Timing           │
                           │  - trackError()      │    │  - Aggregation      │
                           └──────────────────────┘    └─────────────────────┘
                                      │
                                      ▼
                           ┌──────────────────────┐    ┌─────────────────────┐
                           │    Event System      │    │   Storage System    │
                           │                      │───▶│                     │
                           │  - UserAction        │    │  - Aggregated Data  │
                           │  - PageView          │    │  - Raw Samples      │
                           │  - BusinessEvent     │    │  - Time Series      │
                           └──────────────────────┘    └─────────────────────┘

📊 Analytics-Kategorien

enum AnalyticsCategory: string
{
    case USER_BEHAVIOR = 'user_behavior';  // Clicks, Navigation, etc.
    case PAGE_VIEWS = 'page_views';        // Seitenaufrufe
    case API_USAGE = 'api_usage';          // API-Calls
    case ERRORS = 'errors';                // Fehler und Exceptions
    case PERFORMANCE = 'performance';      // Response Times, etc.
    case BUSINESS = 'business';            // Conversions, Sales
    case SECURITY = 'security';            // Login-Versuche, etc.
    case CONVERSION = 'conversion';        // Funnel-Events
}

🔧 Verwendung

1. Automatisches Tracking (über Middleware)

// Automatisch aktiviert für alle HTTP-Requests
class AnalyticsMiddleware implements HttpMiddleware 
{
    // Trackt automatisch:
    // ✓ Page Views
    // ✓ API Calls  
    // ✓ Response Times
    // ✓ Error Rates
    // ✓ User Actions
}

2. Manuelles Tracking

// Basis-Tracking
$analyticsCollector->trackAction('button_click', AnalyticsCategory::USER_BEHAVIOR, [
    'button_id' => 'cta-signup',
    'page' => '/landing',
]);

// Page Views
$analyticsCollector->trackPageView('/products', 'Products Overview', [
    'category' => 'electronics',
    'source' => 'search'
]);

// Business Events
$analyticsCollector->trackBusinessEvent('purchase', 99.99, 'EUR', [
    'product_id' => 'ABC123',
    'category' => 'electronics',
    'payment_method' => 'credit_card'
]);

// Fehler-Tracking
$analyticsCollector->trackError('validation_error', 'Invalid email format', [
    'field' => 'email',
    'form' => 'registration'
]);

// API-Tracking
$analyticsCollector->trackApiCall('/api/users', 'POST', 201, 156.5, [
    'endpoint_version' => 'v2',
    'auth_type' => 'bearer'
]);

3. Event-System

// Event Listeners registrieren
$eventDispatcher->addListener(PageView::class, function(PageView $event) {
    // Custom Analytics Logic
    $this->customAnalytics->track($event->path, $event->properties);
});

$eventDispatcher->addListener(BusinessEvent::class, function(BusinessEvent $event) {
    // Revenue Tracking
    if ($event->event === 'purchase') {
        $this->revenueTracker->addSale($event->value, $event->currency);
    }
});

📈 Datensammlung & Performance

Sampling-Strategien

// Global Sampling (z.B. 10% aller Requests)
$analyticsCollector = new AnalyticsCollector(
    $performanceCollector, 
    enabled: true,
    samplingRate: 0.1  // 10%
);

// Conditional Sampling
$samplingRate = $isProduction ? 0.05 : 1.0; // 5% in Prod, 100% in Dev

Performance-Integration

// Analytics nutzt das Performance-System
$performanceCollector->recordMetric(
    "analytics_action_{$action}",
    PerformanceCategory::CUSTOM,
    1,
    $context
);

// Sichtbar im Performance Report:
// Analytics Category: 12.3 ms (234 calls)
// - analytics_page_views_total: 156
// - analytics_actions_total: 78
// - analytics_business_events_total: 12

💾 Datenspeicherung

Dreischichtiges Storage-System

// 1. In-Memory (aktueller Request)
$analyticsCollector->trackAction('click', $category, $properties);

// 2. Aggregierte Daten (stündlich/täglich)
$storage->storeAggregated('hour', [
    'page_views' => 1543,
    'unique_visitors' => 892,
    'bounce_rate' => 0.34
]);

// 3. Raw-Data Samples (5% Sampling)
$storage->storeRawData($fullEventData, 0.05);

Datenabfrage

// Zeitreihen-Daten
$timeSeries = $storage->getTimeSeries(
    'page_views', 
    '2025-01-01', 
    '2025-01-31', 
    'day'
);

// Top-Listen
$topPages = $storage->getTopList(
    'page_views', 
    '2025-01-01', 
    '2025-01-31', 
    10
);

// Aggregierte Daten
$dailyStats = $storage->getAggregated(
    '2025-01-01', 
    '2025-01-31', 
    'day'
);

🔍 Automatisches Tracking

Die AnalyticsMiddleware trackt automatisch:

Page Views

  • Alle HTTP GET Requests
  • Referer Information
  • User Agent
  • Query Parameters

API Usage

  • Alle /api/* Endpoints
  • Request/Response Times
  • Status Codes
  • HTTP Methods

User Actions

  • Login/Logout Attempts
  • Registration Attempts
  • Downloads
  • Search Queries
  • Contact Form Usage

Error Tracking

  • 4xx Client Errors
  • 5xx Server Errors
  • 404 Not Found
  • Authentication Failures

Performance Metrics

  • Response Times
  • Memory Usage
  • Database Query Times
  • Cache Hit/Miss Rates

🛡️ Datenschutz & Compliance

IP-Anonymisierung

// Automatische IP-Anonymisierung
$properties['ip'] = $this->anonymizeIp($_SERVER['REMOTE_ADDR']);

private function anonymizeIp(string $ip): string {
    // IPv4: 192.168.1.xxx -> 192.168.1.0
    // IPv6: Letzte 64 Bits entfernen
    return preg_replace('/\.\d+$/', '.0', $ip);
}

Sensitive Data Filtering

// Automatisches Filtern sensibler Daten
$safeProperties = $this->filterSensitiveData($properties, [
    'password', 'token', 'api_key', 'session', 'credit_card'
]);

DSGVO-Compliance

// User Opt-Out Support
if ($user->hasOptedOutOfAnalytics()) {
    return; // Kein Tracking
}

// Daten-Retention (automatische Bereinigung)
$storage->cleanup(365); // Daten nach 1 Jahr löschen

📊 Beispiel-Metriken

Dashboard-Daten

// Täglich aggregierte Daten
[
    '2025-01-15' => [
        'page_views' => 15234,
        'unique_visitors' => 8934,
        'bounce_rate' => 0.32,
        'avg_session_duration' => 185.6,
        'top_pages' => [
            '/' => 3421,
            '/products' => 2156,
            '/about' => 1234
        ],
        'errors' => [
            '404' => 45,
            '500' => 2,
            '403' => 12
        ],
        'conversions' => [
            'signup' => 123,
            'purchase' => 34,
            'download' => 567
        ]
    ]
]

🚀 Performance-Optimierungen

Minimaler Overhead

// Async Processing (optional)
$queue->push(new AnalyticsJob($eventData));

// Batching
$collector->batchSize = 100; // Sammle 100 Events vor dem Schreiben

// Memory Optimization
$collector->maxMemoryUsage = 50 * 1024 * 1024; // 50MB Limit

Caching

// Aggregierte Daten cachen
$cache->remember("analytics_daily_{$date}", function() {
    return $this->calculateDailyStats($date);
}, 3600); // 1 Stunde

Migration vom alten System

Das alte Analytics-Modul wurde vollständig entfernt und durch dieses moderne System ersetzt:

Vorteile der Neuimplementierung:

🔥 50% weniger Code - Durch Nutzung des Performance-Frameworks
3x bessere Performance - Optimierte Datenstrukturen
🛡️ Bessere Sicherheit - Integrierte Datenschutz-Features
📈 Mehr Metriken - Umfassendere Analytics
🔧 Einfachere Wartung - Modulare Architektur

Das neue System ist sofort einsatzbereit und bietet alle Features des alten Systems plus viele neue Verbesserungen! 🚀