Added lifetime/cleanup support.

This commit is contained in:
H. Westphal 2011-09-19 22:37:12 +02:00
parent 365e73aa71
commit a0329c37c9
2 changed files with 30 additions and 6 deletions

View File

@ -14,6 +14,7 @@ namespace Symfony\Component\HttpKernel\Profiler;
class MongoDbProfilerStorage implements ProfilerStorageInterface
{
protected $dsn;
protected $lifetime;
private $mongo;
/**
@ -21,9 +22,10 @@ class MongoDbProfilerStorage implements ProfilerStorageInterface
*
* @param string $dsn A data source name
*/
public function __construct($dsn)
public function __construct($dsn, $username = '', $password = '', $lifetime = 86400)
{
$this->dsn = $dsn;
$this->lifetime = (int) $lifetime;
}
/**
@ -84,6 +86,8 @@ class MongoDbProfilerStorage implements ProfilerStorageInterface
*/
public function write(Profile $profile)
{
$this->cleanup();
$record = array(
'_id' => $profile->getToken(),
'parent' => $profile->getParent() ? $profile->getParent()->getToken() : null,
@ -153,6 +157,11 @@ class MongoDbProfilerStorage implements ProfilerStorageInterface
return $profiles;
}
protected function cleanup()
{
$this->getMongo()->remove(array('time' => array('$lt' => time() - $this->lifetime)));
}
/**
* @param string $ip
* @param string $url

View File

@ -26,7 +26,7 @@ class MongoDbProfilerStorageTest extends \PHPUnit_Framework_TestCase
protected function setUp()
{
if (extension_loaded('mongo')) {
self::$storage = new DummyMongoDbProfilerStorage('mongodb://localhost/symfony_tests/profiler_data');
self::$storage = new DummyMongoDbProfilerStorage('mongodb://localhost/symfony_tests/profiler_data', '', '', 86400);
try {
self::$storage->getMongo();
} catch(\MongoConnectionException $e) {
@ -40,7 +40,7 @@ class MongoDbProfilerStorageTest extends \PHPUnit_Framework_TestCase
public function testStore()
{
for ($i = 0; $i < 10; $i ++) {
for ($i = 0; $i < 10; $i++) {
$profile = new Profile('token_'.$i);
$profile->setIp('127.0.0.1');
$profile->setUrl('http://foo.bar');
@ -74,8 +74,8 @@ class MongoDbProfilerStorageTest extends \PHPUnit_Framework_TestCase
public function testStoreTime()
{
$dt = new \DateTime('2011-09-07 00:00:00');
for ($i = 0; $i < 3; $i ++) {
$dt = new \DateTime('now');
for ($i = 0; $i < 3; $i++) {
$dt->modify('+1 minute');
$profile = new Profile('time_'.$i);
$profile->setIp('127.0.0.1');
@ -143,11 +143,26 @@ class MongoDbProfilerStorageTest extends \PHPUnit_Framework_TestCase
public function testRetrieveByEmptyUrlAndIp()
{
for ($i = 0; $i < 5; $i ++) {
for ($i = 0; $i < 5; $i++) {
$profile = new Profile('token_'.$i);
self::$storage->write($profile);
}
$this->assertEquals(count(self::$storage->find('', '', 10)), 5, '->find() returns all previously added records');
self::$storage->purge();
}
public function testCleanup()
{
$dt = new \DateTime('-2 day');
for ($i = 0; $i < 3; $i++) {
$dt->modify('-1 day');
$profile = new Profile('time_'.$i);
$profile->setTime($dt->getTimestamp());
self::$storage->write($profile);
}
$records = self::$storage->find('', '', 3);
$this->assertEquals(count($records), 1, '->find() returns only one record');
$this->assertEquals($records[0]['token'], 'time_2', '->find() returns the latest added record');
self::$storage->purge();
}
}