Zum Hauptinhalt springen

Admin Monitoring Components

Monitoring-Components fuer Queue-Status, Collector-Jobs, YouTube Update Status, Google API Quota und Server-Gesundheit.

Admin/LogQueue/Index

Zentrale Queue- und Collector-Job-Verwaltung mit Suche, Filtern und Detail-Modals.

Route: /admin/log-queue View: resources/views/livewire/admin/log-queue/index.blade.php Location: app/Livewire/Admin/LogQueue/Index.php

Public Properties

PropertyTypDefaultBeschreibung
$queueFilterstring''Queue-Name Filter
$queuePerPageint25Eintraege pro Seite (Queue)
$queueSearchstring''Suche in Queue-Payload/Queue-Name
$queueStatusstring'queued''queued' oder 'failed'
$collectorStatusstring'all'Collector-Job Status Filter
$collectorSourcestring'all'Plattform-Filter ('all', 'youtube', 'instagram')
$collectorErrorCodestring'all'Error-Code Filter (mit Detail-Varianten)
$collectorPerPageint25Eintraege pro Seite (Collector)
$collectorSearchstring''Suche in Collector-Jobs
$showLogModalboolfalseCollector-Log-Detail Modal
$showFailedJobModalboolfalseFailed-Job-Detail Modal
$showDeleteQueueModalboolfalseQueue-Job-Loeschen Modal
$showDeleteCollectorModalboolfalseCollector-Job-Loeschen Modal
$selectedLogJobIdstring|nullnullAusgewaehlter Collector-Job
$selectedFailedJobIdint|nullnullAusgewaehlter Failed-Job
$deleteQueueJobIdint|nullnullQueue-Job zum Loeschen
$deleteCollectorJobIdstring|nullnullCollector-Job zum Loeschen

Queue Actions

MethodBeschreibung
confirmDeleteQueueJob(int $id)Queue-Job-Loeschung vorbereiten
deleteQueueJob()Queue-Job aus jobs-Tabelle loeschen
retryFailedQueueJob(int $id)Failed Job via queue:retry erneut einreihen
showFailedQueueJobDetails(int $id)Exception + Payload Modal oeffnen
closeFailedJobModal()Failed-Job Modal schliessen

Collector Actions

MethodBeschreibung
showLogDetails(string $id)Collector-Job Detail Modal oeffnen
closeLogModal()Log-Modal schliessen
confirmDeleteCollectorJob(string $id)Collector-Job-Loeschung vorbereiten
deleteCollectorJob()Queued Collector-Job loeschen
cancelCollectorJob(string $id)Collector-Job als failed markieren
prioritizeCollectorJob(string $id)Priority auf max+1 setzen
retryCollectorJob(string $id)Failed Job zurueck auf queued setzen

Plattform-Filter für Collector-Jobs

Die collectorSource-Property ermoeglicht das Filtern von Collector-Jobs nach Plattform. Der Filter wird über ein Dropdown-Menu ("Plattform") in der UI angesteuert:

  • 'all' (Standard) — Zeigt alle Collector-Jobs unabhängig von der Plattform
  • 'youtube' — Zeigt nur YouTube Collector-Jobs
  • 'instagram' — Zeigt nur Instagram Collector-Jobs

Die verfuegbaren Plattform-Optionen werden dynamisch aus der Datenbank geladen (collectorSourceOptions) und in der render()-Methode an die View uebergeben.

Verhalten beim Filter-Wechsel: Wenn der Plattform-Filter aendert wird (via updatingCollectorSource()), wird die Error-Code-Filterung automatisch auf 'all' zurückgesetzt, um veraltete Filter-Kombinationen zu vermeiden.

Für fehlgeschlagene Collector-Jobs (Status: 'failed') werden Plattform-spezifische Links angezeigt:

  • Instagram-Jobs: Der extrahierte Handle wird als Link zu https://www.instagram.com/{handle} formatiert
  • YouTube-Jobs: Der extrahierte Handle wird als Link zu https://www.youtube.com/@{handle} formatiert

Für aktive oder abgeschlossene Jobs wird der Handle nur als Text angezeigt (ohne Link). Die Link-Generierung erfolgt in der index.blade.php basierend auf dem Job-Status und der Plattform-Source.

