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 @@ -17,6 +17,9 @@ $saved->setParameter( 'statuses', $this->readListFromRequest($request, 'statuses')); + $saved->setParameter( + 'types', + $this->readListFromRequest($request, 'types')); return $saved; } @@ -29,6 +32,11 @@ $query->withStatuses($statuses); } + $types = $saved->getParameter('types', array()); + if ($types) { + $query->withTypes($types); + } + return $query; } @@ -50,6 +58,26 @@ $form ->appendChild($status_control); + + $types = $saved->getParameter('types', array()); + + $implementations = + DrydockBlueprintImplementation::getAllBlueprintImplementations(); + $available_types = mpull($implementations, 'getType'); + $available_types = array_unique($available_types); + + $type_control = id(new AphrontFormCheckboxControl()) + ->setLabel(pht('Resource Type')); + foreach ($available_types as $type) { + $type_control->addCheckbox( + 'types[]', + $type, + $type, + in_array($type, $types)); + } + + $form + ->appendChild($type_control); } protected function getURI($path) { @@ -74,6 +102,15 @@ array( DrydockResourceStatus::STATUS_PENDING, DrydockResourceStatus::STATUS_OPEN, + ))->setParameter( + 'types', + array( + 'host', + 'working-copy', + // Exclude working copy cache resources by default + // as they are not very useful to look at (and they + // don't yet get cleaned up with the host resource + // disappears). )); case 'all': return $query; diff --git a/src/applications/drydock/view/DrydockResourceListView.php b/src/applications/drydock/view/DrydockResourceListView.php --- a/src/applications/drydock/view/DrydockResourceListView.php +++ b/src/applications/drydock/view/DrydockResourceListView.php @@ -14,6 +14,12 @@ $resources = $this->resources; $viewer = $this->getUser(); + $blueprint_handles = id(new PhabricatorHandleQuery()) + ->setViewer($viewer) + ->withPHIDs(mpull($resources, 'getBlueprintPHID')) + ->execute(); + $blueprint_handles = mpull($blueprint_handles, null, 'getPHID'); + $view = new PHUIObjectItemListView(); foreach ($resources as $resource) { $name = pht('Resource %d', $resource->getID()).': '.$resource->getName(); @@ -25,6 +31,13 @@ $status = DrydockResourceStatus::getNameForStatus($resource->getStatus()); $item->addAttribute($status); + $blueprint_handle = idx( + $blueprint_handles, + $resource->getBlueprintPHID()); + if ($blueprint_handle !== null) { + $item->addAttribute($blueprint_handle->renderLink()); + } + switch ($resource->getStatus()) { case DrydockResourceStatus::STATUS_ALLOCATING: case DrydockResourceStatus::STATUS_PENDING: