mirror of
https://we.phorge.it/source/phorge.git
synced 2025-01-11 07:11:04 +01:00
Make "bin/phd status" report local daemons from the process list, not a mess of local/remote information
Summary: Ref T13321. Fixes T11037. Realign "bin/phd status" to just mean "show daemon processes on this host". The value of `bin/phd status` as a mixed remote/local command isn't clear, and the current output is a confusing mess (see T11037). This also continues letting us move away from PID files. Test Plan: Ran `bin/phd status`, saw sensible local process status. Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13321, T11037 Differential Revision: https://secure.phabricator.com/D20604
This commit is contained in:
parent
b99c240aa3
commit
08b9e70bea
2 changed files with 36 additions and 104 deletions
|
@ -6,101 +6,58 @@ final class PhabricatorDaemonManagementStatusWorkflow
|
|||
protected function didConstruct() {
|
||||
$this
|
||||
->setName('status')
|
||||
->setSynopsis(pht('Show status of running daemons.'))
|
||||
->setArguments(
|
||||
array(
|
||||
array(
|
||||
'name' => 'local',
|
||||
'help' => pht('Show only local daemons.'),
|
||||
),
|
||||
));
|
||||
->setSynopsis(pht('Show daemon processes on this host.'));
|
||||
}
|
||||
|
||||
public function execute(PhutilArgumentParser $args) {
|
||||
$console = PhutilConsole::getConsole();
|
||||
$query = id(new PhutilProcessQuery())
|
||||
->withIsOverseer(true);
|
||||
|
||||
if ($args->getArg('local')) {
|
||||
$daemons = $this->loadRunningDaemons();
|
||||
} else {
|
||||
$daemons = $this->loadAllRunningDaemons();
|
||||
$instance = PhabricatorEnv::getEnvConfig('cluster.instance');
|
||||
if ($instance !== null) {
|
||||
$query->withInstances(array($instance));
|
||||
}
|
||||
|
||||
if (!$daemons) {
|
||||
$console->writeErr(
|
||||
"%s\n",
|
||||
pht('There are no running Phabricator daemons.'));
|
||||
$process_refs = $query->execute();
|
||||
if (!$process_refs) {
|
||||
if ($instance !== null) {
|
||||
$this->logInfo(
|
||||
pht('NO DAEMONS'),
|
||||
pht(
|
||||
'There are no running daemon processes for the current '.
|
||||
'instance ("%s").',
|
||||
$instance));
|
||||
} else {
|
||||
$this->writeInfo(
|
||||
pht('NO DAEMONS'),
|
||||
pht('There are no running daemon processes.'));
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
$status = 0;
|
||||
|
||||
$table = id(new PhutilConsoleTable())
|
||||
->addColumns(array(
|
||||
'id' => array(
|
||||
'title' => pht('Log'),
|
||||
),
|
||||
'daemonID' => array(
|
||||
'title' => pht('Daemon'),
|
||||
),
|
||||
'host' => array(
|
||||
'title' => pht('Host'),
|
||||
),
|
||||
'pid' => array(
|
||||
'title' => pht('Overseer'),
|
||||
),
|
||||
'started' => array(
|
||||
'title' => pht('Started'),
|
||||
),
|
||||
'daemon' => array(
|
||||
'title' => pht('Class'),
|
||||
),
|
||||
'argv' => array(
|
||||
'title' => pht('Arguments'),
|
||||
),
|
||||
));
|
||||
|
||||
foreach ($daemons as $daemon) {
|
||||
if ($daemon instanceof PhabricatorDaemonLog) {
|
||||
$table->addRow(array(
|
||||
'id' => $daemon->getID(),
|
||||
'daemonID' => $daemon->getDaemonID(),
|
||||
'host' => $daemon->getHost(),
|
||||
'pid' => $daemon->getPID(),
|
||||
'started' => date('M j Y, g:i:s A', $daemon->getDateCreated()),
|
||||
'daemon' => $daemon->getDaemon(),
|
||||
'argv' => csprintf('%LR', $daemon->getExplicitArgv()),
|
||||
->addColumns(
|
||||
array(
|
||||
'pid' => array(
|
||||
'title' => pht('PID'),
|
||||
),
|
||||
'command' => array(
|
||||
'title' => pht('Command'),
|
||||
),
|
||||
));
|
||||
} else if ($daemon instanceof PhabricatorDaemonReference) {
|
||||
$name = $daemon->getName();
|
||||
if (!$daemon->isRunning()) {
|
||||
$daemon->updateStatus(PhabricatorDaemonLog::STATUS_DEAD);
|
||||
$status = 2;
|
||||
$name = pht('<DEAD> %s', $name);
|
||||
}
|
||||
|
||||
$daemon_log = $daemon->getDaemonLog();
|
||||
$id = null;
|
||||
$daemon_id = null;
|
||||
if ($daemon_log) {
|
||||
$id = $daemon_log->getID();
|
||||
$daemon_id = $daemon_log->getDaemonID();
|
||||
}
|
||||
|
||||
$table->addRow(array(
|
||||
'id' => $id,
|
||||
'daemonID' => $daemon_id,
|
||||
'host' => 'localhost',
|
||||
'pid' => $daemon->getPID(),
|
||||
'started' => $daemon->getEpochStarted()
|
||||
? date('M j Y, g:i:s A', $daemon->getEpochStarted())
|
||||
: null,
|
||||
'daemon' => $name,
|
||||
'argv' => csprintf('%LR', $daemon->getArgv()),
|
||||
foreach ($process_refs as $process_ref) {
|
||||
$table->addRow(
|
||||
array(
|
||||
'pid' => $process_ref->getPID(),
|
||||
'command' => $process_ref->getCommand(),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
$table->draw();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -55,31 +55,6 @@ abstract class PhabricatorDaemonManagementWorkflow
|
|||
return array_mergev($daemons);
|
||||
}
|
||||
|
||||
final protected function loadAllRunningDaemons() {
|
||||
$local_daemons = $this->loadRunningDaemons();
|
||||
|
||||
$local_ids = array();
|
||||
foreach ($local_daemons as $daemon) {
|
||||
$daemon_log = $daemon->getDaemonLog();
|
||||
|
||||
if ($daemon_log) {
|
||||
$local_ids[] = $daemon_log->getID();
|
||||
}
|
||||
}
|
||||
|
||||
$daemon_query = id(new PhabricatorDaemonLogQuery())
|
||||
->setViewer(PhabricatorUser::getOmnipotentUser())
|
||||
->withStatus(PhabricatorDaemonLogQuery::STATUS_ALIVE);
|
||||
|
||||
if ($local_ids) {
|
||||
$daemon_query->withoutIDs($local_ids);
|
||||
}
|
||||
|
||||
$remote_daemons = $daemon_query->execute();
|
||||
|
||||
return array_merge($local_daemons, $remote_daemons);
|
||||
}
|
||||
|
||||
private function findDaemonClass($substring) {
|
||||
$symbols = $this->loadAvailableDaemonClasses();
|
||||
|
||||
|
|
Loading…
Reference in a new issue