Skip to content

Commit dd34f3e

Browse files
ENGCOM-6977: Add 'schedule status' column to admin indexer grid #25297
- Merge Pull Request #25297 from fredden/magento2:admin-indexer-info - Merged commits: 1. c0e73a8 2. e39b012 3. 1a1cba6 4. 7200593 5. b74b7a4 6. c1f8adb 7. b906d2b 8. e6e4bb8 9. 9e6a626 10. 52fdef4 11. 3773134 12. 969e003 13. 106e244
2 parents a66a2d5 + 106e244 commit dd34f3e

File tree

9 files changed

+204
-2
lines changed

9 files changed

+204
-2
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Indexer\Block\Backend\Grid\Column\Renderer;
9+
10+
use Magento\Backend\Block\Context;
11+
use Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer;
12+
use Magento\Framework\DataObject;
13+
use Magento\Framework\Escaper;
14+
use Magento\Framework\Phrase;
15+
use Magento\Indexer\Model\IndexerFactory;
16+
17+
/**
18+
* Renderer for 'Schedule Status' column in indexer grid
19+
*/
20+
class ScheduleStatus extends AbstractRenderer
21+
{
22+
/**
23+
* @var Escaper
24+
*/
25+
private $escaper;
26+
27+
/**
28+
* @var IndexerFactory
29+
*/
30+
private $indexerFactory;
31+
32+
/**
33+
* @param Context $context
34+
* @param Escaper $escaper
35+
* @param IndexerFactory $indexerFactory
36+
* @param array $data
37+
*/
38+
public function __construct(
39+
Context $context,
40+
Escaper $escaper,
41+
IndexerFactory $indexerFactory,
42+
array $data = []
43+
) {
44+
parent::__construct($context, $data);
45+
$this->escaper = $escaper;
46+
$this->indexerFactory = $indexerFactory;
47+
}
48+
49+
/**
50+
* Render indexer status
51+
*
52+
* @param DataObject $row
53+
* @return string
54+
*/
55+
public function render(DataObject $row)
56+
{
57+
try {
58+
if (!$row->getIsScheduled()) {
59+
return '';
60+
}
61+
62+
try {
63+
$indexer = $this->indexerFactory->create();
64+
$indexer->load($row->getIndexerId());
65+
$view = $indexer->getView();
66+
} catch (\InvalidArgumentException $exception) {
67+
// No view for this index.
68+
return '';
69+
}
70+
71+
$state = $view->getState()->loadByView($view->getId());
72+
$changelog = $view->getChangelog()->setViewId($view->getId());
73+
$currentVersionId = $changelog->getVersion();
74+
$count = count($changelog->getList($state->getVersionId(), $currentVersionId));
75+
76+
if ($count > 1000) {
77+
$class = 'grid-severity-critical';
78+
} elseif ($count > 100) {
79+
$class = 'grid-severity-major';
80+
} elseif ($count > 10) {
81+
$class = 'grid-severity-minor';
82+
} else {
83+
$class = 'grid-severity-notice';
84+
}
85+
86+
if ($state->getStatus() !== $state::STATUS_IDLE) {
87+
$class = 'grid-severity-minor';
88+
}
89+
90+
$text = new Phrase(
91+
"%status (%count in backlog)",
92+
[
93+
'status' => $state->getStatus(),
94+
'count' => $count,
95+
]
96+
);
97+
98+
return '<span class="' . $class . '"><span>' . $text . '</span></span>';
99+
} catch (\Exception $exception) {
100+
return '<span class="grid-severity-minor"><span>' .
101+
$this->escaper->escapeHtml(
102+
get_class($exception) . ': ' . $exception->getMessage()
103+
) . '</span></span>';
104+
}
105+
}
106+
}

app/code/Magento/Indexer/Block/Backend/Grid/Column/Renderer/Scheduled.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
*/
66
namespace Magento\Indexer\Block\Backend\Grid\Column\Renderer;
77

