crash = $crash; } public function __get($key): mixed { switch ($key) { case 'subject': return __METHOD__; default: return NULL; } } /** * Execute the job. */ public function handle(): void { $u = Address::select([ 'a.id', 'addresses.system_id', 'addresses.zone_id', 'addresses.region_id', 'addresses.host_id', 'addresses.node_id', 'addresses.point_id', 'addresses.hub_id', 'addresses.role', DB::raw('sum(a.uncollected_echomail) as uncollected_echomail'), DB::raw('sum(a.uncollected_netmail) as uncollected_netmail'), DB::raw('sum(a.uncollected_files) as uncollected_files') ]) ->from(Address::UncollectedEchomail()->union(Address::UncollectedNetmail())->union(Address::UncollectedFiles()),'a') ->where('systems.active',true) ->where('addresses.active',TRUE) ->where('zones.active',TRUE) ->where('domains.active',TRUE) ->join('addresses',['addresses.id'=>'a.id']) ->join('systems',['systems.id'=>'addresses.system_id']) ->join('zones',['zones.id'=>'addresses.zone_id']) ->join('domains',['domains.id'=>'zones.domain_id']) ->where(function($query) { return $query->whereNull('autohold') ->orWhere('autohold',FALSE); }) ->when(! is_null($this->crash),function($query) { return $query->when( $this->crash, function($query) { return $query->where('pollmode',$this->crash); }, function($query) { return $query->whereNotNull('pollmode'); } ); }) ->groupBy('addresses.system_id','a.id','addresses.zone_id','addresses.region_id','addresses.host_id','addresses.node_id','addresses.point_id','addresses.hub_id','addresses.role') ->with(['system','zone.domain']) ->get(); // Return the system we poll $u = $u->transform(function($item) { if ($x=$item->parent()) { $x->uncollected_echomail = $item->uncollected_echomail; $x->uncollected_netmail = $item->uncollected_netmail; $x->uncollected_files = $item->uncollected_files; return $x; } else { return $item; } }); foreach ($u->groupBy('ftn') as $oo) { if (Job::where('queue','poll')->get()->pluck('command.address.id')->search(($x=$oo->first())->id) === FALSE) { Log::info(sprintf('%s:- Polling [%s] - we have mail for [%d] links. (%d Netmail,%d Echomail,%d Files)', self::LOGKEY, $x->ftn, $oo->count(), $oo->sum('uncollected_netmail'), $oo->sum('uncollected_echomail'), $oo->sum('uncollected_files'), )); AddressPoll::dispatch($x); } else { Log::notice(sprintf('%s:= Not scheduling poll to [%s], there is already one in the queue',self::LOGKEY,$x->ftn)); } } } }