Skip to content

Commit 3238f30

Browse files
author
He, Joan(johe)
committed
Merge pull request #107 from magento-extensibility/MAGETWO-43787-cli-varnish-merchant-beta
[Extensibility] [merchant beta] MAGETWO-44438 clear varnish from CLI
2 parents 6ea9993 + 6969625 commit 3238f30

File tree

15 files changed

+466
-328
lines changed

15 files changed

+466
-328
lines changed

app/code/Magento/Backend/Console/Command/AbstractCacheTypeManageCommand.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,26 @@
66

77
namespace Magento\Backend\Console\Command;
88

9+
use Magento\Framework\App\Cache\Manager;
10+
use Magento\Framework\Event\ManagerInterface;
911
use Symfony\Component\Console\Input\InputInterface;
1012
use Symfony\Component\Console\Output\OutputInterface;
1113

1214
abstract class AbstractCacheTypeManageCommand extends AbstractCacheManageCommand
1315
{
16+
/** @var ManagerInterface */
17+
protected $eventManager;
18+
19+
/**
20+
* @param Manager $cacheManager
21+
* @param ManagerInterface $eventManager
22+
*/
23+
public function __construct(Manager $cacheManager, ManagerInterface $eventManager)
24+
{
25+
$this->eventManager = $eventManager;
26+
parent::__construct($cacheManager);
27+
}
28+
1429
/**
1530
* Perform a cache management action on cache types
1631
*

app/code/Magento/Backend/Console/Command/CacheCleanCommand.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ protected function configure()
3030
protected function performAction(array $cacheTypes)
3131
{
3232
$this->cacheManager->clean($cacheTypes);
33+
$this->eventManager->dispatch('adminhtml_cache_flush_system');
3334
}
3435

3536
/**

app/code/Magento/Backend/Console/Command/CacheFlushCommand.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ protected function configure()
3030
protected function performAction(array $cacheTypes)
3131
{
3232
$this->cacheManager->flush($cacheTypes);
33+
$this->eventManager->dispatch('adminhtml_cache_flush_all');
3334
}
3435

3536
/**

app/code/Magento/Backend/Test/Unit/Console/Command/CacheCleanCommandTest.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,25 @@
1111

1212
class CacheCleanCommandTest extends \PHPUnit_Framework_TestCase
1313
{
14-
/**
15-
* @var \Magento\Framework\App\Cache\Manager|\PHPUnit_Framework_MockObject_MockObject
16-
*/
14+
/** @var \Magento\Framework\App\Cache\Manager|\PHPUnit_Framework_MockObject_MockObject */
1715
private $cacheManager;
1816

19-
/**
20-
* @var CacheCleanCommand
21-
*/
17+
/** @var CacheCleanCommand */
2218
private $command;
2319

20+
/** @var \Magento\Framework\Event\ManagerInterface | \PHPUnit_Framework_MockObject_MockObject */
21+
private $eventManagerMock;
22+
2423
public function setUp()
2524
{
25+
$this->eventManagerMock = $this->getMock('\Magento\Framework\Event\ManagerInterface', [], [], '', false);
2626
$this->cacheManager = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
27-
$this->command = new CacheCleanCommand($this->cacheManager);
27+
$this->command = new CacheCleanCommand($this->cacheManager, $this->eventManagerMock);
2828
}
2929

3030
public function testExecute()
3131
{
32+
$this->eventManagerMock->expects($this->once())->method('dispatch')->with('adminhtml_cache_flush_system');
3233
$this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
3334
$this->cacheManager->expects($this->once())->method('clean')->with(['A', 'B']);
3435
$param = ['types' => ['A', 'B']];

app/code/Magento/Backend/Test/Unit/Console/Command/CacheFlushCommandTest.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,25 @@
1111

1212
class CacheFlushCommandTest extends \PHPUnit_Framework_TestCase
1313
{
14-
/**
15-
* @var \Magento\Framework\App\Cache\Manager|\PHPUnit_Framework_MockObject_MockObject
16-
*/
14+
/** @var \Magento\Framework\App\Cache\Manager|\PHPUnit_Framework_MockObject_MockObject */
1715
private $cacheManager;
1816

19-
/**
20-
* @var CacheFlushCommand
21-
*/
17+
/** @var CacheFlushCommand */
2218
private $command;
2319

20+
/** @var \Magento\Framework\Event\ManagerInterface | \PHPUnit_Framework_MockObject_MockObject */
21+
private $eventManagerMock;
22+
2423
public function setUp()
2524
{
25+
$this->eventManagerMock = $this->getMock('\Magento\Framework\Event\ManagerInterface', [], [], '', false);
2626
$this->cacheManager = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
27-
$this->command = new CacheFlushCommand($this->cacheManager);
27+
$this->command = new CacheFlushCommand($this->cacheManager, $this->eventManagerMock);
2828
}
2929

3030
public function testExecute()
3131
{
32+
$this->eventManagerMock->expects($this->once())->method('dispatch')->with('adminhtml_cache_flush_all');
3233
$this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
3334
$this->cacheManager->expects($this->once())->method('flush')->with(['A', 'B']);
3435
$param = ['types' => ['A', 'B']];

app/code/Magento/CacheInvalidate/Model/Observer.php

Lines changed: 8 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -22,60 +22,22 @@ class Observer
2222
*/
2323
const DEFAULT_PORT = 80;
2424

25-
/**
26-
* Application config object
27-
*
28-
* @var \Magento\Framework\App\Config\ScopeConfigInterface
29-
*/
25+
/** @var \Magento\Framework\App\Config\ScopeConfigInterface */
3026
protected $config;
3127

32-
/**
33-
* @var InvalidateLogger
34-
*/
35-
private $logger;
36-
37-
/**
38-
* @var UriFactory
39-
*/
40-
protected $uriFactory;
41-
42-
/**
43-
* @var SocketFactory
44-
*/
45-
protected $socketAdapterFactory;
46-
47-
/**
48-
* @var DeploymentConfig
49-
*/
50-
private $deploymentConfig;
51-
52-
/**
53-
* @var RequestInterface
54-
*/
55-
private $request;
28+
/** @var PurgeCache */
29+
private $purgeCache;
5630

5731
/**
5832
* @param \Magento\PageCache\Model\Config $config
59-
* @param UriFactory $uriFactory
60-
* @param SocketFactory $socketAdapterFactory
61-
* @param InvalidateLogger $logger
62-
* @param DeploymentConfig $deploymentConfig
63-
* @param RequestInterface $request
33+
* @param PurgeCache $purgeCache
6434
*/
6535
public function __construct(
6636
\Magento\PageCache\Model\Config $config,
67-
UriFactory $uriFactory,
68-
SocketFactory $socketAdapterFactory,
69-
InvalidateLogger $logger,
70-
DeploymentConfig $deploymentConfig,
71-
RequestInterface $request
37+
\Magento\CacheInvalidate\Model\PurgeCache $purgeCache
7238
) {
7339
$this->config = $config;
74-
$this->uriFactory = $uriFactory;
75-
$this->socketAdapterFactory = $socketAdapterFactory;
76-
$this->logger = $logger;
77-
$this->deploymentConfig = $deploymentConfig;
78-
$this->request = $request;
40+
$this->purgeCache = $purgeCache;
7941
}
8042

8143
/**
@@ -96,7 +58,7 @@ public function invalidateVarnish(\Magento\Framework\Event\Observer $observer)
9658
$tags[] = sprintf($pattern, preg_replace("~_\\d+$~", '', $tag));
9759
$tags[] = sprintf($pattern, $tag);
9860
}
99-
$this->sendPurgeRequest(implode('|', array_unique($tags)));
61+
$this->purgeCache->sendPurgeRequest(implode('|', array_unique($tags)));
10062
}
10163
}
10264
}
@@ -111,44 +73,7 @@ public function invalidateVarnish(\Magento\Framework\Event\Observer $observer)
11173
public function flushAllCache(\Magento\Framework\Event\Observer $observer)
11274
{
11375
if ($this->config->getType() == \Magento\PageCache\Model\Config::VARNISH && $this->config->isEnabled()) {
114-
$this->sendPurgeRequest('.*');
76+
$this->purgeCache->sendPurgeRequest('.*');
11577
}
11678
}
117-
118-
/**
119-
* Send curl purge request
120-
* to invalidate cache by tags pattern
121-
*
122-
* @param string $tagsPattern
123-
* @return void
124-
*/
125-
protected function sendPurgeRequest($tagsPattern)
126-
{
127-
$uri = $this->uriFactory->create();
128-
$socketAdapter = $this->socketAdapterFactory->create();
129-
$servers = $this->deploymentConfig->get(ConfigOptionsListConstants::CONFIG_PATH_CACHE_HOSTS)
130-
?: [['host' => $this->request->getHttpHost()]];
131-
$headers = ['X-Magento-Tags-Pattern' => $tagsPattern];
132-
$socketAdapter->setOptions(['timeout' => 10]);
133-
foreach ($servers as $server) {
134-
$port = isset($server['port']) ? $server['port'] : self::DEFAULT_PORT;
135-
$uri->setScheme('http')
136-
->setHost($server['host'])
137-
->setPort($port);
138-
try {
139-
$socketAdapter->connect($server['host'], $port);
140-
$socketAdapter->write(
141-
'PURGE',
142-
$uri,
143-
'1.1',
144-
$headers
145-
);
146-
$socketAdapter->close();
147-
} catch (Exception $e) {
148-
$this->logger->critical($e->getMessage(), compact('server', 'tagsPattern'));
149-
}
150-
}
151-
152-
$this->logger->execute(compact('servers', 'tagsPattern'));
153-
}
15479
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\CacheInvalidate\Model;
7+
8+
use Magento\Framework\Cache\InvalidateLogger;
9+
use Magento\Framework\App\DeploymentConfig;
10+
11+
class PurgeCache
12+
{
13+
const HEADER_X_MAGENTO_TAGS_PATTERN = 'X-Magento-Tags-Pattern';
14+
15+
/**
16+
* @var \Magento\PageCache\Model\Cache\Server
17+
*/
18+
protected $cacheServer;
19+
20+
/**
21+
* @var \Magento\CacheInvalidate\Model\SocketFactory
22+
*/
23+
protected $socketAdapterFactory;
24+
25+
/**
26+
* @var InvalidateLogger
27+
*/
28+
private $logger;
29+
30+
/**
31+
* Constructor
32+
*
33+
* @param \Magento\PageCache\Model\Cache\Server $cacheServer
34+
* @param \Magento\CacheInvalidate\Model\SocketFactory $socketAdapterFactory
35+
* @param InvalidateLogger $logger
36+
*/
37+
public function __construct(
38+
\Magento\PageCache\Model\Cache\Server $cacheServer,
39+
\Magento\CacheInvalidate\Model\SocketFactory $socketAdapterFactory,
40+
InvalidateLogger $logger
41+
) {
42+
$this->cacheServer = $cacheServer;
43+
$this->socketAdapterFactory = $socketAdapterFactory;
44+
$this->logger = $logger;
45+
}
46+
47+
/**
48+
* Send curl purge request
49+
* to invalidate cache by tags pattern
50+
*
51+
* @param string $tagsPattern
52+
* @return bool Return true if successful; otherwise return false
53+
*/
54+
public function sendPurgeRequest($tagsPattern)
55+
{
56+
$socketAdapter = $this->socketAdapterFactory->create();
57+
$servers = $this->cacheServer->getUris();
58+
$headers = [self::HEADER_X_MAGENTO_TAGS_PATTERN => $tagsPattern];
59+
$socketAdapter->setOptions(['timeout' => 10]);
60+
foreach ($servers as $server) {
61+
try {
62+
$socketAdapter->connect($server->getHost(), $server->getPort());
63+
$socketAdapter->write(
64+
'PURGE',
65+
$server,
66+
'1.1',
67+
$headers
68+
);
69+
$socketAdapter->close();
70+
} catch (\Exception $e) {
71+
$this->logger->critical($e->getMessage(), compact('server', 'tagsPattern'));
72+
return false;
73+
}
74+
}
75+
76+
$this->logger->execute(compact('servers', 'tagsPattern'));
77+
return true;
78+
}
79+
}

app/code/Magento/CacheInvalidate/Model/UriFactory.php

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)