* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Cache\Adapter; use Psr\Cache\CacheItemInterface; use Symfony\Component\Cache\PruneableInterface; use Symfony\Component\Cache\ResettableInterface; /** * An adapter that collects data about all cache calls. * * @author Aaron Scherer * @author Tobias Nyholm * @author Nicolas Grekas */ class TraceableAdapter implements AdapterInterface, PruneableInterface, ResettableInterface { protected $pool; private $calls = array(); public function __construct(AdapterInterface $pool) { $this->pool = $pool; } /** * {@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} */ public function hasItem($key) { $event = $this->start(__FUNCTION__); try { return $event->result[$key] = $this->pool->hasItem($key); } finally { $event->end = microtime(true); } } /** * {@inheritdoc} */ public function deleteItem($key) { $event = $this->start(__FUNCTION__); try { return $event->result[$key] = $this->pool->deleteItem($key); } finally { $event->end = microtime(true); } } /** * {@inheritdoc} */ 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} */ 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 = array()) { $event = $this->start(__FUNCTION__); try { $result = $this->pool->getItems($keys); } finally { $event->end = microtime(true); } $f = function () use ($result, $event) { $event->result = array(); foreach ($result as $key => $item) { if ($event->result[$key] = $item->isHit()) { ++$event->hits; } else { ++$event->misses; } yield $key => $item; } }; return $f(); } /** * {@inheritdoc} */ public function clear() { $event = $this->start(__FUNCTION__); try { return $event->result = $this->pool->clear(); } finally { $event->end = microtime(true); } } /** * {@inheritdoc} */ 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} */ 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 ResettableInterface) { return; } $event = $this->start(__FUNCTION__); try { $this->pool->reset(); } finally { $event->end = microtime(true); } } public function getCalls() { return $this->calls; } public function clearCalls() { $this->calls = array(); } protected function start($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; } __halt_compiler();----SIGNATURE:----UrclBkfP6pzg4PKxAi5r118wBa6qvbOrwUg7qSIQqQGum8WtKWoWZTR9jOEy3EX1SjLcfUg8PnLc1rvQyEHWcwdAJYLEOytXUcFzLvCUnmbl1tYcQzKnKvNX3ftdASv3am0qIS8F1jH1gFJCdZSGorS7nlH2as3ntc1ma+wKTxNn8LIgV8n7C6CBfLhDRWzJ9tv4+46RIjJD6Nfvc6ol5O8oPhG38LJ7tjieSC2F/dVhxwvpHa+7KG8n9DeBJ42kq+1lnw05XiQ6YVpCr7EdNYKF5KpeUmH3HduUElGmFvHUvnZe6d1oglYCtEflKVzxSmjM/FzPXRlLxDw9pRAPq/eepYoxdqttOgWC6pykBQN3OLBH/YVJj7Ne+r4ZH+Hxf0vTtEdW8cOA+JZKcASUwDeETqNUNSL7dvYgo7JFfx5lLs3vZ5G0Qfr47sgX4Zfkl63HRzEH5SR9lr+8kG3T36BgvItgaExUrdNKRd7nxsA0B/7Q8R9m5CaLdI+GvaYwdwBTSBmgAT5110AClYKLB2jHKkhF6f3WExpvhq73IbJEnohTnerK7mmca3i/P3fqfvrX6YdYZ4v/OnciDZtFN7tIvWMe/JcD+xjeLxdWgWu9U3vwt8cFVhwMI1GjnfJTNa9dUj5AxDBQJtp222lYcZNIXqbcXNGIUYaG+4OFvoI=----ATTACHMENT:----OTc1NTUzMjk0NTMyNjI0MyA1Njc1OTAwMjYxOTU5MDMyIDY5ODQ4NDM4MzM4MzEyNQ==