Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 16 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
CachedSuggestionsInfo | |
0.00% |
0 / 16 |
|
0.00% |
0 / 2 |
30 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
2 | |||
getInfo | |
0.00% |
0 / 14 |
|
0.00% |
0 / 1 |
20 |
1 | <?php |
2 | |
3 | namespace GrowthExperiments\NewcomerTasks; |
4 | |
5 | use Wikimedia\ObjectCache\WANObjectCache; |
6 | |
7 | /** |
8 | * A CachedSuggestionsInfo decorator which uses WANObjectCache to get/set information about tasks |
9 | */ |
10 | class CachedSuggestionsInfo implements NewcomerTasksInfo { |
11 | |
12 | /** |
13 | * @var SuggestionsInfo |
14 | */ |
15 | private $suggestionsInfo; |
16 | |
17 | /** |
18 | * @var WANObjectCache |
19 | */ |
20 | private $cache; |
21 | |
22 | /** |
23 | * @param SuggestionsInfo $suggestionsInfo |
24 | * @param WANObjectCache $cache |
25 | */ |
26 | public function __construct( |
27 | SuggestionsInfo $suggestionsInfo, |
28 | WANObjectCache $cache |
29 | ) { |
30 | $this->suggestionsInfo = $suggestionsInfo; |
31 | $this->cache = $cache; |
32 | } |
33 | |
34 | /** @inheritDoc */ |
35 | public function getInfo( array $options = [] ) { |
36 | // Force the value to be regenerated if the cached value should not be used |
37 | $resetCache = $options[ 'resetCache' ] ?? false; |
38 | $cacheOption = $resetCache ? [ 'minAsOf' => INF ] : []; |
39 | return $this->cache->getWithSetCallback( |
40 | $this->cache->makeKey( 'GrowthExperiments', 'SuggestionsInfo' ), |
41 | $this->cache::TTL_HOUR, |
42 | function ( $oldValue, &$ttl, &$setOpts ) { |
43 | $data = $this->suggestionsInfo->getInfo(); |
44 | if ( !$data || isset( $data['error'] ) ) { |
45 | $ttl = $this->cache::TTL_UNCACHEABLE; |
46 | } else { |
47 | // WANObjectCache::fetchOrRegenerate would set this to the start of callback |
48 | // execution if unset. If at the end of the callback more than a few seconds |
49 | // have passed since the given time, it will refuse to cache. |
50 | $setOpts['since'] = INF; |
51 | } |
52 | return $data; |
53 | }, |
54 | $cacheOption |
55 | ); |
56 | } |
57 | |
58 | } |