Page MenuHomePhabricator

D9607.id23029.diff
No OneTemporary

D9607.id23029.diff

diff --git a/src/applications/daemon/management/PhabricatorDaemonManagementStatusWorkflow.php b/src/applications/daemon/management/PhabricatorDaemonManagementStatusWorkflow.php
--- a/src/applications/daemon/management/PhabricatorDaemonManagementStatusWorkflow.php
+++ b/src/applications/daemon/management/PhabricatorDaemonManagementStatusWorkflow.php
@@ -7,24 +7,10 @@
$this
->setName('status')
->setSynopsis(pht('Show status of running daemons.'))
- ->setArguments(
- array(
- array(
- 'name' => 'all',
- 'help' => pht('Show the status of daemons across all hosts.'),
- ),
- ));
+ ->setArguments(array());
}
public function execute(PhutilArgumentParser $args) {
- if ($args->getArg('all')) {
- return $this->executeGlobal();
- } else {
- return $this->executeLocal();
- }
- }
-
- protected function executeLocal() {
$console = PhutilConsole::getConsole();
$daemons = $this->loadRunningDaemons();
@@ -36,55 +22,6 @@
}
$status = 0;
- $table = id(new PhutilConsoleTable())
- ->addColumns(array(
- 'pid' => array(
- 'title' => 'PID',
- ),
- 'started' => array(
- 'title' => 'Started',
- ),
- 'daemon' => array(
- 'title' => 'Daemon',
- ),
- 'argv' => array(
- 'title' => 'Arguments',
- ),
- ));
-
- foreach ($daemons as $daemon) {
- $name = $daemon->getName();
- if (!$daemon->isRunning()) {
- $daemon->updateStatus(PhabricatorDaemonLog::STATUS_DEAD);
- $status = 2;
- $name = '<DEAD> '.$name;
- }
-
- $table->addRow(array(
- 'pid' => $daemon->getPID(),
- 'started' => $daemon->getEpochStarted()
- ? date('M j Y, g:i:s A', $daemon->getEpochStarted())
- : null,
- 'daemon' => $name,
- 'argv' => csprintf('%LR', $daemon->getArgv()),
- ));
- }
-
- $table->draw();
- }
-
- protected function executeGlobal() {
- $console = PhutilConsole::getConsole();
- $daemons = $this->loadAllRunningDaemons();
-
- if (!$daemons) {
- $console->writeErr(
- "%s\n",
- pht('There are no running Phabricator daemons.'));
- return 1;
- }
-
- $status = 0;
$table = id(new PhutilConsoleTable())
->addColumns(array(
@@ -109,14 +46,40 @@
));
foreach ($daemons as $daemon) {
- $table->addRow(array(
- 'id' => $daemon->getID(),
- 'host' => $daemon->getHost(),
- 'pid' => $daemon->getPID(),
- 'started' => date('M j Y, g:i:s A', $daemon->getDateCreated()),
- 'daemon' => $daemon->getDaemon(),
- 'argv' => csprintf('%LR', array() /* $daemon->getArgv() */),
- ));
+ if ($daemon instanceof PhabricatorDaemonLog) {
+ $table->addRow(array(
+ 'id' => $daemon->getID(),
+ 'host' => $daemon->getHost(),
+ 'pid' => $daemon->getPID(),
+ 'started' => date('M j Y, g:i:s A', $daemon->getDateCreated()),
+ 'daemon' => $daemon->getDaemon(),
+ 'argv' => csprintf('%LR', array() /* $daemon->getArgv() */),
+ ));
+ } else if ($daemon instanceof PhabricatorDaemonReference) {
+ $name = $daemon->getName();
+ if (!$daemon->isRunning()) {
+ $daemon->updateStatus(PhabricatorDaemonLog::STATUS_DEAD);
+ $status = 2;
+ $name = '<DEAD> '.$name;
+ }
+
+ $daemon_log = $daemon->getDaemonLog();
+ $id = null;
+ if ($daemon_log) {
+ $id = $daemon_log->getID();
+ }
+
+ $table->addRow(array(
+ 'id' => $id,
+ 'host' => phutil_console_format('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()),
+ ));
+ }
}
$table->draw();
diff --git a/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php b/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php
--- a/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php
+++ b/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php
@@ -37,6 +37,7 @@
protected final function loadRunningDaemons() {
$results = array();
+ $ids = array();
$pid_dir = $this->getPIDDirectory();
$pid_files = Filesystem::listDirectory($pid_dir);
@@ -45,26 +46,23 @@
}
foreach ($pid_files as $pid_file) {
- $pid_data = Filesystem::readFile($pid_dir.'/'.$pid_file);
- $dict = json_decode($pid_data, true);
- if (!is_array($dict)) {
- // Just return a hanging reference, since control code needs to be
- // robust against unusual system states.
- $dict = array();
- }
- $ref = PhabricatorDaemonReference::newFromDictionary($dict);
- $ref->setPIDFile($pid_dir.'/'.$pid_file);
+ $ref = PhabricatorDaemonReference::newFromFile($pid_dir.'/'.$pid_file);
+
$results[] = $ref;
- }
- return $results;
- }
+ $daemon_log = $ref->getDaemonLog();
+ if ($daemon_log) {
+ $ids[] = $daemon_log->getID();
+ }
+ }
- protected final function loadAllRunningDaemons() {
- return id(new PhabricatorDaemonLogQuery())
+ $remote_daemons = id(new PhabricatorDaemonLogQuery())
->setViewer(PhabricatorUser::getOmnipotentUser())
+ ->withoutIDs($ids)
->withStatus(PhabricatorDaemonLogQuery::STATUS_ALIVE)
->execute();
+
+ return array_merge($results, $remote_daemons);
}
private function findDaemonClass($substring) {
@@ -280,7 +278,6 @@
}
$console->writeErr(pht('Done.')."\n");
-
return 0;
}
diff --git a/src/applications/daemon/query/PhabricatorDaemonLogQuery.php b/src/applications/daemon/query/PhabricatorDaemonLogQuery.php
--- a/src/applications/daemon/query/PhabricatorDaemonLogQuery.php
+++ b/src/applications/daemon/query/PhabricatorDaemonLogQuery.php
@@ -7,6 +7,7 @@
const STATUS_ALIVE = 'status-alive';
private $ids;
+ private $notIDs;
private $status = self::STATUS_ALL;
private $daemonClasses;
private $allowStatusWrites;
@@ -24,6 +25,11 @@
return $this;
}
+ public function withoutIDs(array $ids) {
+ $this->notIDs = $ids;
+ return $this;
+ }
+
public function withStatus($status) {
$this->status = $status;
return $this;
@@ -119,6 +125,13 @@
$this->ids);
}
+ if ($this->notIDs) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'id NOT IN (%Ld)',
+ $this->notIDs);
+ }
+
if ($this->getStatusConstants()) {
$where[] = qsprintf(
$conn_r,
diff --git a/src/infrastructure/daemon/control/PhabricatorDaemonReference.php b/src/infrastructure/daemon/control/PhabricatorDaemonReference.php
--- a/src/infrastructure/daemon/control/PhabricatorDaemonReference.php
+++ b/src/infrastructure/daemon/control/PhabricatorDaemonReference.php
@@ -10,6 +10,19 @@
private $daemonLog;
+ public static function newFromFile($path) {
+ $pid_data = Filesystem::readFile($path);
+ $dict = json_decode($pid_data, true);
+ if (!is_array($dict)) {
+ // Just return a hanging reference, since control code needs to be
+ // robust against unusual system states.
+ $dict = array();
+ }
+ $ref = self::newFromDictionary($dict);
+ $ref->pidFile = $path;
+ return $ref;
+ }
+
public static function newFromDictionary(array $dict) {
$ref = new PhabricatorDaemonReference();
@@ -18,6 +31,12 @@
$ref->pid = idx($dict, 'pid');
$ref->start = idx($dict, 'start');
+ $ref->daemonLog = id(new PhabricatorDaemonLog())->loadOneWhere(
+ 'daemon = %s AND pid = %d AND dateCreated = %d',
+ $ref->name,
+ $ref->pid,
+ $ref->start);
+
return $ref;
}
@@ -66,15 +85,14 @@
return $this->start;
}
- public function setPIDFile($pid_file) {
- $this->pidFile = $pid_file;
- return $this;
- }
-
public function getPIDFile() {
return $this->pidFile;
}
+ public function getDaemonLog() {
+ return $this->daemonLog;
+ }
+
public function isRunning() {
return self::isProcessRunning($this->getPID());
}

File Metadata

Mime Type
text/plain
Expires
Fri, Mar 28, 4:17 PM (3 d, 7 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7719590
Default Alt Text
D9607.id23029.diff (8 KB)

Event Timeline