]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add QueryLogger interface to allow apps to get a list of used queries
authorRobin Appelman <icewind@owncloud.com>
Thu, 2 Oct 2014 23:35:07 +0000 (01:35 +0200)
committerRobin Appelman <icewind@owncloud.com>
Mon, 20 Oct 2014 11:38:37 +0000 (13:38 +0200)
lib/private/debug/dummyquerylogger.php [new file with mode: 0644]
lib/private/debug/query.php [new file with mode: 0644]
lib/private/debug/querylogger.php [new file with mode: 0644]
lib/private/server.php
lib/public/debug/iquery.php [new file with mode: 0644]
lib/public/debug/iquerylogger.php [new file with mode: 0644]
lib/public/iservercontainer.php

diff --git a/lib/private/debug/dummyquerylogger.php b/lib/private/debug/dummyquerylogger.php
new file mode 100644 (file)
index 0000000..0c2664e
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Debug;
+
+use OCP\Debug\IQueryLogger;
+
+class DummyQueryLogger implements IQueryLogger {
+       /**
+        * @param string $sql
+        * @param array $params
+        * @param array $types
+        */
+       public function startQuery($sql, array $params = null, array $types = null) {
+       }
+
+       public function stopQuery() {
+       }
+
+       /**
+        * @return \OCP\Debug\IQuery[]
+        */
+       public function getQueries() {
+               return array();
+       }
+}
diff --git a/lib/private/debug/query.php b/lib/private/debug/query.php
new file mode 100644 (file)
index 0000000..351c7d9
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Debug;
+
+use OCP\Debug\IQuery;
+
+class Query implements IQuery {
+       private $sql;
+
+       private $params;
+
+       private $start;
+
+       private $end;
+
+       /**
+        * @param string $sql
+        * @param array $params
+        * @param int $start
+        */
+       public function __construct($sql, $params, $start) {
+               $this->sql = $sql;
+               $this->params = $params;
+               $this->start = $start;
+       }
+
+       public function end($time) {
+               $this->end = $time;
+       }
+
+       /**
+        * @return array
+        */
+       public function getParams() {
+               return $this->params;
+       }
+
+       /**
+        * @return string
+        */
+       public function getSql() {
+               return $this->sql;
+       }
+
+       /**
+        * @return int
+        */
+       public function getDuration() {
+               return $this->end - $this->start;
+       }
+}
diff --git a/lib/private/debug/querylogger.php b/lib/private/debug/querylogger.php
new file mode 100644 (file)
index 0000000..990188d
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Debug;
+
+use OCP\Debug\IQueryLogger;
+
+class QueryLogger implements IQueryLogger {
+       /**
+        * @var \OC\Debug\Query
+        */
+       protected $activeQuery;
+
+       /**
+        * @var \OC\Debug\Query[]
+        */
+       protected $queries = array();
+
+       /**
+        * @param string $sql
+        * @param array $params
+        * @param array $types
+        */
+       public function startQuery($sql, array $params = null, array $types = null) {
+               $this->activeQuery = new Query($sql, $params, microtime(true));
+       }
+
+       public function stopQuery() {
+               if ($this->activeQuery) {
+                       $this->activeQuery->end(microtime(true));
+                       $this->queries[] = $this->activeQuery;
+                       $this->activeQuery = null;
+               }
+       }
+
+       /**
+        * @return \OCP\Debug\IQuery[]
+        */
+       public function getQueries() {
+               return $this->queries;
+       }
+}
index 263f9919023205ceab4441dab0db743ed5762290..c0b94a5b4c34a9030eb5b575a088dd2725a41f73 100644 (file)
@@ -6,7 +6,9 @@ use OC\AppFramework\Http\Request;
 use OC\AppFramework\Db\Db;
 use OC\AppFramework\Utility\SimpleContainer;
 use OC\Cache\UserCache;
+use OC\Debug\DummyQueryLogger;
 use OC\Debug\EventLogger;
+use OC\Debug\QueryLogger;
 use OC\Security\CertificateManager;
 use OC\DB\ConnectionWrapper;
 use OC\Files\Node\Root;
@@ -229,6 +231,13 @@ class Server extends SimpleContainer implements IServerContainer {
                                return new DummyEventLogger();
                        }
                });
+               $this->registerService('QueryLogger', function ($c) {
+                       if (defined('DEBUG') and DEBUG) {
+                               return new QueryLogger();
+                       } else {
+                               return new DummyQueryLogger();
+                       }
+               });
        }
 
        /**
@@ -579,4 +588,15 @@ class Server extends SimpleContainer implements IServerContainer {
        function getEventLogger() {
                return $this->query('EventLogger');
        }
+
+       /**
+        * Get the active query logger
+        *
+        * The returned logger only logs data when debug mode is enabled
+        *
+        * @return \OCP\Debug\IQueryLogger
+        */
+       function getQueryLogger() {
+               return $this->query('EventLogger');
+       }
 }
diff --git a/lib/public/debug/iquery.php b/lib/public/debug/iquery.php
new file mode 100644 (file)
index 0000000..070c4d6
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Debug;
+
+interface IQuery {
+       /**
+        * @return string
+        */
+       public function getSql();
+
+       /**
+        * @return array
+        */
+       public function getParams();
+
+       /**
+        * @return float
+        */
+       public function getDuration();
+}
diff --git a/lib/public/debug/iquerylogger.php b/lib/public/debug/iquerylogger.php
new file mode 100644 (file)
index 0000000..fe8eae0
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Debug;
+
+use Doctrine\DBAL\Logging\SQLLogger;
+
+interface IQueryLogger extends SQLLogger {
+       /**
+        * @param string $sql
+        * @param array $params
+        * @param array $types
+        */
+       public function startQuery($sql, array $params = null, array $types = null);
+
+       public function stopQuery();
+
+       /**
+        * @return \OCP\Debug\IQuery[]
+        */
+       public function getQueries();
+}
index 57bbf628993bfe41977aa85059177377ecce2897..97ff74385a299d012c56d03d87e5afd0202dbec3 100644 (file)
@@ -255,4 +255,13 @@ interface IServerContainer {
         * @return \OCP\Debug\IEventLogger
         */
        function getEventLogger();
+
+       /**
+        * Get the active query logger
+        *
+        * The returned logger only logs data when debug mode is enabled
+        *
+        * @return \OCP\Debug\IQueryLogger
+        */
+       function getQueryLogger();
 }