Skip to content

Commit 48d9e3f

Browse files
authored
Merge pull request #2555 from magento-performance/MAGETWO-86143
[performance] MAGETWO-86143: Disable statistic collecting for Reports module
2 parents 44502ff + f0d995f commit 48d9e3f

13 files changed

+273
-23
lines changed

app/code/Magento/Customer/Model/Visitor.php

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66

77
namespace Magento\Customer\Model;
88

9-
use Magento\Framework\Indexer\StateInterface;
9+
use Magento\Framework\App\ObjectManager;
10+
use Magento\Framework\App\RequestSafetyInterface;
1011

1112
/**
1213
* Class Visitor
@@ -67,6 +68,11 @@ class Visitor extends \Magento\Framework\Model\AbstractModel
6768
*/
6869
protected $indexerRegistry;
6970

71+
/**
72+
* @var RequestSafetyInterface
73+
*/
74+
private $requestSafety;
75+
7076
/**
7177
* @param \Magento\Framework\Model\Context $context
7278
* @param \Magento\Framework\Registry $registry
@@ -95,7 +101,8 @@ public function __construct(
95101
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
96102
array $ignoredUserAgents = [],
97103
array $ignores = [],
98-
array $data = []
104+
array $data = [],
105+
RequestSafetyInterface $requestSafety = null
99106
) {
100107
$this->session = $session;
101108
$this->httpHeader = $httpHeader;
@@ -105,6 +112,7 @@ public function __construct(
105112
$this->scopeConfig = $scopeConfig;
106113
$this->dateTime = $dateTime;
107114
$this->indexerRegistry = $indexerRegistry;
115+
$this->requestSafety = $requestSafety ?? ObjectManager::getInstance()->get(RequestSafetyInterface::class);
108116
}
109117

110118
/**
@@ -158,6 +166,10 @@ public function initByRequest($observer)
158166

159167
$this->setLastVisitAt((new \DateTime())->format(\Magento\Framework\Stdlib\DateTime::DATETIME_PHP_FORMAT));
160168

169+
// prevent saving Visitor for safe methods, e.g. GET request
170+
if ($this->requestSafety->isSafeMethod()) {
171+
return $this;
172+
}
161173
if (!$this->getId()) {
162174
$this->setSessionId($this->session->getSessionId());
163175
$this->save();
@@ -177,7 +189,8 @@ public function initByRequest($observer)
177189
*/
178190
public function saveByRequest($observer)
179191
{
180-
if ($this->skipRequestLogging || $this->isModuleIgnored($observer)) {
192+
// prevent saving Visitor for safe methods, e.g. GET request
193+
if ($this->skipRequestLogging || $this->requestSafety->isSafeMethod() || $this->isModuleIgnored($observer)) {
181194
return $this;
182195
}
183196

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
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\Reports\Model;
9+
10+
use Magento\Framework\App\Config\ScopeConfigInterface;
11+
use Magento\Framework\Exception\InputException;
12+
13+
/**
14+
* Is report for specified event type is enabled in system configuration
15+
*/
16+
class ReportStatus
17+
{
18+
/**
19+
* @var ScopeConfigInterface
20+
*/
21+
private $scopeConfig;
22+
23+
/**
24+
* @param ScopeConfigInterface $scopeConfig
25+
*/
26+
public function __construct(ScopeConfigInterface $scopeConfig)
27+
{
28+
$this->scopeConfig = $scopeConfig;
29+
}
30+
31+
/**
32+
* Is report for specified event type is enabled in system configuration
33+
*
34+
* @param string $reportEventType
35+
* @return bool
36+
* @throws InputException
37+
*/
38+
public function isReportEnabled(string $reportEventType): bool
39+
{
40+
return (bool)$this->scopeConfig->getValue('reports/options/enabled')
41+
&& (bool)$this->scopeConfig->getValue($this->getConfigPathByEventType($reportEventType));
42+
}
43+
44+
/**
45+
* @param string $reportEventType
46+
* @return string
47+
* @throws InputException
48+
*/
49+
private function getConfigPathByEventType(string $reportEventType): string
50+
{
51+
$typeToPathMap = [
52+
Event::EVENT_PRODUCT_VIEW => 'reports/options/product_view_enabled',
53+
Event::EVENT_PRODUCT_SEND => 'reports/options/product_send_enabled',
54+
Event::EVENT_PRODUCT_COMPARE => 'reports/options/product_compare_enabled',
55+
Event::EVENT_PRODUCT_TO_CART => 'reports/options/product_to_cart_enabled',
56+
Event::EVENT_PRODUCT_TO_WISHLIST => 'reports/options/product_to_wishlist_enabled',
57+
Event::EVENT_WISHLIST_SHARE => 'reports/options/wishlist_share_enabled',
58+
];
59+
60+
if (!isset($typeToPathMap[$reportEventType])) {
61+
throw new InputException(
62+
__('System configuration is not found for report event type "%1"', $reportEventType)
63+
);
64+
}
65+
66+
return $typeToPathMap[$reportEventType];
67+
}
68+
}

app/code/Magento/Reports/Observer/CatalogProductCompareAddProductObserver.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Magento\Reports\Observer;
77

88
use Magento\Framework\Event\ObserverInterface;
9+
use Magento\Reports\Model\Event;
910

1011
/**
1112
* Reports Event observer model
@@ -32,22 +33,30 @@ class CatalogProductCompareAddProductObserver implements ObserverInterface
3233
*/
3334
protected $eventSaver;
3435

36+
/**
37+
* @var \Magento\Reports\Model\ReportStatus
38+
*/
39+
private $reportStatus;
40+
3541
/**
3642
* @param \Magento\Reports\Model\Product\Index\ComparedFactory $productCompFactory
3743
* @param \Magento\Customer\Model\Session $customerSession
3844
* @param \Magento\Customer\Model\Visitor $customerVisitor
3945
* @param EventSaver $eventSaver
46+
* @param \Magento\Reports\Model\ReportStatus $reportStatus
4047
*/
4148
public function __construct(
4249
\Magento\Reports\Model\Product\Index\ComparedFactory $productCompFactory,
4350
\Magento\Customer\Model\Session $customerSession,
4451
\Magento\Customer\Model\Visitor $customerVisitor,
45-
EventSaver $eventSaver
52+
EventSaver $eventSaver,
53+
\Magento\Reports\Model\ReportStatus $reportStatus
4654
) {
4755
$this->_productCompFactory = $productCompFactory;
4856
$this->_customerSession = $customerSession;
4957
$this->_customerVisitor = $customerVisitor;
5058
$this->eventSaver = $eventSaver;
59+
$this->reportStatus = $reportStatus;
5160
}
5261

5362
/**
@@ -60,6 +69,9 @@ public function __construct(
6069
*/
6170
public function execute(\Magento\Framework\Event\Observer $observer)
6271
{
72+
if (!$this->reportStatus->isReportEnabled(Event::EVENT_PRODUCT_COMPARE)) {
73+
return;
74+
}
6375
$productId = $observer->getEvent()->getProduct()->getId();
6476
$viewData = ['product_id' => $productId];
6577
if ($this->_customerSession->isLoggedIn()) {
@@ -69,6 +81,6 @@ public function execute(\Magento\Framework\Event\Observer $observer)
6981
}
7082
$this->_productCompFactory->create()->setData($viewData)->save()->calculate();
7183

72-
$this->eventSaver->save(\Magento\Reports\Model\Event::EVENT_PRODUCT_COMPARE, $productId);
84+
$this->eventSaver->save(Event::EVENT_PRODUCT_COMPARE, $productId);
7385
}
7486
}

app/code/Magento/Reports/Observer/CatalogProductCompareClearObserver.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,20 @@ class CatalogProductCompareClearObserver implements ObserverInterface
1717
*/
1818
protected $_productCompFactory;
1919

20+
/**
21+
* @var \Magento\Reports\Model\ReportStatus
22+
*/
23+
private $reportStatus;
24+
2025
/**
2126
* @param \Magento\Reports\Model\Product\Index\ComparedFactory $productCompFactory
2227
*/
2328
public function __construct(
24-
\Magento\Reports\Model\Product\Index\ComparedFactory $productCompFactory
29+
\Magento\Reports\Model\Product\Index\ComparedFactory $productCompFactory,
30+
\Magento\Reports\Model\ReportStatus $reportStatus
2531
) {
2632
$this->_productCompFactory = $productCompFactory;
33+
$this->reportStatus = $reportStatus;
2734
}
2835

2936
/**
@@ -37,8 +44,10 @@ public function __construct(
3744
*/
3845
public function execute(\Magento\Framework\Event\Observer $observer)
3946
{
40-
$this->_productCompFactory->create()->calculate();
47+
if (!$this->reportStatus->isReportEnabled(\Magento\Reports\Model\Event::EVENT_PRODUCT_VIEW)) {
48+
return;
49+
}
4150

42-
return $this;
51+
$this->_productCompFactory->create()->calculate();
4352
}
4453
}

