From c93dd9c09094db25391c21aa89495438cf05aef9 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 2 Feb 2011 22:38:42 -0800 Subject: [PATCH] Flesh out some DarkConsole stuff. --- src/__celerity_resource_map__.php | 6 +- src/__phutil_library_map__.php | 4 +- .../controller/DarkConsoleController.php | 84 ++++--------------- src/aphront/console/controller/__init__.php | 3 +- src/aphront/console/core/DarkConsoleCore.php | 55 +++--------- src/aphront/console/core/__init__.php | 2 +- .../errorlog/DarkConsoleErrorLogPlugin.php | 75 +++++++++-------- .../console/plugin/errorlog/__init__.php | 2 + .../api/DarkConsoleErrorLogPluginAPI.php | 48 +++++++++++ .../console/plugin/errorlog/api/__init__.php | 10 +++ .../request/DarkConsoleRequestPlugin.php | 38 +++++---- .../console/plugin/request/__init__.php | 3 + .../services/DarkConsoleServicesPlugin.php | 47 ++++++++++- .../console/plugin/services/__init__.php | 4 + .../api/DarkConsoleServicesPluginAPI.php | 35 ++++++++ .../console/plugin/services/api/__init__.php | 10 +++ ...AphrontDefaultApplicationConfiguration.php | 2 + .../controller/base/PhabricatorController.php | 2 +- .../changeset/DifferentialChangesetParser.php | 3 +- .../people/storage/user/PhabricatorUser.php | 6 +- .../mysql/AphrontMySQLDatabaseConnection.php | 43 ++++++++-- src/storage/connection/mysql/__init__.php | 1 + webroot/index.php | 8 +- webroot/rsrc/css/aphront/dark-console.css | 26 ++++++ webroot/rsrc/css/aphront/table-view.css | 5 ++ .../application/core/behavior-dark-console.js | 21 +++-- 26 files changed, 349 insertions(+), 194 deletions(-) create mode 100755 src/aphront/console/plugin/errorlog/api/DarkConsoleErrorLogPluginAPI.php create mode 100644 src/aphront/console/plugin/errorlog/api/__init__.php create mode 100755 src/aphront/console/plugin/services/api/DarkConsoleServicesPluginAPI.php create mode 100644 src/aphront/console/plugin/services/api/__init__.php diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php index 041ae521fc..1da3289989 100644 --- a/src/__celerity_resource_map__.php +++ b/src/__celerity_resource_map__.php @@ -100,7 +100,7 @@ celerity_register_resource_map(array( ), 'differential-revision-add-comment-css' => array( - 'uri' => '/res/d7f8719e/rsrc/css/application/differential/add-comment.css', + 'uri' => '/res/9be761de/rsrc/css/application/differential/add-comment.css', 'type' => 'css', 'requires' => array( @@ -136,7 +136,7 @@ celerity_register_resource_map(array( ), 'differential-revision-comment-css' => array( - 'uri' => '/res/368bd612/rsrc/css/application/differential/revision-comment.css', + 'uri' => '/res/274eb3f1/rsrc/css/application/differential/revision-comment.css', 'type' => 'css', 'requires' => array( @@ -226,7 +226,7 @@ celerity_register_resource_map(array( ), 'javelin-behavior-dark-console' => array( - 'uri' => '/res/453503f4/rsrc/js/application/core/behavior-dark-console.js', + 'uri' => '/res/35907b6e/rsrc/js/application/core/behavior-dark-console.js', 'type' => 'js', 'requires' => array( diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 4d7055953b..0287bcc21c 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -72,9 +72,11 @@ phutil_register_library_map(array( 'DarkConsoleController' => 'aphront/console/controller', 'DarkConsoleCore' => 'aphront/console/core', 'DarkConsoleErrorLogPlugin' => 'aphront/console/plugin/errorlog', + 'DarkConsoleErrorLogPluginAPI' => 'aphront/console/plugin/errorlog/api', 'DarkConsolePlugin' => 'aphront/console/plugin/base', 'DarkConsoleRequestPlugin' => 'aphront/console/plugin/request', 'DarkConsoleServicesPlugin' => 'aphront/console/plugin/services', + 'DarkConsoleServicesPluginAPI' => 'aphront/console/plugin/services/api', 'DarkConsoleXHProfPlugin' => 'aphront/console/plugin/xhprof', 'DarkConsoleXHProfPluginAPI' => 'aphront/console/plugin/xhprof/api', 'DifferentialAction' => 'applications/differential/constants/action', @@ -263,7 +265,7 @@ phutil_register_library_map(array( 'ConduitAPI_differential_setdiffproperty_Method' => 'ConduitAPIMethod', 'ConduitAPI_file_upload_Method' => 'ConduitAPIMethod', 'ConduitAPI_user_find_Method' => 'ConduitAPIMethod', - 'DarkConsoleController' => 'AliteController', + 'DarkConsoleController' => 'PhabricatorController', 'DarkConsoleErrorLogPlugin' => 'DarkConsolePlugin', 'DarkConsoleRequestPlugin' => 'DarkConsolePlugin', 'DarkConsoleServicesPlugin' => 'DarkConsolePlugin', diff --git a/src/aphront/console/controller/DarkConsoleController.php b/src/aphront/console/controller/DarkConsoleController.php index 32939daf61..8ca4128c7e 100755 --- a/src/aphront/console/controller/DarkConsoleController.php +++ b/src/aphront/console/controller/DarkConsoleController.php @@ -16,85 +16,29 @@ * limitations under the License. */ -class DarkConsoleController extends AliteController { +class DarkConsoleController extends PhabricatorController { protected $op; protected $data; - public function __construct(AliteRequest $request, array $params) { - parent::__construct($request); + public function processRequest() { + $request = $this->getRequest(); + $user = $request->getUser(); - validate_parameter_list( - $params, - array( - ), - $ops = array( - 'tab' => true, - 'toggle' => true, - 'visible' => true, - 'plugin' => true, - - 'etc' => true, - )); - - foreach (array_keys($ops) as $op) { - if (isset($params[$op])) { - $this->op = $op; - break; - } - } - $this->data = $params; - } - - public function getShortControllerName() { - return 'DarkConsole'; - } - - public function shouldPreflush() { - return false; - } - - public function process() { - $request = $this->getRequest(); - - if (!$this->op) { - $this->op = 'toggle'; + $visible = $request->getStr('visible'); + if (strlen($visible)) { + $user->setConsoleVisible((int)$visible); + $user->save(); + return new AphrontAjaxResponse(); } - $coredata = $request->getCoreData(); - $console = $coredata->getConsole(); - - if ($request->isAsync()) { - $return = null; - } else { - $return = '/'; + $tab = $request->getStr('tab'); + if (strlen($tab)) { + $user->setConsoleTab($tab); + $user->save(); + return new AphrontAjaxResponse(); } - - switch ($this->op) { - case 'toggle': - $enabled = $coredata->didToggleDarkConsole(); - if ($enabled) { - if (!$console) { - $console = new DarkConsoleCore($coredata); - } - $console->setConsoleSetting( - DarkConsoleCore::SETTING_VISIBLE, - true); - } - break; - case 'tab': - $console->setConsoleSetting( - DarkConsoleCore::SETTING_TAB, - $request->getStr('tab')); - break; - case 'visible': - $console->setConsoleSetting( - DarkConsoleCore::SETTING_VISIBLE, - !$console->getConsoleSetting(DarkConsoleCore::SETTING_VISIBLE)); - break; - } -// return ; } } diff --git a/src/aphront/console/controller/__init__.php b/src/aphront/console/controller/__init__.php index bc1a89277c..e4df3df00d 100644 --- a/src/aphront/console/controller/__init__.php +++ b/src/aphront/console/controller/__init__.php @@ -6,7 +6,8 @@ -phutil_require_module('phabricator', 'aphront/console/core'); +phutil_require_module('phabricator', 'aphront/response/ajax'); +phutil_require_module('phabricator', 'applications/base/controller/base'); phutil_require_source('DarkConsoleController.php'); diff --git a/src/aphront/console/core/DarkConsoleCore.php b/src/aphront/console/core/DarkConsoleCore.php index 94df4e6f24..a06e307bb9 100755 --- a/src/aphront/console/core/DarkConsoleCore.php +++ b/src/aphront/console/core/DarkConsoleCore.php @@ -36,41 +36,11 @@ final class DarkConsoleCore { private $settings; private $coredata; - public function setConsoleSetting($key, $value) { -/* - $guard = new WriteOnHttpGet(); - $okay = user_set_pref( - $this->getCoreData()->getViewerContext()->getUserID(), - self::APPLICATION_ID, - $key, - $value); - $guard->release(); - if (!$okay) { - throw new Exception('Failed to set preference setting.'); - } -*/ - } - - public function getConsoleSetting($key) { -// $viewer_id = $this->getCoreData()->getViewerContext()->getUserID(); -// return idx(idx($this->settings[$viewer_id], $key), 'value'); - return true; - } - public function getPlugin($plugin_name) { return idx($this->plugins, $plugin_name); } public function __construct() { - -/* - $this->settings = users_multiget_prefs_info( - array($coredata->getViewerContext()->getUserID()), - self::APPLICATION_ID); - - $disabled = $this->getConsoleSetting(self::SETTING_PLUGINS); - $disabled = array_flip(explode(',', $disabled)); -*/ foreach (self::getPlugins() as $plugin_name) { $plugin = self::newPlugin($plugin_name); if ($plugin->isPermanent() || !isset($disabled[$plugin_name])) { @@ -95,6 +65,8 @@ final class DarkConsoleCore { public function render(AphrontRequest $request) { + $user = $request->getUser(); + $plugins = $this->getEnabledPlugins(); foreach ($plugins as $plugin) { @@ -110,8 +82,8 @@ final class DarkConsoleCore { $plugin->setData($plugin->generateData()); } - $selected = 'XHProf';//true;//$this->getConsoleSetting(DarkConsoleCore::SETTING_TAB); - $visible = true;//$this->getConsoleSetting(DarkConsoleCore::SETTING_VISIBLE); + $selected = $user->getConsoleTab(); + $visible = $user->getConsoleVisible(); if (!isset($plugins[$selected])) { $selected = key($plugins); @@ -142,9 +114,7 @@ final class DarkConsoleCore { array( 'class' => "dark-console-tab {$tabclass}", 'sigil' => 'dark-console-tab', - 'meta' => array( - 'key' => $key, - ), + 'id' => 'dark-console-tab-'.$key, ), (string)$data['name']); @@ -154,9 +124,6 @@ final class DarkConsoleCore { 'class' => 'dark-console-panel', 'style' => $style, 'sigil' => 'dark-console-panel', - 'meta' => array( - 'key' => $key, - ), ), (string)$data['panel']); } @@ -166,10 +133,7 @@ final class DarkConsoleCore { array( 'class' => 'dark-console', 'sigil' => 'dark-console', - 'meta' => array( - 'visible' => true, - ), - 'style' => '', + 'style' => $visible ? '' : 'display: none;', ), ''. ''. @@ -178,7 +142,12 @@ final class DarkConsoleCore { ''.implode("\n", $panel_markup).''. ''); - Javelin::initBehavior('dark-console'); + if (!empty($_COOKIE['phsid'])) { + $console = str_replace( + $_COOKIE['phsid'], + phutil_escape_html(''), + $console); + } return "\n\n\n\n".$console."\n\n\n\n"; } diff --git a/src/aphront/console/core/__init__.php b/src/aphront/console/core/__init__.php index ccdf4c2167..8509770916 100644 --- a/src/aphront/console/core/__init__.php +++ b/src/aphront/console/core/__init__.php @@ -6,9 +6,9 @@ -phutil_require_module('phabricator', 'infrastructure/javelin/api'); phutil_require_module('phabricator', 'infrastructure/javelin/markup'); +phutil_require_module('phutil', 'markup'); phutil_require_module('phutil', 'symbols'); phutil_require_module('phutil', 'utils'); diff --git a/src/aphront/console/plugin/errorlog/DarkConsoleErrorLogPlugin.php b/src/aphront/console/plugin/errorlog/DarkConsoleErrorLogPlugin.php index 95aa89832e..0f140f582b 100755 --- a/src/aphront/console/plugin/errorlog/DarkConsoleErrorLogPlugin.php +++ b/src/aphront/console/plugin/errorlog/DarkConsoleErrorLogPlugin.php @@ -21,15 +21,12 @@ class DarkConsoleErrorLogPlugin extends DarkConsolePlugin { public function getName() { $count = count($this->getData()); -/* if ($count) { return - - Error Log ({$count}) - ; + ' '. + "Error Log ({$count})"; } -*/ return 'Error Log'; } @@ -40,36 +37,51 @@ class DarkConsoleErrorLogPlugin extends DarkConsolePlugin { public function generateData() { -/* - $stub = tabconsole(); - if (!$stub) { - return array(); - } - - $errors = $stub->getErrors(); - - $data = array(); - foreach ($errors as $error) { - if (is_array($error)) { - list($err, $trace) = $error; - $trace = implode("\n", $trace); - } else { - $err = $error->getMessage(); - $trace = $error->getTraceAsString(); - } - $data[] = array( - 'error' => $err, - 'trace' => $trace, - ); - } - return $data; -*/ + return DarkConsoleErrorLogPluginAPI::getErrors(); } public function render() { - return '!!'; + $data = $this->getData(); + + $rows = array(); + foreach ($data as $row) { + switch ($row['event']) { + case 'error': + $file = $row['file']; + $line = $row['line']; + break; + case 'exception': + $file = $row['exception']->getFile(); + $line = $row['exception']->getLine(); + break; + } + + + $rows[] = array( + basename($file).':'.$line, + $row['str'], + ); + } + + $table = new AphrontTableView($rows); + $table->setColumnClasses( + array( + null, + 'wide wrap', + )); + $table->setHeaders( + array( + 'File', + 'Error', + )); + $table->setNoDataString('No errors.'); + + return $table->render(); + } +} + /* $data = $this->getData(); if (!$data) { @@ -124,6 +136,3 @@ class DarkConsoleErrorLogPlugin extends DarkConsolePlugin {
{$markup}
; */ - } - -} diff --git a/src/aphront/console/plugin/errorlog/__init__.php b/src/aphront/console/plugin/errorlog/__init__.php index 0137999ed9..6b52c92dea 100644 --- a/src/aphront/console/plugin/errorlog/__init__.php +++ b/src/aphront/console/plugin/errorlog/__init__.php @@ -7,6 +7,8 @@ phutil_require_module('phabricator', 'aphront/console/plugin/base'); +phutil_require_module('phabricator', 'aphront/console/plugin/errorlog/api'); +phutil_require_module('phabricator', 'view/control/table'); phutil_require_source('DarkConsoleErrorLogPlugin.php'); diff --git a/src/aphront/console/plugin/errorlog/api/DarkConsoleErrorLogPluginAPI.php b/src/aphront/console/plugin/errorlog/api/DarkConsoleErrorLogPluginAPI.php new file mode 100755 index 0000000000..bee9db704a --- /dev/null +++ b/src/aphront/console/plugin/errorlog/api/DarkConsoleErrorLogPluginAPI.php @@ -0,0 +1,48 @@ + 'error', + 'num' => $num, + 'str' => $str, + 'file' => $file, + 'line' => $line, + 'cxt' => $cxt, + 'trace' => debug_backtrace(), + ); + error_log("{$file}:{$line} {$str}"); + } + + public static function handleException($ex) { + self::$errors[] = array( + 'event' => 'exception', + 'exception' => $ex, + ); + error_log($ex); + } + +} diff --git a/src/aphront/console/plugin/errorlog/api/__init__.php b/src/aphront/console/plugin/errorlog/api/__init__.php new file mode 100644 index 0000000000..f4f7b7ffb9 --- /dev/null +++ b/src/aphront/console/plugin/errorlog/api/__init__.php @@ -0,0 +1,10 @@ + array( 'Host' => $data['Server']['SERVER_ADDR'], 'Hostname' => gethostbyaddr($data['Server']['SERVER_ADDR']), + 'Machine' => php_uname('n'), ), ); $sections = array_merge($sections, $data); -/* - $out = ; + $out = array(); foreach ($sections as $header => $map) { - $list = ; + $rows = array(); foreach ($map as $key => $value) { - if (!is_scalar($value)) { - $value = fb_json_encode($value); - } - $value = {$value}; - $list->appendChild( - ); + $rows[] = array( + phutil_escape_html($key), + phutil_escape_html($value), + ); } - $out->appendChild( - -

{$header}

- {$list} -
); + + $table = new AphrontTableView($rows); + $table->setHeaders( + array( + $header, + null, + )); + $table->setColumnClasses( + array( + 'header', + 'wide wrap', + )); + $out[] = $table->render(); } - return $out; -*/ - return "REQUEST"; + return implode("\n", $out); } } diff --git a/src/aphront/console/plugin/request/__init__.php b/src/aphront/console/plugin/request/__init__.php index 191e9cd6e0..93fa0510f0 100644 --- a/src/aphront/console/plugin/request/__init__.php +++ b/src/aphront/console/plugin/request/__init__.php @@ -7,6 +7,9 @@ phutil_require_module('phabricator', 'aphront/console/plugin/base'); +phutil_require_module('phabricator', 'view/control/table'); + +phutil_require_module('phutil', 'markup'); phutil_require_source('DarkConsoleRequestPlugin.php'); diff --git a/src/aphront/console/plugin/services/DarkConsoleServicesPlugin.php b/src/aphront/console/plugin/services/DarkConsoleServicesPlugin.php index 2cf042463c..8c21dfbf55 100755 --- a/src/aphront/console/plugin/services/DarkConsoleServicesPlugin.php +++ b/src/aphront/console/plugin/services/DarkConsoleServicesPlugin.php @@ -28,12 +28,53 @@ class DarkConsoleServicesPlugin extends DarkConsolePlugin { return 'Information about services.'; } - public function willShutdown() { -// $this->observations = cacheobserver(); + public function generateData() { + return DarkConsoleServicesPluginAPI::getEvents(); } public function render() { - return '!'; + $data = $this->getData(); + + $rows = array(); + foreach ($data as $row) { + + switch ($row['event']) { + case DarkConsoleServicesPluginAPI::EVENT_QUERY: + $info = $row['query']; + $info = phutil_escape_html($info); + break; + case DarkConsoleServicesPluginAPI::EVENT_CONNECT: + $info = $row['host'].':'.$row['database']; + $info = phutil_escape_html($info); + + break; + default: + $info = '-'; + break; + } + + $rows[] = array( + $row['event'], + number_format(1000000 * ($row['end'] - $row['start'])).' us', + $info, + ); + } + + $table = new AphrontTableView($rows); + $table->setColumnClasses( + array( + null, + 'n', + 'wide wrap', + )); + $table->setHeaders( + array( + 'Event', + 'Duration', + 'Details', + )); + + return $table->render(); } } diff --git a/src/aphront/console/plugin/services/__init__.php b/src/aphront/console/plugin/services/__init__.php index aeab5c172b..3952c2ebd4 100644 --- a/src/aphront/console/plugin/services/__init__.php +++ b/src/aphront/console/plugin/services/__init__.php @@ -7,6 +7,10 @@ phutil_require_module('phabricator', 'aphront/console/plugin/base'); +phutil_require_module('phabricator', 'aphront/console/plugin/services/api'); +phutil_require_module('phabricator', 'view/control/table'); + +phutil_require_module('phutil', 'markup'); phutil_require_source('DarkConsoleServicesPlugin.php'); diff --git a/src/aphront/console/plugin/services/api/DarkConsoleServicesPluginAPI.php b/src/aphront/console/plugin/services/api/DarkConsoleServicesPluginAPI.php new file mode 100755 index 0000000000..c652075a39 --- /dev/null +++ b/src/aphront/console/plugin/services/api/DarkConsoleServicesPluginAPI.php @@ -0,0 +1,35 @@ + array( 'profile/(?[^/]+)/$' => 'PhabricatorXHProfProfileController', ), + + '/~/' => 'DarkConsoleController', ); } diff --git a/src/applications/base/controller/base/PhabricatorController.php b/src/applications/base/controller/base/PhabricatorController.php index 3ca0460a33..bee50ca2ac 100644 --- a/src/applications/base/controller/base/PhabricatorController.php +++ b/src/applications/base/controller/base/PhabricatorController.php @@ -58,7 +58,7 @@ abstract class PhabricatorController extends AphrontController { return $view; } - public function buildStandardPageResponse($view) { + public function buildStandardPageResponse($view, array $data) { $page = $this->buildStandardPageView(); $page->appendChild($view); $response = new AphrontWebpageResponse(); diff --git a/src/applications/differential/parser/changeset/DifferentialChangesetParser.php b/src/applications/differential/parser/changeset/DifferentialChangesetParser.php index 7c13efa57d..4612c400e3 100644 --- a/src/applications/differential/parser/changeset/DifferentialChangesetParser.php +++ b/src/applications/differential/parser/changeset/DifferentialChangesetParser.php @@ -90,7 +90,8 @@ class DifferentialChangesetParser { public function setFilename($filename) { $this->filename = $filename; if (strpos($filename, '.', 1) !== false) { - $this->filetype = end(explode('.', $filename)); + $parts = explode('.', $filename); + $this->filetype = end($parts); } } diff --git a/src/applications/people/storage/user/PhabricatorUser.php b/src/applications/people/storage/user/PhabricatorUser.php index ccf118a050..d9d8f5590f 100644 --- a/src/applications/people/storage/user/PhabricatorUser.php +++ b/src/applications/people/storage/user/PhabricatorUser.php @@ -29,7 +29,9 @@ class PhabricatorUser extends PhabricatorUserDAO { protected $facebookUID; protected $profileImagePHID; - private $sessionKey; + protected $consoleEnabled = 0; + protected $consoleVisible = 0; + protected $consoleTab = ''; public function getProfileImagePHID() { return nonempty( @@ -127,6 +129,8 @@ class PhabricatorUser extends PhabricatorUserDAO { $session_type, $session_key); + $this->sessionKey = $session_key; + return $session_key; } diff --git a/src/storage/connection/mysql/AphrontMySQLDatabaseConnection.php b/src/storage/connection/mysql/AphrontMySQLDatabaseConnection.php index 3a52dc770f..cf51cde524 100644 --- a/src/storage/connection/mysql/AphrontMySQLDatabaseConnection.php +++ b/src/storage/connection/mysql/AphrontMySQLDatabaseConnection.php @@ -24,14 +24,14 @@ class AphrontMySQLDatabaseConnection extends AphrontDatabaseConnection { private $config; private $connection; + private static $connectionCache = array(); + public function __construct(array $configuration) { $this->configuration = $configuration; } public function escapeString($string) { - if (!$this->connection) { - $this->establishConnection(); - } + $this->requireConnection(); return mysql_real_escape_string($string, $this->connection); } @@ -92,6 +92,15 @@ class AphrontMySQLDatabaseConnection extends AphrontDatabaseConnection { $user = $this->getConfiguration('user'); $host = $this->getConfiguration('host'); + $database = $this->getConfiguration('database'); + + $key = "{$user}:{$host}:{$database}"; + if (isset(self::$connectionCache[$key])) { + $this->connection = self::$connectionCache[$key]; + return; + } + + $start = microtime(true); $conn = @mysql_connect( $host, @@ -108,11 +117,23 @@ class AphrontMySQLDatabaseConnection extends AphrontDatabaseConnection { "{$error}."); } - $ret = @mysql_select_db($this->getConfiguration('database'), $conn); + $ret = @mysql_select_db($database, $conn); if (!$ret) { $this->throwQueryException($conn); } + $end = microtime(true); + + DarkConsoleServicesPluginAPI::addEvent( + array( + 'event' => DarkConsoleServicesPluginAPI::EVENT_CONNECT, + 'host' => $host, + 'database' => $database, + 'start' => $start, + 'end' => $end, + )); + + self::$connectionCache[$key] = $conn; $this->connection = $conn; } @@ -152,11 +173,19 @@ class AphrontMySQLDatabaseConnection extends AphrontDatabaseConnection { $retries = 3; while ($retries--) { try { - if (!$this->connection) { - $this->establishConnection(); - } + $this->requireConnection(); + $start = microtime(true); $result = mysql_query($raw_query, $this->connection); + $end = microtime(true); + + DarkConsoleServicesPluginAPI::addEvent( + array( + 'event' => DarkConsoleServicesPluginAPI::EVENT_QUERY, + 'query' => $raw_query, + 'start' => $start, + 'end' => $end, + )); if ($result) { $this->lastResult = $result; diff --git a/src/storage/connection/mysql/__init__.php b/src/storage/connection/mysql/__init__.php index a92470889b..05fd2062c7 100644 --- a/src/storage/connection/mysql/__init__.php +++ b/src/storage/connection/mysql/__init__.php @@ -6,6 +6,7 @@ +phutil_require_module('phabricator', 'aphront/console/plugin/services/api'); phutil_require_module('phabricator', 'storage/connection/base'); phutil_require_module('phabricator', 'storage/exception/base'); phutil_require_module('phabricator', 'storage/exception/connection'); diff --git a/webroot/index.php b/webroot/index.php index f8d6bd3a9d..4058f14459 100644 --- a/webroot/index.php +++ b/webroot/index.php @@ -16,6 +16,8 @@ * limitations under the License. */ +error_reporting(E_ALL | E_STRICT); + $env = getenv('PHABRICATOR_ENV'); if (!$env) { header('Content-Type: text/plain'); @@ -37,6 +39,10 @@ PhabricatorEnv::setEnvConfig($conf); phutil_require_module('phabricator', 'aphront/console/plugin/xhprof/api'); DarkConsoleXHProfPluginAPI::hookProfiler(); +phutil_require_module('phabricator', 'aphront/console/plugin/errorlog/api'); +set_error_handler(array('DarkConsoleErrorLogPluginAPI', 'handleError')); +set_exception_handler(array('DarkConsoleErrorLogPluginAPI', 'handleException')); + $host = $_SERVER['HTTP_HOST']; $path = $_REQUEST['__path__']; @@ -91,7 +97,7 @@ foreach ($headers as $header) { if (isset($_REQUEST['__profile__']) && ($_REQUEST['__profile__'] == 'all')) { $profile = DarkConsoleXHProfPluginAPI::stopProfiler(); - $profile = + $profile = '
'. ''. diff --git a/webroot/rsrc/css/aphront/dark-console.css b/webroot/rsrc/css/aphront/dark-console.css index 9e6989698d..c1e63cb14d 100644 --- a/webroot/rsrc/css/aphront/dark-console.css +++ b/webroot/rsrc/css/aphront/dark-console.css @@ -44,3 +44,29 @@ a.dark-console-tab-selected { } +.dark-console .aphront-table-view { + background: #888888; + color: #eeeeee; + margin: 1em 1%; + width: 98%; + border-color: #333333; +} + +.dark-console .aphront-table-view th { + background: #333333; + color: #ffffff; +} + +.dark-console .aphront-table-view td.header { + background: #444444; + color: #ffffff; + min-width: 200px; +} + +.dark-console .aphront-table-view tr.alt { + background: #666666; +} + +.dark-console .aphront-table-view tr.no-data td { + color: #dddddd; +} diff --git a/webroot/rsrc/css/aphront/table-view.css b/webroot/rsrc/css/aphront/table-view.css index 18fbaec6d1..dedf8a44b2 100644 --- a/webroot/rsrc/css/aphront/table-view.css +++ b/webroot/rsrc/css/aphront/table-view.css @@ -70,6 +70,11 @@ text-align: right; } +.aprhont-table-view td.wrap { + white-space: normal; +} + + .aphront-table-view tr.no-data td { padding: 1em; text-align: center; diff --git a/webroot/rsrc/js/application/core/behavior-dark-console.js b/webroot/rsrc/js/application/core/behavior-dark-console.js index afa6b9a2ba..810d0cf6fd 100644 --- a/webroot/rsrc/js/application/core/behavior-dark-console.js +++ b/webroot/rsrc/js/application/core/behavior-dark-console.js @@ -2,7 +2,7 @@ * @provides javelin-behavior-dark-console */ -JX.behavior('dark-console', function() { +JX.behavior('dark-console', function(config) { JX.Stratcom.listen( 'click', ['dark-console', 'dark-console-tab'], @@ -18,11 +18,10 @@ JX.behavior('dark-console', function() { tabs[ii] == target); (tabs[ii] != target ? JX.DOM.hide : JX.DOM.show)(panels[ii]); } -/* - new JX.Request(e.getNodeData('dark-console').uri, JX.bag) - .setData({tab: e.getNodeData('dark-console-tab').key}) + + new JX.Request(config.uri, JX.bag) + .setData({tab: target.id.replace('dark-console-tab-', '')}) .send(); -*/ }); JX.Stratcom.listen( @@ -39,17 +38,17 @@ JX.behavior('dark-console', function() { } var console = JX.DOM.find(document.body, 'table', 'dark-console'); - var data = JX.Stratcom.getData(console); - data.visible = !data.visible; - if (data.visible) { + + config.visible = !config.visible; + if (config.visible) { JX.DOM.show(console); } else { JX.DOM.hide(console); } -// new JX.Request(data.uri, JX.bag) -// .setData({visible: data.visible}) -// .send(); + new JX.Request(config.uri, JX.bag) + .setData({visible: config.visible ? 1 : 0}) + .send(); } }); });
{$key}{$value}