8+
/**
9+
* Renderer for 'Scheduled' column in indexer grid
10+
*/
811
class Scheduled extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer
912
{
1013
/**

app/code/Magento/Indexer/Block/Backend/Grid/Column/Renderer/Status.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
*/
66
namespace Magento\Indexer\Block\Backend\Grid\Column\Renderer;
77

8+
/**
9+
* Renderer for 'Status' column in indexer grid
10+
*/
811
class Status extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer
912
{
1013
/**
@@ -27,7 +30,7 @@ public function render(\Magento\Framework\DataObject $row)
2730
$text = __('Ready');
2831
break;
2932
case \Magento\Framework\Indexer\StateInterface::STATUS_WORKING:
30-
$class = 'grid-severity-major';
33+
$class = 'grid-severity-minor';
3134
$text = __('Processing');
3235
break;
3336
}

app/code/Magento/Indexer/Block/Backend/Grid/Column/Renderer/Updated.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
*/
66
namespace Magento\Indexer\Block\Backend\Grid\Column\Renderer;
77

8+
/**
9+
* Renderer for 'Updated' column in indexer grid
10+
*/
811
class Updated extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\Datetime
912
{
1013
/**
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<entities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataProfileSchema.xsd">
10+
<entity name="AdminIndexManagementGridData">
11+
<data key="rowProductPrice">Product Price</data>
12+
</entity>
13+
</entities>

app/code/Magento/Indexer/Test/Mftf/Section/AdminIndexManagementSection.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,7 @@
1717
<element name="indexerStatus" type="text" selector="//tr[descendant::td[contains(., '{{status}}')]]//*[contains(@class, 'col-indexer_status')]/span" parameterized="true"/>
1818
<element name="successMessage" type="text" selector="//*[@data-ui-id='messages-message-success']" timeout="120"/>
1919
<element name="selectMassAction" type="select" selector="#gridIndexer_massaction-mass-select"/>
20+
<element name="columnScheduleStatus" type="text" selector="//th[contains(@class, 'col-indexer_schedule_status')]"/>
21+
<element name="indexerScheduleStatus" type="text" selector="//tr[contains(.,'{{var1}}')]//td[contains(@class,'col-indexer_schedule_status')]" parameterized="true"/>
2022
</section>
2123
</sections>
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
10+
<test name="AdminSystemIndexManagementGridChangesTest">
11+
<annotations>
12+
<features value="Indexer"/>
13+
<stories value="Menu Navigation"/>
14+
<title value="Admin system index management grid change test"/>
15+
<description value="Verify changes in 'Schedule column' on system index management"/>
16+
</annotations>
17+
<before>
18+
<createData entity="_defaultCategory" stepKey="createCategory"/>
19+
<createData entity="_defaultProduct" stepKey="createProduct">
20+
<requiredEntity createDataKey="createCategory"/>
21+
</createData>
22+
23+
<!--Open Index Management Page and Select Index mode "Update by Schedule" -->
24+
<magentoCLI command="indexer:set-mode" arguments="schedule" stepKey="setIndexerModeSchedule"/>
25+
<magentoCLI command="indexer:reindex" stepKey="indexerReindex"/>
26+
<magentoCLI command="cache:flush" stepKey="flushCache"/>
27+
<actionGroup ref="LoginAsAdmin" stepKey="LoginAsAdmin"/></before>
28+
<after>
29+
<deleteData createDataKey="createProduct" stepKey="deleteProduct"/>
30+
<deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
31+
<magentoCLI command="indexer:set-mode" arguments="realtime" stepKey="setIndexerModeRealTime"/>
32+
<magentoCLI command="indexer:reindex" stepKey="indexerReindex"/>
33+
<magentoCLI command="cache:flush" stepKey="flushCache"/>
34+
<actionGroup ref="logout" stepKey="logout"/>
35+
</after>
36+
37+
<actionGroup ref="AdminNavigateMenuActionGroup" stepKey="navigateToIndexManagementPageFirst">
38+
<argument name="menuUiId" value="{{AdminMenuSystem.dataUiId}}"/>
39+
<argument name="submenuUiId" value="{{AdminMenuSystemToolsIndexManagement.dataUiId}}"/>
40+
</actionGroup>
41+
<grabTextFrom selector="{{AdminIndexManagementSection.indexerScheduleStatus(AdminIndexManagementGridData.rowProductPrice)}}" stepKey="gradScheduleStatusBeforeChange"/>
42+
43+
<!-- Verify 'Schedule status' column is present -->
44+
<seeElement selector="{{AdminIndexManagementSection.columnScheduleStatus}}" stepKey="seeScheduleStatusColumn"/>
45+
46+
<!--Adding Special price to product-->
47+
<amOnPage url="{{AdminProductEditPage.url($$createProduct.id$$)}}" stepKey="openAdminProductEditPage"/>
48+
<actionGroup ref="AddSpecialPriceToProductActionGroup" stepKey="addSpecialPrice"/>
49+
<actionGroup ref="SaveProductFormActionGroup" stepKey="saveProductForm"/>
50+
51+
<actionGroup ref="AdminNavigateMenuActionGroup" stepKey="navigateToIndexManagementPageSecond">
52+
<argument name="menuUiId" value="{{AdminMenuSystem.dataUiId}}"/>
53+
<argument name="submenuUiId" value="{{AdminMenuSystemToolsIndexManagement.dataUiId}}"/>
54+
</actionGroup>
55+
<grabTextFrom selector="{{AdminIndexManagementSection.indexerScheduleStatus(AdminIndexManagementGridData.rowProductPrice)}}" stepKey="gradScheduleStatusAfterChange"/>
56+
57+
<!-- Verify 'Schedule Status' column changes for 'Product Price' -->
58+
<assertNotEquals stepKey="assertChange">
59+
<expectedResult type="string">$gradScheduleStatusBeforeChange</expectedResult>
60+
<actualResult type="string">$gradScheduleStatusAfterChange</actualResult>
61+
</assertNotEquals>
62+
</test>
63+
</tests>

app/code/Magento/Indexer/Test/Unit/Block/Backend/Grid/Column/Renderer/StatusTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public function renderDataProvider()
4949
],
5050
'set3' => [
5151
[\Magento\Framework\Indexer\StateInterface::STATUS_WORKING],
52-
['class' => 'grid-severity-major', 'text' => 'Processing']
52+
['class' => 'grid-severity-minor', 'text' => 'Processing']
5353
]
5454
];
5555
}

app/code/Magento/Indexer/view/adminhtml/layout/indexer_indexer_list_grid.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,15 @@
8181
<argument name="column_css_class" xsi:type="string">indexer-status</argument>
8282
</arguments>
8383
</block>
84+
<block class="Magento\Backend\Block\Widget\Grid\Column" name="adminhtml.indexer.grid.columnSet.indexer_schedule_status" as="indexer_schedule_status">
85+
<arguments>
86+
<argument name="header" xsi:type="string" translate="true">Schedule Status</argument>
87+
<argument name="index" xsi:type="string">schedule_status</argument>
88+
<argument name="renderer" xsi:type="string">Magento\Indexer\Block\Backend\Grid\Column\Renderer\ScheduleStatus</argument>
89+
<argument name="sortable" xsi:type="string">0</argument>
90+
<argument name="column_css_class" xsi:type="string">indexer-schedule-status</argument>
91+
</arguments>
92+
</block>
8493
<block class="Magento\Backend\Block\Widget\Grid\Column" name="adminhtml.indexer.grid.columnSet.indexer_updated" as="indexer_updated">
8594
<arguments>
8695
<argument name="header" xsi:type="string" translate="true">Updated</argument>

0 commit comments

Comments
 (0)