Ejemplo n.º 1
0
 /**
  * @param string $jobCode
  * @return array
  */
 protected function getJobConfig($jobCode)
 {
     foreach ($this->_cronConfig->getJobs() as $jobGroup) {
         foreach ($jobGroup as $job) {
             if ($job['name'] == $jobCode) {
                 return $job;
             }
         }
     }
     return [];
 }
 /**
  * Generate cron schedule
  *
  * @param string $groupId
  * @return $this
  */
 protected function _generate($groupId)
 {
     /**
      * check if schedule generation is needed
      */
     $lastRun = (int) $this->_cache->load(self::CACHE_KEY_LAST_SCHEDULE_GENERATE_AT . $groupId);
     $rawSchedulePeriod = (int) $this->_scopeConfig->getValue('system/cron/' . $groupId . '/' . self::XML_PATH_SCHEDULE_GENERATE_EVERY, \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
     $schedulePeriod = $rawSchedulePeriod * self::SECONDS_IN_MINUTE;
     if ($lastRun > $this->timezone->scopeTimeStamp() - $schedulePeriod) {
         return $this;
     }
     $schedules = $this->_getPendingSchedules();
     $exists = [];
     /** @var Schedule $schedule */
     foreach ($schedules as $schedule) {
         $exists[$schedule->getJobCode() . '/' . $schedule->getScheduledAt()] = 1;
     }
     /**
      * generate global crontab jobs
      */
     $jobs = $this->_config->getJobs();
     $this->_generateJobs($jobs[$groupId], $exists, $groupId);
     /**
      * save time schedules generation was ran with no expiration
      */
     $this->_cache->save($this->timezone->scopeTimeStamp(), self::CACHE_KEY_LAST_SCHEDULE_GENERATE_AT . $groupId, ['crontab'], null);
     return $this;
 }