. * */ namespace Friendica\Core\Cache\Type; use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Cache\ICache; use Friendica\Core\Cache\IMemoryCache; use Friendica\Util\Profiler; /** * This class wraps cache driver so they can get profiled - in case the profiler is enabled * * It is using the decorator pattern (@see */ class ProfilerCache implements ICache, IMemoryCache { /** * @var ICache The original cache driver */ private $cache; /** * @var Profiler The profiler of Friendica */ private $profiler; public function __construct(ICache $cache, Profiler $profiler) { $this->cache = $cache; $this->profiler = $profiler; } /** * {@inheritDoc} */ public function getAllKeys($prefix = null) { $this->profiler->startRecording('cache'); $return = $this->cache->getAllKeys($prefix); $this->profiler->stopRecording(); return $return; } /** * {@inheritDoc} */ public function get($key) { $this->profiler->startRecording('cache'); $return = $this->cache->get($key); $this->profiler->stopRecording(); return $return; } /** * {@inheritDoc} */ public function set($key, $value, $ttl = Duration::FIVE_MINUTES) { $this->profiler->startRecording('cache'); $return = $this->cache->set($key, $value, $ttl); $this->profiler->stopRecording(); return $return; } /** * {@inheritDoc} */ public function delete($key) { $this->profiler->startRecording('cache'); $return = $this->cache->delete($key); $this->profiler->stopRecording(); return $return; } /** * {@inheritDoc} */ public function clear($outdated = true) { $this->profiler->startRecording('cache'); $return = $this->cache->clear($outdated); $this->profiler->stopRecording(); return $return; } /** * {@inheritDoc} */ public function add($key, $value, $ttl = Duration::FIVE_MINUTES) { if ($this->cache instanceof IMemoryCache) { $this->profiler->startRecording('cache'); $return = $this->cache->add($key, $value, $ttl); $this->profiler->stopRecording(); return $return; } else { return false; } } /** * {@inheritDoc} */ public function compareSet($key, $oldValue, $newValue, $ttl = Duration::FIVE_MINUTES) { if ($this->cache instanceof IMemoryCache) { $this->profiler->startRecording('cache'); $return = $this->cache->compareSet($key, $oldValue, $newValue, $ttl); $this->profiler->stopRecording(); return $return; } else { return false; } } /** * {@inheritDoc} */ public function compareDelete($key, $value) { if ($this->cache instanceof IMemoryCache) { $this->profiler->startRecording('cache'); $return = $this->cache->compareDelete($key, $value); $this->profiler->stopRecording(); return $return; } else { return false; } } /** * {@inheritDoc} */ public function GetName() { return $this->cache->getName() . ' (with profiler)'; } }