Location: app/Livewire/Admin/LogQueue/Index.php (PHP-Logik), resources/views/livewire/admin/log-queue/index.blade.php (Blade-Template, Zeilen 84–101)

Mail Flood Guard

MethodBeschreibung
toggleMailPause()Mailversand pausieren/fortsetzen
mailStatus (Computed)per_minute, per_hour, paused, Schwellenwerte, 24h-Stats

Queue-Filter-Optionen

Feste Liste von bekannten Queues (immer sichtbar):

ai-detection, default, emails, imports-instagram,
imports-youtube, imports-youtube-priority,
imports-youtube-video, imports-youtube-video-priority,
instagram-related-profiles, youtube-related-channels

Error-Code-Filter (Collector)

Error-Codes werden dynamisch aus der DB geladen. Fuer parse_error und scrape_error werden zusaetzliche Detail-Varianten angeboten:

  • parse_error|not_found -- Profil nicht gefunden
  • scrape_error|status_520 -- Cloudflare Error 520
  • scrape_error|status_522 -- Cloudflare Error 522
  • scrape_error|tab_edited -- Tab-Edit Fehler

Admin/LogQueue/QueueMetricsChart

Eigenstaendige Chart-Komponente fuer Collector-Job-Metriken in 15-Minuten-Intervallen.

View: resources/views/livewire/admin/log-queue/queue-metrics-chart.blade.php Location: app/Livewire/Admin/LogQueue/QueueMetricsChart.php

Public Properties

PropertyTypDefaultBeschreibung
$platformstring'all'Plattform-Filter (all, youtube, instagram)
$rangestring'1d'Zeitraum (1d, 7d, 1m, 1q, 1y)
$statusstring'all'Status-Filter (all, total, queued, completed, error)
$rangeEndDatestring|nullnullEnd-Datum fuer Navigation
$chartDataarray[]Berechnete Chart-Daten
$chartMaxint0Maximum Y-Achse
$canGoPreviousboolfalseVorheriger Zeitraum verfuegbar
$canGoNextboolfalseNaechster Zeitraum verfuegbar

Zeigt Collector-Job-Zaehler aggregiert in 15-Minuten-Buckets. Farbcodierte Serien: Total (blau), Queued (lila), Completed (gruen), Error (rot).

Queued-Breakdown nach Plattform

Bei Filter platform=all und status=all oder status=queued werden zusaetzliche Breakdown-Linien angezeigt:

LinieFarbeBedingung
YouTube TotalRoseplatform=all + status=all
Queued YouTubeSky-Blueplatform=all + status=all oder queued
Queued InstagramAmberplatform=all + status=all oder queued

Die Breakdown-Daten werden per separater Query aus der queue_metrics-Tabelle geladen (platform=youtube/instagram, status=queued). Ermoeglicht Diagnose von Imbalancen zwischen YouTube- und Instagram-Queue-Last.

Zeitraum-Navigation

Der Chart unterstuetzt Vor-/Zurueck-Navigation ueber Pfeiltasten. Bucket-Groessen passen sich dem Zeitraum an:

ZeitraumBucket-Groesse
1 Tag15 Minuten
7 Tage15 Minuten
1 Monat60 Minuten
1 Quartal6 Stunden
1 Jahr12 Stunden

Admin/UpdateStatus/Index

Container-Component fuer YouTube + Instagram Update-Status + Daily Pipeline Monitor.

Route: /admin/update-status Location: app/Livewire/Admin/UpdateStatus/Index.php

Einbettung der plattformspezifischen Sub-Components + Pipeline Monitor:

Admin/UpdateStatus/DailyPipelineStatus

Tages-Pipeline-Monitor: Zeigt den Fortschritt aller 16 Pipeline-Schritte als uebersichtliches Dashboard.

View: resources/views/livewire/admin/update-status/daily-pipeline-status.blade.php Location: app/Livewire/Admin/UpdateStatus/DailyPipelineStatus.php

Public Properties

PropertyTypDefaultBeschreibung
$datestringtodayAktuelles Datum (YYYY-MM-DD, UTC)
$showComparisonboolfalse7-Tage-Vergleich anzeigen
$showDependenciesboolfalseDependency-Chain anzeigen
$retryingStepstring|nullnullStep der gerade retried wird (Loading-State)

