mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-28 16:30:59 +01:00
bd741ffcc7
Summary: Ref T5702. Primarily, this gets the custom DarkConsole URI routes out of the Aphront core and into an Application, like almost all other routes. Test Plan: Used DarkConsole. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T5702 Differential Revision: https://secure.phabricator.com/D10695
107 lines
2.6 KiB
PHP
107 lines
2.6 KiB
PHP
<?php
|
|
|
|
final class DarkConsoleXHProfPlugin extends DarkConsolePlugin {
|
|
|
|
protected $profileFilePHID;
|
|
|
|
public function getName() {
|
|
return 'XHProf';
|
|
}
|
|
|
|
public function getColor() {
|
|
$data = $this->getData();
|
|
if ($data['profileFilePHID']) {
|
|
return '#ff00ff';
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getDescription() {
|
|
return 'Provides detailed PHP profiling information through XHProf.';
|
|
}
|
|
|
|
public function generateData() {
|
|
return array(
|
|
'profileFilePHID' => $this->profileFilePHID,
|
|
'profileURI' => (string)$this
|
|
->getRequestURI()
|
|
->alter('__profile__', 'page'),
|
|
);
|
|
}
|
|
|
|
public function getXHProfRunID() {
|
|
return $this->profileFilePHID;
|
|
}
|
|
|
|
public function renderPanel() {
|
|
$data = $this->getData();
|
|
|
|
$run = $data['profileFilePHID'];
|
|
$profile_uri = $data['profileURI'];
|
|
|
|
if (!DarkConsoleXHProfPluginAPI::isProfilerAvailable()) {
|
|
$href = PhabricatorEnv::getDoclink('Installation Guide');
|
|
$install_guide = phutil_tag(
|
|
'a',
|
|
array(
|
|
'href' => $href,
|
|
'class' => 'bright-link',
|
|
),
|
|
'Installation Guide');
|
|
return hsprintf(
|
|
'<div class="dark-console-no-content">'.
|
|
'The "xhprof" PHP extension is not available. Install xhprof '.
|
|
'to enable the XHProf console plugin. You can find instructions in '.
|
|
'the %s.'.
|
|
'</div>',
|
|
$install_guide);
|
|
}
|
|
|
|
$result = array();
|
|
|
|
$header = phutil_tag(
|
|
'div',
|
|
array('class' => 'dark-console-panel-header'),
|
|
array(
|
|
phutil_tag(
|
|
'a',
|
|
array(
|
|
'href' => $profile_uri,
|
|
'class' => $run ? 'disabled button' : 'green button',
|
|
),
|
|
pht('Profile Page')),
|
|
phutil_tag('h1', array(), pht('XHProf Profiler')),
|
|
));
|
|
$result[] = $header;
|
|
|
|
if ($run) {
|
|
$result[] = phutil_tag(
|
|
'a',
|
|
array(
|
|
'href' => "/xhprof/profile/$run/",
|
|
'class' => 'bright-link',
|
|
'style' => 'float: right; margin: 1em 2em 0 0; font-weight: bold;',
|
|
'target' => '_blank',
|
|
),
|
|
pht('Profile Permalink'));
|
|
$result[] = phutil_tag(
|
|
'iframe',
|
|
array('src' => "/xhprof/profile/$run/?frame=true"));
|
|
} else {
|
|
$result[] = phutil_tag(
|
|
'div',
|
|
array('class' => 'dark-console-no-content'),
|
|
pht(
|
|
'Profiling was not enabled for this page. Use the button above '.
|
|
'to enable it.'));
|
|
}
|
|
|
|
return phutil_implode_html("\n", $result);
|
|
}
|
|
|
|
|
|
public function willShutdown() {
|
|
$this->profileFilePHID = DarkConsoleXHProfPluginAPI::getProfileFilePHID();
|
|
}
|
|
|
|
}
|