Zum Hauptinhalt springen

Commands Übersicht

Postbox nutzt Artisan Commands für alle wiederkehrenden Aufgaben: Scraping, Metriken-Berechnung, Wartung und Monitoring. Alle Scheduled Commands laufen in UTC und sind in routes/console.php konfiguriert.

Data Collection

SignatureScheduleBeschreibung
social:scrape-daily-followersAlle 2h (ungerade)YouTube Daily Scrape mit Rotation-Buckets
social:queue-daily-instagramAlle 2h (gerade)Instagram-Scrapes in Collector-Queue einreihen
social:detect-languages --queueAlle 15 MinAI-Spracherkennung für Profile einreihen
watchers:queue-rescrape {type}ManuellRe-Scrape nach Metriken-Range queuen

Nightly Pipeline

SignatureScheduleBeschreibung
pipeline:run01:00 taeglichZentraler Orchestrator: Score+Explore (Batch 1A), Rollups (Batch 1B), Leaderboards (Batch 2A+2B), Trending (Batch 2C), Phase 3 als eigenstaendiger Job (Trending Flags, Videos, Categories, Tag Cache, Explorer Refresh). --phase=phase3 fuer manuellen Re-Run.

Durch pipeline:run ersetzte Commands (Legacy)

Diese Commands existieren weiterhin fuer manuelle Ausfuehrung, werden aber nicht mehr einzeln scheduled:

SignatureBeschreibung
dashboard:rollup-daily-metrics-rangeDashboard-Rollups aus taeglichen Metriken
dashboard:rollup-leaderboardsLeaderboard-Snapshots vorberechnen
dashboard:rollup-global-leaderboardsGlobale Top/Flop-Listen (systemweit)
scores:calculatePostbox-Scores fuer alle Profile
explore:calculate --type=allExplore-Metriken, Trending, Kategorien
tags:refresh-cacheTag-Cache fuer Browse-Autocomplete
cross-platform:queue-relatedCross-Platform Related Berechnungen
public-explorer:refreshPublic Explorer Profil-Cache

Dashboard & Metriken

SignatureScheduleBeschreibung
youtube:calculate-video-scores21:00 taeglichVideo Performance Scores (VPS)
youtube:aggregate-publishing-statsMontag 03:00Publishing-Statistiken pro Kanal/Wochentag aggregieren

YouTube

SignatureScheduleBeschreibung
youtube:sync-video-stats14:00 täglichVideo-Statistiken für Auto-Sync-Profile
youtube:auto-fill-related-channelsAlle 5 MinRelated Channels bei freiem Quota füllen
youtube:manage-websub --all06:00 täglichWebSub-Subscriptions erneuern, erstellen, bereinigen
youtube:poll-rss-feedsAlle 30 MinRSS-Feeds pollen (WebSub-Fallback für neue Videos)
youtube-research:prune01:30 täglichResearch-Queries > 30 Tage löschen

Instagram / Collector

SignatureScheduleBeschreibung
collector:token {name}ManuellCollector-Client + Sanctum Token erstellen
collector:retry-failedManuellFehlgeschlagene Collector-Jobs erneut versuchen
collector:requeue-expired-leasesAlle 5 MinVerwaiste Collector-Jobs mit abgelaufenen Leases requeuen
collector:prune-logs --days=7Alle 6hCollector-Logs nach Aufbewahrungsfrist löschen
instagram:queue-relatedManuellInstagram Related Profiles berechnen (Bulk oder Einzelprofil, keine API-Kosten)
instagram:prioritize-rotationManuellQueued Daily-Scrape-Jobs vor Import-Jobs priorisieren
instagram:deprioritize-non-rotationManuellNon-rotation Jobs (Imports, neue Profile) auf niedrige Priority setzen

AI Enhancement

SignatureScheduleBeschreibung
social:detect-languagesAlle 15 Min (--queue)Sprache/Land/Kategorie via Gemini AI erkennen
ai:prune-logs --days=72x täglichFehlgeschlagene AI-Logs löschen
ai:retry-failedSonntags 08:00Fehlgeschlagene AI-Detections erneut dispatchen
tags:consolidateSonntags 18:00AI-Tags via Gemini konsolidieren
keywords:update-stopwordsSonntags 02:00Dynamische Stopword-Liste aus Keyword-Häufigkeit

Admin & Wartung

