2011-03-15 13:38:14 -07:00
|
|
|
<?php
|
|
|
|
|
2012-03-09 15:46:25 -08:00
|
|
|
final class PhabricatorDaemonLogViewController
|
|
|
|
extends PhabricatorDaemonController {
|
2011-03-15 13:38:14 -07:00
|
|
|
|
|
|
|
private $id;
|
|
|
|
|
|
|
|
public function willProcessRequest(array $data) {
|
|
|
|
$this->id = $data['id'];
|
|
|
|
}
|
|
|
|
|
|
|
|
public function processRequest() {
|
2011-03-26 22:55:18 -07:00
|
|
|
$request = $this->getRequest();
|
|
|
|
$user = $request->getUser();
|
2011-03-15 13:38:14 -07:00
|
|
|
|
|
|
|
$log = id(new PhabricatorDaemonLog())->load($this->id);
|
|
|
|
if (!$log) {
|
|
|
|
return new Aphront404Response();
|
|
|
|
}
|
|
|
|
|
|
|
|
$events = id(new PhabricatorDaemonLogEvent())->loadAllWhere(
|
2011-05-02 17:05:22 -07:00
|
|
|
'logID = %d ORDER BY id DESC LIMIT 1000',
|
2011-03-15 13:38:14 -07:00
|
|
|
$log->getID());
|
|
|
|
|
2013-07-23 12:10:41 -07:00
|
|
|
$crumbs = $this->buildApplicationCrumbs();
|
|
|
|
$crumbs->addCrumb(
|
|
|
|
id(new PhabricatorCrumbView())
|
|
|
|
->setName(pht('Daemon %s', $log->getID())));
|
|
|
|
|
|
|
|
$header = id(new PhabricatorHeaderView())
|
|
|
|
->setHeader($log->getDaemon());
|
|
|
|
|
|
|
|
$tag = id(new PhabricatorTagView())
|
|
|
|
->setType(PhabricatorTagView::TYPE_STATE);
|
|
|
|
|
|
|
|
$status = $log->getStatus();
|
|
|
|
switch ($status) {
|
|
|
|
case PhabricatorDaemonLog::STATUS_UNKNOWN:
|
|
|
|
$tag->setBackgroundColor(PhabricatorTagView::COLOR_ORANGE);
|
|
|
|
$tag->setName(pht('Unknown'));
|
|
|
|
break;
|
|
|
|
case PhabricatorDaemonLog::STATUS_RUNNING:
|
|
|
|
$tag->setBackgroundColor(PhabricatorTagView::COLOR_GREEN);
|
|
|
|
$tag->setName(pht('Running'));
|
|
|
|
break;
|
|
|
|
case PhabricatorDaemonLog::STATUS_DEAD:
|
|
|
|
$tag->setBackgroundColor(PhabricatorTagView::COLOR_RED);
|
|
|
|
$tag->setName(pht('Dead'));
|
|
|
|
break;
|
|
|
|
case PhabricatorDaemonLog::STATUS_WAIT:
|
|
|
|
$tag->setBackgroundColor(PhabricatorTagView::COLOR_BLUE);
|
|
|
|
$tag->setName(pht('Waiting'));
|
|
|
|
break;
|
|
|
|
case PhabricatorDaemonLog::STATUS_EXITED:
|
|
|
|
$tag->setBackgroundColor(PhabricatorTagView::COLOR_GREY);
|
|
|
|
$tag->setName(pht('Exited'));
|
|
|
|
break;
|
2012-10-04 16:50:12 -07:00
|
|
|
}
|
2011-03-26 22:55:18 -07:00
|
|
|
|
2013-07-23 12:10:41 -07:00
|
|
|
$header->addTag($tag);
|
|
|
|
|
|
|
|
$properties = $this->buildPropertyListView($log);
|
|
|
|
|
|
|
|
$event_view = id(new PhabricatorDaemonLogEventsView())
|
2011-03-26 22:55:18 -07:00
|
|
|
->setUser($user)
|
2013-07-23 12:10:41 -07:00
|
|
|
->setEvents($events);
|
|
|
|
|
|
|
|
$event_panel = new AphrontPanelView();
|
|
|
|
$event_panel->setNoBackground();
|
|
|
|
$event_panel->appendChild($event_view);
|
2012-08-13 15:27:45 -07:00
|
|
|
|
|
|
|
return $this->buildApplicationPage(
|
2013-07-23 12:10:41 -07:00
|
|
|
array(
|
|
|
|
$crumbs,
|
|
|
|
$header,
|
|
|
|
$properties,
|
|
|
|
$event_panel,
|
|
|
|
),
|
2011-03-15 13:38:14 -07:00
|
|
|
array(
|
2013-02-26 19:51:36 -08:00
|
|
|
'title' => pht('Daemon Log'),
|
2011-03-15 13:38:14 -07:00
|
|
|
));
|
|
|
|
}
|
|
|
|
|
2013-07-23 12:10:41 -07:00
|
|
|
private function buildPropertyListView(PhabricatorDaemonLog $daemon) {
|
|
|
|
$request = $this->getRequest();
|
|
|
|
$viewer = $request->getUser();
|
|
|
|
|
|
|
|
$view = id(new PhabricatorPropertyListView())
|
|
|
|
->setUser($viewer);
|
|
|
|
|
|
|
|
$c_epoch = $daemon->getDateCreated();
|
|
|
|
$u_epoch = $daemon->getDateModified();
|
|
|
|
|
|
|
|
$unknown_time = PhabricatorDaemonLogQuery::getTimeUntilUnknown();
|
|
|
|
$dead_time = PhabricatorDaemonLogQuery::getTimeUntilDead();
|
|
|
|
|
|
|
|
$details = null;
|
|
|
|
$status = $daemon->getStatus();
|
|
|
|
switch ($status) {
|
|
|
|
case PhabricatorDaemonLog::STATUS_RUNNING:
|
|
|
|
$details = pht(
|
|
|
|
'This daemon is running normally and reported a status update '.
|
|
|
|
'recently (within %s).',
|
|
|
|
phabricator_format_relative_time($unknown_time));
|
|
|
|
break;
|
|
|
|
case PhabricatorDaemonLog::STATUS_UNKNOWN:
|
|
|
|
$details = pht(
|
|
|
|
'This daemon has not reported a status update recently (within %s). '.
|
|
|
|
'It may have exited abruptly. After %s, it will be presumed dead.',
|
|
|
|
phabricator_format_relative_time($unknown_time),
|
|
|
|
phabricator_format_relative_time($dead_time));
|
|
|
|
break;
|
|
|
|
case PhabricatorDaemonLog::STATUS_DEAD:
|
|
|
|
$details = pht(
|
|
|
|
'This daemon did not report a status update for %s. It is '.
|
|
|
|
'presumed dead. Usually, this indicates that the daemon was '.
|
|
|
|
'killed or otherwise exited abruptly with an error. You may '.
|
|
|
|
'need to restart it.',
|
|
|
|
phabricator_format_relative_time($dead_time));
|
|
|
|
break;
|
|
|
|
case PhabricatorDaemonLog::STATUS_WAIT:
|
|
|
|
$details = pht(
|
|
|
|
'This daemon is running normally and reported a status update '.
|
|
|
|
'recently (within %s). However, it encountered an error while '.
|
|
|
|
'doing work and is waiting a little while to resume processing. '.
|
|
|
|
'After encountering an error, daemons wait before resuming work '.
|
|
|
|
'to avoid overloading services.',
|
|
|
|
phabricator_format_relative_time($unknown_time));
|
|
|
|
break;
|
|
|
|
case PhabricatorDaemonLog::STATUS_EXITED:
|
|
|
|
$details = pht(
|
|
|
|
'This daemon exited normally and is no longer running.');
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
$view->addProperty(pht('Status Details'), $details);
|
|
|
|
|
|
|
|
$view->addProperty(pht('Daemon Class'), $daemon->getDaemon());
|
|
|
|
$view->addProperty(pht('Host'), $daemon->getHost());
|
|
|
|
$view->addProperty(pht('PID'), $daemon->getPID());
|
|
|
|
$view->addProperty(pht('Started'), phabricator_datetime($c_epoch, $viewer));
|
|
|
|
$view->addProperty(
|
|
|
|
pht('Seen'),
|
|
|
|
pht(
|
|
|
|
'%s ago (%s)',
|
|
|
|
phabricator_format_relative_time(time() - $u_epoch),
|
|
|
|
phabricator_datetime($u_epoch, $viewer)));
|
|
|
|
|
|
|
|
$argv = $daemon->getArgv();
|
|
|
|
if (is_array($argv)) {
|
|
|
|
$argv = implode("\n", $argv);
|
|
|
|
}
|
|
|
|
|
|
|
|
$view->addProperty(
|
|
|
|
pht('Argv'),
|
|
|
|
phutil_tag(
|
|
|
|
'textarea',
|
|
|
|
array(
|
|
|
|
'style' => 'width: 100%; height: 12em;',
|
|
|
|
),
|
|
|
|
$argv));
|
|
|
|
|
|
|
|
|
|
|
|
return $view;
|
|
|
|
}
|
|
|
|
|
2011-03-15 13:38:14 -07:00
|
|
|
}
|