Skip to content

Commit 88530ba

Browse files
author
epriestley
committedJul 23, 2013
Add bin/phd log <id> to dump all logs to the CLI
Summary: Ref T3557. Make it easier to access full daemon logs from the CLI. Test Plan: {F51265} Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T3557 Differential Revision: https://secure.phabricator.com/D6547
1 parent 36c1359 commit 88530ba

File tree

4 files changed

+86
-0
lines changed

4 files changed

+86
-0
lines changed
 

‎scripts/daemon/manage_daemons.php

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
new PhabricatorDaemonManagementRestartWorkflow(),
2424
new PhabricatorDaemonManagementLaunchWorkflow(),
2525
new PhabricatorDaemonManagementDebugWorkflow(),
26+
new PhabricatorDaemonManagementLogWorkflow(),
2627
new PhutilHelpArgumentWorkflow(),
2728
);
2829

‎src/__phutil_library_map__.php

+2
Original file line numberDiff line numberDiff line change
@@ -1032,6 +1032,7 @@
10321032
'PhabricatorDaemonManagementDebugWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementDebugWorkflow.php',
10331033
'PhabricatorDaemonManagementLaunchWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLaunchWorkflow.php',
10341034
'PhabricatorDaemonManagementListWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementListWorkflow.php',
1035+
'PhabricatorDaemonManagementLogWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLogWorkflow.php',
10351036
'PhabricatorDaemonManagementRestartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementRestartWorkflow.php',
10361037
'PhabricatorDaemonManagementStartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStartWorkflow.php',
10371038
'PhabricatorDaemonManagementStatusWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStatusWorkflow.php',
@@ -3039,6 +3040,7 @@
30393040
'PhabricatorDaemonManagementDebugWorkflow' => 'PhabricatorDaemonManagementWorkflow',
30403041
'PhabricatorDaemonManagementLaunchWorkflow' => 'PhabricatorDaemonManagementWorkflow',
30413042
'PhabricatorDaemonManagementListWorkflow' => 'PhabricatorDaemonManagementWorkflow',
3043+
'PhabricatorDaemonManagementLogWorkflow' => 'PhabricatorDaemonManagementWorkflow',
30423044
'PhabricatorDaemonManagementRestartWorkflow' => 'PhabricatorDaemonManagementWorkflow',
30433045
'PhabricatorDaemonManagementStartWorkflow' => 'PhabricatorDaemonManagementWorkflow',
30443046
'PhabricatorDaemonManagementStatusWorkflow' => 'PhabricatorDaemonManagementWorkflow',

‎src/applications/daemon/controller/PhabricatorDaemonLogViewController.php

+8
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ private function buildPropertyListView(PhabricatorDaemonLog $daemon) {
9191
$view = id(new PhabricatorPropertyListView())
9292
->setUser($viewer);
9393

94+
$id = $daemon->getID();
9495
$c_epoch = $daemon->getDateCreated();
9596
$u_epoch = $daemon->getDateModified();
9697

@@ -165,6 +166,13 @@ private function buildPropertyListView(PhabricatorDaemonLog $daemon) {
165166
),
166167
$argv));
167168

169+
$view->addProperty(
170+
pht('View Full Logs'),
171+
phutil_tag(
172+
'tt',
173+
array(),
174+
"phabricator/ $ ./bin/phd log {$id}"));
175+
168176

169177
return $view;
170178
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<?php
2+
3+
final class PhabricatorDaemonManagementLogWorkflow
4+
extends PhabricatorDaemonManagementWorkflow {
5+
6+
public function didConstruct() {
7+
$this
8+
->setName('log')
9+
->setSynopsis(pht('Print the log for a daemon.'))
10+
->setArguments(
11+
array(
12+
array(
13+
'name' => 'daemon',
14+
'wildcard' => true,
15+
),
16+
));
17+
}
18+
19+
public function execute(PhutilArgumentParser $args) {
20+
$id = $args->getArg('daemon');
21+
if (!$id) {
22+
throw new PhutilArgumentUsageException(
23+
pht('You must specify the daemon ID to show logs for.'));
24+
} else if (count($id) > 1) {
25+
throw new PhutilArgumentUsageException(
26+
pht('Specify exactly one daemon ID to show logs for.'));
27+
}
28+
$id = head($id);
29+
30+
$daemon = id(new PhabricatorDaemonLogQuery())
31+
->setViewer(PhabricatorUser::getOmnipotentUser())
32+
->withIDs(array($id))
33+
->executeOne();
34+
35+
if (!$daemon) {
36+
throw new PhutilArgumentUsageException(
37+
pht('No such daemon with id "%s"!', $id));
38+
}
39+
40+
$console = PhutilConsole::getConsole();
41+
$logs = id(new PhabricatorDaemonLogEvent())->loadAllWhere(
42+
'logID = %d ORDER BY id ASC',
43+
$daemon->getID());
44+
45+
$lines = array();
46+
foreach ($logs as $log) {
47+
$text_lines = phutil_split_lines($log->getMessage(), $retain = false);
48+
foreach ($text_lines as $line) {
49+
$lines[] = array(
50+
'type' => $log->getLogType(),
51+
'date' => $log->getEpoch(),
52+
'data' => $line,
53+
);
54+
}
55+
}
56+
57+
foreach ($lines as $line) {
58+
$type = $line['type'];
59+
$data = $line['data'];
60+
$date = date('r', $line['date']);
61+
62+
$console->writeOut(
63+
"%s\n",
64+
sprintf(
65+
'[%s] %s %s',
66+
$date,
67+
$type,
68+
$data));
69+
}
70+
71+
return 0;
72+
}
73+
74+
75+
}

0 commit comments

Comments
 (0)
Failed to load comments.