SignatureScheduleBeschreibung
watchers:backfill-admin-workspaceStündlichProfile ins Admin-Workspace spiegeln
watchers:resume-importsAlle 5 MinPausierte Watcher-Imports fortsetzen
watchers:prune-by-metrics {type}ManuellWatcher nach Metriken löschen
watchers:prune-to-max {type}ManuellWatcher auf Maximum pro Plattform begrenzen
profiles:retry-inactive22:00 täglichDeaktivierte Profile erneut versuchen
profiles:sanitize03:30 taeglichLow-Value Profile auto-deaktivieren (Queue-basiert via SanitizeProfileBatch)
cross-platform:auto-fill-relatedAlle 5 MinCross-Platform Related in kleinen Batches
imports:retry-failedManuellFehlgeschlagene Import-Runs wiederholen (auch --source=research für Research-Recovery)
queue:prune-staleManuellVeraltete Queue-Jobs löschen
notifications:cleanup03:00 täglichAbgelaufene Notifications löschen
db:prune-historical-data01:00 täglichAlte Metriken, Rollups, Snapshots kürzen

SEO & Web Vitals

SignatureScheduleBeschreibung
sitemap:generate07:30 taeglichXML-Sitemaps generieren (nach Explorer Refresh via pipeline:run)
seo:sync-search-console08:00 täglichGoogle Search Console Metriken synchronisieren
seo:prune-metricsSonntag 03:30Search Console + Web Vitals Daten > 90 Tage löschen
seo:web-vitals-reportMontag 09:00Wöchentlicher Web Vitals Report mit Degradation-Erkennung

OG-Images & Storage

SignatureScheduleBeschreibung
og-images:generate08:00 täglich (--missing-only)OG-Images für Public Explorer Profile generieren (Browsershot)
og-images:cleanupSonntag 04:00Verwaiste OG-Images löschen
storage:migrate-to-r2ManuellLokale Dateien nach Cloudflare R2 migrieren
storage:verify-r2ManuellR2-Integrität gegen lokale Dateien prüfen
storage:sync-r2-backupSonntag 04:30Primary R2 Bucket in Backup Bucket syncen
cloudflare:fetch-r2-metricsStündlichR2-Metriken via Cloudflare GraphQL/REST API abrufen

Error Monitoring

SignatureScheduleBeschreibung
error-monitor:rollup-daily01:10 täglichError-Page-Logs → Daily Stats aggregieren
error-monitor:check-anomaliesStündlichAnomalie-Schwellwerte prüfen + Alert-Email (max 1/h)
error-monitor:pruneSonntag 03:00Error-Logs + Daily Stats > 365 Tage löschen
error-monitor:weekly-reportMontag 08:00Wöchentlicher Error-Report an Admins

Health & Monitoring

SignatureScheduleBeschreibung
health:check-daily-scrapesAlle 2h (:30 ungerade)Alert-Email bei fehlenden Scrape-Jobs
queue:metrics-snapshotAlle 15 MinQueue-Metriken für Admin-Charts
queue:retry-failed-rangeManuellFailed Jobs in Zeitraum erneut queuen
google:sync-api-usageStündlichGoogle API Quota-Nutzung synchronisieren
server:check-alertsAlle 5 MinServer-Metriken gegen Alert-Schwellwerte prüfen
db:snapshotAlle 15 MinPostgreSQL-Metriken Snapshot (Connections, TPS, Cache-Hit, Dead Tuples)
db:snapshot --slow-queries --top=50StündlichTop 50 Slow Queries aus pg_stat_statements
db:snapshot --prune02:15 täglichDB-Monitoring-Snapshots + Slow-Query-Logs über Retention löschen
db:activityManuellLive PostgreSQL-Aktivität anzeigen (CLI)
server:snapshotAlle 5 MinServer-Metriken aus Pulse in eigene Tabelle erfassen
server:snapshot --prune02:20 täglichServer-Metriken > 90 Tage löschen
server:rollup-hourly03:00 täglich5-Min-Snapshots zu stündlichen Durchschnittswerten aggregieren
pulse:check-sizeSonntag 03:30Pulse-Tabellengröße prüfen, Alert bei > 2 GB
pulse:purge2×/Tag (02:30 + 14:30)Pulse-Daten > Retention löschen
vantage:cleanup-stuck --timeout=201:22 täglichStuck "processing" Jobs > 2h als failed markieren
vantage:prune --status=completed01:25 täglichCompleted Vantage-Jobs > 24h löschen
vantage:prune --status=failed01:30 täglichFailed Vantage-Jobs > 4 Tage löschen
reverb:startDaemonLaravel Reverb WebSocket Server