app/code/Magento/Reports/Observer/CatalogProductViewObserver.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Magento\Reports\Observer;
77

88
use Magento\Framework\Event\ObserverInterface;
9+
use Magento\Reports\Model\Event;
910

1011
/**
1112
* Reports Event observer model
@@ -37,6 +38,11 @@ class CatalogProductViewObserver implements ObserverInterface
3738
*/
3839
protected $eventSaver;
3940

41+
/**
42+
* @var \Magento\Reports\Model\ReportStatus
43+
*/
44+
private $reportStatus;
45+
4046
/**
4147
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
4248
* @param \Magento\Reports\Model\Product\Index\ViewedFactory $productIndxFactory
@@ -49,13 +55,15 @@ public function __construct(
4955
\Magento\Reports\Model\Product\Index\ViewedFactory $productIndxFactory,
5056
\Magento\Customer\Model\Session $customerSession,
5157
\Magento\Customer\Model\Visitor $customerVisitor,
52-
EventSaver $eventSaver
58+
EventSaver $eventSaver,
59+
\Magento\Reports\Model\ReportStatus $reportStatus
5360
) {
5461
$this->_storeManager = $storeManager;
5562
$this->_productIndxFactory = $productIndxFactory;
5663
$this->_customerSession = $customerSession;
5764
$this->_customerVisitor = $customerVisitor;
5865
$this->eventSaver = $eventSaver;
66+
$this->reportStatus = $reportStatus;
5967
}
6068

6169
/**
@@ -66,6 +74,10 @@ public function __construct(
6674
*/
6775
public function execute(\Magento\Framework\Event\Observer $observer)
6876
{
77+
if (!$this->reportStatus->isReportEnabled(Event::EVENT_PRODUCT_VIEW)) {
78+
return;
79+
}
80+
6981
$productId = $observer->getEvent()->getProduct()->getId();
7082

7183
$viewData['product_id'] = $productId;
@@ -78,6 +90,6 @@ public function execute(\Magento\Framework\Event\Observer $observer)
7890

7991
$this->_productIndxFactory->create()->setData($viewData)->save()->calculate();
8092

81-
$this->eventSaver->save(\Magento\Reports\Model\Event::EVENT_PRODUCT_VIEW, $productId);
93+
$this->eventSaver->save(Event::EVENT_PRODUCT_VIEW, $productId);
8294
}
8395
}

