You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ih...@apache.org on 2013/01/01 11:39:38 UTC

[2/4] git commit: LOG4PHP-203; added support for capped collection in mongo appender

LOG4PHP-203; added support for capped collection in mongo appender

Capped collections are fixed-size collections that support
high-throughput operations that insert, retrieve, and delete documents
based on insertion order. Capped collections work in a way similar to
circular buffers: once a collection fills its allocated space, it makes
room for new documents by overwriting the oldest documents in the
collection.

Signed-off-by: Vladimir Gorej <go...@codescale.net>
Signed-off-by: Ivan Habunek <ih...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/logging-log4php/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4php/commit/7be82157
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4php/tree/7be82157
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4php/diff/7be82157

Branch: refs/heads/develop
Commit: 7be821576e7babb451c362f8ee33e6d556f150ee
Parents: c45feb4
Author: Vladimir Gorej <go...@codescale.net>
Authored: Mon Dec 31 11:43:58 2012 +0100
Committer: Ivan Habunek <ih...@apache.org>
Committed: Tue Jan 1 11:35:10 2013 +0100

----------------------------------------------------------------------
 src/main/php/appenders/LoggerAppenderMongoDB.php |  122 +++++++++++++++--
 1 files changed, 110 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4php/blob/7be82157/src/main/php/appenders/LoggerAppenderMongoDB.php
----------------------------------------------------------------------
diff --git a/src/main/php/appenders/LoggerAppenderMongoDB.php b/src/main/php/appenders/LoggerAppenderMongoDB.php
index 43dabb8..2eccfcd 100644
--- a/src/main/php/appenders/LoggerAppenderMongoDB.php
+++ b/src/main/php/appenders/LoggerAppenderMongoDB.php
@@ -30,6 +30,9 @@
  * - **username** - Username used to connect to the database.
  * - **password** - Password used to connect to the database.
  * - **timeout** - For how long the driver should try to connect to the database (in milliseconds).
+ * - **capped** - Whether the collection should be a fixed size..
+ * - **cappedMax** - If the collection is fixed size, the maximum number of elements to store in the collection.
+ * - **cappedSize** - If the collection is fixed size, its size in bytes.
  * 
  * @package log4php
  * @subpackage appenders
