Page MenuHomePhabricator

D9607.id23047.diff
No OneTemporary

D9607.id23047.diff

diff --git a/resources/sql/autopatches/20140617.daemon.interesting-argv.sql b/resources/sql/autopatches/20140617.daemon.interesting-argv.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20140617.daemon.interesting-argv.sql
@@ -0,0 +1,3 @@
+ALTER TABLE {$NAMESPACE}_daemon.daemon_log
+ ADD COLUMN interestingArgv longtext CHARACTER SET utf8
+ COLLATE utf8_bin NOT NULL AFTER argv;
diff --git a/src/applications/daemon/event/PhabricatorDaemonEventListener.php b/src/applications/daemon/event/PhabricatorDaemonEventListener.php
--- a/src/applications/daemon/event/PhabricatorDaemonEventListener.php
+++ b/src/applications/daemon/event/PhabricatorDaemonEventListener.php
@@ -37,6 +37,7 @@
->setPID(getmypid())
->setStatus(PhabricatorDaemonLog::STATUS_RUNNING)
->setArgv($event->getValue('argv'))
+ ->setInterestingArgv($event->getValue('interestingArgv'))
->save();
$this->daemons[$id] = $daemon;
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,73 +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();
-
- if (!$daemons) {
- $console->writeErr(
- "%s\n",
- pht('There are no running Phabricator daemons.'));
- return 1;
- }
-
- $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();
@@ -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', $daemon->getInterestingArgv()),
+ ));
+ } 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
@@ -36,35 +36,38 @@
}
protected final function loadRunningDaemons() {
- $results = array();
+ $daemons = array();
$pid_dir = $this->getPIDDirectory();
$pid_files = Filesystem::listDirectory($pid_dir);
- if (!$pid_files) {
- return $results;
- }
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);
- $results[] = $ref;
+ $daemons[] = PhabricatorDaemonReference::newFromFile(
+ $pid_dir.'/'.$pid_file);
}
- return $results;
+ return $daemons;
}
protected final function loadAllRunningDaemons() {
- return id(new PhabricatorDaemonLogQuery())
+ $local_daemons = $this->loadRunningDaemons();
+
+ $local_ids = array();
+ foreach ($local_daemons as $daemon) {
+ $daemon_log = $daemon->getDaemonLog();
+
+ if ($daemon_log) {
+ $local_ids[] = $daemon_log->getID();
+ }
+ }
+
+ $remote_daemons = id(new PhabricatorDaemonLogQuery())
->setViewer(PhabricatorUser::getOmnipotentUser())
+ ->withoutIDs($local_ids)
->withStatus(PhabricatorDaemonLogQuery::STATUS_ALIVE)
->execute();
+
+ return array_merge($local_daemons, $remote_daemons);
}
private function findDaemonClass($substring) {
@@ -280,7 +283,6 @@
}
$console->writeErr(pht('Done.')."\n");
-
return 0;
}
diff --git a/src/applications/daemon/storage/PhabricatorDaemonLog.php b/src/applications/daemon/storage/PhabricatorDaemonLog.php
--- a/src/applications/daemon/storage/PhabricatorDaemonLog.php
+++ b/src/applications/daemon/storage/PhabricatorDaemonLog.php
@@ -13,12 +13,14 @@
protected $host;
protected $pid;
protected $argv;
+ protected $interestingArgv;
protected $status;
public function getConfiguration() {
return array(
self::CONFIG_SERIALIZATION => array(
'argv' => self::SERIALIZATION_JSON,
+ 'interestingArgv' => self::SERIALIZATION_JSON,
),
) + parent::getConfiguration();
}
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
Thu, Mar 20, 11:50 AM (17 h, 4 m ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7713054
Default Alt Text
D9607.id23047.diff (8 KB)

Event Timeline