7
7
8
8
use Symfony \Component \Console \Input \InputInterface ;
9
9
use Symfony \Component \Console \Output \OutputInterface ;
10
+ use Magento \Framework \Indexer ;
11
+ use Magento \Framework \Mview ;
10
12
11
13
/**
12
14
* Command for displaying status of indexers.
@@ -30,21 +32,84 @@ protected function configure()
30
32
*/
31
33
protected function execute (InputInterface $ input , OutputInterface $ output )
32
34
{
35
+ $ table = $ this ->getHelperSet ()->get ('table ' );
36
+ $ table ->setHeaders (['Title ' , 'Status ' , 'Update On ' , 'Schedule Status ' , 'Schedule Updated ' ]);
37
+
38
+ $ rows = [];
39
+
33
40
$ indexers = $ this ->getIndexers ($ input );
34
41
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 ();
46
56
}
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 ;
48
86
}
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 ;
49
114
}
50
115
}
0 commit comments