Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/daemon/controller/PhabricatorDaemonLogViewController.php
12256 views
1
<?php
2
3
final class PhabricatorDaemonLogViewController
4
extends PhabricatorDaemonController {
5
6
public function handleRequest(AphrontRequest $request) {
7
$viewer = $request->getViewer();
8
$id = $request->getURIData('id');
9
10
$log = id(new PhabricatorDaemonLogQuery())
11
->setViewer($viewer)
12
->withIDs(array($id))
13
->setAllowStatusWrites(true)
14
->executeOne();
15
if (!$log) {
16
return new Aphront404Response();
17
}
18
19
$crumbs = $this->buildApplicationCrumbs();
20
$crumbs->addTextCrumb(pht('Daemon %s', $log->getID()));
21
$crumbs->setBorder(true);
22
23
$header = id(new PHUIHeaderView())
24
->setHeader($log->getDaemon())
25
->setHeaderIcon('fa-pied-piper-alt');
26
27
$tag = id(new PHUITagView())
28
->setType(PHUITagView::TYPE_STATE);
29
30
$status = $log->getStatus();
31
switch ($status) {
32
case PhabricatorDaemonLog::STATUS_UNKNOWN:
33
$color = 'orange';
34
$name = pht('Unknown');
35
$icon = 'fa-warning';
36
break;
37
case PhabricatorDaemonLog::STATUS_RUNNING:
38
$color = 'green';
39
$name = pht('Running');
40
$icon = 'fa-rocket';
41
break;
42
case PhabricatorDaemonLog::STATUS_DEAD:
43
$color = 'red';
44
$name = pht('Dead');
45
$icon = 'fa-times';
46
break;
47
case PhabricatorDaemonLog::STATUS_WAIT:
48
$color = 'blue';
49
$name = pht('Waiting');
50
$icon = 'fa-clock-o';
51
break;
52
case PhabricatorDaemonLog::STATUS_EXITING:
53
$color = 'yellow';
54
$name = pht('Exiting');
55
$icon = 'fa-check';
56
break;
57
case PhabricatorDaemonLog::STATUS_EXITED:
58
$color = 'bluegrey';
59
$name = pht('Exited');
60
$icon = 'fa-check';
61
break;
62
}
63
64
$header->setStatus($icon, $color, $name);
65
66
$properties = $this->buildPropertyListView($log);
67
68
$object_box = id(new PHUIObjectBoxView())
69
->setHeaderText(pht('Daemon Details'))
70
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
71
->addPropertyList($properties);
72
73
$view = id(new PHUITwoColumnView())
74
->setHeader($header)
75
->setFooter(array(
76
$object_box,
77
));
78
79
return $this->newPage()
80
->setTitle(pht('Daemon Log'))
81
->setCrumbs($crumbs)
82
->appendChild($view);
83
84
}
85
86
private function buildPropertyListView(PhabricatorDaemonLog $daemon) {
87
$request = $this->getRequest();
88
$viewer = $request->getUser();
89
90
$view = id(new PHUIPropertyListView())
91
->setUser($viewer);
92
93
$id = $daemon->getID();
94
$c_epoch = $daemon->getDateCreated();
95
$u_epoch = $daemon->getDateModified();
96
97
$unknown_time = PhabricatorDaemonLogQuery::getTimeUntilUnknown();
98
$dead_time = PhabricatorDaemonLogQuery::getTimeUntilDead();
99
$wait_time = PhutilDaemonHandle::getWaitBeforeRestart();
100
101
$details = null;
102
$status = $daemon->getStatus();
103
switch ($status) {
104
case PhabricatorDaemonLog::STATUS_RUNNING:
105
$details = pht(
106
'This daemon is running normally and reported a status update '.
107
'recently (within %s).',
108
phutil_format_relative_time($unknown_time));
109
break;
110
case PhabricatorDaemonLog::STATUS_UNKNOWN:
111
$details = pht(
112
'This daemon has not reported a status update recently (within %s). '.
113
'It may have exited abruptly. After %s, it will be presumed dead.',
114
phutil_format_relative_time($unknown_time),
115
phutil_format_relative_time($dead_time));
116
break;
117
case PhabricatorDaemonLog::STATUS_DEAD:
118
$details = pht(
119
'This daemon did not report a status update for %s. It is '.
120
'presumed dead. Usually, this indicates that the daemon was '.
121
'killed or otherwise exited abruptly with an error. You may '.
122
'need to restart it.',
123
phutil_format_relative_time($dead_time));
124
break;
125
case PhabricatorDaemonLog::STATUS_WAIT:
126
$details = pht(
127
'This daemon is running normally and reported a status update '.
128
'recently (within %s). The process is currently waiting to '.
129
'restart, either because it is hibernating or because it '.
130
'encountered an error.',
131
phutil_format_relative_time($unknown_time));
132
break;
133
case PhabricatorDaemonLog::STATUS_EXITING:
134
$details = pht('This daemon is shutting down gracefully.');
135
break;
136
case PhabricatorDaemonLog::STATUS_EXITED:
137
$details = pht('This daemon exited normally and is no longer running.');
138
break;
139
}
140
141
$view->addProperty(pht('Status Details'), $details);
142
143
$view->addProperty(pht('Daemon Class'), $daemon->getDaemon());
144
$view->addProperty(pht('Host'), $daemon->getHost());
145
$view->addProperty(pht('PID'), $daemon->getPID());
146
$view->addProperty(pht('Running as'), $daemon->getRunningAsUser());
147
$view->addProperty(pht('Started'), phabricator_datetime($c_epoch, $viewer));
148
$view->addProperty(
149
pht('Seen'),
150
pht(
151
'%s ago (%s)',
152
phutil_format_relative_time(time() - $u_epoch),
153
phabricator_datetime($u_epoch, $viewer)));
154
155
$argv = $daemon->getArgv();
156
if (is_array($argv)) {
157
$argv = implode("\n", $argv);
158
}
159
160
$view->addProperty(
161
pht('Argv'),
162
phutil_tag(
163
'textarea',
164
array(
165
'style' => 'width: 100%; height: 12em;',
166
),
167
$argv));
168
169
$view->addProperty(
170
pht('View Full Logs'),
171
phutil_tag(
172
'tt',
173
array(),
174
"phabricator/ $ ./bin/phd log --id {$id}"));
175
176
177
return $view;
178
}
179
180
}
181
182