示例#1
0
 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));
     }
 }
示例#2
0
 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']));
 }