Something went wrong. Try again.
@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
Something went wrong. Try again.
5.1 kB · 202 lines
PHP
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203<?php
final class DiffusionPushLogListView extends AphrontView {
private $logs;
/** * @param array<PhabricatorRepositoryPushLog> $logs */ public function setLogs(array $logs) { assert_instances_of($logs, PhabricatorRepositoryPushLog::class); $this->logs = $logs; return $this; }
public function render() { $logs = $this->logs; $viewer = $this->getViewer();
$reject_herald = PhabricatorRepositoryPushLog::REJECT_HERALD;
$handle_phids = array(); foreach ($logs as $log) { $handle_phids[] = $log->getPusherPHID(); $device_phid = $log->getDevicePHID(); if ($device_phid) { $handle_phids[] = $device_phid; }
if ($log->getPushEvent()->getRejectCode() == $reject_herald) { $handle_phids[] = $log->getPushEvent()->getRejectDetails(); } }
$viewer->loadHandles($handle_phids);
// Only administrators can view remote addresses. $remotes_visible = $viewer->getIsAdmin();
$flag_map = PhabricatorRepositoryPushLog::getFlagDisplayNames(); $reject_map = PhabricatorRepositoryPushLog::getRejectCodeDisplayNames();
$rows = array(); $any_host = false; foreach ($logs as $log) { $repository = $log->getRepository(); $event = $log->getPushEvent();
if ($remotes_visible) { $remote_address = $event->getRemoteAddress(); } else { $remote_address = null; }
$event_id = $log->getPushEvent()->getID();
$old_ref_link = null; if ($log->getRefOld() != DiffusionCommitHookEngine::EMPTY_HASH) { $old_ref_link = phutil_tag( 'a', array( 'href' => $repository->getCommitURI($log->getRefOld()), ), $log->getRefOldShort()); }
$device_phid = $log->getDevicePHID(); if ($device_phid) { $device = $viewer->renderHandle($device_phid); $any_host = true; } else { $device = null; }
$flags = $log->getChangeFlags(); $flag_names = array(); foreach ($flag_map as $flag_key => $flag_name) { if (($flags & $flag_key) === $flag_key) { $flag_names[] = $flag_name; } } $flag_names = phutil_implode_html( phutil_tag('br'), $flag_names);
$reject_code = $event->getRejectCode();
if ($reject_code == $reject_herald) { $rule_phid = $event->getRejectDetails(); $handle = $viewer->renderHandle($rule_phid); $reject_label = pht('Blocked: %s', $handle); } else { $reject_label = idx( $reject_map, $reject_code, pht('Unknown ("%s")', $reject_code)); }
$host_wait = $this->formatMicroseconds($event->getHostWait()); $write_wait = $this->formatMicroseconds($event->getWriteWait()); $read_wait = $this->formatMicroseconds($event->getReadWait()); $hook_wait = $this->formatMicroseconds($event->getHookWait());
$rows[] = array( phutil_tag( 'a', array( 'href' => '/diffusion/pushlog/view/'.$event_id.'/', ), $event_id), phutil_tag( 'a', array( 'href' => $repository->getURI(), ), $repository->getDisplayName()), $viewer->renderHandle($log->getPusherPHID()), $remote_address, $event->getRemoteProtocol(), $device, $log->getRefType(), $log->getRefName(), $old_ref_link, phutil_tag( 'a', array( 'href' => $repository->getCommitURI($log->getRefNew()), ), $log->getRefNewShort()), $flag_names, $reject_label, $viewer->formatShortDateTime($log->getEpoch()), $host_wait, $write_wait, $read_wait, $hook_wait, ); }
$table = id(new AphrontTableView($rows)) ->setHeaders( array( pht('Push'), pht('Repository'), pht('Pusher'), pht('From'), pht('Via'), pht('Host'), pht('Type'), pht('Name'), pht('Old'), pht('New'), pht('Flags'), pht('Result'), pht('Date'), pht('Host Wait'), pht('Write Wait'), pht('Read Wait'), pht('Hook Wait'), )) ->setColumnClasses( array( '', '', '', '', '', '', '', 'wide', 'n', 'n', '', '', 'right', 'n right', 'n right', 'n right', 'n right', )) ->setColumnVisibility( array( true, true, true, $remotes_visible, true, $any_host, ));
return $table; }
private function formatMicroseconds($duration) { if ($duration === null) { return null; }
return pht('%sus', new PhutilNumber($duration)); }
}