diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1222,6 +1222,7 @@ '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 @@ 'DrydockResource' => array( 'DrydockDAO', 'PhabricatorPolicyInterface', + 'PhabricatorConduitResultInterface', ), 'DrydockResourceActivationFailureLogType' => 'DrydockLogType', 'DrydockResourceActivationYieldLogType' => 'DrydockLogType', @@ -7034,6 +7036,7 @@ 'DrydockResourceQuery' => 'DrydockQuery', 'DrydockResourceReclaimLogType' => 'DrydockLogType', 'DrydockResourceReleaseController' => 'DrydockResourceController', + 'DrydockResourceSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', 'DrydockResourceSearchEngine' => 'PhabricatorApplicationSearchEngine', 'DrydockResourceStatus' => 'PhabricatorObjectStatus', 'DrydockResourceUpdateWorker' => 'DrydockWorker', diff --git a/src/applications/drydock/conduit/DrydockResourceSearchConduitAPIMethod.php b/src/applications/drydock/conduit/DrydockResourceSearchConduitAPIMethod.php new file mode 100644 --- /dev/null +++ b/src/applications/drydock/conduit/DrydockResourceSearchConduitAPIMethod.php @@ -0,0 +1,18 @@ +withOwnerPHIDs($map['ownerPHIDs']); } + if ($map['resourcePHIDs']) { + $query->withResourcePHIDs($map['resourcePHIDs']); + } + return $query; } @@ -58,6 +62,11 @@ ->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.')), ); } diff --git a/src/applications/drydock/query/DrydockResourceQuery.php b/src/applications/drydock/query/DrydockResourceQuery.php --- a/src/applications/drydock/query/DrydockResourceQuery.php +++ b/src/applications/drydock/query/DrydockResourceQuery.php @@ -100,46 +100,50 @@ 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'; + } + } diff --git a/src/applications/drydock/query/DrydockResourceSearchEngine.php b/src/applications/drydock/query/DrydockResourceSearchEngine.php --- a/src/applications/drydock/query/DrydockResourceSearchEngine.php +++ b/src/applications/drydock/query/DrydockResourceSearchEngine.php @@ -40,6 +40,10 @@ $query->withStatuses($map['statuses']); } + if ($map['blueprintPHIDs']) { + $query->withBlueprintPHIDs($map['blueprintPHIDs']); + } + return $query; } @@ -49,6 +53,12 @@ ->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.')), ); } diff --git a/src/applications/drydock/storage/DrydockResource.php b/src/applications/drydock/storage/DrydockResource.php --- a/src/applications/drydock/storage/DrydockResource.php +++ b/src/applications/drydock/storage/DrydockResource.php @@ -1,7 +1,9 @@ setKey('blueprintPHID') + ->setType('phid') + ->setDescription(pht('The blueprint which generated this resource.')), + id(new PhabricatorConduitSearchFieldSpecification()) + ->setKey('status') + ->setType('map') + ->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(); + } + }