Bilder

SignatureScheduleBeschreibung
images:generate-variantsManuellBackfill: Optimierte Bild-Varianten (WebP/AVIF) für bestehende Profilbilder und Video-Thumbnails generieren
images:cleanup-orphanedManuellVerwaiste Varianten-Dateien ohne DB-Eintrag finden und entfernen

Sonstige

SignatureScheduleBeschreibung
notifications:rollup-stats00:30 täglichMail-Log in tägliche Statistiken aggregieren
social:discover-from-linksSonntag 09:00Auto-Discovery: SocialProfiles aus Contact-Link-Handles anlegen
profiles:backfill-descriptionsManuellparsed_links für Profile ohne Daten nachparsen
profiles:backfill-instagram-descriptionsManuellInstagram Bio ins description-Feld für AI Enhancer kopieren
profiles:sync-parsed-linksManuellparsed_links JSONB in social_profile_links sync
profiles:backfill-followers-countManuelllatest_followers_count aus Metriken nachfüllen
social:recalculate-related-scoresManuellRelevance-Scores für Related Channels neu berechnen
related:find-stuckManuellHängengebliebene Related-Suchen finden (alle Systeme: YouTube, Instagram, Cross-Platform)
compare:send-remindersManuellWöchentliche Comparison-Reminder an User mit aktiven Subscriptions senden
ai:assess-qualityManuellEinmalige Qualitätsbewertung englischer AI-Beschreibungen (Score 1-10)
ai:translate-descriptionsManuellAI-Beschreibungen in andere Sprachen übersetzen
mail:resumeManuellFlood-Guard-Pause für Mailversand aufheben
mail:statusManuellAktuellen Mail-System-Status anzeigen
queue:prune-failed --hours=16801:15 taeglichFailed Jobs > 7 Tage loeschen (Laravel built-in)
api-tokens:check-alerts08:00 taeglichInaktive/ablaufende API Tokens pruefen und Admins benachrichtigen
favorites:cleanupManuellVerwaiste Favoriten-Watcher bereinigen
instagram:auto-fill-relatedAlle 5 MinInstagram Related in kleinen Batches (5/Run)

Zeitliche Verteilung

Stunde  | Jobs
--------|------------------------------------------------------------------
00:00 | Instagram Queue
00:30 | Notification Stats Rollup
01:00 | pipeline:run (Scores, Explore, Rollups, Leaderboards, Trending, Tags, Cross-Platform, Explorer Refresh), Historical Data Prune
01:10 | Error Monitor Rollup Daily
01:15 | Prune Failed Jobs
01:20 | Pulse Purge (1. Lauf)
01:22 | Vantage Stuck Cleanup
01:25 | Vantage Prune Completed
01:30 | Vantage Prune Failed, YouTube Research Prune
02:00 | Instagram Queue
02:15 | DB Snapshot Prune
02:20 | Server Metrics Prune
02:30 | Pulse Purge (2. Lauf)
03:00 | Notifications Cleanup, Server Rollup Hourly, Publishing Stats (Montag)
03:15 | Model Prune (ApiTokenUsageLog)
03:30 | Profiles Sanitize
06:00 | Instagram Queue, WebSub Manage, R2 Snapshot (1. Lauf)
07:30 | Sitemap Generate
08:00 | OG-Images Generate, SEO Sync, API Token Alerts
09:00 | Erster YouTube Scrape (dann alle 2h ungerade), Web Vitals Report (Montag), Auto-Discovery Retry (Sonntag)
10:30 | AI Prune Logs (1. Lauf)
11:15 | Collector Prune Logs (1. Lauf)
14:00 | YouTube Video Stats Sync
18:00 | R2 Snapshot (2. Lauf)
21:00 | YouTube Video Scores
22:00 | Profiles Retry Inactive
22:30 | AI Prune Logs (2. Lauf)
... | (Scrapes alle 2h, RSS-Polling alle 30min, Auto-Fill alle 5min)

Alle wichtigen Scheduled Commands werden via CronHeartbeatMonitorService überwacht. Verpasste Ausführungen lösen Alert-E-Mails an Admins aus (siehe cron:check-heartbeats). Die meisten Commands nutzen .withoutOverlapping(minutes) um parallele Ausführungen zu verhindern.