Computed Properties

PropertyCacheBeschreibung
groupedSteps5 Min (Service-Cache)Pipeline-Schritte gruppiert nach collection/data_quality/processing/maintenance
overallProgress5 Min{total, completed, running, failed, percentage}
comparisonData5 Min7-Tage-Vergleich (nur wenn showComparison = true)
stepDefinitionsStep-Definitionen fuer Dependency-Visualisierung
isTodayOb das ausgewaehlte Datum heute ist

Actions

MethodBeschreibung
previousDay()Zum vorherigen Tag navigieren
nextDay()Zum naechsten Tag (max. heute)
goToToday()Zurueck auf heute springen
refresh()Cache leeren und neu laden
toggleComparison()7-Tage-Vergleich ein/ausblenden
toggleDependencies()Dependency-Chain ein/ausblenden
retryStep(string $stepKey)Pipeline-Schritt via Artisan::queue() erneut ausfuehren
canRetry(string $stepKey)Pruefen ob Retry fuer diesen Step moeglich ist

Pipeline-Schritte (16 Steps, 4 Gruppen)

GruppeStep KeyLabelScheduleDepends On
Collectionyoutube_scrapeYouTube Scrape09:00
Collectioninstagram_scrapeInstagram Scrape00:00
Collectionvideo_syncVideo Sync14:00
Data Qualitymetrics_completenessMetrics Coverage03:00youtube_scrape, instagram_scrape
Processingdashboard_rollupDashboard Rollup03:00
Processingleaderboard_rollupLeaderboards03:00dashboard_rollup
Processingglobal_leaderboard_rollupGlobal Leaderboards03:00dashboard_rollup
Processingscores_calculatePostbox Scores03:00
Processingexplore_metricsExplore Metrics03:00
Processingtag_cacheTag Cache03:00scores_calculate, explore_metrics
Processingpublic_explorer_refreshExplorer Refresh03:00tag_cache
Processingsitemap_generateSitemap07:30public_explorer_refresh
Processingtrending_videosTrending Videos03:00video_sync
Processingyoutube_video_scoresVideo Scores21:00video_sync
Maintenanceprofile_retryProfile Retry22:00
Maintenanceprofile_sanitizeProfile Sanitizer03:30

Datenfluss

graph TD
A["PipelineStatusService"] -->|"getStatusForDate()"| B["Cache 5min/1h"]
B --> C["DailyPipelineStatus Component"]
C --> D["Grouped Cards 4 Gruppen"]
C --> E["7-Tage-Vergleich"]
C --> F["Dependency-Chain"]
G["PipelineStepCompleted Event"] -->|"Reverb Admin-Channel"| C
C -->|"retryStep()"| H["Artisan::queue()"]
A -->|"persistRuns()"| I["pipeline_runs Tabelle"]

Status-Logik

StatusIconFarbeBedingung
completedGruenHeartbeat frisch ODER pipeline_runs completed ODER Model-Daten vorhanden
running🔄BlauFortschritt < 100%
stalled⚠️AmberCollection >2h ohne Fortschritt ODER Metrics-Coverage unter Schwellwert
scheduledGrauAktuelle Uhrzeit < geplante Zeit
overdue⚠️Amber>30min ueberfaellig, kein Heartbeat, kein pipeline_run
failedRotHistorisch: nicht ausgefuehrt
waiting⏸️GrauVorgaenger-Step nicht fertig

Deployment-Resilienz

Die Pipeline-Status-Erkennung ist resilient gegenueber Cache-Clears (z.B. php artisan cache:clear bei Deployments):

  1. Heartbeat-Fallback: Wenn cron:heartbeat:{key} fehlt, wird pipeline_runs-Tabelle als Fallback geprueft — auch fuer den heutigen Tag
  2. Model-Daten als Beweis: scores_calculate, explore_metrics und video_sync pruefen direkt Model-Daten (z.B. SocialProfileScore, ExploreProfileMetric, YouTubeVideoSync) als Ausfuehrungs-Beweis
  3. Downgrade-Schutz: PipelineRun::recordStep() verhindert, dass ein "completed"-Record mit einem schlechteren Status (z.B. "overdue") ueberschrieben wird

Retry-Mechanismus

