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
| Property | Typ | Default | Beschreibung |
|---|---|---|---|
$queueFilter | string | '' | Queue-Name Filter |
$queuePerPage | int | 25 | Eintraege pro Seite (Queue) |
$queueSearch | string | '' | Suche in Queue-Payload/Queue-Name |
$queueStatus | string | 'queued' | 'queued' oder 'failed' |
$collectorStatus | string | 'all' | Collector-Job Status Filter |
$collectorSource | string | 'all' | Plattform-Filter ('all', 'youtube', 'instagram') |
$collectorErrorCode | string | 'all' | Error-Code Filter (mit Detail-Varianten) |
$collectorPerPage | int | 25 | Eintraege pro Seite (Collector) |
$collectorSearch | string | '' | Suche in Collector-Jobs |
$showLogModal | bool | false | Collector-Log-Detail Modal |
$showFailedJobModal | bool | false | Failed-Job-Detail Modal |
$showDeleteQueueModal | bool | false | Queue-Job-Loeschen Modal |
$showDeleteCollectorModal | bool | false | Collector-Job-Loeschen Modal |
$selectedLogJobId | string|null | null | Ausgewaehlter Collector-Job |
$selectedFailedJobId | int|null | null | Ausgewaehlter Failed-Job |
$deleteQueueJobId | int|null | null | Queue-Job zum Loeschen |
$deleteCollectorJobId | string|null | null | Collector-Job zum Loeschen |
Queue Actions
| Method | Beschreibung |
|---|---|
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
| Method | Beschreibung |
|---|---|
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.
YouTube Link Support für fehlgeschlagene Collector-Jobs
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
| Method | Beschreibung |
|---|---|
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 gefundenscrape_error|status_520-- Cloudflare Error 520scrape_error|status_522-- Cloudflare Error 522scrape_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
| Property | Typ | Default | Beschreibung |
|---|---|---|---|
$platform | string | 'all' | Plattform-Filter (all, youtube, instagram) |
$range | string | '1d' | Zeitraum (1d, 7d, 1m, 1q, 1y) |
$status | string | 'all' | Status-Filter (all, total, queued, completed, error) |
$rangeEndDate | string|null | null | End-Datum fuer Navigation |
$chartData | array | [] | Berechnete Chart-Daten |
$chartMax | int | 0 | Maximum Y-Achse |
$canGoPrevious | bool | false | Vorheriger Zeitraum verfuegbar |
$canGoNext | bool | false | Naechster 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:
| Linie | Farbe | Bedingung |
|---|---|---|
| YouTube Total | Rose | platform=all + status=all |
| Queued YouTube | Sky-Blue | platform=all + status=all oder queued |
| Queued Instagram | Amber | platform=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:
| Zeitraum | Bucket-Groesse |
|---|---|
| 1 Tag | 15 Minuten |
| 7 Tage | 15 Minuten |
| 1 Monat | 60 Minuten |
| 1 Quartal | 6 Stunden |
| 1 Jahr | 12 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
| Property | Typ | Default | Beschreibung |
|---|---|---|---|
$date | string | today | Aktuelles Datum (YYYY-MM-DD, UTC) |
$showComparison | bool | false | 7-Tage-Vergleich anzeigen |
$showDependencies | bool | false | Dependency-Chain anzeigen |
$retryingStep | string|null | null | Step der gerade retried wird (Loading-State) |
Computed Properties
| Property | Cache | Beschreibung |
|---|---|---|
groupedSteps | 5 Min (Service-Cache) | Pipeline-Schritte gruppiert nach collection/data_quality/processing/maintenance |
overallProgress | 5 Min | {total, completed, running, failed, percentage} |
comparisonData | 5 Min | 7-Tage-Vergleich (nur wenn showComparison = true) |
stepDefinitions | — | Step-Definitionen fuer Dependency-Visualisierung |
isToday | — | Ob das ausgewaehlte Datum heute ist |
Actions
| Method | Beschreibung |
|---|---|
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)
| Gruppe | Step Key | Label | Schedule | Depends On |
|---|---|---|---|---|
| Collection | youtube_scrape | YouTube Scrape | 09:00 | — |
| Collection | instagram_scrape | Instagram Scrape | 00:00 | — |
| Collection | video_sync | Video Sync | 14:00 | — |
| Data Quality | metrics_completeness | Metrics Coverage | 03:00 | youtube_scrape, instagram_scrape |
| Processing | dashboard_rollup | Dashboard Rollup | 03:00 | — |
| Processing | leaderboard_rollup | Leaderboards | 03:00 | dashboard_rollup |
| Processing | global_leaderboard_rollup | Global Leaderboards | 03:00 | dashboard_rollup |
| Processing | scores_calculate | Postbox Scores | 03:00 | — |
| Processing | explore_metrics | Explore Metrics | 03:00 | — |
| Processing | tag_cache | Tag Cache | 03:00 | scores_calculate, explore_metrics |
| Processing | public_explorer_refresh | Explorer Refresh | 03:00 | tag_cache |
| Processing | sitemap_generate | Sitemap | 07:30 | public_explorer_refresh |
| Processing | trending_videos | Trending Videos | 03:00 | video_sync |
| Processing | youtube_video_scores | Video Scores | 21:00 | video_sync |
| Maintenance | profile_retry | Profile Retry | 22:00 | — |
| Maintenance | profile_sanitize | Profile Sanitizer | 03: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
| Status | Icon | Farbe | Bedingung |
|---|---|---|---|
completed | ✅ | Gruen | Heartbeat frisch ODER pipeline_runs completed ODER Model-Daten vorhanden |
running | 🔄 | Blau | Fortschritt < 100% |
stalled | ⚠️ | Amber | Collection >2h ohne Fortschritt ODER Metrics-Coverage unter Schwellwert |
scheduled | ⏳ | Grau | Aktuelle Uhrzeit < geplante Zeit |
overdue | ⚠️ | Amber | >30min ueberfaellig, kein Heartbeat, kein pipeline_run |
failed | ❌ | Rot | Historisch: nicht ausgefuehrt |
waiting | ⏸️ | Grau | Vorgaenger-Step nicht fertig |
Deployment-Resilienz
Die Pipeline-Status-Erkennung ist resilient gegenueber Cache-Clears (z.B. php artisan cache:clear bei Deployments):
- Heartbeat-Fallback: Wenn
cron:heartbeat:{key}fehlt, wirdpipeline_runs-Tabelle als Fallback geprueft — auch fuer den heutigen Tag - Model-Daten als Beweis:
scores_calculate,explore_metricsundvideo_syncpruefen direkt Model-Daten (z.B.SocialProfileScore,ExploreProfileMetric,YouTubeVideoSync) als Ausfuehrungs-Beweis - 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:
- Cache Heartbeats:
cron:heartbeat:{key}— primaere Quelle, gesetzt nach Command-Ausfuehrung - Model-Daten (step-spezifisch):
DailySyncRun(YouTube),CollectorJob(Instagram),YouTubeVideoSync,SocialProfileScore,ExploreProfileMetric pipeline_runs-Tabelle: Persistierter Status — Fallback bei Cache-Clear (fuer heute UND historisch)- 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)
Catch-Up vs. Fail-Streak-Cooldown: Profile im aktiven Fail-Streak-Cooldown (Streak ≥ N + letzter Fehler jünger als das Cooldown-Fenster) werden nicht mehr in die „Catch-Up"-Soll-Zahl gezählt — der Daily-Command überspringt sie ohnehin. Sie erscheinen jetzt unter einer eigenen Zeile „im Fail-Streak-Cooldown" (YouTube zeigte diese Zahl zuvor gar nicht an, obwohl sie berechnet wurde). So spiegelt die Catch-Up-Quote tatsächlich abarbeitbare Arbeit statt scheinbar festzuhängen, weil tote Profile im Cooldown den Nenner aufblähten.
- 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=researchCommand.
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
| Property | Typ | Default | Beschreibung |
|---|---|---|---|
$isRefreshing | bool | false | Refresh in progress |
Actions
| Method | Beschreibung |
|---|---|
refreshData() | google:sync-api-usage Command synchron ausfuehren |
Datenquellen
GoogleApiQuotaLimit: Quota-Limits pro Projekt/Service/MetrikGoogleApiQuotaUsage: Heutige Nutzung (Pacific Time-Tag) pro Quota-MetrikYouTubeQuotaGuard: 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
| Property | Typ | Default | Beschreibung |
|---|---|---|---|
$chartRange | string | '24h' | Zeitraum fuer Charts: 24h, 7d, 30d |
$slowQueryDays | int | 1 | Slow-Query Zeitraum in Tagen |
Computed Properties
| Property | Cache | Beschreibung |
|---|---|---|
latestSnapshot | 2 Min | Aktuellster DbMonitoringSnapshot |
chartData | 5 Min | Zeitverlaufs-Metriken (Connections, TPS, Cache-Hit, DB-Size) |
tableHealth | 5 Min | Pro-Tabelle: seq_scan, idx_scan, dead_tuples, last_vacuum |
slowQueries | 2 Min | Slow Queries nach slowQueryDays gefiltert |
liveActivity | keine | Aktive PostgreSQL-Connections/Queries via pg_stat_activity |
KPI-Boxen (6 Cards)
| Box | Wert | Quelle |
|---|---|---|
| Active Connections | Aktive DB-Verbindungen | DbMonitoringSnapshot.active_connections |
| Transactions/s | Transaktionen pro Sekunde | DbMonitoringSnapshot.transactions_per_second |
| DB-Groesse | Datenbankgroesse (formatiert) | DbMonitoringSnapshot.database_size_bytes |
| Cache-Hit-Rate | PostgreSQL Buffer-Cache Trefferquote | DbMonitoringSnapshot.cache_hit_ratio |
| Slow Queries (heute) | Anzahl langsamer Queries | DbSlowQueryLog::whereDate(today) |
| Dead Tuples | Summe toter Tupel ueber alle Tabellen | DbMonitoringSnapshot.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
| Method | Beschreibung |
|---|---|
refreshData() | Alle Computed Properties invalidieren |
Datenquellen
DbMonitoringSnapshot: 15-Minuten-Snapshots mit Connections, TPS, DB-Size, Cache-Hit, Dead Tuples, Tabellen-MetrikenDbSlowQueryLog: Queries die laenger als konfigurierter Schwellwert dauernDatabaseMonitoringService: Liest Live-Daten auspg_stat_activity,pg_stat_user_tables,pg_database
Zugehoerige Commands
| Command | Schedule | Beschreibung |
|---|---|---|
db:snapshot | Alle 15 Min | Metriken-Snapshot erstellen (kritische Issues werden mit 1h Rate Limit geloggt) |
db:prune-snapshots | Taeglich 02:00 | Alte Snapshots loeschen |
db:prune-slow-queries | Taeglich 02:15 | Alte Slow-Query-Logs loeschen |
db:activity | Manuell | Live 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
| Property | Cache | Beschreibung |
|---|---|---|
lastResult | — | Letztes Generierungsergebnis aus Metadata-Datei |
sitemapFiles | — | Sitemap-Dateien mit Groesse, Validierung und URL-Count |
dailySnapshots | 10 Min | 14-Tage-History mit Delta-Berechnung |
healthScore | — | 0-100 Punkte aus 4 Faktoren |
chartData | — | Labels + Datenreihen fuer URL-Entwicklungs-Chart |
Health Score (0-100)
| Faktor | Gewichtung | Beschreibung |
|---|---|---|
| Validierung | 40% | Alle Dateien XML-valide und groessenkonform |
| Stabilitaet | 30% | URL-Aenderung zum Vortag < 5% |
| Lueckenfreiheit | 20% | Keine Tage ohne Generierung in letzten 7 Tagen |
| Geschwindigkeit | 10% | Generierung unter 30 Sekunden |
Status-Cards (6 Karten)
| Card | Wert | Quelle |
|---|---|---|
| Gesamt-URLs | Summe aller URLs | lastResult.total_urls |
| Dateien | Anzahl generierter Dateien | lastResult.files_written |
| Letzte Generierung | Zeitpunkt | lastResult.generated_at |
| Dauer | Generierungsdauer | lastResult.duration_seconds |
| Public Explorer | Aktiv/Deaktiviert | Config |
| Health Score | 0-100 mit Farbcodierung | healthScore Computed |
Bereiche
| Bereich | Beschreibung |
|---|---|
| Datei-Tabelle | Alle Sitemap-Dateien mit Groesse, URL-Count und Validierungs-Status |
| URL-Entwicklung | Chart.js Liniendiagramm (14 Tage, Gesamt + Profile) |
| 14-Tage-Inventar | Tabelle mit Delta-Tooltips (URL-Diff pro Kategorie) |
| Konfiguration | Profiles per File |
Actions
| Method | Beschreibung |
|---|---|
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
| Method | Beschreibung |
|---|---|
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.