Knp\Bundle\KnpBundlesBundle\Consumer\UpdateBundleConsumer::execute PHP Method

execute() public method

Callback called from RabbitMQ to update a bundle
public execute ( PhpAmqpLib\Message\AMQPMessage $msg )
$msg PhpAmqpLib\Message\AMQPMessage 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;
        }
    }