Retry nutzt Artisan::queue() statt Artisan::call(), um HTTP-Timeouts bei langlaeufeigen Commands zu vermeiden. Alle Pipeline-Schritte ausser metrics_completeness (Soft-Check) sind retryable (Mapping in RETRY_COMMANDS). Retry nur fuer das aktuelle Datum moeglich.

WebSocket-Integration

Lauscht auf PipelineStepCompleted-Events ueber den admin-Channel (Reverb). Bei Event-Empfang: Cache invalidieren + Component neu rendern. Alpine.js-Subscription nur wenn isToday = true.

Phase 3 Sub-Step Isolation

Phase 3 von pipeline:run (Trending Flags, Trending Videos, Categories, Tag Cache, Explorer Refresh) fuehrt jeden Sub-Step in einem eigenen try/catch aus. Dadurch blockiert ein Fehler in z.B. calculateTrendingVideos() nicht mehr die nachfolgenden Steps (Tag Cache, Explorer Refresh). Dies ist kritisch, weil sitemap:generate von einem frischen public_explorer_refresh Heartbeat abhaengt.

Bei Fehlern werden alle Failures gesammelt und als Warning geloggt ("Phase 3 completed with failures"). Heartbeats werden pro Sub-Step individuell geschrieben.

Datenquellen (Fallback-Hierarchie)

Pro Step wird in folgender Reihenfolge geprueft:

  1. Cache Heartbeats: cron:heartbeat:{key} — primaere Quelle, gesetzt nach Command-Ausfuehrung
  2. Model-Daten (step-spezifisch): DailySyncRun (YouTube), CollectorJob (Instagram), YouTubeVideoSync, SocialProfileScore, ExploreProfileMetric
  3. pipeline_runs-Tabelle: Persistierter Status — Fallback bei Cache-Clear (fuer heute UND historisch)
  4. Schedule-Logik: buildScheduledOrOverdue() — letzte Stufe wenn keine Daten vorhanden

Location: app/Livewire/Admin/UpdateStatus/DailyPipelineStatus.php, app/Services/Pipeline/PipelineStatusService.php


Admin/LogQueue/YoutubeUpdateStatus

YouTube Update-Status: Zeigt wie viele Profile heute noch aktualisiert werden muessen, Quota-Status, Rotations-Breakdown und Queue-Button mit 4h-Cooldown.

Bereiche:

  • Profil-Breakdown: PRO, Leaders, Candidates, Favoriten, Neue, Catch-Up, Rotation, Low-Priority
  • Quota-Status: Verbrauch, Limit, Fortschrittsbalken (gruen/gelb/rot)
  • Action-Button: Profile in Queue einreihen (mit Cooldown)
  • YouTube Research Import: Aggregierte Statistiken der letzten 30 Tage fuer Admin-Workspace-Imports (Runs, Queries, Dispatcht, Hinzugefuegt, Duplikate, Fehlgeschlagen). Bei Failures Recovery-Hinweis mit imports:retry-failed --source=research Command.

Location: app/Livewire/Admin/LogQueue/YoutubeUpdateStatus.php

Admin/UpdateStatus/InstagramUpdateStatus

Instagram Scrape-Status: Letzter Lauf, Queue-Tiefe, Error-Rate.

Location: app/Livewire/Admin/UpdateStatus/InstagramUpdateStatus.php


Admin/GoogleApiUsage/Index

Google API Quota Dashboard fuer konfigurierte Cloud-Projekte.

Route: /admin/google-api-usage View: resources/views/livewire/admin/google-api-usage/index.blade.php Location: app/Livewire/Admin/GoogleApiUsage/Index.php Autorisierung: Gate::allows('admin') in mount()

Public Properties

PropertyTypDefaultBeschreibung
$isRefreshingboolfalseRefresh in progress

Actions

MethodBeschreibung
refreshData()google:sync-api-usage Command synchron ausfuehren

Datenquellen

  • GoogleApiQuotaLimit: Quota-Limits pro Projekt/Service/Metrik
  • GoogleApiQuotaUsage: Heutige Nutzung (Pacific Time-Tag) pro Quota-Metrik
  • YouTubeQuotaGuard: Circuit Breaker Status + QuotaGuard-Metriken (cache-basiert)
  • Config: config('google_api_usage.service'), config('google_api_usage.projects')

