public function show($name) { $stats = StatsCore::get($name); $max = max(array_map('strlen', array_keys($stats))); foreach ($stats as $key => $value) { $this->out(sprintf("%{$max}s: %s", $key, $value)); } }
function testGet() { $scope = __FUNCTION__; Redis::config(array('format' => $scope)); $data1 = array('calls' => 140, 'fails' => 22, 'successful' => 118); $data2 = array('calls' => 35, 'fails' => 3, 'successful' => 32); $data3 = array('calls' => 28, 'fails' => 16, 'successful' => 12); $this->assertTrue($this->redis->hMset("{$scope}:stats:global:foo", $data1)); $this->assertTrue($this->redis->hMset("{$scope}:stats:prefix1:foo", $data2)); $this->assertTrue($this->redis->hMset("{$scope}:stats:prefix2:foo", $data3)); $this->assertTrue($this->redis->hMset("{$scope}:stats:global:bar", $data1)); $this->assertTrue($this->redis->hMset("{$scope}:stats:user:foo:bar", $data2)); $this->assertTrue($this->redis->hMset("{$scope}:stats:year:2013:bar", $data3)); $this->assertEqual($data1, $this->redis->hGetAll("{$scope}:stats:global:foo")); $this->assertEqual($data2, $this->redis->hGetAll("{$scope}:stats:prefix1:foo")); $this->assertEqual($data3, $this->redis->hGetAll("{$scope}:stats:prefix2:foo")); $this->assertEqual($data1, $this->redis->hGetAll("{$scope}:stats:global:bar")); $this->assertEqual($data2, $this->redis->hGetAll("{$scope}:stats:user:foo:bar")); $this->assertEqual($data3, $this->redis->hGetAll("{$scope}:stats:year:2013:bar")); // simplest call $this->assertEqual($data1, Stats::get('foo')); // with one bucket $result = Stats::get('foo', 'prefix1'); $this->assertEqual($data2, $result); // with one bucket as array $result = Stats::get('foo', array('prefix1')); $this->assertEqual($data2, $result); // with two buckets as flat array $expected = array('prefix1' => $data2, 'prefix2' => $data3); $result = Stats::get('foo', array('prefix1', 'prefix2')); $this->assertEqual($expected, $result); // with two buckets as flat array $expected = array('global' => $data1, 'prefix1' => $data2, 'prefix2' => $data3); $result = Stats::get('foo', array('global', 'prefix1', 'prefix2')); $this->assertEqual($expected, $result); // with one bucket as associative array $result = Stats::get('bar', array('user' => 'foo')); $this->assertEqual($data2, $result); // with two buckets as associative array $expected = array('user:foo' => $data2, 'year:2013' => $data3); $result = Stats::get('bar', array('user' => 'foo', 'year' => 2013)); $this->assertEqual($expected, $result); // with mixed buckets $expected = array('global' => $data1, 'user:foo' => $data2); $result = Stats::get('bar', array('user' => 'foo', 'global')); $this->assertEqual($expected, $result); // with one field $result = Stats::get('foo', 'global', 'calls'); $this->assertEqual($data1['calls'], $result); // with one field for one flat bucket $result = Stats::get('foo', 'prefix1', 'calls'); $this->assertEqual($data2['calls'], $result); // with one field for a different bucket $result = Stats::get('bar', 'user:foo', 'calls'); $this->assertEqual($data2['calls'], $result); // with one field for an arrayed bucket $result = Stats::get('bar', array('user' => 'foo'), 'calls'); $this->assertEqual($data2['calls'], $result); // with one field for an arrayed bucket $expected = array('prefix1' => $data2['calls'], 'prefix2' => $data3['calls']); $result = Stats::get('foo', array('prefix1', 'prefix2'), 'calls'); $this->assertEqual($expected, $result); // with one field for an arrayed bucket $expected = array('prefix1' => $data2['fails'], 'prefix2' => $data3['fails']); $result = Stats::get('foo', array('prefix1', 'prefix2'), 'fails'); $this->assertEqual($expected, $result); // with one field for an arrayed bucket $expected = array('user:foo' => $data2['fails'], 'year:2013' => $data3['fails']); $result = Stats::get('bar', array('user' => 'foo', 'year' => '2013'), 'fails'); $this->assertEqual($expected, $result); // with one fields $result = Stats::get('bar', 'global', 'successful'); $this->assertEqual($data1['successful'], $result); // with two fields $result = Stats::get('bar', 'global', array('successful', 'calls')); $this->assertEqual(array('calls' => 140, 'successful' => 118), $result); $this->assertFalse(isset($result['fails'])); // with one field for different bucket $result = Stats::get('foo', 'prefix1', 'fails'); $this->assertEqual($data2['fails'], $result); // with one field for different bucket $result = Stats::get('bar', array('year' => 2013), 'successful'); $this->assertEqual($data3['successful'], $result); // with two fields and two buckets $expected = array('global' => array('calls' => 140, 'successful' => 118), 'prefix1' => array('calls' => 35, 'successful' => 32)); $result = Stats::get('foo', array('global', 'prefix1'), array('successful', 'calls')); $this->assertEqual($expected, $result); $this->assertFalse(isset($result['global']['fails'])); $this->assertFalse(isset($result['prefix1']['fails'])); $this->assertFalse(isset($result['prefix2'])); // with two fields and two associative buckets $expected = array('user:foo' => array('fails' => 3, 'successful' => 32), 'year:2013' => array('fails' => 16, 'successful' => 12)); $result = Stats::get('bar', array('user' => 'foo', 'year' => 2013), array('successful', 'fails')); $this->assertEqual($expected, $result); $this->assertFalse(isset($result['user:foo']['calls'])); $this->assertFalse(isset($result['year:2013']['calls'])); $this->assertFalse(isset($result['global'])); }