Path: blob/master/src/applications/daemon/controller/PhabricatorDaemonLogViewController.php
12256 views
<?php12final class PhabricatorDaemonLogViewController3extends PhabricatorDaemonController {45public function handleRequest(AphrontRequest $request) {6$viewer = $request->getViewer();7$id = $request->getURIData('id');89$log = id(new PhabricatorDaemonLogQuery())10->setViewer($viewer)11->withIDs(array($id))12->setAllowStatusWrites(true)13->executeOne();14if (!$log) {15return new Aphront404Response();16}1718$crumbs = $this->buildApplicationCrumbs();19$crumbs->addTextCrumb(pht('Daemon %s', $log->getID()));20$crumbs->setBorder(true);2122$header = id(new PHUIHeaderView())23->setHeader($log->getDaemon())24->setHeaderIcon('fa-pied-piper-alt');2526$tag = id(new PHUITagView())27->setType(PHUITagView::TYPE_STATE);2829$status = $log->getStatus();30switch ($status) {31case PhabricatorDaemonLog::STATUS_UNKNOWN:32$color = 'orange';33$name = pht('Unknown');34$icon = 'fa-warning';35break;36case PhabricatorDaemonLog::STATUS_RUNNING:37$color = 'green';38$name = pht('Running');39$icon = 'fa-rocket';40break;41case PhabricatorDaemonLog::STATUS_DEAD:42$color = 'red';43$name = pht('Dead');44$icon = 'fa-times';45break;46case PhabricatorDaemonLog::STATUS_WAIT:47$color = 'blue';48$name = pht('Waiting');49$icon = 'fa-clock-o';50break;51case PhabricatorDaemonLog::STATUS_EXITING:52$color = 'yellow';53$name = pht('Exiting');54$icon = 'fa-check';55break;56case PhabricatorDaemonLog::STATUS_EXITED:57$color = 'bluegrey';58$name = pht('Exited');59$icon = 'fa-check';60break;61}6263$header->setStatus($icon, $color, $name);6465$properties = $this->buildPropertyListView($log);6667$object_box = id(new PHUIObjectBoxView())68->setHeaderText(pht('Daemon Details'))69->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)70->addPropertyList($properties);7172$view = id(new PHUITwoColumnView())73->setHeader($header)74->setFooter(array(75$object_box,76));7778return $this->newPage()79->setTitle(pht('Daemon Log'))80->setCrumbs($crumbs)81->appendChild($view);8283}8485private function buildPropertyListView(PhabricatorDaemonLog $daemon) {86$request = $this->getRequest();87$viewer = $request->getUser();8889$view = id(new PHUIPropertyListView())90->setUser($viewer);9192$id = $daemon->getID();93$c_epoch = $daemon->getDateCreated();94$u_epoch = $daemon->getDateModified();9596$unknown_time = PhabricatorDaemonLogQuery::getTimeUntilUnknown();97$dead_time = PhabricatorDaemonLogQuery::getTimeUntilDead();98$wait_time = PhutilDaemonHandle::getWaitBeforeRestart();99100$details = null;101$status = $daemon->getStatus();102switch ($status) {103case PhabricatorDaemonLog::STATUS_RUNNING:104$details = pht(105'This daemon is running normally and reported a status update '.106'recently (within %s).',107phutil_format_relative_time($unknown_time));108break;109case PhabricatorDaemonLog::STATUS_UNKNOWN:110$details = pht(111'This daemon has not reported a status update recently (within %s). '.112'It may have exited abruptly. After %s, it will be presumed dead.',113phutil_format_relative_time($unknown_time),114phutil_format_relative_time($dead_time));115break;116case PhabricatorDaemonLog::STATUS_DEAD:117$details = pht(118'This daemon did not report a status update for %s. It is '.119'presumed dead. Usually, this indicates that the daemon was '.120'killed or otherwise exited abruptly with an error. You may '.121'need to restart it.',122phutil_format_relative_time($dead_time));123break;124case PhabricatorDaemonLog::STATUS_WAIT:125$details = pht(126'This daemon is running normally and reported a status update '.127'recently (within %s). The process is currently waiting to '.128'restart, either because it is hibernating or because it '.129'encountered an error.',130phutil_format_relative_time($unknown_time));131break;132case PhabricatorDaemonLog::STATUS_EXITING:133$details = pht('This daemon is shutting down gracefully.');134break;135case PhabricatorDaemonLog::STATUS_EXITED:136$details = pht('This daemon exited normally and is no longer running.');137break;138}139140$view->addProperty(pht('Status Details'), $details);141142$view->addProperty(pht('Daemon Class'), $daemon->getDaemon());143$view->addProperty(pht('Host'), $daemon->getHost());144$view->addProperty(pht('PID'), $daemon->getPID());145$view->addProperty(pht('Running as'), $daemon->getRunningAsUser());146$view->addProperty(pht('Started'), phabricator_datetime($c_epoch, $viewer));147$view->addProperty(148pht('Seen'),149pht(150'%s ago (%s)',151phutil_format_relative_time(time() - $u_epoch),152phabricator_datetime($u_epoch, $viewer)));153154$argv = $daemon->getArgv();155if (is_array($argv)) {156$argv = implode("\n", $argv);157}158159$view->addProperty(160pht('Argv'),161phutil_tag(162'textarea',163array(164'style' => 'width: 100%; height: 12em;',165),166$argv));167168$view->addProperty(169pht('View Full Logs'),170phutil_tag(171'tt',172array(),173"phabricator/ $ ./bin/phd log --id {$id}"));174175176return $view;177}178179}180181182