Quota-Cards zeigen: Metrik-Name, Einheit (daily/per-minute), Verbrauch, Limit, Remaining, Prozent. Sortierung: Daily-Limits zuerst, dann Per-Minute, dann Per-Minute-Per-User.

No-Data-Erkennung

Pro Projekt wird ein has_usage_data-Flag berechnet ($usages->isNotEmpty()). Wenn die Google Cloud Monitoring API keine timeSeries liefert:

  • Rote Danger-Callout: "Keine Verbrauchsdaten von Google API" mit Hinweis auf moegliche Ursachen
  • Graue Charts statt gruener Donut-Diagramme (verhindert irrefuehrendes "alles frei"-Signal)
  • Per-Card Warn-Label: "Keine API-Daten"

Circuit Breaker Panel

Das "API Key Pools (Circuit Breaker)"-Panel zeigt den Status pro Pool (default, video, research, extended). Wichtig: Der Status basiert auf Job-Fehlern (Quota-exceeded-Exceptions), nicht auf Cloud Monitoring Daten. Ein gruener Punkt bedeutet nur, dass kein Job-basierter Circuit Breaker offen ist.

Daten-Sync

Daten werden stuendlich durch google:sync-api-usage aktualisiert. refreshData() fuehrt den Command synchron aus und zeigt Toast bei Erfolg/Fehler.


Admin/ServerDashboard

Live Server-Monitoring Dashboard mit Reverb-Integration.

Route: /admin/server View: resources/views/livewire/admin/server-dashboard.blade.php Location: app/Livewire/Admin/ServerDashboard.php

Zeigt Pulse-Metriken (CPU, Memory, Disk), aktive Queue-Worker und Server-Alerts. Reagiert auf ServerAlertTriggered-Events via Reverb.

Pulse Recorder: PublicStorageMetrics

Misst storage/app/public/-Groesse via du -sb. Der Wert wird 30 Minuten gecacht (Cache::remember), da du -sb auf grossen Verzeichnissen (29+ GB) mehrere Sekunden dauern kann und bei jedem SharedBeat (alle 15s) Recorder-Fehler verursachte. PHP-RecursiveDirectoryIterator-Fallback wenn shell_exec deaktiviert ist.

Location: app/Pulse/Recorders/PublicStorageMetrics.php


Admin/DbMonitoring/Index

PostgreSQL-Monitoring Dashboard mit Metriken-Snapshots, Zeitverlaufs-Charts und Slow-Query-Analyse.

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

Public Properties

PropertyTypDefaultBeschreibung
$chartRangestring'24h'Zeitraum fuer Charts: 24h, 7d, 30d
$slowQueryDaysint1Slow-Query Zeitraum in Tagen

Computed Properties

PropertyCacheBeschreibung
latestSnapshot2 MinAktuellster DbMonitoringSnapshot
chartData5 MinZeitverlaufs-Metriken (Connections, TPS, Cache-Hit, DB-Size)
tableHealth5 MinPro-Tabelle: seq_scan, idx_scan, dead_tuples, last_vacuum
slowQueries2 MinSlow Queries nach slowQueryDays gefiltert
liveActivitykeineAktive PostgreSQL-Connections/Queries via pg_stat_activity

KPI-Boxen (6 Cards)

BoxWertQuelle
Active ConnectionsAktive DB-VerbindungenDbMonitoringSnapshot.active_connections
Transactions/sTransaktionen pro SekundeDbMonitoringSnapshot.transactions_per_second
DB-GroesseDatenbankgroesse (formatiert)DbMonitoringSnapshot.database_size_bytes
Cache-Hit-RatePostgreSQL Buffer-Cache TrefferquoteDbMonitoringSnapshot.cache_hit_ratio
Slow Queries (heute)Anzahl langsamer QueriesDbSlowQueryLog::whereDate(today)
Dead TuplesSumme toter Tupel ueber alle TabellenDbMonitoringSnapshot.total_dead_tuples

Tabellen-Health: Summenzeile

