Support data export on push logs

Summary: Depends on D18967. Ref T13049. Nothing too fancy going on here.

Test Plan: Exported push logs, looked at the export, seemed sensible.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13049

Differential Revision: https://secure.phabricator.com/D18968
This commit is contained in:
epriestley
2018-01-30 07:47:34 -08:00
parent a5b8be0316
commit 5b22412f24
4 changed files with 187 additions and 32 deletions

View File

@@ -82,4 +82,146 @@ final class PhabricatorRepositoryPushLogSearchEngine
->setTable($table);
}
protected function newExportFields() {
$viewer = $this->requireViewer();
$fields = array(
$fields[] = id(new PhabricatorIDExportField())
->setKey('pushID')
->setLabel(pht('Push ID')),
$fields[] = id(new PhabricatorStringExportField())
->setKey('protocol')
->setLabel(pht('Protocol')),
$fields[] = id(new PhabricatorPHIDExportField())
->setKey('repositoryPHID')
->setLabel(pht('Repository PHID')),
$fields[] = id(new PhabricatorStringExportField())
->setKey('repository')
->setLabel(pht('Repository')),
$fields[] = id(new PhabricatorPHIDExportField())
->setKey('pusherPHID')
->setLabel(pht('Pusher PHID')),
$fields[] = id(new PhabricatorStringExportField())
->setKey('pusher')
->setLabel(pht('Pusher')),
$fields[] = id(new PhabricatorPHIDExportField())
->setKey('devicePHID')
->setLabel(pht('Device PHID')),
$fields[] = id(new PhabricatorStringExportField())
->setKey('device')
->setLabel(pht('Device')),
$fields[] = id(new PhabricatorStringExportField())
->setKey('type')
->setLabel(pht('Ref Type')),
$fields[] = id(new PhabricatorStringExportField())
->setKey('name')
->setLabel(pht('Ref Name')),
$fields[] = id(new PhabricatorStringExportField())
->setKey('old')
->setLabel(pht('Ref Old')),
$fields[] = id(new PhabricatorStringExportField())
->setKey('new')
->setLabel(pht('Ref New')),
$fields[] = id(new PhabricatorIntExportField())
->setKey('flags')
->setLabel(pht('Flags')),
$fields[] = id(new PhabricatorStringListExportField())
->setKey('flagNames')
->setLabel(pht('Flag Names')),
$fields[] = id(new PhabricatorIntExportField())
->setKey('result')
->setLabel(pht('Result')),
$fields[] = id(new PhabricatorStringExportField())
->setKey('resultName')
->setLabel(pht('Result Name')),
);
if ($viewer->getIsAdmin()) {
$fields[] = id(new PhabricatorStringExportField())
->setKey('remoteAddress')
->setLabel(pht('Remote Address'));
}
return $fields;
}
protected function newExportData(array $logs) {
$viewer = $this->requireViewer();
$phids = array();
foreach ($logs as $log) {
$phids[] = $log->getPusherPHID();
$phids[] = $log->getDevicePHID();
$phids[] = $log->getPushEvent()->getRepositoryPHID();
}
$handles = $viewer->loadHandles($phids);
$flag_map = PhabricatorRepositoryPushLog::getFlagDisplayNames();
$reject_map = PhabricatorRepositoryPushLog::getRejectCodeDisplayNames();
$export = array();
foreach ($logs as $log) {
$event = $log->getPushEvent();
$repository_phid = $event->getRepositoryPHID();
if ($repository_phid) {
$repository_name = $handles[$repository_phid]->getName();
} else {
$repository_name = null;
}
$pusher_phid = $log->getPusherPHID();
if ($pusher_phid) {
$pusher_name = $handles[$pusher_phid]->getName();
} else {
$pusher_name = null;
}
$device_phid = $log->getDevicePHID();
if ($device_phid) {
$device_name = $handles[$device_phid]->getName();
} else {
$device_name = 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;
}
}
$result = $event->getRejectCode();
$result_name = idx($reject_map, $result, pht('Unknown ("%s")', $result));
$map = array(
'pushID' => $event->getID(),
'protocol' => $event->getRemoteProtocol(),
'repositoryPHID' => $repository_phid,
'repository' => $repository_name,
'pusherPHID' => $pusher_phid,
'pusher' => $pusher_name,
'devicePHID' => $device_phid,
'device' => $device_name,
'type' => $log->getRefType(),
'name' => $log->getRefName(),
'old' => $log->getRefOld(),
'new' => $log->getRefNew(),
'flags' => $flags,
'flagNames' => $flag_names,
'result' => $result,
'resultName' => $result_name,
);
if ($viewer->getIsAdmin()) {
$map['remoteAddress'] = $event->getRemoteAddress();
}
$export[] = $map;
}
return $export;
}
}