1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
<?php
namespace Wikimedia\WRStats;
/**
* In-memory stats store.
*/
class ArrayStatsStore implements StatsStore {
/**
* @var array[] Associative array mapping data keys to arrays where the
* first entry is the value and the second is the TTL.
*/
private $data = [];
public function makeKey( $prefix, $internals, $entity ) {
$globality = $entity->isGlobal() ? 'global' : 'local';
return implode( ':',
array_merge( [ $globality ], $prefix, $internals, $entity->getComponents() )
);
}
public function incr( array $values, $ttl ) {
foreach ( $values as $key => $value ) {
if ( !isset( $this->data[$key] ) ) {
$this->data[$key] = [ 0, $ttl ];
}
$this->data[$key][0] += $value;
}
}
public function delete( array $keys ) {
foreach ( $keys as $key ) {
unset( $this->data[$key] );
}
}
public function query( array $keys ) {
$values = [];
foreach ( $keys as $key ) {
if ( isset( $this->data[$key] ) ) {
$values[$key] = $this->data[$key][0];
}
}
return $values;
}
/**
* @return array
*/
public function getData() {
return $this->data;
}
}
|