Add QueryLogger interface to allow apps to get a list of used queries
This commit is contained in:
parent
d38050cf52
commit
b71d1d3616
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,9 @@ use OC\AppFramework\Http\Request;
|
||||||
use OC\AppFramework\Db\Db;
|
use OC\AppFramework\Db\Db;
|
||||||
use OC\AppFramework\Utility\SimpleContainer;
|
use OC\AppFramework\Utility\SimpleContainer;
|
||||||
use OC\Cache\UserCache;
|
use OC\Cache\UserCache;
|
||||||
|
use OC\Debug\DummyQueryLogger;
|
||||||
use OC\Debug\EventLogger;
|
use OC\Debug\EventLogger;
|
||||||
|
use OC\Debug\QueryLogger;
|
||||||
use OC\Security\CertificateManager;
|
use OC\Security\CertificateManager;
|
||||||
use OC\DB\ConnectionWrapper;
|
use OC\DB\ConnectionWrapper;
|
||||||
use OC\Files\Node\Root;
|
use OC\Files\Node\Root;
|
||||||
|
@ -229,6 +231,13 @@ class Server extends SimpleContainer implements IServerContainer {
|
||||||
return new DummyEventLogger();
|
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() {
|
function getEventLogger() {
|
||||||
return $this->query('EventLogger');
|
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');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
|
@ -255,4 +255,13 @@ interface IServerContainer {
|
||||||
* @return \OCP\Debug\IEventLogger
|
* @return \OCP\Debug\IEventLogger
|
||||||
*/
|
*/
|
||||||
function getEventLogger();
|
function getEventLogger();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the active query logger
|
||||||
|
*
|
||||||
|
* The returned logger only logs data when debug mode is enabled
|
||||||
|
*
|
||||||
|
* @return \OCP\Debug\IQueryLogger
|
||||||
|
*/
|
||||||
|
function getQueryLogger();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue