LagoonVarnishPurger.php in Lagoon Varnish 8
File
src/Plugin/Purge/Purger/LagoonVarnishPurger.php
View source
<?php
namespace Drupal\lagoon_varnish\Plugin\Purge\Purger;
use Drupal\purge\Plugin\Purge\Purger\PurgerInterface;
use Drupal\purge\Plugin\Purge\Invalidation\InvalidationInterface;
use Drupal\varnish_purger\Plugin\Purge\Purger\VarnishPurgerBase;
class LagoonVarnishPurger extends VarnishPurgerBase implements PurgerInterface {
const LAGOON_VARNISH_PURGER_ID = 'lagoon_varnish_purger';
const LAGOON_VARNISH_HOSTNAME = 'varnish';
const LAGOON_VARNISH_PORT = '8080';
const LAGOON_VARNISH_SCHEME = 'http';
const LAGOON_VARNISH_PATH = '/';
const LAGOON_VARNISH_REQUEST_METHOD = 'BAN';
const LAGOON_VARNISH_REQUEST_HEADERS = [
'Cache-Tags' => '[invalidations:separated_pipe]',
];
public function invalidate(array $invalidations) {
foreach ($invalidations as $invalidation) {
$token_data = [
'invalidation' => $invalidation,
];
$uri = $this
->getUri($token_data);
$opt = $this
->getOptions($token_data);
try {
$this->client
->request($this->settings->request_method, $uri, $opt);
$invalidation
->setState(InvalidationInterface::SUCCEEDED);
} catch (\Exception $e) {
$invalidation
->setState(InvalidationInterface::FAILED);
$headers = $opt['headers'];
unset($opt['headers']);
$debug = json_encode(str_replace("\n", ' ', [
'msg' => $e
->getMessage(),
'uri' => $uri,
'method' => $this->settings->request_method,
'guzzle_opt' => $opt,
'headers' => $headers,
]));
$this
->logger()
->emergency("item failed due @e, details (JSON): @debug", [
'@e' => get_class($e),
'@debug' => $debug,
]);
}
}
}
protected function getUri($token_data) {
return sprintf('%s://%s:%s%s', self::LAGOON_VARNISH_SCHEME, self::LAGOON_VARNISH_HOSTNAME, self::LAGOON_VARNISH_PORT, $this->token
->replace(self::LAGOON_VARNISH_PATH, $token_data));
}
protected function getHeaders($token_data) {
$headers = [];
$headers['user-agent'] = 'varnish_purger module for Drupal 8.';
foreach (self::LAGOON_VARNISH_REQUEST_HEADERS as $field => $value) {
$headers[strtolower($field)] = $this->token
->replace($value, $token_data);
}
return $headers;
}
}