AkamaiTagPurger.php in Akamai 8.3
File
src/Plugin/Purge/Purger/AkamaiTagPurger.php
View source
<?php
namespace Drupal\akamai\Plugin\Purge\Purger;
use Drupal\akamai\AkamaiClientFactory;
use Drupal\akamai\Event\AkamaiPurgeEvents;
use Drupal\purge\Plugin\Purge\Purger\PurgerBase;
use Drupal\Core\Config\ConfigFactoryInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Drupal\purge\Plugin\Purge\Invalidation\InvalidationInterface;
class AkamaiTagPurger extends PurgerBase {
protected $client;
protected $akamaiClientConfig;
protected $eventDispatcher;
protected $logger;
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('config.factory'), $container
->get('event_dispatcher'), $container
->get('akamai.client.factory'), $container
->get('logger.channel.akamai'));
}
public function __construct(array $configuration, $plugin_id, $plugin_definition, ConfigFactoryInterface $config, EventDispatcherInterface $event_dispatcher, AkamaiClientFactory $akamai_client_factory, LoggerInterface $logger) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->client = $akamai_client_factory
->get();
$this->akamaiClientConfig = $config
->get('akamai.settings');
$this->eventDispatcher = $event_dispatcher;
$this->logger = $logger;
}
public function getTimeHint() {
$timeout = (double) $this->akamaiClientConfig
->get('timeout');
if ($timeout > 10) {
return 10;
}
elseif ($timeout > 0) {
return $timeout;
}
return 0;
}
public function invalidate(array $invalidations) {
$tags_to_clear = [];
$formatter = \Drupal::service('akamai.helper.cachetagformatter');
foreach ($invalidations as $invalidation) {
$invalidation
->setState(InvalidationInterface::PROCESSING);
$tag = $formatter
->format($invalidation
->getExpression());
if (mb_strlen($tag) > 128) {
$this->logger
->warning('Cache Tag %tag has exceeded the Akamai 128 character tag maximum length.', [
'%tag' => $tag,
]);
}
$tags_to_clear[$tag] = $tag;
}
$tags_to_clear = array_values($tags_to_clear);
$this->client
->setType('tag');
$event = new AkamaiPurgeEvents($tags_to_clear);
$this->eventDispatcher
->dispatch(AkamaiPurgeEvents::PURGE_CREATION, $event);
$tags_to_clear = $event->data;
$invalidation_state = InvalidationInterface::SUCCEEDED;
$result = $this->client
->purgeTags($tags_to_clear);
if (!$result) {
$invalidation_state = InvalidationInterface::FAILED;
}
foreach ($invalidations as $invalidation) {
$invalidation
->setState($invalidation_state);
}
}
public function hasRuntimeMeasurement() {
return FALSE;
}
}