assets
data
dependencies
amphp
berlindb
composer
daverandom
delight-im
doctrine
guzzlehttp
hashids
ifsnop
jasny
kelunik
league
mexitek
mpdf
myclabs
nesbot
nyholm
pablo-sg-pacheco
paragonie
phpdocumentor
phpseclib
phpstan
psr
rakit
ralouphie
remotelyliving
rpnzl
scssphp
setasign
spatie
stripe
symfony
cache
Adapter
AbstractAdapter.php
AbstractTagAwareAdapter.php
AdapterInterface.php
ApcuAdapter.php
ArrayAdapter.php
ChainAdapter.php
CouchbaseBucketAdapter.php
CouchbaseCollectionAdapter.php
DoctrineAdapter.php
DoctrineDbalAdapter.php
FilesystemAdapter.php
FilesystemTagAwareAdapter.php
MemcachedAdapter.php
NullAdapter.php
ParameterNormalizer.php
PdoAdapter.php
PhpArrayAdapter.php
PhpFilesAdapter.php
ProxyAdapter.php
Psr16Adapter.php
RedisAdapter.php
RedisTagAwareAdapter.php
TagAwareAdapter.php
TagAwareAdapterInterface.php
TraceableAdapter.php
TraceableTagAwareAdapter.php
DataCollector
DependencyInjection
Exception
Marshaller
Messenger
Traits
CacheItem.php
DoctrineProvider.php
LockRegistry.php
PruneableInterface.php
Psr16Cache.php
ResettableInterface.php
cache-contracts
deprecation-contracts
event-dispatcher
event-dispatcher-contracts
polyfill-mbstring
polyfill-php73
polyfill-php80
polyfill-php81
process
service-contracts
translation
translation-contracts
var-exporter
webmozart
woocommerce
yahnis-elsts
autoload.php
scoper-autoload.php
inc
lang
views
.gitignore
LICENSE
autoload.php
composer.json
constants.php
loco.xml
readme.txt
sunrise.php
uninstall.php
wp-multisite-waas.php
267 lines
6.9 KiB
PHP
267 lines
6.9 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
namespace WP_Ultimo\Dependencies\Symfony\Component\Cache\Adapter;
|
|
|
|
use WP_Ultimo\Dependencies\Psr\Cache\CacheItemInterface;
|
|
use WP_Ultimo\Dependencies\Symfony\Component\Cache\CacheItem;
|
|
use WP_Ultimo\Dependencies\Symfony\Component\Cache\PruneableInterface;
|
|
use WP_Ultimo\Dependencies\Symfony\Component\Cache\ResettableInterface;
|
|
use WP_Ultimo\Dependencies\Symfony\Contracts\Cache\CacheInterface;
|
|
use WP_Ultimo\Dependencies\Symfony\Contracts\Service\ResetInterface;
|
|
/**
|
|
* An adapter that collects data about all cache calls.
|
|
*
|
|
* @author Aaron Scherer <aequasi@gmail.com>
|
|
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
|
|
* @author Nicolas Grekas <p@tchwork.com>
|
|
*/
|
|
class TraceableAdapter implements AdapterInterface, CacheInterface, PruneableInterface, ResettableInterface
|
|
{
|
|
protected $pool;
|
|
private $calls = [];
|
|
public function __construct(AdapterInterface $pool)
|
|
{
|
|
$this->pool = $pool;
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function get(string $key, callable $callback, float $beta = null, array &$metadata = null)
|
|
{
|
|
if (!$this->pool instanceof CacheInterface) {
|
|
throw new \BadMethodCallException(\sprintf('Cannot call "%s::get()": this class doesn\'t implement "%s".', \get_debug_type($this->pool), CacheInterface::class));
|
|
}
|
|
$isHit = \true;
|
|
$callback = function (CacheItem $item, bool &$save) use($callback, &$isHit) {
|
|
$isHit = $item->isHit();
|
|
return $callback($item, $save);
|
|
};
|
|
$event = $this->start(__FUNCTION__);
|
|
try {
|
|
$value = $this->pool->get($key, $callback, $beta, $metadata);
|
|
$event->result[$key] = \get_debug_type($value);
|
|
} finally {
|
|
$event->end = \microtime(\true);
|
|
}
|
|
if ($isHit) {
|
|
++$event->hits;
|
|
} else {
|
|
++$event->misses;
|
|
}
|
|
return $value;
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function getItem($key)
|
|
{
|
|
$event = $this->start(__FUNCTION__);
|
|
try {
|
|
$item = $this->pool->getItem($key);
|
|
} finally {
|
|
$event->end = \microtime(\true);
|
|
}
|
|
if ($event->result[$key] = $item->isHit()) {
|
|
++$event->hits;
|
|
} else {
|
|
++$event->misses;
|
|
}
|
|
return $item;
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function hasItem($key)
|
|
{
|
|
$event = $this->start(__FUNCTION__);
|
|
try {
|
|
return $event->result[$key] = $this->pool->hasItem($key);
|
|
} finally {
|
|
$event->end = \microtime(\true);
|
|
}
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function deleteItem($key)
|
|
{
|
|
$event = $this->start(__FUNCTION__);
|
|
try {
|
|
return $event->result[$key] = $this->pool->deleteItem($key);
|
|
} finally {
|
|
$event->end = \microtime(\true);
|
|
}
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function save(CacheItemInterface $item)
|
|
{
|
|
$event = $this->start(__FUNCTION__);
|
|
try {
|
|
return $event->result[$item->getKey()] = $this->pool->save($item);
|
|
} finally {
|
|
$event->end = \microtime(\true);
|
|
}
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function saveDeferred(CacheItemInterface $item)
|
|
{
|
|
$event = $this->start(__FUNCTION__);
|
|
try {
|
|
return $event->result[$item->getKey()] = $this->pool->saveDeferred($item);
|
|
} finally {
|
|
$event->end = \microtime(\true);
|
|
}
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function getItems(array $keys = [])
|
|
{
|
|
$event = $this->start(__FUNCTION__);
|
|
try {
|
|
$result = $this->pool->getItems($keys);
|
|
} finally {
|
|
$event->end = \microtime(\true);
|
|
}
|
|
$f = function () use($result, $event) {
|
|
$event->result = [];
|
|
foreach ($result as $key => $item) {
|
|
if ($event->result[$key] = $item->isHit()) {
|
|
++$event->hits;
|
|
} else {
|
|
++$event->misses;
|
|
}
|
|
(yield $key => $item);
|
|
}
|
|
};
|
|
return $f();
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function clear(string $prefix = '')
|
|
{
|
|
$event = $this->start(__FUNCTION__);
|
|
try {
|
|
if ($this->pool instanceof AdapterInterface) {
|
|
return $event->result = $this->pool->clear($prefix);
|
|
}
|
|
return $event->result = $this->pool->clear();
|
|
} finally {
|
|
$event->end = \microtime(\true);
|
|
}
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function deleteItems(array $keys)
|
|
{
|
|
$event = $this->start(__FUNCTION__);
|
|
$event->result['keys'] = $keys;
|
|
try {
|
|
return $event->result['result'] = $this->pool->deleteItems($keys);
|
|
} finally {
|
|
$event->end = \microtime(\true);
|
|
}
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function commit()
|
|
{
|
|
$event = $this->start(__FUNCTION__);
|
|
try {
|
|
return $event->result = $this->pool->commit();
|
|
} finally {
|
|
$event->end = \microtime(\true);
|
|
}
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function prune()
|
|
{
|
|
if (!$this->pool instanceof PruneableInterface) {
|
|
return \false;
|
|
}
|
|
$event = $this->start(__FUNCTION__);
|
|
try {
|
|
return $event->result = $this->pool->prune();
|
|
} finally {
|
|
$event->end = \microtime(\true);
|
|
}
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function reset()
|
|
{
|
|
if ($this->pool instanceof ResetInterface) {
|
|
$this->pool->reset();
|
|
}
|
|
$this->clearCalls();
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function delete(string $key) : bool
|
|
{
|
|
$event = $this->start(__FUNCTION__);
|
|
try {
|
|
return $event->result[$key] = $this->pool->deleteItem($key);
|
|
} finally {
|
|
$event->end = \microtime(\true);
|
|
}
|
|
}
|
|
public function getCalls()
|
|
{
|
|
return $this->calls;
|
|
}
|
|
public function clearCalls()
|
|
{
|
|
$this->calls = [];
|
|
}
|
|
protected function start(string $name)
|
|
{
|
|
$this->calls[] = $event = new TraceableAdapterEvent();
|
|
$event->name = $name;
|
|
$event->start = \microtime(\true);
|
|
return $event;
|
|
}
|
|
}
|
|
class TraceableAdapterEvent
|
|
{
|
|
public $name;
|
|
public $start;
|
|
public $end;
|
|
public $result;
|
|
public $hits = 0;
|
|
public $misses = 0;
|
|
}
|