@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+86
+1
scripts/daemon/manage_daemons.php
··· 23 23 new PhabricatorDaemonManagementRestartWorkflow(), 24 24 new PhabricatorDaemonManagementLaunchWorkflow(), 25 25 new PhabricatorDaemonManagementDebugWorkflow(), 26 + new PhabricatorDaemonManagementLogWorkflow(), 26 27 new PhutilHelpArgumentWorkflow(), 27 28 ); 28 29
+2
src/__phutil_library_map__.php
··· 1032 1032 'PhabricatorDaemonManagementDebugWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementDebugWorkflow.php', 1033 1033 'PhabricatorDaemonManagementLaunchWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLaunchWorkflow.php', 1034 1034 'PhabricatorDaemonManagementListWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementListWorkflow.php', 1035 + 'PhabricatorDaemonManagementLogWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLogWorkflow.php', 1035 1036 'PhabricatorDaemonManagementRestartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementRestartWorkflow.php', 1036 1037 'PhabricatorDaemonManagementStartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStartWorkflow.php', 1037 1038 'PhabricatorDaemonManagementStatusWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStatusWorkflow.php', ··· 3039 3040 'PhabricatorDaemonManagementDebugWorkflow' => 'PhabricatorDaemonManagementWorkflow', 3040 3041 'PhabricatorDaemonManagementLaunchWorkflow' => 'PhabricatorDaemonManagementWorkflow', 3041 3042 'PhabricatorDaemonManagementListWorkflow' => 'PhabricatorDaemonManagementWorkflow', 3043 + 'PhabricatorDaemonManagementLogWorkflow' => 'PhabricatorDaemonManagementWorkflow', 3042 3044 'PhabricatorDaemonManagementRestartWorkflow' => 'PhabricatorDaemonManagementWorkflow', 3043 3045 'PhabricatorDaemonManagementStartWorkflow' => 'PhabricatorDaemonManagementWorkflow', 3044 3046 'PhabricatorDaemonManagementStatusWorkflow' => 'PhabricatorDaemonManagementWorkflow',
+8
src/applications/daemon/controller/PhabricatorDaemonLogViewController.php
··· 91 91 $view = id(new PhabricatorPropertyListView()) 92 92 ->setUser($viewer); 93 93 94 + $id = $daemon->getID(); 94 95 $c_epoch = $daemon->getDateCreated(); 95 96 $u_epoch = $daemon->getDateModified(); 96 97 ··· 164 165 'style' => 'width: 100%; height: 12em;', 165 166 ), 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}")); 167 175 168 176 169 177 return $view;
+75
src/applications/daemon/management/PhabricatorDaemonManagementLogWorkflow.php
··· 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 + }