* @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(): 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 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(): 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(); } }