Die Tabellen-Health-Tabelle (Top 30 Tabellen nach Groesse) hat eine <tfoot>-Summenzeile:

  • Σ Top 30 (inkl. Indizes): Summe der Tabellengroessen
  • DB gesamt: Gesamte Datenbankgroesse aus currentMetrics.total_db_size_mb
  • Differenz: Zeigt die Differenz (System-Katalog, WAL, Bloat) damit klar wird woher die Abweichung kommt

Actions

MethodBeschreibung
refreshData()Alle Computed Properties invalidieren

Datenquellen

  • DbMonitoringSnapshot: 15-Minuten-Snapshots mit Connections, TPS, DB-Size, Cache-Hit, Dead Tuples, Tabellen-Metriken
  • DbSlowQueryLog: Queries die laenger als konfigurierter Schwellwert dauern
  • DatabaseMonitoringService: Liest Live-Daten aus pg_stat_activity, pg_stat_user_tables, pg_database

Zugehoerige Commands

CommandScheduleBeschreibung
db:snapshotAlle 15 MinMetriken-Snapshot erstellen (kritische Issues werden mit 1h Rate Limit geloggt)
db:prune-snapshotsTaeglich 02:00Alte Snapshots loeschen
db:prune-slow-queriesTaeglich 02:15Alte Slow-Query-Logs loeschen
db:activityManuellLive PostgreSQL-Aktivitaet anzeigen (CLI)

max_connections-Erkennung

Die Prozent-Berechnung fuer Connection-Auslastung liest max_connections direkt aus PostgreSQL (SHOW max_connections). Der Config-Wert SERVER_PG_MAX_CONNECTIONS dient nur als Fallback wenn die DB-Abfrage fehlschlaegt. Aenderungen an max_connections in postgresql.conf werden automatisch uebernommen.

Location: app/Livewire/Admin/DbMonitoring/Index.php, app/Services/Database/DatabaseMonitoringService.php


Admin/SitemapManagement/Index

Sitemap-Verwaltung mit Generierungs-Status, Datei-Validierung, 14-Tage-Inventar und Health Score.

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

Computed Properties

PropertyCacheBeschreibung
lastResultLetztes Generierungsergebnis aus Metadata-Datei
sitemapFilesSitemap-Dateien mit Groesse, Validierung und URL-Count
dailySnapshots10 Min14-Tage-History mit Delta-Berechnung
healthScore0-100 Punkte aus 4 Faktoren
chartDataLabels + Datenreihen fuer URL-Entwicklungs-Chart

Health Score (0-100)

FaktorGewichtungBeschreibung
Validierung40%Alle Dateien XML-valide und groessenkonform
Stabilitaet30%URL-Aenderung zum Vortag < 5%
Lueckenfreiheit20%Keine Tage ohne Generierung in letzten 7 Tagen
Geschwindigkeit10%Generierung unter 30 Sekunden

Status-Cards (6 Karten)

CardWertQuelle
Gesamt-URLsSumme aller URLslastResult.total_urls
DateienAnzahl generierter DateienlastResult.files_written
Letzte GenerierungZeitpunktlastResult.generated_at
DauerGenerierungsdauerlastResult.duration_seconds
Public ExplorerAktiv/DeaktiviertConfig
Health Score0-100 mit FarbcodierunghealthScore Computed

Bereiche

BereichBeschreibung
Datei-TabelleAlle Sitemap-Dateien mit Groesse, URL-Count und Validierungs-Status
URL-EntwicklungChart.js Liniendiagramm (14 Tage, Gesamt + Profile)
14-Tage-InventarTabelle mit Delta-Tooltips (URL-Diff pro Kategorie)
KonfigurationProfiles per File

Actions

MethodBeschreibung
generateNow()Sitemap-Generierung via Artisan::call('sitemap:generate', ['--force' => true])
refreshStats()Alle Computed Properties invalidieren

Admin/ReverbTest/Index

WebSocket-Testseite fuer Reverb-Verbindung und Event-Dispatch.

Route: /admin/reverb-test View: resources/views/livewire/admin/reverb-test/index.blade.php Location: app/Livewire/Admin/ReverbTest/Index.php

Actions

MethodBeschreibung
sendTestEvent()Test-Event auf dem Admin-Channel broadcasten

Nützlich zur Diagnose von WebSocket-Verbindungsproblemen. Zeigt Connection-Status, Channel-Subscriptions und empfangene Events in Echtzeit.