mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-01 03:02:43 +01:00
2ef5b5321d
Summary: Ref T9252. Several general changes here: - Moves logs to use PHIDs instead of IDs. This generally improves flexibility (for example, it's a lot easier to render handles). - Adds `blueprintPHID` to logs. Although you can usually figure this out from the leasePHID or resourcePHID, it lets us query relevant logs on Blueprint views. - Instead of making logs a top-level object, make them strictly a sub-object of Blueprints, Resources and Leases. So you go Drydock > Lease > Logs, etc., to get to logs. - I might restore the "everything" view eventually, but it doesn't interact well with policies and I'm not sure it's very useful. A policy-violating `bin/drydock log` might be cleaner. - Policy-wise, we always show you that logs exist, we just don't show you log content if it's about something you can't see. This is similar to seeing restricted handles in other applications. - Instead of just having a message, give logs "type" + "data". This will let logs be more structured and translatable. This is similar to recent changes to Herald which seem to have worked well. Test Plan: Added some placeholder log writes, viewed those logs in the UI. {F855199} Reviewers: chad Reviewed By: chad Maniphest Tasks: T9252 Differential Revision: https://secure.phabricator.com/D14196
138 lines
3 KiB
PHP
138 lines
3 KiB
PHP
<?php
|
|
|
|
final class DrydockLogSearchEngine extends PhabricatorApplicationSearchEngine {
|
|
|
|
private $blueprint;
|
|
private $resource;
|
|
private $lease;
|
|
|
|
public function setBlueprint(DrydockBlueprint $blueprint) {
|
|
$this->blueprint = $blueprint;
|
|
return $this;
|
|
}
|
|
|
|
public function getBlueprint() {
|
|
return $this->blueprint;
|
|
}
|
|
|
|
public function setResource(DrydockResource $resource) {
|
|
$this->resource = $resource;
|
|
return $this;
|
|
}
|
|
|
|
public function getResource() {
|
|
return $this->resource;
|
|
}
|
|
|
|
public function setLease(DrydockLease $lease) {
|
|
$this->lease = $lease;
|
|
return $this;
|
|
}
|
|
|
|
public function getLease() {
|
|
return $this->lease;
|
|
}
|
|
|
|
public function canUseInPanelContext() {
|
|
// Prevent use on Dashboard panels since all log queries currently need a
|
|
// parent object and these don't seem particularly useful in any case.
|
|
return false;
|
|
}
|
|
|
|
public function getResultTypeDescription() {
|
|
return pht('Drydock Logs');
|
|
}
|
|
|
|
public function getApplicationClassName() {
|
|
return 'PhabricatorDrydockApplication';
|
|
}
|
|
|
|
public function newQuery() {
|
|
$query = new DrydockLogQuery();
|
|
|
|
$blueprint = $this->getBlueprint();
|
|
if ($blueprint) {
|
|
$query->withBlueprintPHIDs(array($blueprint->getPHID()));
|
|
}
|
|
|
|
$resource = $this->getResource();
|
|
if ($resource) {
|
|
$query->withResourcePHIDs(array($resource->getPHID()));
|
|
}
|
|
|
|
$lease = $this->getLease();
|
|
if ($lease) {
|
|
$query->withLeasePHIDs(array($lease->getPHID()));
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
|
|
protected function buildQueryFromParameters(array $map) {
|
|
$query = $this->newQuery();
|
|
|
|
return $query;
|
|
}
|
|
|
|
protected function buildCustomSearchFields() {
|
|
return array();
|
|
}
|
|
|
|
protected function getURI($path) {
|
|
$blueprint = $this->getBlueprint();
|
|
if ($blueprint) {
|
|
$id = $blueprint->getID();
|
|
return "/drydock/blueprint/{$id}/logs/{$path}";
|
|
}
|
|
|
|
$resource = $this->getResource();
|
|
if ($resource) {
|
|
$id = $resource->getID();
|
|
return "/drydock/resource/{$id}/logs/{$path}";
|
|
}
|
|
|
|
$lease = $this->getLease();
|
|
if ($lease) {
|
|
$id = $lease->getID();
|
|
return "/drydock/lease/{$id}/logs/{$path}";
|
|
}
|
|
|
|
throw new Exception(
|
|
pht(
|
|
'Search engine has no blueprint, resource, or lease.'));
|
|
}
|
|
|
|
protected function getBuiltinQueryNames() {
|
|
return array(
|
|
'all' => pht('All Logs'),
|
|
);
|
|
}
|
|
|
|
public function buildSavedQueryFromBuiltin($query_key) {
|
|
$query = $this->newSavedQuery();
|
|
$query->setQueryKey($query_key);
|
|
|
|
switch ($query_key) {
|
|
case 'all':
|
|
return $query;
|
|
}
|
|
|
|
return parent::buildSavedQueryFromBuiltin($query_key);
|
|
}
|
|
|
|
protected function renderResultList(
|
|
array $logs,
|
|
PhabricatorSavedQuery $query,
|
|
array $handles) {
|
|
|
|
$list = id(new DrydockLogListView())
|
|
->setUser($this->requireViewer())
|
|
->setLogs($logs);
|
|
|
|
$result = new PhabricatorApplicationSearchResultView();
|
|
$result->setTable($list);
|
|
|
|
return $result;
|
|
}
|
|
|
|
}
|