diff --git a/src/FuzeWorks/DatabaseTracyBridge.php b/src/FuzeWorks/DatabaseTracyBridge.php new file mode 100644 index 0000000..5db5a6a --- /dev/null +++ b/src/FuzeWorks/DatabaseTracyBridge.php @@ -0,0 +1,142 @@ +. + * + * @author TechFuze + * @copyright Copyright (c) 2013 - 2017, Techfuze. (http://techfuze.net) + * @copyright Copyright (c) 1996 - 2015, Free Software Foundation, Inc. (http://www.fsf.org/) + * @license http://opensource.org/licenses/GPL-3.0 GPLv3 License + * + * @link http://techfuze.net/fuzeworks + * @since Version 1.0.4 + * + * @version Version 1.0.4 + */ + +namespace FuzeWorks; +use Tracy\IBarPanel; +use Tracy\Debugger; + +/** + * DatabaseTracyBridge Class. + * + * This class provides a bridge between FuzeWorks\Database and Tracy Debugging tool. + * + * This class registers in Tracy, and creates a Bar object which contains information about database sessions. + * It hooks into database usage and provides the information on the Tracy Bar panel. + * + * @author Abel Hoogeveen + * @copyright Copyright (c) 2013 - 2017, Techfuze. (http://techfuze.net) + */ +class DatabaseTracyBridge implements IBarPanel +{ + + public static $databases = array(); + protected $results = array(); + + public static function register() + { + $class = new self(); + $bar = Debugger::getBar(); + $bar->addPanel($class); + } + + public static function registerDatabase($database) + { + self::$databases[] = $database; + } + + protected function getResults() + { + if (!empty($this->results)) + { + return $this->results; + } + + // First prepare global variables + $results = array(); + $results['dbCount'] = 0; + $results['queryCount'] = 0; + $results['queryTimings'] = 0.0; + $results['errorsFound'] = false; + + // Go through all databases + foreach (self::$databases as $database) { + // Increase total databases + $results['dbCount']++; + + // First determine the ID + if (!empty($database->dsn)) + { + $databaseId = $database->dsn; + } + elseif (!empty($database->username) && !empty($database->database) && !empty($database->hostname)) + { + $databaseId = $database->username . '@' . $database->hostname . '/' . $database->database; + } + else + { + $databaseId = spl_object_hash($database); + } + + // Go through all queries + foreach ($database->queries as $key => $query) { + $results['queryCount']++; + $results['queryTimings'] += $database->query_times[$key]; + $results['queries'][$databaseId][$key]['query'] = $query; + $results['queries'][$databaseId][$key]['timings'] = $database->query_times[$key]; + $results['queries'][$databaseId][$key]['data'] = $database->query_data[$key]; + + // If errors are found, set this at the top of the array + if ($database->query_data[$key]['error']['code'] != 0) + { + $results['errorsFound'] = true; + } + } + } + + // Limit the amount in order to keep things readable + $results['queryCountProvided'] = 0; + foreach ($results['queries'] as $id => $database) { + $results['queries'][$id] = array_reverse(array_slice($database, -10)); + $results['queryCountProvided'] += count($results['queries'][$id]); + } + $results = array_slice($results, -10); + + return $this->results = $results; + } + + public function getTab() + { + $results = $this->getResults(); + ob_start(function () {}); + require dirname(__DIR__) . '/Views/view.tracydatabasetab.php'; + return ob_get_clean(); + } + + public function getPanel() + { + // Parse the panel + $results = $this->getResults(); + ob_start(function () {}); + require dirname(__DIR__) . '/Views/view.tracydatabasepanel.php'; + return ob_get_clean(); + } +} \ No newline at end of file diff --git a/src/Views/view.tracydatabasepanel.php b/src/Views/view.tracydatabasepanel.php new file mode 100644 index 0000000..a263cd5 --- /dev/null +++ b/src/Views/view.tracydatabasepanel.php @@ -0,0 +1,51 @@ + + +

Queries:

+ +
+ + $queries): ?> + + + + + + + + + + + + + + +
Database:#
Time msSQL QueryRows
+ + ERROR +
explain + +
+ + + + + + + + + + +
CodeMessage
+ +
+

...and more

+ +
diff --git a/src/Views/view.tracydatabasetab.php b/src/Views/view.tracydatabasetab.php new file mode 100644 index 0000000..3a107cc --- /dev/null +++ b/src/Views/view.tracydatabasetab.php @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file