diff --git a/scripts/daemon/manage_daemons.php b/scripts/daemon/manage_daemons.php index 106023ab44..4319aa71d5 100755 --- a/scripts/daemon/manage_daemons.php +++ b/scripts/daemon/manage_daemons.php @@ -23,6 +23,7 @@ $workflows = array( new PhabricatorDaemonManagementRestartWorkflow(), new PhabricatorDaemonManagementLaunchWorkflow(), new PhabricatorDaemonManagementDebugWorkflow(), + new PhabricatorDaemonManagementLogWorkflow(), new PhutilHelpArgumentWorkflow(), ); diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 1541cadd7c..46e0abe0b8 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1032,6 +1032,7 @@ phutil_register_library_map(array( 'PhabricatorDaemonManagementDebugWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementDebugWorkflow.php', 'PhabricatorDaemonManagementLaunchWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLaunchWorkflow.php', 'PhabricatorDaemonManagementListWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementListWorkflow.php', + 'PhabricatorDaemonManagementLogWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLogWorkflow.php', 'PhabricatorDaemonManagementRestartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementRestartWorkflow.php', 'PhabricatorDaemonManagementStartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStartWorkflow.php', 'PhabricatorDaemonManagementStatusWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStatusWorkflow.php', @@ -3039,6 +3040,7 @@ phutil_register_library_map(array( 'PhabricatorDaemonManagementDebugWorkflow' => 'PhabricatorDaemonManagementWorkflow', 'PhabricatorDaemonManagementLaunchWorkflow' => 'PhabricatorDaemonManagementWorkflow', 'PhabricatorDaemonManagementListWorkflow' => 'PhabricatorDaemonManagementWorkflow', + 'PhabricatorDaemonManagementLogWorkflow' => 'PhabricatorDaemonManagementWorkflow', 'PhabricatorDaemonManagementRestartWorkflow' => 'PhabricatorDaemonManagementWorkflow', 'PhabricatorDaemonManagementStartWorkflow' => 'PhabricatorDaemonManagementWorkflow', 'PhabricatorDaemonManagementStatusWorkflow' => 'PhabricatorDaemonManagementWorkflow', diff --git a/src/applications/daemon/controller/PhabricatorDaemonLogViewController.php b/src/applications/daemon/controller/PhabricatorDaemonLogViewController.php index f0230df87d..8f3d198c90 100644 --- a/src/applications/daemon/controller/PhabricatorDaemonLogViewController.php +++ b/src/applications/daemon/controller/PhabricatorDaemonLogViewController.php @@ -91,6 +91,7 @@ final class PhabricatorDaemonLogViewController $view = id(new PhabricatorPropertyListView()) ->setUser($viewer); + $id = $daemon->getID(); $c_epoch = $daemon->getDateCreated(); $u_epoch = $daemon->getDateModified(); @@ -165,6 +166,13 @@ final class PhabricatorDaemonLogViewController ), $argv)); + $view->addProperty( + pht('View Full Logs'), + phutil_tag( + 'tt', + array(), + "phabricator/ $ ./bin/phd log {$id}")); + return $view; } diff --git a/src/applications/daemon/management/PhabricatorDaemonManagementLogWorkflow.php b/src/applications/daemon/management/PhabricatorDaemonManagementLogWorkflow.php new file mode 100644 index 0000000000..a8872138c2 --- /dev/null +++ b/src/applications/daemon/management/PhabricatorDaemonManagementLogWorkflow.php @@ -0,0 +1,75 @@ +setName('log') + ->setSynopsis(pht('Print the log for a daemon.')) + ->setArguments( + array( + array( + 'name' => 'daemon', + 'wildcard' => true, + ), + )); + } + + public function execute(PhutilArgumentParser $args) { + $id = $args->getArg('daemon'); + if (!$id) { + throw new PhutilArgumentUsageException( + pht('You must specify the daemon ID to show logs for.')); + } else if (count($id) > 1) { + throw new PhutilArgumentUsageException( + pht('Specify exactly one daemon ID to show logs for.')); + } + $id = head($id); + + $daemon = id(new PhabricatorDaemonLogQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withIDs(array($id)) + ->executeOne(); + + if (!$daemon) { + throw new PhutilArgumentUsageException( + pht('No such daemon with id "%s"!', $id)); + } + + $console = PhutilConsole::getConsole(); + $logs = id(new PhabricatorDaemonLogEvent())->loadAllWhere( + 'logID = %d ORDER BY id ASC', + $daemon->getID()); + + $lines = array(); + foreach ($logs as $log) { + $text_lines = phutil_split_lines($log->getMessage(), $retain = false); + foreach ($text_lines as $line) { + $lines[] = array( + 'type' => $log->getLogType(), + 'date' => $log->getEpoch(), + 'data' => $line, + ); + } + } + + foreach ($lines as $line) { + $type = $line['type']; + $data = $line['data']; + $date = date('r', $line['date']); + + $console->writeOut( + "%s\n", + sprintf( + '[%s] %s %s', + $date, + $type, + $data)); + } + + return 0; + } + + +}