public function run() { /** @var \Octo\System\Store\JobStore $jobStore */ $jobStore = Store::get('Job'); /** @var \Octo\System\Store\ScheduledJobStore $scheduleStore */ $scheduleStore = Store::get('ScheduledJob'); // Clean up existing Scheduler jobs from the database: $jobs = $jobStore->getByType('Octo.System.Scheduler'); foreach ($jobs as $job) { if ($job->getId() != $this->job->getId()) { Manager::delete($job); } } // Create the next Scheduler job: Manager::create($this->job, Job::PRIORITY_HIGH, 5); // Schedule other jobs: $jobs = $scheduleStore->getJobsToSchedule(); foreach ($jobs as $item) { $job = new Job(); $job->setType($item->getType()); $data = json_decode($item->getData(), true); if (!empty($data) && is_array($data)) { $job->setData($data); } $job = Manager::create($job); $item->setCurrentJob($job); $scheduleStore->save($item); } return true; }
/** * @param Job $job * @param int $priority * @param int $delay (seconds) * @return Job */ public static function create(Job $createJob, $priority = Job::PRIORITY_NORMAL, $delay = 0) { $createJob->setDateCreated(new \DateTime()); $createJob->setDateUpdated(new \DateTime()); $createJob->setStatus(0); if (!$createJob->getData()) { $createJob->setData([]); } $job = self::save($createJob); if (is_null($job)) { $newData = $createJob->toArray(); unset($newData['id']); $job = self::save(new Job($newData)); if (is_null($job)) { throw new \Exception('Failed to create job: ' . $createJob->getType()); } } $job = self::queue($job, $priority, $delay); return $job; }