Index: src/aphront/console/plugin/DarkConsoleServicesPlugin.php =================================================================== --- src/aphront/console/plugin/DarkConsoleServicesPlugin.php +++ src/aphront/console/plugin/DarkConsoleServicesPlugin.php @@ -15,17 +15,36 @@ return 'Information about services.'; } + public static function getQueryAnalyzerHeader() { + return 'X-Phabricator-QueryAnalyzer'; + } + + public static function isQueryAnalyzerRequested() { + if (!empty($_REQUEST['__analyze__'])) { + return true; + } + + $header = AphrontRequest::getHTTPHeader(self::getQueryAnalyzerHeader()); + if ($header) { + return true; + } + + return false; + } + /** * @phutil-external-symbol class PhabricatorStartup */ public function generateData() { + $should_analyze = self::isQueryAnalyzerRequested(); + $log = PhutilServiceProfiler::getInstance()->getServiceCallLog(); foreach ($log as $key => $entry) { $config = idx($entry, 'config', array()); unset($log[$key]['config']); - if (empty($_REQUEST['__analyze__'])) { + if (!$should_analyze) { $log[$key]['explain'] = array( 'sev' => 7, 'size' => null, @@ -139,7 +158,7 @@ 'analyzeURI' => (string)$this ->getRequestURI() ->alter('__analyze__', true), - 'didAnalyze' => isset($_REQUEST['__analyze__']), + 'didAnalyze' => $should_analyze, ); } Index: src/view/page/PhabricatorStandardPageView.php =================================================================== --- src/view/page/PhabricatorStandardPageView.php +++ src/view/page/PhabricatorStandardPageView.php @@ -185,6 +185,9 @@ if (DarkConsoleXHProfPluginAPI::isProfilerStarted()) { $headers[DarkConsoleXHProfPluginAPI::getProfilerHeader()] = 'page'; } + if (DarkConsoleServicesPlugin::isQueryAnalyzerRequested()) { + $headers[DarkConsoleServicesPlugin::getQueryAnalyzerHeader()] = true; + } Javelin::initBehavior( 'dark-console',