Пример #1
0
 /**
  * Adds a job to the JobRunner instance.
  *
  * @param JobDefinition  $definition Job definition (e.g. interval).
  * @throws InvalidArgumentException If the given class does not subclass Job.
  * @return void
  */
 public function addJob(JobDefinition $definition)
 {
     $class = $definition->getClassName();
     $reflection = new ReflectionClass($class);
     if (!$reflection->isSubclassOf(Job::class)) {
         $this->logger->error("{$reflection->getShortName()} does not subclass " . Job::class);
         throw new InvalidArgumentException("{$reflection->getShortName()} must subclass " . Job::class);
     }
     if (isset($this->jobs[$class])) {
         $this->logger->warning("{$reflection->getShortName()} is already registered, skipping");
         return;
     }
     // If we have a run_time and interval set, we will ignore the interval when checking if job can run.
     if (!is_null($definition->getInterval()) && !is_null($definition->getRunTime())) {
         $definition->setInterval(null);
         $this->logger->warning("Both run_time and interval are set for {$reflection->getShortName()} — " . "prioritizing run_time");
     }
     // Set internal definitions
     $definition->setLastRunTimeStart(null);
     $definition->setLastRunTimeFinish(null);
     $definition->setReflection($reflection);
     // Add to job list, using defaults where necessary
     $this->jobs[$class] = $definition;
     $this->createJobBuckets($class);
     $this->logger->info("Registered job {$reflection->getShortName()} -- " . ($definition->getEnabled() ? "enabled" : "disabled"));
 }