Beispiel #1
0
 private function getTravis($return = array(), $with = null)
 {
     $output = $this->getMock('Symfony\\Component\\Console\\Output\\OutputInterface');
     $travis = new Travis($output);
     $travis->setBrowser($this->getBrowserMock($return, $with));
     return $travis;
 }
 /**
  * Callback called from RabbitMQ to update a bundle
  *
  * @param AMQPMessage $msg serialized Message
  */
 public function execute(AMQPMessage $msg)
 {
     // Retrieve informations from the message
     $message = json_decode($msg->body, true);
     if (!isset($message['bundle_id'])) {
         if ($this->logger) {
             $this->logger->err('Bundle id is missing : skip message');
         }
         return;
     }
     $bundles = $this->em->getRepository('Knp\\Bundle\\KnpBundlesBundle\\Entity\\Bundle');
     // Retrieve Bundle from database
     /* @var $bundle Bundle */
     if (!($bundle = $bundles->find($message['bundle_id']))) {
         if ($this->logger) {
             $this->logger->warn(sprintf('Unable to retrieve bundle #%d', $message['bundle_id']));
         }
         return;
     }
     if (isset($message['action']) && 'remove' == $message['action']) {
         if ($this->logger) {
             $this->logger->warn(sprintf('Bundle "%s" will be removed', $bundle->getName()));
         }
         $this->removeBundle($bundle);
         return;
     }
     if ($this->logger) {
         $this->logger->info(sprintf('Retrieved bundle %s', $bundle->getName()));
     }
     $keywordRepo = $this->em->getRepository('Knp\\Bundle\\KnpBundlesBundle\\Entity\\Keyword');
     $scoreRepo = $this->em->getRepository('Knp\\Bundle\\KnpBundlesBundle\\Entity\\Score');
     for ($i = 0; $i < self::MAX_GITHUB_TRIALS; $i++) {
         try {
             if (!$this->githubRepoApi->update($bundle)) {
                 if ($this->logger) {
                     $this->logger->warn(sprintf('Update of "%s" failed', $bundle->getName()));
                 }
                 return;
             }
             $this->indexer->indexBundle($bundle);
             $this->updateContributors($bundle);
             $this->updateKeywords($bundle, $keywordRepo);
             $this->updateScore($bundle, $scoreRepo);
             if ($bundle->getUsesTravisCi()) {
                 $this->travis->update($bundle);
             }
         } catch (ApiLimitExceedException $e) {
             if ($this->logger) {
                 $this->logger->err(sprintf('Bundle %s got a %s for trial %s', $bundle->getName(), $e->getMessage(), $i + 1));
             }
             sleep(60 * ($i + 1));
             continue;
         } catch (\Exception $e) {
             if ($this->logger) {
                 $this->logger->err('[' . get_class($e) . ' / ' . $e->getFile() . ':' . $e->getLine() . '] ' . $e->getMessage());
             }
         }
         break;
     }
 }