mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-27 07:50:57 +01:00
Update Phabricator to new PhutilServiceProfiler APIs
Summary: Get rid of the Phabricator-level DarkConsole-specific API and use the more general Phutil-level one. Test Plan: Loaded DarkConsole services plugin, viewed Diffusion, got execs in the trace. Reviewed By: aran Reviewers: aran, jungejason, tuomaspelkonen CC: aran Differential Revision: 293
This commit is contained in:
parent
a69f217f98
commit
417ca39703
10 changed files with 57 additions and 103 deletions
|
@ -76,8 +76,6 @@ if (isset($argv[2]) && $argv[2] == '--herald') {
|
|||
$workers[] = new PhabricatorRepositoryCommitHeraldWorker($spec);
|
||||
}
|
||||
|
||||
ExecFuture::pushEchoMode(true);
|
||||
|
||||
foreach ($workers as $worker) {
|
||||
echo "Running ".get_class($worker)."...\n";
|
||||
$worker->doWork();
|
||||
|
|
|
@ -109,7 +109,6 @@ phutil_register_library_map(array(
|
|||
'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',
|
||||
'DatabaseConfigurationProvider' => 'applications/base/storage/configuration',
|
||||
|
|
|
@ -29,7 +29,7 @@ class DarkConsoleServicesPlugin extends DarkConsolePlugin {
|
|||
}
|
||||
|
||||
public function generateData() {
|
||||
return DarkConsoleServicesPluginAPI::getEvents();
|
||||
return PhutilServiceProfiler::getInstance()->getServiceCallLog();
|
||||
}
|
||||
|
||||
public function render() {
|
||||
|
@ -38,15 +38,22 @@ class DarkConsoleServicesPlugin extends DarkConsolePlugin {
|
|||
$rows = array();
|
||||
foreach ($data as $row) {
|
||||
|
||||
switch ($row['event']) {
|
||||
case DarkConsoleServicesPluginAPI::EVENT_QUERY:
|
||||
switch ($row['type']) {
|
||||
case 'query':
|
||||
$info = $row['query'];
|
||||
$info = phutil_escape_html($info);
|
||||
break;
|
||||
case DarkConsoleServicesPluginAPI::EVENT_CONNECT:
|
||||
case 'connect':
|
||||
$info = $row['host'].':'.$row['database'];
|
||||
$info = phutil_escape_html($info);
|
||||
|
||||
break;
|
||||
case 'exec':
|
||||
$info = $row['command'];
|
||||
$info = phutil_escape_html($info);
|
||||
break;
|
||||
case 'conduit':
|
||||
$info = $row['method'];
|
||||
$info = phutil_escape_html($info);
|
||||
break;
|
||||
default:
|
||||
$info = '-';
|
||||
|
@ -54,8 +61,8 @@ class DarkConsoleServicesPlugin extends DarkConsolePlugin {
|
|||
}
|
||||
|
||||
$rows[] = array(
|
||||
$row['event'],
|
||||
number_format(1000000 * ($row['end'] - $row['start'])).' us',
|
||||
phutil_escape_html($row['type']),
|
||||
number_format(1000000 * $row['duration']).' us',
|
||||
$info,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -7,10 +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_module('phutil', 'serviceprofiler');
|
||||
|
||||
|
||||
phutil_require_source('DarkConsoleServicesPlugin.php');
|
||||
|
|
|
@ -1,43 +0,0 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright 2011 Facebook, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
class DarkConsoleServicesPluginAPI {
|
||||
|
||||
const EVENT_QUERY = 'query';
|
||||
const EVENT_CONNECT = 'connect';
|
||||
|
||||
private static $events = array();
|
||||
|
||||
private static $discardMode = false;
|
||||
|
||||
public static function enableDiscardMode() {
|
||||
self::$discardMode = true;
|
||||
}
|
||||
|
||||
public static function addEvent(array $event) {
|
||||
if (!self::$discardMode) {
|
||||
self::$events[] = $event;
|
||||
}
|
||||
}
|
||||
|
||||
public static function getEvents() {
|
||||
return self::$events;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is automatically generated. Lint this module to rebuild it.
|
||||
* @generated
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
phutil_require_source('DarkConsoleServicesPluginAPI.php');
|
|
@ -21,9 +21,8 @@ abstract class PhabricatorDaemon extends PhutilDaemon {
|
|||
protected function willRun() {
|
||||
parent::willRun();
|
||||
|
||||
// Both of these store unbounded amounts of log data; make them discard it
|
||||
// instead so that daemons do not require unbounded amounts of memory.
|
||||
DarkConsoleServicesPluginAPI::enableDiscardMode();
|
||||
// This stores unbounded amounts of log data; make it discard instead so
|
||||
// that daemons do not require unbounded amounts of memory.
|
||||
DarkConsoleErrorLogPluginAPI::enableDiscardMode();
|
||||
|
||||
$phabricator = phutil_get_library_root('phabricator');
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
|
||||
phutil_require_module('phabricator', 'aphront/console/plugin/errorlog/api');
|
||||
phutil_require_module('phabricator', 'aphront/console/plugin/services/api');
|
||||
|
||||
phutil_require_module('phutil', 'daemon/base');
|
||||
phutil_require_module('phutil', 'moduleutils');
|
||||
|
|
|
@ -129,39 +129,43 @@ class AphrontMySQLDatabaseConnection extends AphrontDatabaseConnection {
|
|||
"available!");
|
||||
}
|
||||
|
||||
$conn = @mysql_connect(
|
||||
$host,
|
||||
$user,
|
||||
$this->getConfiguration('pass'),
|
||||
$new_link = true,
|
||||
$flags = 0);
|
||||
|
||||
if (!$conn) {
|
||||
$errno = mysql_errno();
|
||||
$error = mysql_error();
|
||||
throw new AphrontQueryConnectionException(
|
||||
"Attempt to connect to {$user}@{$host} failed with error #{$errno}: ".
|
||||
"{$error}.");
|
||||
}
|
||||
|
||||
if ($database !== null) {
|
||||
$ret = @mysql_select_db($database, $conn);
|
||||
if (!$ret) {
|
||||
$this->throwQueryException($conn);
|
||||
}
|
||||
}
|
||||
|
||||
$end = microtime(true);
|
||||
|
||||
DarkConsoleServicesPluginAPI::addEvent(
|
||||
$profiler = PhutilServiceProfiler::getInstance();
|
||||
$call_id = $profiler->beginServiceCall(
|
||||
array(
|
||||
'event' => DarkConsoleServicesPluginAPI::EVENT_CONNECT,
|
||||
'type' => 'connect',
|
||||
'host' => $host,
|
||||
'database' => $database,
|
||||
'start' => $start,
|
||||
'end' => $end,
|
||||
));
|
||||
|
||||
try {
|
||||
$conn = @mysql_connect(
|
||||
$host,
|
||||
$user,
|
||||
$this->getConfiguration('pass'),
|
||||
$new_link = true,
|
||||
$flags = 0);
|
||||
|
||||
if (!$conn) {
|
||||
$errno = mysql_errno();
|
||||
$error = mysql_error();
|
||||
throw new AphrontQueryConnectionException(
|
||||
"Attempt to connect to {$user}@{$host} failed with error #{$errno}: ".
|
||||
"{$error}.");
|
||||
}
|
||||
|
||||
if ($database !== null) {
|
||||
$ret = @mysql_select_db($database, $conn);
|
||||
if (!$ret) {
|
||||
$this->throwQueryException($conn);
|
||||
}
|
||||
}
|
||||
|
||||
$profiler->endServiceCall($call_id, array());
|
||||
} catch (Exception $ex) {
|
||||
$profiler->endServiceCall($call_id, array());
|
||||
throw $ex;
|
||||
}
|
||||
|
||||
self::$connectionCache[$key] = $conn;
|
||||
$this->connection = $conn;
|
||||
}
|
||||
|
@ -205,17 +209,18 @@ class AphrontMySQLDatabaseConnection extends AphrontDatabaseConnection {
|
|||
$this->requireConnection();
|
||||
|
||||
$start = microtime(true);
|
||||
$result = @mysql_query($raw_query, $this->connection);
|
||||
$end = microtime(true);
|
||||
|
||||
DarkConsoleServicesPluginAPI::addEvent(
|
||||
$profiler = PhutilServiceProfiler::getInstance();
|
||||
$call_id = $profiler->beginServiceCall(
|
||||
array(
|
||||
'event' => DarkConsoleServicesPluginAPI::EVENT_QUERY,
|
||||
'type' => 'query',
|
||||
'query' => $raw_query,
|
||||
'start' => $start,
|
||||
'end' => $end,
|
||||
));
|
||||
|
||||
$result = @mysql_query($raw_query, $this->connection);
|
||||
|
||||
$profiler->endServiceCall($call_id, array());
|
||||
|
||||
if ($result) {
|
||||
$this->lastResult = $result;
|
||||
break;
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'aphront/console/plugin/services/api');
|
||||
phutil_require_module('phabricator', 'storage/connection/base');
|
||||
phutil_require_module('phabricator', 'storage/exception/accessdenied');
|
||||
phutil_require_module('phabricator', 'storage/exception/base');
|
||||
|
@ -15,6 +14,7 @@ phutil_require_module('phabricator', 'storage/exception/connectionlost');
|
|||
phutil_require_module('phabricator', 'storage/exception/duplicatekey');
|
||||
phutil_require_module('phabricator', 'storage/exception/recoverable');
|
||||
|
||||
phutil_require_module('phutil', 'serviceprofiler');
|
||||
phutil_require_module('phutil', 'utils');
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue