* @copyright Copyright (c) 2013 - 2019, TechFuze. (http://techfuze.net) */ class DatabaseTracyBridge implements IBarPanel { /** * @var iDatabaseEngine[] */ public static $databases = array(); protected $results = array(); public static function register() { $class = new self(); $bar = Debugger::getBar(); $bar->addPanel($class); } public static function registerDatabase(iDatabaseEngine $database) { self::$databases[] = $database; } protected function getResults(): array { 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 $databaseId = $database->getConnectionDescription(); // Go through all queries if (!method_exists($database, 'getQueries')) { continue; } foreach ($database->getQueries() as $query) { $results['queryTimings'] += $query['queryTimings']; $key = $query['queryString']; if (!isset($results['queries'][$databaseId][$key])) $results['queryCount']++; $results['queries'][$databaseId][$key]['query'] = $query['queryString']; $results['queries'][$databaseId][$key]['timings'] = $query['queryTimings']; $results['queries'][$databaseId][$key]['errors'] = $query['queryError']; if (!isset($results['queries'][$databaseId][$key]['data'])) $results['queries'][$databaseId][$key]['data'] = $query['queryData']; else $results['queries'][$databaseId][$key]['data'] += $query['queryData']; if (!empty($query['queryError'])) $results['errorsFound'] = true; } } // Limit the amount in order to keep things readable $results['queryCountProvided'] = 0; if (isset($results['queries'])) { 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); } //dump($results['queries']['mysql:host=localhost;dbname=hello']); return $this->results = $results; } public function getTab(): string { $results = $this->getResults(); ob_start(function () {}); require dirname(__DIR__) . DS . 'Layout' . DS . 'layout.tracydatabasetab.php'; return ob_get_clean(); } public function getPanel(): string { // Parse the panel $results = $this->getResults(); ob_start(function () {}); require dirname(__DIR__) . DS . 'Layout' . DS . 'layout.tracydatabasepanel.php'; return ob_get_clean(); } }