Path: blob/master/src/applications/diffusion/view/DiffusionPushLogListView.php
12242 views
<?php12final class DiffusionPushLogListView extends AphrontView {34private $logs;56public function setLogs(array $logs) {7assert_instances_of($logs, 'PhabricatorRepositoryPushLog');8$this->logs = $logs;9return $this;10}1112public function render() {13$logs = $this->logs;14$viewer = $this->getViewer();1516$reject_herald = PhabricatorRepositoryPushLog::REJECT_HERALD;1718$handle_phids = array();19foreach ($logs as $log) {20$handle_phids[] = $log->getPusherPHID();21$device_phid = $log->getDevicePHID();22if ($device_phid) {23$handle_phids[] = $device_phid;24}2526if ($log->getPushEvent()->getRejectCode() == $reject_herald) {27$handle_phids[] = $log->getPushEvent()->getRejectDetails();28}29}3031$viewer->loadHandles($handle_phids);3233// Only administrators can view remote addresses.34$remotes_visible = $viewer->getIsAdmin();3536$flag_map = PhabricatorRepositoryPushLog::getFlagDisplayNames();37$reject_map = PhabricatorRepositoryPushLog::getRejectCodeDisplayNames();3839$rows = array();40$any_host = false;41foreach ($logs as $log) {42$repository = $log->getRepository();43$event = $log->getPushEvent();4445if ($remotes_visible) {46$remote_address = $event->getRemoteAddress();47} else {48$remote_address = null;49}5051$event_id = $log->getPushEvent()->getID();5253$old_ref_link = null;54if ($log->getRefOld() != DiffusionCommitHookEngine::EMPTY_HASH) {55$old_ref_link = phutil_tag(56'a',57array(58'href' => $repository->getCommitURI($log->getRefOld()),59),60$log->getRefOldShort());61}6263$device_phid = $log->getDevicePHID();64if ($device_phid) {65$device = $viewer->renderHandle($device_phid);66$any_host = true;67} else {68$device = null;69}7071$flags = $log->getChangeFlags();72$flag_names = array();73foreach ($flag_map as $flag_key => $flag_name) {74if (($flags & $flag_key) === $flag_key) {75$flag_names[] = $flag_name;76}77}78$flag_names = phutil_implode_html(79phutil_tag('br'),80$flag_names);8182$reject_code = $event->getRejectCode();8384if ($reject_code == $reject_herald) {85$rule_phid = $event->getRejectDetails();86$handle = $viewer->renderHandle($rule_phid);87$reject_label = pht('Blocked: %s', $handle);88} else {89$reject_label = idx(90$reject_map,91$reject_code,92pht('Unknown ("%s")', $reject_code));93}9495$host_wait = $this->formatMicroseconds($event->getHostWait());96$write_wait = $this->formatMicroseconds($event->getWriteWait());97$read_wait = $this->formatMicroseconds($event->getReadWait());98$hook_wait = $this->formatMicroseconds($event->getHookWait());99100$rows[] = array(101phutil_tag(102'a',103array(104'href' => '/diffusion/pushlog/view/'.$event_id.'/',105),106$event_id),107phutil_tag(108'a',109array(110'href' => $repository->getURI(),111),112$repository->getDisplayName()),113$viewer->renderHandle($log->getPusherPHID()),114$remote_address,115$event->getRemoteProtocol(),116$device,117$log->getRefType(),118$log->getRefName(),119$old_ref_link,120phutil_tag(121'a',122array(123'href' => $repository->getCommitURI($log->getRefNew()),124),125$log->getRefNewShort()),126$flag_names,127$reject_label,128$viewer->formatShortDateTime($log->getEpoch()),129$host_wait,130$write_wait,131$read_wait,132$hook_wait,133);134}135136$table = id(new AphrontTableView($rows))137->setHeaders(138array(139pht('Push'),140pht('Repository'),141pht('Pusher'),142pht('From'),143pht('Via'),144pht('Host'),145pht('Type'),146pht('Name'),147pht('Old'),148pht('New'),149pht('Flags'),150pht('Result'),151pht('Date'),152pht('Host Wait'),153pht('Write Wait'),154pht('Read Wait'),155pht('Hook Wait'),156))157->setColumnClasses(158array(159'',160'',161'',162'',163'',164'',165'',166'wide',167'n',168'n',169'',170'',171'right',172'n right',173'n right',174'n right',175'n right',176))177->setColumnVisibility(178array(179true,180true,181true,182$remotes_visible,183true,184$any_host,185));186187return $table;188}189190private function formatMicroseconds($duration) {191if ($duration === null) {192return null;193}194195return pht('%sus', new PhutilNumber($duration));196}197198}199200201