Zum Hauptinhalt springen

Jobs Übersicht

Alle Queue Jobs in Postbox. Jobs werden über den database Queue-Driver verarbeitet und von dedizierten Forge-Workern konsumiert.

Location: app/Jobs/

Job-Tabelle

JobQueueTriesTimeoutUniqueTriggerBeschreibung
ImportWatcherFromUrlimports-youtube3 (maxExceptions)7d retryUntilNeinProcessWatcherImportRunURL aufloesen, Profil erstellen, Watcher verknuepfen
ProcessWatcherImportRunimports-youtube1300sNeinUser-Import (Livewire)Bulk-Import: dispatcht ImportWatcherFromUrl pro Item
SyncYouTubeVideoStatsdefault5 (maxExceptions)600sJaScheduler / AdminVideo-Statistiken via Data API synchronisieren (Full-Sync, 24h retryUntil)
FindRelatedYouTubeChannelsyoutube-related-channels5 (maxExceptions)300sJa (2h)User-Klick / SchedulerAehnliche YouTube-Kanaele via Search API finden
ProcessPendingYouTubeImportsimports-youtube1120sNeinScheduler (5 min)Quota-blockierte Channel-Imports nachverarbeiten
RecalculateRelatedChannelScoresyoutube-related-channels1120sNeinProcessPendingYouTubeImportsRelevance-Scores mit Subscriber-Daten neu berechnen
ResolveRelatedChannelRelationshipyoutube-related-channels5--NeinFindRelatedYouTubeChannelsEinzelne Related-Channel-Beziehung auflösen
FindRelatedInstagramProfilesinstagram-related-profiles3--Ja (1h)User-Klick / SchedulerÄhnliche Instagram-Profile via Keyword-Matching
RecalculateRelatedInstagramScoresinstagram-related-profiles1120sNeinRecalculate CommandRelevance-Scores für Instagram Related neu berechnen
FindCrossPlatformRelatedProfilescross-platform-related3--Ja (1h)Scheduler / User-KlickCross-Platform Matching (YouTube <-> Instagram)
DetectProfileLanguageai-detection324h retryUntilJa (24h)Scheduler (15 min)Sprache/Land/Kategorie/Keywords via Gemini AI erkennen
RetryInactiveProfileScrapeprofile-retry160sNeinprofiles:retry-inactiveDeaktiviertes Profil erneut scrapen
RefreshSocialProfiledefault----NeinDiverseProfil-Daten via Scraper aktualisieren (nur YouTube)
BuildOwnerDashboardSnapshotsdefault----NeinDashboard-ViewDashboard-Rollups für einen Owner berechnen
ConsolidateTagChunkdefault312h retryUntilNeintags:consolidateAI-gesteuerte Tag-Consolidation pro Chunk
SendNotificationEmailemails5--JaNotificationServiceE-Mail senden (Quiet Hours, Flood Guard)
TrackMatomoPageViewmatomo515sNeinTrackPageView MiddlewareMatomo Page View server-seitig tracken
TrackMatomoEventmatomo515sNeinDiverseMatomo Custom Event tracken
ImportContactLinkProfileimports-youtube3 (maxExceptions)24h retryUntilJa (contact-link-{id})Admin-ApprovalKontaktlink → SocialProfile importieren, Watcher erstellen
FetchNewYouTubeVideodefault3--Ja (10min)WebSub / RSSEinzelnes neues Video per Data API abrufen und speichern
GenerateOgImageJobog-images360sJa (10min)og-images:generateOG-Image via Browsershot generieren
SanitizeProfileBatchdefault160sNeinprofiles:sanitizeBatch von Low-Value Profilen auto-deaktivieren
EnsureProfileFromContactLinkprofile-discovery3--Jasocial:discover-from-linksSocialProfile aus Contact-Link-Handle anlegen
AssessDescriptionQualityai-detection3--Jaai:assess-qualityAI-Beschreibungsqualitaet bewerten (Score 1-10)
TranslateProfileDescriptionai-detection3--Jaai:translate-descriptionsAI-Beschreibung in andere Sprachen uebersetzen
ScheduleProfileRelatedCalculationscross-platform-related160sJaImport-EventsRelated-Berechnungen nach Profil-Import planen

