setName('indexer:status') ->setDescription('Shows status of Indexer') ->setDefinition($this->getInputList()); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $table = new Table($output); $table->setHeaders(['Title', 'Status', 'Update On', 'Schedule Status', 'Schedule Updated']); $rows = []; $indexers = $this->getIndexers($input); foreach ($indexers as $indexer) { $view = $indexer->getView(); $rowData = [ 'Title' => $indexer->getTitle(), 'Status' => $this->getStatus($indexer), 'Update On' => $indexer->isScheduled() ? 'Schedule' : 'Save', 'Schedule Status' => '', 'Updated' => '', ]; if ($indexer->isScheduled()) { $state = $view->getState(); $rowData['Schedule Status'] = "{$state->getStatus()} ({$this->getPendingCount($view)} in backlog)"; $rowData['Updated'] = $state->getUpdated(); } $rows[] = $rowData; } usort($rows, function ($comp1, $comp2) { return strcmp($comp1['Title'], $comp2['Title']); }); $table->addRows($rows); $table->render(); } /** * @param Indexer\IndexerInterface $indexer * @return string */ private function getStatus(Indexer\IndexerInterface $indexer) { $status = 'unknown'; switch ($indexer->getStatus()) { case \Magento\Framework\Indexer\StateInterface::STATUS_VALID: $status = 'Ready'; break; case \Magento\Framework\Indexer\StateInterface::STATUS_INVALID: $status = 'Reindex required'; break; case \Magento\Framework\Indexer\StateInterface::STATUS_WORKING: $status = 'Processing'; break; } return $status; } /** * @param Mview\ViewInterface $view * @return string */ private function getPendingCount(Mview\ViewInterface $view) { $changelog = $view->getChangelog(); try { $currentVersionId = $changelog->getVersion(); } catch (Mview\View\ChangelogTableNotExistsException $e) { return ''; } $state = $view->getState(); $pendingCount = count($changelog->getList($state->getVersionId(), $currentVersionId)); $pendingString = "$pendingCount"; if ($pendingCount <= 0) { $pendingString = "$pendingCount"; } return $pendingString; } }