X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FImportBundle%2FController%2FImportController.php;h=7e4fd17442f6235b27f9a0f651002f28f0f525e6;hb=2490f61dca635026a3eb9b5e9b6978b1981b1172;hp=6ebd6a0a936670eb417d84800797e6549dccc310;hpb=77a7752a592af9ac821621a34d9955533baf40a0;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/ImportBundle/Controller/ImportController.php b/src/Wallabag/ImportBundle/Controller/ImportController.php index 6ebd6a0a..7e4fd174 100644 --- a/src/Wallabag/ImportBundle/Controller/ImportController.php +++ b/src/Wallabag/ImportBundle/Controller/ImportController.php @@ -2,60 +2,98 @@ namespace Wallabag\ImportBundle\Controller; -use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; -use Symfony\Component\Console\Input\ArrayInput; -use Symfony\Component\Console\Output\NullOutput; -use Symfony\Component\HttpFoundation\Request; -use Wallabag\ImportBundle\Command\ImportCommand; -use Wallabag\ImportBundle\Form\Type\UploadImportType; +use Symfony\Bundle\FrameworkBundle\Controller\Controller; class ImportController extends Controller { /** - * @Route("/import", name="import") + * @Route("/", name="import") + */ + public function importAction() + { + return $this->render('WallabagImportBundle:Import:index.html.twig', [ + 'imports' => $this->get('wallabag_import.chain')->getAll(), + ]); + } + + /** + * Display how many messages are queue (both in Redis and RabbitMQ). + * Only for admins. */ - public function importAction(Request $request) + public function checkQueueAction() { - $importForm = $this->createForm(new UploadImportType()); - $importForm->handleRequest($request); - $user = $this->getUser(); - - if ($importForm->isValid()) { - $file = $importForm->get('file')->getData(); - $name = $user->getId().'.json'; - $dir = __DIR__.'/../../../../web/uploads/import'; - - if (in_array($file->getMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($dir, $name)) { - $command = new ImportCommand(); - $command->setContainer($this->container); - $input = new ArrayInput(array('userId' => $user->getId())); - $return = $command->run($input, new NullOutput()); - - if ($return == 0) { - $this->get('session')->getFlashBag()->add( - 'notice', - 'Import successful' - ); - } else { - $this->get('session')->getFlashBag()->add( - 'notice', - 'Import failed' - ); - } - - return $this->redirect('/'); - } else { - $this->get('session')->getFlashBag()->add( - 'notice', - 'Error while processing import. Please verify your import file.' - ); + $nbRedisMessages = null; + $nbRabbitMessages = null; + $redisNotInstalled = false; + $rabbitNotInstalled = false; + + if (!$this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN')) { + return $this->render('WallabagImportBundle:Import:check_queue.html.twig'); + } + + if ($this->get('craue_config')->get('import_with_rabbitmq')) { + // in case rabbit is activated but not installed + try { + $nbRabbitMessages = $this->getTotalMessageInRabbitQueue('pocket') + + $this->getTotalMessageInRabbitQueue('readability') + + $this->getTotalMessageInRabbitQueue('wallabag_v1') + + $this->getTotalMessageInRabbitQueue('wallabag_v2') + + $this->getTotalMessageInRabbitQueue('firefox') + + $this->getTotalMessageInRabbitQueue('chrome') + + $this->getTotalMessageInRabbitQueue('instapaper') + + $this->getTotalMessageInRabbitQueue('pinboard') + ; + } catch (\Exception $e) { + $rabbitNotInstalled = true; } + } elseif ($this->get('craue_config')->get('import_with_redis')) { + $redis = $this->get('wallabag_core.redis.client'); + + try { + $nbRedisMessages = $redis->llen('wallabag.import.pocket') + + $redis->llen('wallabag.import.readability') + + $redis->llen('wallabag.import.wallabag_v1') + + $redis->llen('wallabag.import.wallabag_v2') + + $redis->llen('wallabag.import.firefox') + + $redis->llen('wallabag.import.chrome') + + $redis->llen('wallabag.import.instapaper') + + $redis->llen('wallabag.import.pinboard') + ; + } catch (\Exception $e) { + $redisNotInstalled = true; + } + } + + return $this->render('WallabagImportBundle:Import:check_queue.html.twig', [ + 'nbRedisMessages' => $nbRedisMessages, + 'nbRabbitMessages' => $nbRabbitMessages, + 'redisNotInstalled' => $redisNotInstalled, + 'rabbitNotInstalled' => $rabbitNotInstalled, + ]); + } + + /** + * Count message in RabbitMQ queue. + * It get one message without acking it (so it'll stay in the queue) + * which will include the total of *other* messages in the queue. + * Adding one to that messages will result in the full total message. + * + * @param string $importService The import service related: pocket, readability, wallabag_v1 or wallabag_v2 + * + * @return int + */ + private function getTotalMessageInRabbitQueue($importService) + { + $message = $this + ->get('old_sound_rabbit_mq.import_' . $importService . '_consumer') + ->getChannel() + ->basic_get('wallabag.import.' . $importService); + + if (null === $message) { + return 0; } - return $this->render('WallabagImportBundle:Import:index.html.twig', array( - 'form' => array( - 'import' => $importForm->createView(), ), - )); + return $message->delivery_info['message_count'] + 1; } }