@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator

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

+87 -7
+3
src/__phutil_library_map__.php
··· 1222 1222 'DrydockResourceQuery' => 'applications/drydock/query/DrydockResourceQuery.php', 1223 1223 'DrydockResourceReclaimLogType' => 'applications/drydock/logtype/DrydockResourceReclaimLogType.php', 1224 1224 'DrydockResourceReleaseController' => 'applications/drydock/controller/DrydockResourceReleaseController.php', 1225 + 'DrydockResourceSearchConduitAPIMethod' => 'applications/drydock/conduit/DrydockResourceSearchConduitAPIMethod.php', 1225 1226 'DrydockResourceSearchEngine' => 'applications/drydock/query/DrydockResourceSearchEngine.php', 1226 1227 'DrydockResourceStatus' => 'applications/drydock/constants/DrydockResourceStatus.php', 1227 1228 'DrydockResourceUpdateWorker' => 'applications/drydock/worker/DrydockResourceUpdateWorker.php', ··· 7021 7022 'DrydockResource' => array( 7022 7023 'DrydockDAO', 7023 7024 'PhabricatorPolicyInterface', 7025 + 'PhabricatorConduitResultInterface', 7024 7026 ), 7025 7027 'DrydockResourceActivationFailureLogType' => 'DrydockLogType', 7026 7028 'DrydockResourceActivationYieldLogType' => 'DrydockLogType', ··· 7034 7036 'DrydockResourceQuery' => 'DrydockQuery', 7035 7037 'DrydockResourceReclaimLogType' => 'DrydockLogType', 7036 7038 'DrydockResourceReleaseController' => 'DrydockResourceController', 7039 + 'DrydockResourceSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', 7037 7040 'DrydockResourceSearchEngine' => 'PhabricatorApplicationSearchEngine', 7038 7041 'DrydockResourceStatus' => 'PhabricatorObjectStatus', 7039 7042 'DrydockResourceUpdateWorker' => 'DrydockWorker',
+18
src/applications/drydock/conduit/DrydockResourceSearchConduitAPIMethod.php
··· 1 + <?php 2 + 3 + final class DrydockResourceSearchConduitAPIMethod 4 + extends PhabricatorSearchEngineAPIMethod { 5 + 6 + public function getAPIMethodName() { 7 + return 'drydock.resource.search'; 8 + } 9 + 10 + public function newSearchEngine() { 11 + return new DrydockResourceSearchEngine(); 12 + } 13 + 14 + public function getMethodSummary() { 15 + return pht('Retrieve information about Drydock resources.'); 16 + } 17 + 18 + }
+9
src/applications/drydock/query/DrydockLeaseSearchEngine.php
··· 44 44 $query->withOwnerPHIDs($map['ownerPHIDs']); 45 45 } 46 46 47 + if ($map['resourcePHIDs']) { 48 + $query->withResourcePHIDs($map['resourcePHIDs']); 49 + } 50 + 47 51 return $query; 48 52 } 49 53 ··· 58 62 ->setKey('ownerPHIDs') 59 63 ->setAliases(array('owner', 'owners', 'ownerPHID')) 60 64 ->setDescription(pht('Search leases by owner.')), 65 + id(new PhabricatorPHIDsSearchField()) 66 + ->setLabel(pht('Resources')) 67 + ->setKey('resourcePHIDs') 68 + ->setAliases(array('resorucePHID', 'resource', 'resources')) 69 + ->setDescription(pht('Search leases by resource.')), 61 70 ); 62 71 } 63 72
+10 -6
src/applications/drydock/query/DrydockResourceQuery.php
··· 100 100 if ($this->ids !== null) { 101 101 $where[] = qsprintf( 102 102 $conn, 103 - 'id IN (%Ld)', 103 + 'resource.id IN (%Ld)', 104 104 $this->ids); 105 105 } 106 106 107 107 if ($this->phids !== null) { 108 108 $where[] = qsprintf( 109 109 $conn, 110 - 'phid IN (%Ls)', 110 + 'resource.phid IN (%Ls)', 111 111 $this->phids); 112 112 } 113 113 114 114 if ($this->types !== null) { 115 115 $where[] = qsprintf( 116 116 $conn, 117 - 'type IN (%Ls)', 117 + 'resource.type IN (%Ls)', 118 118 $this->types); 119 119 } 120 120 121 121 if ($this->statuses !== null) { 122 122 $where[] = qsprintf( 123 123 $conn, 124 - 'status IN (%Ls)', 124 + 'resource.status IN (%Ls)', 125 125 $this->statuses); 126 126 } 127 127 128 128 if ($this->blueprintPHIDs !== null) { 129 129 $where[] = qsprintf( 130 130 $conn, 131 - 'blueprintPHID IN (%Ls)', 131 + 'resource.blueprintPHID IN (%Ls)', 132 132 $this->blueprintPHIDs); 133 133 } 134 134 135 135 if ($this->datasourceQuery !== null) { 136 136 $where[] = qsprintf( 137 137 $conn, 138 - 'name LIKE %>', 138 + 'resource.name LIKE %>', 139 139 $this->datasourceQuery); 140 140 } 141 141 142 142 return $where; 143 + } 144 + 145 + protected function getPrimaryTableAlias() { 146 + return 'resource'; 143 147 } 144 148 145 149 }
+10
src/applications/drydock/query/DrydockResourceSearchEngine.php
··· 40 40 $query->withStatuses($map['statuses']); 41 41 } 42 42 43 + if ($map['blueprintPHIDs']) { 44 + $query->withBlueprintPHIDs($map['blueprintPHIDs']); 45 + } 46 + 43 47 return $query; 44 48 } 45 49 ··· 49 53 ->setLabel(pht('Statuses')) 50 54 ->setKey('statuses') 51 55 ->setOptions(DrydockResourceStatus::getStatusMap()), 56 + id(new PhabricatorPHIDsSearchField()) 57 + ->setLabel(pht('Blueprints')) 58 + ->setKey('blueprintPHIDs') 59 + ->setAliases(array('blueprintPHID', 'blueprints', 'blueprint')) 60 + ->setDescription( 61 + pht('Search for resources generated by particular blueprints.')), 52 62 ); 53 63 } 54 64
+37 -1
src/applications/drydock/storage/DrydockResource.php
··· 1 1 <?php 2 2 3 3 final class DrydockResource extends DrydockDAO 4 - implements PhabricatorPolicyInterface { 4 + implements 5 + PhabricatorPolicyInterface, 6 + PhabricatorConduitResultInterface { 5 7 6 8 protected $id; 7 9 protected $phid; ··· 340 342 public function describeAutomaticCapability($capability) { 341 343 return pht('Resources inherit the policies of their blueprints.'); 342 344 } 345 + 346 + 347 + /* -( PhabricatorConduitResultInterface )---------------------------------- */ 348 + 349 + 350 + public function getFieldSpecificationsForConduit() { 351 + return array( 352 + id(new PhabricatorConduitSearchFieldSpecification()) 353 + ->setKey('blueprintPHID') 354 + ->setType('phid') 355 + ->setDescription(pht('The blueprint which generated this resource.')), 356 + id(new PhabricatorConduitSearchFieldSpecification()) 357 + ->setKey('status') 358 + ->setType('map<string, wild>') 359 + ->setDescription(pht('Information about resource status.')), 360 + ); 361 + } 362 + 363 + public function getFieldValuesForConduit() { 364 + $status = $this->getStatus(); 365 + 366 + return array( 367 + 'blueprintPHID' => $this->getBlueprintPHID(), 368 + 'status' => array( 369 + 'value' => $status, 370 + 'name' => DrydockResourceStatus::getNameForStatus($status), 371 + ), 372 + ); 373 + } 374 + 375 + public function getConduitSearchAttachments() { 376 + return array(); 377 + } 378 + 343 379 }