PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.2.0
Independent Analytics – WordPress Analytics Plugin v2.2.0
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / vendor / doctrine / cache / lib / Doctrine / Common / Cache / CouchbaseBucketCache.php
independent-analytics / vendor / doctrine / cache / lib / Doctrine / Common / Cache Last commit date
Psr6 2 years ago ApcCache.php 2 years ago ApcuCache.php 2 years ago ArrayCache.php 2 years ago Cache.php 2 years ago CacheProvider.php 2 years ago ChainCache.php 2 years ago ClearableCache.php 2 years ago CouchbaseBucketCache.php 2 years ago CouchbaseCache.php 2 years ago ExtMongoDBCache.php 2 years ago FileCache.php 2 years ago FilesystemCache.php 2 years ago FlushableCache.php 2 years ago InvalidCacheId.php 2 years ago LegacyMongoDBCache.php 2 years ago MemcacheCache.php 2 years ago MemcachedCache.php 2 years ago MongoDBCache.php 2 years ago MultiDeleteCache.php 2 years ago MultiGetCache.php 2 years ago MultiOperationCache.php 2 years ago MultiPutCache.php 2 years ago PhpFileCache.php 2 years ago PredisCache.php 2 years ago RedisCache.php 2 years ago SQLite3Cache.php 2 years ago Version.php 2 years ago VoidCache.php 2 years ago WinCacheCache.php 2 years ago XcacheCache.php 2 years ago ZendDataCache.php 2 years ago
CouchbaseBucketCache.php
154 lines
1 <?php
2
3 declare (strict_types=1);
4 namespace IAWP_SCOPED\Doctrine\Common\Cache;
5
6 use Couchbase\Bucket;
7 use IAWP_SCOPED\Couchbase\Document;
8 use IAWP_SCOPED\Couchbase\Exception;
9 use RuntimeException;
10 use function phpversion;
11 use function serialize;
12 use function sprintf;
13 use function substr;
14 use function time;
15 use function unserialize;
16 use function version_compare;
17 /**
18 * Couchbase ^2.3.0 cache provider.
19 *
20 * @deprecated Deprecated without replacement in doctrine/cache 1.11. This class will be dropped in 2.0
21 * @internal
22 */
23 final class CouchbaseBucketCache extends CacheProvider
24 {
25 private const MINIMUM_VERSION = '2.3.0';
26 private const KEY_NOT_FOUND = 13;
27 private const MAX_KEY_LENGTH = 250;
28 private const THIRTY_DAYS_IN_SECONDS = 2592000;
29 /** @var Bucket */
30 private $bucket;
31 public function __construct(Bucket $bucket)
32 {
33 if (version_compare(phpversion('couchbase'), self::MINIMUM_VERSION) < 0) {
34 // Manager is required to flush cache and pull stats.
35 throw new RuntimeException(sprintf('ext-couchbase:^%s is required.', self::MINIMUM_VERSION));
36 }
37 $this->bucket = $bucket;
38 }
39 /**
40 * {@inheritdoc}
41 */
42 protected function doFetch($id)
43 {
44 $id = $this->normalizeKey($id);
45 try {
46 $document = $this->bucket->get($id);
47 } catch (Exception $e) {
48 return \false;
49 }
50 if ($document instanceof Document && $document->value !== \false) {
51 return unserialize($document->value);
52 }
53 return \false;
54 }
55 /**
56 * {@inheritdoc}
57 */
58 protected function doContains($id)
59 {
60 $id = $this->normalizeKey($id);
61 try {
62 $document = $this->bucket->get($id);
63 } catch (Exception $e) {
64 return \false;
65 }
66 if ($document instanceof Document) {
67 return !$document->error;
68 }
69 return \false;
70 }
71 /**
72 * {@inheritdoc}
73 */
74 protected function doSave($id, $data, $lifeTime = 0)
75 {
76 $id = $this->normalizeKey($id);
77 $lifeTime = $this->normalizeExpiry($lifeTime);
78 try {
79 $encoded = serialize($data);
80 $document = $this->bucket->upsert($id, $encoded, ['expiry' => (int) $lifeTime]);
81 } catch (Exception $e) {
82 return \false;
83 }
84 if ($document instanceof Document) {
85 return !$document->error;
86 }
87 return \false;
88 }
89 /**
90 * {@inheritdoc}
91 */
92 protected function doDelete($id)
93 {
94 $id = $this->normalizeKey($id);
95 try {
96 $document = $this->bucket->remove($id);
97 } catch (Exception $e) {
98 return $e->getCode() === self::KEY_NOT_FOUND;
99 }
100 if ($document instanceof Document) {
101 return !$document->error;
102 }
103 return \false;
104 }
105 /**
106 * {@inheritdoc}
107 */
108 protected function doFlush()
109 {
110 $manager = $this->bucket->manager();
111 // Flush does not return with success or failure, and must be enabled per bucket on the server.
112 // Store a marker item so that we will know if it was successful.
113 $this->doSave(__METHOD__, \true, 60);
114 $manager->flush();
115 if ($this->doContains(__METHOD__)) {
116 $this->doDelete(__METHOD__);
117 return \false;
118 }
119 return \true;
120 }
121 /**
122 * {@inheritdoc}
123 */
124 protected function doGetStats()
125 {
126 $manager = $this->bucket->manager();
127 $stats = $manager->info();
128 $nodes = $stats['nodes'];
129 $node = $nodes[0];
130 $interestingStats = $node['interestingStats'];
131 return [Cache::STATS_HITS => $interestingStats['get_hits'], Cache::STATS_MISSES => $interestingStats['cmd_get'] - $interestingStats['get_hits'], Cache::STATS_UPTIME => $node['uptime'], Cache::STATS_MEMORY_USAGE => $interestingStats['mem_used'], Cache::STATS_MEMORY_AVAILABLE => $node['memoryFree']];
132 }
133 private function normalizeKey(string $id) : string
134 {
135 $normalized = substr($id, 0, self::MAX_KEY_LENGTH);
136 if ($normalized === \false) {
137 return $id;
138 }
139 return $normalized;
140 }
141 /**
142 * Expiry treated as a unix timestamp instead of an offset if expiry is greater than 30 days.
143 *
144 * @src https://developer.couchbase.com/documentation/server/4.1/developer-guide/expiry.html
145 */
146 private function normalizeExpiry(int $expiry) : int
147 {
148 if ($expiry > self::THIRTY_DAYS_IN_SECONDS) {
149 return time() + $expiry;
150 }
151 return $expiry;
152 }
153 }
154