@@ -62,31 +65,69 @@ class LoggerAppenderMongoDB extends LoggerAppender {
 	
 	/** Default value for {@link $timeout} */
 	const DEFAULT_TIMEOUT_VALUE = 3000;
+
+	/** Default value for {@link $capped} */
+	const DEFAULT_CAPPED = false;
+
+	/** Default value for {@link $cappedMax} */
+	const DEFAULT_CAPPED_MAX = 1000;
+
+	/** Default value for {@link $cappedSize} */
+	const DEFAULT_CAPPED_SIZE = 1000000;
 	
 	// ******************************************
 	// ** Configurable parameters              **
 	// ******************************************
 	
-	/** Server on which mongodb instance is located. */
+	/** Server on which mongodb instance is located.
+	 * @var string
+	 */
 	protected $host;
 	
-	/** Port on which the instance is bound. */
+	/** Port on which the instance is bound.
+	 * @var int
+	 */
 	protected $port;
 	
-	/** Name of the database to which to log. */
+	/** Name of the database to which to log.
+	 * @var string
+	 */
 	protected $databaseName;
 	
-	/** Name of the collection within the given database. */
+	/** Name of the collection within the given database.
+	 * @var string
+	 */
 	protected $collectionName;
 			
-	/** Username used to connect to the database. */
+	/** Username used to connect to the database.
+	 * @var string
+	 */
 	protected $userName;
 	
-	/** Password used to connect to the database. */
+	/** Password used to connect to the database.
+	 * @var string
+	 */
 	protected $password;
 	
-	/** Timeout value used when connecting to the database (in milliseconds). */
+	/** Timeout value used when connecting to the database (in milliseconds).
+	 * @var int
+	 */
 	protected $timeout;
+
+	/** Whether the collection should be a fixed size.
+	 * @var bool
+	 */
+	protected $capped;
+
+	/** If the collection is fixed size, the maximum number of elements to store in the collection.
+	 * @var int
+	 */
+	protected $cappedMax;
+
+	/** If the collection is fixed size, its size in bytes.
+	 * @var int
+	 */
+	protected $cappedSize;
 	
 	// ******************************************
 	// ** Member variables                     **
@@ -112,6 +153,9 @@ class LoggerAppenderMongoDB extends LoggerAppender {
 		$this->collectionName = self::DEFAULT_COLLECTION_NAME;
 		$this->timeout = self::DEFAULT_TIMEOUT_VALUE;
 		$this->requiresLayout = false;
+		$this->capped = self::DEFAULT_CAPPED;
+		$this->cappedMax = self::DEFAULT_CAPPED_MAX;
+		$this->cappedSize = self::DEFAULT_CAPPED_SIZE;
 	}
 	
 	/**
@@ -129,10 +173,15 @@ class LoggerAppenderMongoDB extends LoggerAppender {
 					throw new Exception($authResult['errmsg'], $authResult['ok']);
 				}
 			}
-			$this->collection = $db->selectCollection($this->collectionName);
+			if ($this->capped === true) {
+				$this->collection = $db->createCollection($this->collectionName, $this->capped, $this->cappedSize,
+					                                      $this->cappedMax);
+			} else {
+				$this->collection = $db->selectCollection($this->collectionName);
+			}
 		} catch (MongoConnectionException $ex) {
 			$this->closed = true;
-			$this->warn(sprintf('Failed to connect to mongo deamon: %s', $ex->getMessage()));
+			$this->warn(sprintf('Failed to connect to mongo daemon: %s', $ex->getMessage()));
 		} catch (InvalidArgumentException $ex) {
 			$this->closed = true;
 			$this->warn(sprintf('Error while selecting mongo database: %s', $ex->getMessage()));
@@ -194,7 +243,7 @@ class LoggerAppenderMongoDB extends LoggerAppender {
 	/**
 	 * Converts an Exception into an array which can be logged to mongodb.
 	 * 
-	 * Supports innner exceptions (PHP >= 5.3)
+	 * Supports inner exceptions (PHP >= 5.3)
 	 * 
 	 * @param Exception $ex
 	 * @return array
@@ -235,7 +284,7 @@ class LoggerAppenderMongoDB extends LoggerAppender {
 		if (!preg_match('/^mongodb\:\/\//', $host)) {
 			$host = self::DEFAULT_MONGO_URL_PREFIX . $host;
 		}
-		$this->host = $host;
+		$this->setString('host', $host);
 	}
 		
 	/** 
@@ -341,7 +390,56 @@ class LoggerAppenderMongoDB extends LoggerAppender {
 	public function getTimeout() {
 		return $this->timeout;
 	}
-	/** 
+
+	/**
+	 * Sets the value of {@link $capped} parameter.
+	 * @param bool $capped
+	 */
+	public function setCapped($capped) {
+		$this->setBoolean('capped', $capped);
+	}
+
+	/**
+	 * Returns the value of {@link $capped} parameter.
+	 * @return bool
+	 */
+	public function getCapped() {
+		return $this->capped;
+	}
+
+	/**
+	 * Sets the value of {@link $cappedMax} parameter.
+	 * @param int $cappedMax
+	 */
+	public function setCappedMax($cappedMax) {
+		$this->setPositiveInteger('cappedMax', $cappedMax);
+	}
+
+	/**
+	 * Returns the value of {@link $cappedMax} parameter.
+	 * @return int
+	 */
+	public function getCappedMax() {
+		return $this->cappedMax;
+	}
+
+	/**
+	 * Sets the value of {@link $cappedSize} parameter.
+	 * @param int $cappedSize
+	 */
+	public function setCappedSize($cappedSize) {
+		$this->setPositiveInteger('cappedSize', $cappedSize);
+	}
+
+	/**
+	 * Returns the value of {@link $cappedSzie} parameter.
+	 * @return int
+	 */
+	public function getCappedSize() {
+		return $this->cappedSize;
+	}
+
+	/**
 	 * Returns the mongodb connection.
 	 * @return Mongo
 	 */