Skip to content

Commit cd45716

Browse files
MAGETWO-83478: Add command to view mview state and queue #12050
2 parents f4dc65b + 6a3aa8c commit cd45716

File tree

2 files changed

+329
-46
lines changed

2 files changed

+329
-46
lines changed

app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php

+77-12
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
use Symfony\Component\Console\Input\InputInterface;
99
use Symfony\Component\Console\Output\OutputInterface;
10+
use Magento\Framework\Indexer;
11+
use Magento\Framework\Mview;
1012

1113
/**
1214
* Command for displaying status of indexers.
@@ -30,21 +32,84 @@ protected function configure()
3032
*/
3133
protected function execute(InputInterface $input, OutputInterface $output)
3234
{
35+
$table = $this->getHelperSet()->get('table');
36+
$table->setHeaders(['Title', 'Status', 'Update On', 'Schedule Status', 'Schedule Updated']);
37+
38+
$rows = [];
39+
3340
$indexers = $this->getIndexers($input);
3441
foreach ($indexers as $indexer) {
35-
$status = 'unknown';
36-
switch ($indexer->getStatus()) {
37-
case \Magento\Framework\Indexer\StateInterface::STATUS_VALID:
38-
$status = 'Ready';
39-
break;
40-
case \Magento\Framework\Indexer\StateInterface::STATUS_INVALID:
41-
$status = 'Reindex required';
42-
break;
43-
case \Magento\Framework\Indexer\StateInterface::STATUS_WORKING:
44-
$status = 'Processing';
45-
break;
42+
$view = $indexer->getView();
43+
44+
$rowData = [
45+
'Title' => $indexer->getTitle(),
46+
'Status' => $this->getStatus($indexer),
47+
'Update On' => $indexer->isScheduled() ? 'Schedule' : 'Save',
48+
'Schedule Status' => '',
49+
'Updated' => '',
50+
];
51+
52+
if ($indexer->isScheduled()) {
53+
$state = $view->getState();
54+
$rowData['Schedule Status'] = "{$state->getStatus()} ({$this->getPendingCount($view)} in backlog)";
55+
$rowData['Updated'] = $state->getUpdated();
4656
}
47-
$output->writeln(sprintf('%-50s ', $indexer->getTitle() . ':') . $status);
57+
58+
$rows[] = $rowData;
59+
}
60+
61+
usort($rows, function ($comp1, $comp2) {
62+
return strcmp($comp1['Title'], $comp2['Title']);
63+
});
64+
65+
$table->addRows($rows);
66+
$table->render($output);
67+
}
68+
69+
/**
70+
* @param Indexer\IndexerInterface $indexer
71+
* @return string
72+
*/
73+
private function getStatus(Indexer\IndexerInterface $indexer)
74+
{
75+
$status = 'unknown';
76+
switch ($indexer->getStatus()) {
77+
case \Magento\Framework\Indexer\StateInterface::STATUS_VALID:
78+
$status = 'Ready';
79+
break;
80+
case \Magento\Framework\Indexer\StateInterface::STATUS_INVALID:
81+
$status = 'Reindex required';
82+
break;
83+
case \Magento\Framework\Indexer\StateInterface::STATUS_WORKING:
84+
$status = 'Processing';
85+
break;
4886
}
87+
return $status;
88+
}
89+
90+
/**
91+
* @param Mview\ViewInterface $view
92+
* @return string
93+
*/
94+
private function getPendingCount(Mview\ViewInterface $view)
95+
{
96+
$changelog = $view->getChangelog();
97+
98+
try {
99+
$currentVersionId = $changelog->getVersion();
100+
} catch (Mview\View\ChangelogTableNotExistsException $e) {
101+
return '';
102+
}
103+
104+
$state = $view->getState();
105+
106+
$pendingCount = count($changelog->getList($state->getVersionId(), $currentVersionId));
107+
108+
$pendingString = "<error>$pendingCount</error>";
109+
if ($pendingCount <= 0) {
110+
$pendingString = "<info>$pendingCount</info>";
111+
}
112+
113+
return $pendingString;
49114
}
50115
}

0 commit comments

Comments
 (0)