/** * Get all debug information as an object. * * @return object */ public static function getDebugData() { // Collect debug information. $data = (object) array('timestamp' => DateTime::formatTimestamp('Y-m-d H:i:s', \RX_TIME), 'url' => getCurrentPageUrl(), 'request' => (object) array('method' => $_SERVER['REQUEST_METHOD'] . ($_SERVER['REQUEST_METHOD'] !== \Context::getRequestMethod() ? ' (' . \Context::getRequestMethod() . ')' : ''), 'size' => intval($_SERVER['CONTENT_LENGTH'])), 'response' => (object) array('method' => \Context::getResponseMethod(), 'size' => \DisplayHandler::$response_size), 'timing' => (object) array('total' => sprintf('%0.4f sec', microtime(true) - \RX_MICROTIME), 'template' => sprintf('%0.4f sec (count: %d)', $GLOBALS['__template_elapsed__'], $GLOBALS['__TemplateHandlerCalled__']), 'xmlparse' => sprintf('%0.4f sec', $GLOBALS['__xmlparse_elapsed__']), 'db_query' => sprintf('%0.4f sec (count: %d)', $GLOBALS['__db_elapsed_time__'], count(self::$_queries)), 'db_class' => sprintf('%0.4f sec', $GLOBALS['__dbclass_elapsed_time__'] - $GLOBALS['__db_elapsed_time__']), 'layout' => sprintf('%0.4f sec', $GLOBALS['__layout_compile_elapsed__']), 'widget' => sprintf('%0.4f sec', $GLOBALS['__widget_excute_elapsed__']), 'remote' => sprintf('%0.4f sec', $GLOBALS['__remote_request_elapsed__']), 'trans' => sprintf('%0.4f sec', $GLOBALS['__trans_content_elapsed__'])), 'entries' => self::$_entries, 'errors' => self::$_errors, 'queries' => self::$_queries, 'slow_queries' => self::$_slow_queries, 'slow_triggers' => self::$_slow_triggers, 'slow_widgets' => self::$_slow_widgets, 'slow_remote_requests' => self::$_slow_remote_requests); // Clean up the backtrace. foreach (array('entries', 'errors', 'queries', 'slow_queries', 'remote_requests', 'slow_remote_requests') as $key) { if (!$data->{$key}) { continue; } foreach ($data->{$key} as &$entry) { if (isset($entry->file)) { $entry->file = self::translateFilename($entry->file); } if (isset($entry->backtrace) && is_array($entry->backtrace)) { foreach ($entry->backtrace as &$backtrace) { $backtrace['file'] = self::translateFilename($backtrace['file']); unset($backtrace['object'], $backtrace['args']); } } } } return $data; }