On the Diffusion cluster status page, improve device sort order
Summary:
Ref T13216. See PHI943. When you have a large number of cluster bindings for a repository, the UI sorting can be a bit hard to manage.
One install that regularly cycles repository cluster devices had a couple dozen older disabled bindings, with the enabled bindings intermingled.
Sort the UI:
- enabled devices come first;
- in each group, sort by name.
Test Plan: Mixed disabled/enabled bindings, loaded {nav Diffusion > Repository > Storage} page with clustering configured. Before: relatively unhelpful sort order. After: more intuitive sort order.
Reviewers: amckinley
Reviewed By: amckinley
Maniphest Tasks: T13216
Differential Revision: https://secure.phabricator.com/D19813
This commit is contained in:
@@ -99,15 +99,20 @@ final class DiffusionRepositoryStorageManagementPanel
|
||||
|
||||
$versions = mpull($versions, null, 'getDevicePHID');
|
||||
|
||||
foreach ($bindings as $binding_group) {
|
||||
$all_disabled = true;
|
||||
foreach ($binding_group as $binding) {
|
||||
if (!$binding->getIsDisabled()) {
|
||||
$all_disabled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// List enabled devices first, then sort devices in each group by name.
|
||||
$sort = array();
|
||||
foreach ($bindings as $key => $binding_group) {
|
||||
$all_disabled = $this->isDisabledGroup($binding_group);
|
||||
|
||||
$sort[$key] = id(new PhutilSortVector())
|
||||
->addInt($all_disabled ? 1 : 0)
|
||||
->addString(head($binding_group)->getDevice()->getName());
|
||||
}
|
||||
$sort = msortv($sort, 'getSelf');
|
||||
$bindings = array_select_keys($bindings, array_keys($sort)) + $bindings;
|
||||
|
||||
foreach ($bindings as $binding_group) {
|
||||
$all_disabled = $this->isDisabledGroup($binding_group);
|
||||
$any_binding = head($binding_group);
|
||||
|
||||
if ($all_disabled) {
|
||||
@@ -228,4 +233,16 @@ final class DiffusionRepositoryStorageManagementPanel
|
||||
return $this->newBox(pht('Cluster Status'), $table);
|
||||
}
|
||||
|
||||
private function isDisabledGroup(array $binding_group) {
|
||||
assert_instances_of($binding_group, 'AlmanacBinding');
|
||||
|
||||
foreach ($binding_group as $binding) {
|
||||
if (!$binding->getIsDisabled()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user