mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-09 16:32:39 +01:00
Implement "drydock.resource.search"
Summary: Fixes T13383. Provide a basic "drydock.resource.search". Also allow "drydock.lease.search" to be queried by resource PHID. Test Plan: Called "drydock.resource.search" and "drydock.lease.search" with various constraints. Subscribers: PHID-OPKG-gm6ozazyms6q6i22gyam Maniphest Tasks: T13383 Differential Revision: https://secure.phabricator.com/D20723
This commit is contained in:
parent
803eb29c71
commit
721a86401f
6 changed files with 87 additions and 7 deletions
|
@ -1222,6 +1222,7 @@ phutil_register_library_map(array(
|
|||
'DrydockResourceQuery' => 'applications/drydock/query/DrydockResourceQuery.php',
|
||||
'DrydockResourceReclaimLogType' => 'applications/drydock/logtype/DrydockResourceReclaimLogType.php',
|
||||
'DrydockResourceReleaseController' => 'applications/drydock/controller/DrydockResourceReleaseController.php',
|
||||
'DrydockResourceSearchConduitAPIMethod' => 'applications/drydock/conduit/DrydockResourceSearchConduitAPIMethod.php',
|
||||
'DrydockResourceSearchEngine' => 'applications/drydock/query/DrydockResourceSearchEngine.php',
|
||||
'DrydockResourceStatus' => 'applications/drydock/constants/DrydockResourceStatus.php',
|
||||
'DrydockResourceUpdateWorker' => 'applications/drydock/worker/DrydockResourceUpdateWorker.php',
|
||||
|
@ -7021,6 +7022,7 @@ phutil_register_library_map(array(
|
|||
'DrydockResource' => array(
|
||||
'DrydockDAO',
|
||||
'PhabricatorPolicyInterface',
|
||||
'PhabricatorConduitResultInterface',
|
||||
),
|
||||
'DrydockResourceActivationFailureLogType' => 'DrydockLogType',
|
||||
'DrydockResourceActivationYieldLogType' => 'DrydockLogType',
|
||||
|
@ -7034,6 +7036,7 @@ phutil_register_library_map(array(
|
|||
'DrydockResourceQuery' => 'DrydockQuery',
|
||||
'DrydockResourceReclaimLogType' => 'DrydockLogType',
|
||||
'DrydockResourceReleaseController' => 'DrydockResourceController',
|
||||
'DrydockResourceSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
|
||||
'DrydockResourceSearchEngine' => 'PhabricatorApplicationSearchEngine',
|
||||
'DrydockResourceStatus' => 'PhabricatorObjectStatus',
|
||||
'DrydockResourceUpdateWorker' => 'DrydockWorker',
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
final class DrydockResourceSearchConduitAPIMethod
|
||||
extends PhabricatorSearchEngineAPIMethod {
|
||||
|
||||
public function getAPIMethodName() {
|
||||
return 'drydock.resource.search';
|
||||
}
|
||||
|
||||
public function newSearchEngine() {
|
||||
return new DrydockResourceSearchEngine();
|
||||
}
|
||||
|
||||
public function getMethodSummary() {
|
||||
return pht('Retrieve information about Drydock resources.');
|
||||
}
|
||||
|
||||
}
|
|
@ -44,6 +44,10 @@ final class DrydockLeaseSearchEngine
|
|||
$query->withOwnerPHIDs($map['ownerPHIDs']);
|
||||
}
|
||||
|
||||
if ($map['resourcePHIDs']) {
|
||||
$query->withResourcePHIDs($map['resourcePHIDs']);
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
|
@ -58,6 +62,11 @@ final class DrydockLeaseSearchEngine
|
|||
->setKey('ownerPHIDs')
|
||||
->setAliases(array('owner', 'owners', 'ownerPHID'))
|
||||
->setDescription(pht('Search leases by owner.')),
|
||||
id(new PhabricatorPHIDsSearchField())
|
||||
->setLabel(pht('Resources'))
|
||||
->setKey('resourcePHIDs')
|
||||
->setAliases(array('resorucePHID', 'resource', 'resources'))
|
||||
->setDescription(pht('Search leases by resource.')),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -100,46 +100,50 @@ final class DrydockResourceQuery extends DrydockQuery {
|
|||
if ($this->ids !== null) {
|
||||
$where[] = qsprintf(
|
||||
$conn,
|
||||
'id IN (%Ld)',
|
||||
'resource.id IN (%Ld)',
|
||||
$this->ids);
|
||||
}
|
||||
|
||||
if ($this->phids !== null) {
|
||||
$where[] = qsprintf(
|
||||
$conn,
|
||||
'phid IN (%Ls)',
|
||||
'resource.phid IN (%Ls)',
|
||||
$this->phids);
|
||||
}
|
||||
|
||||
if ($this->types !== null) {
|
||||
$where[] = qsprintf(
|
||||
$conn,
|
||||
'type IN (%Ls)',
|
||||
'resource.type IN (%Ls)',
|
||||
$this->types);
|
||||
}
|
||||
|
||||
if ($this->statuses !== null) {
|
||||
$where[] = qsprintf(
|
||||
$conn,
|
||||
'status IN (%Ls)',
|
||||
'resource.status IN (%Ls)',
|
||||
$this->statuses);
|
||||
}
|
||||
|
||||
if ($this->blueprintPHIDs !== null) {
|
||||
$where[] = qsprintf(
|
||||
$conn,
|
||||
'blueprintPHID IN (%Ls)',
|
||||
'resource.blueprintPHID IN (%Ls)',
|
||||
$this->blueprintPHIDs);
|
||||
}
|
||||
|
||||
if ($this->datasourceQuery !== null) {
|
||||
$where[] = qsprintf(
|
||||
$conn,
|
||||
'name LIKE %>',
|
||||
'resource.name LIKE %>',
|
||||
$this->datasourceQuery);
|
||||
}
|
||||
|
||||
return $where;
|
||||
}
|
||||
|
||||
protected function getPrimaryTableAlias() {
|
||||
return 'resource';
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -40,6 +40,10 @@ final class DrydockResourceSearchEngine
|
|||
$query->withStatuses($map['statuses']);
|
||||
}
|
||||
|
||||
if ($map['blueprintPHIDs']) {
|
||||
$query->withBlueprintPHIDs($map['blueprintPHIDs']);
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
|
@ -49,6 +53,12 @@ final class DrydockResourceSearchEngine
|
|||
->setLabel(pht('Statuses'))
|
||||
->setKey('statuses')
|
||||
->setOptions(DrydockResourceStatus::getStatusMap()),
|
||||
id(new PhabricatorPHIDsSearchField())
|
||||
->setLabel(pht('Blueprints'))
|
||||
->setKey('blueprintPHIDs')
|
||||
->setAliases(array('blueprintPHID', 'blueprints', 'blueprint'))
|
||||
->setDescription(
|
||||
pht('Search for resources generated by particular blueprints.')),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
<?php
|
||||
|
||||
final class DrydockResource extends DrydockDAO
|
||||
implements PhabricatorPolicyInterface {
|
||||
implements
|
||||
PhabricatorPolicyInterface,
|
||||
PhabricatorConduitResultInterface {
|
||||
|
||||
protected $id;
|
||||
protected $phid;
|
||||
|
@ -340,4 +342,38 @@ final class DrydockResource extends DrydockDAO
|
|||
public function describeAutomaticCapability($capability) {
|
||||
return pht('Resources inherit the policies of their blueprints.');
|
||||
}
|
||||
|
||||
|
||||
/* -( PhabricatorConduitResultInterface )---------------------------------- */
|
||||
|
||||
|
||||
public function getFieldSpecificationsForConduit() {
|
||||
return array(
|
||||
id(new PhabricatorConduitSearchFieldSpecification())
|
||||
->setKey('blueprintPHID')
|
||||
->setType('phid')
|
||||
->setDescription(pht('The blueprint which generated this resource.')),
|
||||
id(new PhabricatorConduitSearchFieldSpecification())
|
||||
->setKey('status')
|
||||
->setType('map<string, wild>')
|
||||
->setDescription(pht('Information about resource status.')),
|
||||
);
|
||||
}
|
||||
|
||||
public function getFieldValuesForConduit() {
|
||||
$status = $this->getStatus();
|
||||
|
||||
return array(
|
||||
'blueprintPHID' => $this->getBlueprintPHID(),
|
||||
'status' => array(
|
||||
'value' => $status,
|
||||
'name' => DrydockResourceStatus::getNameForStatus($status),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
public function getConduitSearchAttachments() {
|
||||
return array();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue