summaryrefslogtreecommitdiffstats
path: root/management-interface/lib/db/mongo.php
diff options
context:
space:
mode:
Diffstat (limited to 'management-interface/lib/db/mongo.php')
-rw-r--r--management-interface/lib/db/mongo.php92
1 files changed, 92 insertions, 0 deletions
diff --git a/management-interface/lib/db/mongo.php b/management-interface/lib/db/mongo.php
new file mode 100644
index 0000000..833f160
--- /dev/null
+++ b/management-interface/lib/db/mongo.php
@@ -0,0 +1,92 @@
+<?php
+
+/*
+ Copyright (c) 2009-2014 F3::Factory/Bong Cosca, All rights reserved.
+
+ This file is part of the Fat-Free Framework (http://fatfree.sf.net).
+
+ THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF
+ ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+ PURPOSE.
+
+ Please see the license.txt file for more information.
+*/
+
+namespace DB;
+
+//! MongoDB wrapper
+class Mongo extends \MongoDB {
+
+ //@{
+ const
+ E_Profiler='MongoDB profiler is disabled';
+ //@}
+
+ protected
+ //! UUID
+ $uuid,
+ //! Data source name
+ $dsn,
+ //! MongoDB log
+ $log;
+
+ /**
+ * Return data source name
+ * @return string
+ **/
+ function dsn() {
+ return $this->dsn;
+ }
+
+ /**
+ * Return UUID
+ * @return string
+ **/
+ function uuid() {
+ return $this->uuid;
+ }
+
+ /**
+ * Return MongoDB profiler results
+ * @return string
+ **/
+ function log() {
+ $cursor=$this->selectcollection('system.profile')->find();
+ foreach (iterator_to_array($cursor) as $frame)
+ if (!preg_match('/\.system\..+$/',$frame['ns']))
+ $this->log.=date('r',$frame['ts']->sec).' ('.
+ sprintf('%.1f',$frame['millis']).'ms) '.
+ $frame['ns'].' ['.$frame['op'].'] '.
+ (empty($frame['query'])?
+ '':json_encode($frame['query'])).
+ (empty($frame['command'])?
+ '':json_encode($frame['command'])).
+ PHP_EOL;
+ return $this->log;
+ }
+
+ /**
+ * Intercept native call to re-enable profiler
+ * @return int
+ **/
+ function drop() {
+ $out=parent::drop();
+ $this->setprofilinglevel(2);
+ return $out;
+ }
+
+ /**
+ * Instantiate class
+ * @param $dsn string
+ * @param $dbname string
+ * @param $options array
+ **/
+ function __construct($dsn,$dbname,array $options=NULL) {
+ $this->uuid=\Base::instance()->hash($this->dsn=$dsn);
+ $class=class_exists('\MongoClient')?'\MongoClient':'\Mongo';
+ parent::__construct(new $class($dsn,$options?:array()),$dbname);
+ $this->setprofilinglevel(2);
+ }
+
+}