Pipeline-Jobs (Bus::batch via pipeline:run)

JobBeschreibung
CalculateProfileMetricsBatchScore + Explore-Metriken fuer ein Profil-Batch berechnen
BuildDailyRollupsBatchDashboard-Rollups pro Tag+Watcher-Range (NTILE 16, timeout 900s, tries 1, early abort bei 3 Chunk-Failures)
BuildLeaderboardsJobWorkspace-Leaderboard-Snapshots erstellen
BuildGlobalLeaderboardsJobGlobale Top/Flop-Listen erstellen
CalculateTrendingScoresBatchTrending-Scores fuer ein Profil-Batch berechnen
RunPipelinePhase3Phase 3: Trending Flags, Videos, Categories, Tag Cache, Explorer Refresh (eigener Job fuer frischen Worker-Prozess)

Queue-Worker (Forge)

Alle Worker laufen als Daemons auf dem Produktionsserver:

QueueTimeoutTriesBeschreibung
imports-youtube120s3YouTube Channel Updates
imports-youtube-priority120s3Prioritäts-Updates (Leaderboard, PRO)
imports-youtube-video120s3Video-Statistiken Sync
imports-youtube-video-priority120s3Prioritäts-Video-Sync
youtube-related-channels300s2Related Channels Discovery
ai-detection60s3Gemini AI Detection (Rate-Limited: 15/min)
# Beispiel Worker-Konfiguration
php8.4 artisan queue:work database --sleep=5 --daemon --quiet \
--timeout=120 --tries=3 --queue=imports-youtube

Collector-basierte Jobs

Instagram Daily Scrapes laufen nicht über Laravel Queues, sondern über das Collector-System:

  • Browser-Extension least Jobs via /api/collector/jobs/lease
  • Ergebnisse kommen via /api/collector/jobs/{id}/complete zurück
  • Verarbeitung durch InstagramDailyScrapeProcessor Service

Retry-Strategien

Exponential Backoff

Die meisten Jobs nutzen steigende Backoff-Intervalle:

// ImportWatcherFromUrl
public function backoff(): array
{
return [30, 120, 600]; // 30s, 2min, 10min
}

// DetectProfileLanguage
public array $backoff = [60, 300, 900]; // 1min, 5min, 15min

// ResolveRelatedChannelRelationship
public function backoff(): array
{
return [60, 300, 600, 1800, 3600]; // 1min bis 1h
}

maxExceptions vs. tries

ImportWatcherFromUrl nutzt maxExceptions statt tries, damit release() Aufrufe (z.B. bei Quota-Pause) nicht als Fehlversuche zählen:

public int $maxExceptions = 3;

public function retryUntil(): \DateTime
{
return now()->addDays(7); // 7 days allows multiple quota pauses
}

Rate Limiting

JobMiddlewareLimitKonfiguration
DetectProfileLanguageRateLimited('ai-detection')15/minAI_ENHANCER_RATE_PER_MINUTE
FindRelatedYouTubeChannelsRateLimited('youtube-research')Konfigurierbarpostbox.youtube_research
ConsolidateTagChunkRateLimited('tag-consolidation')Konfigurierbarpostbox.tag_consolidation

Unique Jobs

Jobs mit ShouldBeUnique verhindern Duplikate in der Queue:

JobuniqueForuniqueId
DetectProfileLanguage24hdetect-language-{profileId}
FindRelatedInstagramProfiles1hfind-related-instagram-profiles-{profileId}
FindRelatedYouTubeChannels2hfind-related-yt-{profileId}
FindCrossPlatformRelatedProfiles1hfind-cross-platform-related-{profileId}
SyncYouTubeVideoStats--Default (profileId)
SendNotificationEmail--Default
ImportContactLinkProfile--contact-link-{id}
FetchNewYouTubeVideo10minDefault (videoId)
GenerateOgImageJob--Default
AssessDescriptionQuality--Default (profileId)
TranslateProfileDescription--Default (profileId)
ScheduleProfileRelatedCalculations--Default (profileId)