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\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');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
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