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 / ExtMongoDBCache.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
ExtMongoDBCache.php
149 lines
1 <?php
2
3 declare (strict_types=1);
4 namespace IAWP_SCOPED\Doctrine\Common\Cache;
5
6 use DateTime;
7 use MongoDB\BSON\Binary;
8 use MongoDB\BSON\UTCDateTime;
9 use IAWP_SCOPED\MongoDB\Collection;
10 use IAWP_SCOPED\MongoDB\Database;
11 use MongoDB\Driver\Exception\Exception;
12 use IAWP_SCOPED\MongoDB\Model\BSONDocument;
13 use function serialize;
14 use function time;
15 use function unserialize;
16 /**
17 * MongoDB cache provider for ext-mongodb
18 *
19 * @deprecated Deprecated without replacement in doctrine/cache 1.11. This class will be dropped in 2.0
20 * @internal
21 */
22 class ExtMongoDBCache extends CacheProvider
23 {
24 /** @var Database */
25 private $database;
26 /** @var Collection */
27 private $collection;
28 /** @var bool */
29 private $expirationIndexCreated = \false;
30 /**
31 * This provider will default to the write concern and read preference
32 * options set on the Database instance (or inherited from MongoDB or
33 * Client). Using an unacknowledged write concern (< 1) may make the return
34 * values of delete() and save() unreliable. Reading from secondaries may
35 * make contain() and fetch() unreliable.
36 *
37 * @see http://www.php.net/manual/en/mongo.readpreferences.php
38 * @see http://www.php.net/manual/en/mongo.writeconcerns.php
39 */
40 public function __construct(Collection $collection)
41 {
42 // Ensure there is no typemap set - we want to use our own
43 $this->collection = $collection->withOptions(['typeMap' => null]);
44 $this->database = new Database($collection->getManager(), $collection->getDatabaseName());
45 }
46 /**
47 * {@inheritdoc}
48 */
49 protected function doFetch($id)
50 {
51 $document = $this->collection->findOne(['_id' => $id], [MongoDBCache::DATA_FIELD, MongoDBCache::EXPIRATION_FIELD]);
52 if ($document === null) {
53 return \false;
54 }
55 if ($this->isExpired($document)) {
56 $this->createExpirationIndex();
57 $this->doDelete($id);
58 return \false;
59 }
60 return unserialize($document[MongoDBCache::DATA_FIELD]->getData());
61 }
62 /**
63 * {@inheritdoc}
64 */
65 protected function doContains($id)
66 {
67 $document = $this->collection->findOne(['_id' => $id], [MongoDBCache::EXPIRATION_FIELD]);
68 if ($document === null) {
69 return \false;
70 }
71 if ($this->isExpired($document)) {
72 $this->createExpirationIndex();
73 $this->doDelete($id);
74 return \false;
75 }
76 return \true;
77 }
78 /**
79 * {@inheritdoc}
80 */
81 protected function doSave($id, $data, $lifeTime = 0)
82 {
83 try {
84 $this->collection->updateOne(['_id' => $id], ['$set' => [MongoDBCache::EXPIRATION_FIELD => $lifeTime > 0 ? new UTCDateTime((time() + $lifeTime) * 1000) : null, MongoDBCache::DATA_FIELD => new Binary(serialize($data), Binary::TYPE_GENERIC)]], ['upsert' => \true]);
85 } catch (Exception $e) {
86 return \false;
87 }
88 return \true;
89 }
90 /**
91 * {@inheritdoc}
92 */
93 protected function doDelete($id)
94 {
95 try {
96 $this->collection->deleteOne(['_id' => $id]);
97 } catch (Exception $e) {
98 return \false;
99 }
100 return \true;
101 }
102 /**
103 * {@inheritdoc}
104 */
105 protected function doFlush()
106 {
107 try {
108 // Use remove() in lieu of drop() to maintain any collection indexes
109 $this->collection->deleteMany([]);
110 } catch (Exception $e) {
111 return \false;
112 }
113 return \true;
114 }
115 /**
116 * {@inheritdoc}
117 */
118 protected function doGetStats()
119 {
120 $uptime = null;
121 $memoryUsage = null;
122 try {
123 $serverStatus = $this->database->command(['serverStatus' => 1, 'locks' => 0, 'metrics' => 0, 'recordStats' => 0, 'repl' => 0])->toArray()[0];
124 $uptime = $serverStatus['uptime'] ?? null;
125 } catch (Exception $e) {
126 }
127 try {
128 $collStats = $this->database->command(['collStats' => $this->collection->getCollectionName()])->toArray()[0];
129 $memoryUsage = $collStats['size'] ?? null;
130 } catch (Exception $e) {
131 }
132 return [Cache::STATS_HITS => null, Cache::STATS_MISSES => null, Cache::STATS_UPTIME => $uptime, Cache::STATS_MEMORY_USAGE => $memoryUsage, Cache::STATS_MEMORY_AVAILABLE => null];
133 }
134 /**
135 * Check if the document is expired.
136 */
137 private function isExpired(BSONDocument $document) : bool
138 {
139 return isset($document[MongoDBCache::EXPIRATION_FIELD]) && $document[MongoDBCache::EXPIRATION_FIELD] instanceof UTCDateTime && $document[MongoDBCache::EXPIRATION_FIELD]->toDateTime() < new DateTime();
140 }
141 private function createExpirationIndex() : void
142 {
143 if ($this->expirationIndexCreated) {
144 return;
145 }
146 $this->collection->createIndex([MongoDBCache::EXPIRATION_FIELD => 1], ['background' => \true, 'expireAfterSeconds' => 0]);
147 }
148 }
149