You are here

class VarnishPurger in Varnish purger 8.2

Same name and namespace in other branches
  1. 8 src/Plugin/Purge/Purger/VarnishPurger.php \Drupal\varnish_purger\Plugin\Purge\Purger\VarnishPurger

HTTP Purger.

Plugin annotation


@PurgePurger(
  id = "varnish",
  label = @Translation("Varnish Purger"),
  configform = "\Drupal\varnish_purger\Form\VarnishPurgerForm",
  cooldown_time = 0.0,
  description = @Translation("Configurable purger that makes HTTP requests for each given invalidation instruction."),
  multi_instance = TRUE,
  types = {},
)

Hierarchy

Expanded class hierarchy of VarnishPurger

2 files declare their use of VarnishPurger
varnish_focal_point_purge.module in modules/varnish_focal_point_purge/varnish_focal_point_purge.module
Contains varnish_focal_point_purge.module.
varnish_image_purge.module in modules/varnish_image_purge/varnish_image_purge.module
Contains varnish_image_purge.module.

File

src/Plugin/Purge/Purger/VarnishPurger.php, line 22

Namespace

Drupal\varnish_purger\Plugin\Purge\Purger
View source
class VarnishPurger extends VarnishPurgerBase implements PurgerInterface {
  const VARNISH_PURGE_CONCURRENCY = 10;

  /**
   * {@inheritdoc}
   */
  public function invalidate(array $invalidations) {

    // Prepare a generator for the requests that we will be sending out. Use a
    // generator, as the pool implementation will request new item to pass
    // thorough the wire once any of the concurrency slots is free.
    $requests = function () use ($invalidations) {
      $client = $this->client;
      $method = $this->settings->request_method;
      $logger = $this
        ->logger();

      /* @var $invalidation \Drupal\purge\Plugin\Purge\Invalidation\InvalidationInterface */
      foreach ($invalidations as $invalidation) {
        $token_data = [
          'invalidation' => $invalidation,
        ];
        $uri = $this
          ->getUri($token_data);
        $options = $this
          ->getOptions($token_data);
        (yield function () use ($client, $uri, $method, $options, $invalidation, $logger) {
          return $client
            ->requestAsync($method, $uri, $options)
            ->then(function ($response) use ($invalidation) {
            $invalidation
              ->setState(InvalidationInterface::SUCCEEDED);
          }, function ($reason) use ($invalidation, $uri, $options, $logger) {
            $invalidation
              ->setState(InvalidationInterface::FAILED);
            $message = $reason instanceof \Exception ? $reason
              ->getMessage() : (string) $reason;

            // Log as much useful information as we can.
            $headers = $options['headers'];
            unset($options['headers']);
            $debug = json_encode(str_replace("\n", ' ', [
              'msg' => $message,
              'uri' => $uri,
              'method' => $this->settings->request_method,
              'guzzle_opt' => $options,
              'headers' => $headers,
            ]));
            $logger
              ->emergency("item failed due @e, details (JSON): @debug", [
              '@e' => is_object($reason) ? get_class($reason) : (string) $reason,
              '@debug' => $debug,
            ]);
          });
        });
      }
    };

    // Prepare a POOL that will make the requests with a given concurrency.
    (new Pool($this->client, $requests(), [
      'concurrency' => self::VARNISH_PURGE_CONCURRENCY,
    ]))
      ->promise()
      ->wait();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
PurgeLoggerAwareTrait::$logger protected property Channel logger.
PurgeLoggerAwareTrait::logger public function
PurgerBase::$id protected property Unique instance ID for this purger.
PurgerBase::$runtimeMeasurement protected property The runtime measurement counter.
PurgerBase::getId public function Retrieve the unique instance ID for this purger instance. Overrides PurgerInterface::getId
PurgerBase::getRuntimeMeasurement public function Get the runtime measurement counter. Overrides PurgerCapacityDataInterface::getRuntimeMeasurement
PurgerBase::routeTypeToMethod public function Route certain type of invalidations to other methods. Overrides PurgerInterface::routeTypeToMethod
PurgerBase::setRuntimeMeasurement public function Inject the runtime measurement counter. Overrides PurgerCapacityDataInterface::setRuntimeMeasurement
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
VarnishPurger::invalidate public function Invalidate content from external caches. Overrides PurgerInterface::invalidate
VarnishPurger::VARNISH_PURGE_CONCURRENCY constant
VarnishPurgerBase::$client protected property
VarnishPurgerBase::$settings protected property The settings entity holding all configuration.
VarnishPurgerBase::$token protected property The token service.
VarnishPurgerBase::create public static function Creates an instance of the plugin. Overrides PurgerBase::create
VarnishPurgerBase::delete public function The current instance of this purger plugin is about to be deleted. Overrides PurgerBase::delete
VarnishPurgerBase::getCooldownTime public function Get the time in seconds to wait after invalidation. Overrides PurgerBase::getCooldownTime
VarnishPurgerBase::getHeaders protected function Retrieve all configured headers that need to be set.
VarnishPurgerBase::getIdealConditionsLimit public function Get the maximum number of invalidations that this purger can process. Overrides PurgerBase::getIdealConditionsLimit
VarnishPurgerBase::getLabel public function Retrieve the user-readable label for this purger instance. Overrides PurgerBase::getLabel
VarnishPurgerBase::getOptions protected function Retrieve the Guzzle connection options to set.
VarnishPurgerBase::getTimeHint public function Get the maximum number of seconds, processing a single invalidation takes. Overrides PurgerBase::getTimeHint
VarnishPurgerBase::getTypes public function Retrieve the list of supported invalidation types. Overrides PurgerBase::getTypes
VarnishPurgerBase::getUri protected function Retrieve the URI to connect to.
VarnishPurgerBase::hasRuntimeMeasurement public function Indicates whether your purger utilizes dynamic runtime measurement. Overrides PurgerCapacityDataInterface::hasRuntimeMeasurement
VarnishPurgerBase::__construct public function Constructs the Varnish purger. Overrides PurgerBase::__construct