info('Starting site ping monitoring...'); $query = Site::where('monitoring_enabled', true); if ($siteId = $this->option('site')) { $query->where('id', $siteId); } $sites = $query->get(); if ($sites->isEmpty()) { $this->warn('No enabled sites found to monitor.'); return self::SUCCESS; } $this->info("Found {$sites->count()} site(s) to ping."); $progressBar = $this->output->createProgressBar($sites->count()); $progressBar->start(); $dispatched = 0; $failed = 0; foreach ($sites as $site) { try { if ($this->option('sync')) { // Run synchronously for testing/debugging CheckSitePing::dispatchSync($site); } else { // Dispatch to queue CheckSitePing::dispatch($site); } $dispatched++; } catch (\Exception $e) { $failed++; Log::error('MonitorPing: Failed to dispatch job', [ 'site_id' => $site->id, 'error' => $e->getMessage(), ]); } $progressBar->advance(); } $progressBar->finish(); $this->newLine(2); $this->info("Successfully dispatched {$dispatched} ping job(s)."); if ($failed > 0) { $this->error("Failed to dispatch {$failed} job(s)."); return self::FAILURE; } return self::SUCCESS; } }