+ } elseif (($active > $queues) && ($active < $maxqueues) && ($load < $maxsysload)) {
+ $max_idletime = DI::config()->get('system', 'worker_max_idletime');
+ $last_check = DI::cache()->get(self::LAST_CHECK);
+ $last_date = $last_check ? date('c', $last_check) : '';
+ if (($max_idletime > 0) && (time() > $last_check + $max_idletime) && !DBA::exists('workerqueue', ["`done` AND `executed` > ?", DateTimeFormat::utc('now - ' . $max_idletime . ' second')])) {
+ DI::cache()->set(self::LAST_CHECK, time(), Duration::HOUR);
+ Logger::info('The last worker execution had been too long ago.', ['last' => $last_check, 'last-check' => $last_date, 'seconds' => $max_idletime, 'load' => $load, 'max_load' => $maxsysload, 'active_worker' => $active, 'max_worker' => $maxqueues]);
+ return false;
+ } elseif ($max_idletime > 0) {
+ Logger::debug('Maximum idletime not reached.', ['last' => $last_check, 'last-check' => $last_date, 'seconds' => $max_idletime, 'load' => $load, 'max_load' => $maxsysload, 'active_worker' => $active, 'max_worker' => $maxqueues]);
+ }