app/code/Magento/Reports/Observer/CheckoutCartAddProductObserver.php

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Magento\Reports\Observer;
77

88
use Magento\Framework\Event\ObserverInterface;
9+
use Magento\Reports\Model\Event;
910

1011
/**
1112
* Reports Event observer model
@@ -17,29 +18,38 @@ class CheckoutCartAddProductObserver implements ObserverInterface
1718
*/
1819
protected $eventSaver;
1920

21+
/**
22+
* @var \Magento\Reports\Model\ReportStatus
23+
*/
24+
private $reportStatus;
25+
2026
/**
2127
* @param EventSaver $eventSaver
2228
*/
2329
public function __construct(
24-
EventSaver $eventSaver
30+
EventSaver $eventSaver,
31+
\Magento\Reports\Model\ReportStatus $reportStatus
2532
) {
2633
$this->eventSaver = $eventSaver;
34+
$this->reportStatus = $reportStatus;
2735
}
2836

2937
/**
3038
* Add product to shopping cart action
3139
*
3240
* @param \Magento\Framework\Event\Observer $observer
33-
* @return $this
41+
* @return void
3442
*/
3543
public function execute(\Magento\Framework\Event\Observer $observer)
3644
{
45+
if (!$this->reportStatus->isReportEnabled(Event::EVENT_PRODUCT_TO_CART)) {
46+
return;
47+
}
48+
3749
$quoteItem = $observer->getEvent()->getItem();
3850
if (!$quoteItem->getId() && !$quoteItem->getParentItem()) {
3951
$productId = $quoteItem->getProductId();
40-
$this->eventSaver->save(\Magento\Reports\Model\Event::EVENT_PRODUCT_TO_CART, $productId);
52+
$this->eventSaver->save(Event::EVENT_PRODUCT_TO_CART, $productId);
4153
}
42-
43-
return $this;
4454
}
4555
}

app/code/Magento/Reports/Observer/SendfriendProductObserver.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Magento\Reports\Observer;
77

88
use Magento\Framework\Event\ObserverInterface;
9+
use Magento\Reports\Model\Event;
910

1011
/**
1112
* Reports Event observer model
@@ -17,13 +18,20 @@ class SendfriendProductObserver implements ObserverInterface
1718
*/
1819
protected $eventSaver;
1920

21+
/**
22+
* @var \Magento\Reports\Model\ReportStatus
23+
*/
24+
private $reportStatus;
25+
2026
/**
2127
* @param EventSaver $eventSaver
2228
*/
2329
public function __construct(
24-
EventSaver $eventSaver
30+
EventSaver $eventSaver,
31+
\Magento\Reports\Model\ReportStatus $reportStatus
2532
) {
2633
$this->eventSaver = $eventSaver;
34+
$this->reportStatus = $reportStatus;
2735
}
2836

2937
/**
@@ -34,8 +42,12 @@ public function __construct(
3442
*/
3543
public function execute(\Magento\Framework\Event\Observer $observer)
3644
{
45+
if (!$this->reportStatus->isReportEnabled(Event::EVENT_PRODUCT_SEND)) {
46+
return;
47+
}
48+
3749
$this->eventSaver->save(
38-
\Magento\Reports\Model\Event::EVENT_PRODUCT_SEND,
50+
Event::EVENT_PRODUCT_SEND,
3951
$observer->getEvent()->getProduct()->getId()
4052
);
4153
}

0 commit comments

Comments
 (0)