/**
  * @inheritdoc
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $action = $input->getArgument('action');
     $payload = $input->getArgument('payload');
     $priority = $input->getOption('priority');
     $delay = $input->getOption('delay');
     $ttr = $input->getOption('ttr');
     $dql = $input->getOption('dql');
     if ($payload && $dql) {
         throw new \InvalidArgumentException('You cannot provide both a <comment>payload</comment> and a <comment>--dql</comment> query.');
     }
     if (!empty($payload)) {
         $job = $this->manager->add($action, $payload, $delay, $priority, $ttr);
         $output->writeln(sprintf('Scheduled job <info>%d</info> with payload <info>%s</info>', $job, json_encode($payload)));
         return 0;
     }
     if (empty($dql)) {
         throw new \InvalidArgumentException('You must provide either a <comment>payload</comment> or a <comment>--dql</comment> query.');
     }
     if (!$this->doctrine) {
         $output->writeln('<error>Doctrine is required for the --dql option</error>');
         return 1;
     }
     $doctrine = $this->doctrine->getManager();
     if (!$doctrine instanceof EntityManagerInterface) {
         $output->writeln('<error>Sorry, only Doctrine\'s ORM is supported at this point. You\'re welcome to submit a PR of course!</error>');
         return 1;
     }
     $meta = null;
     $query = $doctrine->createQuery($dql);
     foreach ($query->iterate() as list($entity)) {
         if (!$meta) {
             $meta = $doctrine->getClassMetadata(get_class($entity));
         }
         $job = $this->manager->addForObject($action, $entity, $delay, $priority, $ttr);
         $output->writeln(sprintf('Scheduled job <info>%d</info> for entity <info>%s: %s</info>', $job, json_encode($meta->getIdentifierValues($entity)), $this->entityToString($entity)));
         $doctrine->clear();
     }
     return 0;
 }
 /**
  * @expectedException        \InvalidArgumentException
  * @expectedExceptionMessage Action "test" is not defined in QueueManager
  */
 public function testAddForMissingAction()
 {
     $this->manager->add('test', []);
 }
 /**
  * @param RateLimitEvent $event
  */
 public function onRateLimit(RateLimitEvent $event)
 {
     $payload = [$event->getScraper()->getId(), $event->getUrl()];
     $this->queueManager->add(ScrapeUrlExecutor::NAME, $payload, $event->getRetryDate()->getTimestamp() - time());
 }
Ejemplo n.º 4
0
 /**
  * @param ScrapeUrlEvent $event
  */
 public function onScrapeNextUrl(ScrapeUrlEvent $event)
 {
     $this->queueManager->add(ScrapeUrlExecutor::NAME, [$event->getScraper()->getId(), $event->getUrl()]);
 }