Spec for node list sorters and filters
Blueprint node-list-sorters-and-filters Change-Id: Ibd78db91186515ddf1f2a2883dd9e7b8c8032323
This commit is contained in:
parent
ff9c053984
commit
9f94b695b2
BIN
images/7.0/node-list-sorters-and-filters/applied-filters.png
Normal file
BIN
images/7.0/node-list-sorters-and-filters/applied-filters.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 50 KiB |
BIN
images/7.0/node-list-sorters-and-filters/applied-sorters.png
Normal file
BIN
images/7.0/node-list-sorters-and-filters/applied-sorters.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 73 KiB |
BIN
images/7.0/node-list-sorters-and-filters/default-filters.png
Normal file
BIN
images/7.0/node-list-sorters-and-filters/default-filters.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 80 KiB |
BIN
images/7.0/node-list-sorters-and-filters/filter-values.png
Normal file
BIN
images/7.0/node-list-sorters-and-filters/filter-values.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 85 KiB |
BIN
images/7.0/node-list-sorters-and-filters/number-filters.png
Normal file
BIN
images/7.0/node-list-sorters-and-filters/number-filters.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 74 KiB |
BIN
images/7.0/node-list-sorters-and-filters/sorters-panel.png
Normal file
BIN
images/7.0/node-list-sorters-and-filters/sorters-panel.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 77 KiB |
378
specs/7.0/node-list-sorters-and-filters.rst
Normal file
378
specs/7.0/node-list-sorters-and-filters.rst
Normal file
@ -0,0 +1,378 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
============================================
|
||||||
|
Node list sorters and filters in Fuel Web UI
|
||||||
|
============================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/fuel/+spec/node-list-sorters-and-filters
|
||||||
|
|
||||||
|
Implement possibility to sort and filter nodes based on its properties
|
||||||
|
(e.g. name, status, etc) so that user can work efficiently with large number
|
||||||
|
of nodes in Fuel UI
|
||||||
|
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Now user can filter nodes just by their name or MAC address using simple text
|
||||||
|
field only and no special sorters are available for node list. Nodes are
|
||||||
|
automatically sorted by their id attribute that is useless for the end user.
|
||||||
|
|
||||||
|
It is rather poor UI for managing large environments. There are many use cases
|
||||||
|
that are desirable to maintain in the Fuel UI. For example, an ability
|
||||||
|
to filter/sort nodes by their deployment status or online state would save
|
||||||
|
some time finding faulty/offline nodes in the list and performing bulk actions
|
||||||
|
(like Delete) on them.
|
||||||
|
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
We should introduce a form-based panels on node list screens in UI with
|
||||||
|
filtering and sorting controls based on node attributes.
|
||||||
|
|
||||||
|
If there is a predefined list of node attribute values then the filter control
|
||||||
|
should be a dropdown with list of checkboxes, representing these values, with
|
||||||
|
multiple choice support. If node attribute is a number, the dropdown should
|
||||||
|
contain two text fields to set minimum and maximum values for the attribute.
|
||||||
|
In other cases filtering is performed by a single text search field.
|
||||||
|
|
||||||
|
Filter bar has some default filters (will be described below) and new ones
|
||||||
|
can be added from the list of all possible filters. Non-default filters
|
||||||
|
can be deleted from the bar.
|
||||||
|
|
||||||
|
Applying the filters should be performed by click on Apply button in the
|
||||||
|
filter bar.
|
||||||
|
|
||||||
|
User should also have an ability to sort node list by multiple node attributes
|
||||||
|
both in forward (ascending) and reverse (descending) order. The order can be
|
||||||
|
set separately for each sorter (ascending is default).
|
||||||
|
|
||||||
|
Sorting bar has default sorter (will be described below) and new ones
|
||||||
|
can be added from the list of all possible sorters. Non-default sorters
|
||||||
|
can be deleted from the bar.
|
||||||
|
|
||||||
|
Applying the sorting is performed immediately by adding new sorter or changing
|
||||||
|
an order of the existing one.
|
||||||
|
|
||||||
|
Both sorting and filter bars should be extendable for adding custom user
|
||||||
|
filters or sorters and should have Clear All button in order
|
||||||
|
to help user immediately reset the selection to default and not to change
|
||||||
|
each control.
|
||||||
|
|
||||||
|
Node list should include info about filtering results: amount of filtered
|
||||||
|
nodes and names of applied filters with its selected values. Node list should
|
||||||
|
also include info about applied sorters.
|
||||||
|
|
||||||
|
Existing grouping control in node management panel will be totally replaced
|
||||||
|
by sorting functionality. Sorted node list should be grouped by the sorting
|
||||||
|
parameters to provide the user a UI for effective node group selection.
|
||||||
|
For example, if a node list is sorted by roles and deployment status, then
|
||||||
|
there will be groups by combination of roles and status in the list.
|
||||||
|
|
||||||
|
Sorting by node name, IP or MAC address does not involve grouping because
|
||||||
|
these attributes are unique for each node.
|
||||||
|
|
||||||
|
Below describes all possible filters for each of node list screens.
|
||||||
|
|
||||||
|
* screen of environment nodes
|
||||||
|
|
||||||
|
* **ROLE** filter is default filter and its values are the list of
|
||||||
|
environment release roles (release model ``roles`` attribute).
|
||||||
|
* **STATUS** filter is default filter and should have the following values:
|
||||||
|
|
||||||
|
* **ready** - checks node ``status`` attribute
|
||||||
|
* **pending addition** - checks node ``pending_addition`` attribute
|
||||||
|
* **pending deletion** - checks node ``pending_deletion`` attribute
|
||||||
|
* **provisioned** - checks node ``status`` attribute
|
||||||
|
* **provisioning** - checks node ``status`` attribute
|
||||||
|
* **deploying** - checks node ``status`` attribute
|
||||||
|
* **removing** - checks node ``status`` attribute
|
||||||
|
* **error** - checks node ``status`` attribute
|
||||||
|
* **offline** - checks node ``offline`` attribute
|
||||||
|
|
||||||
|
* **MANUFACTURER** filter values are the list of ``manufacturer`` attribute
|
||||||
|
value from all nodes on the screen.
|
||||||
|
* **CPU (real)** filter with ability to set number range of the real CPU
|
||||||
|
amount.
|
||||||
|
* **CPU (total)** filter with ability to set number range of the total CPU
|
||||||
|
amount.
|
||||||
|
* **HDD total size** filter with ability to set number range of node total
|
||||||
|
HDD size.
|
||||||
|
* **DISKS** filter with ability to set number range of node disks amount
|
||||||
|
(this filter is directly used to apply batch disks configuration).
|
||||||
|
* **RAM total size** filter with ability to set number range of node total
|
||||||
|
memory size.
|
||||||
|
* **INTERFACES** filter with ability to set number range of node interfaces
|
||||||
|
amount (this filter is directly used to apply batch interfaces
|
||||||
|
configuration).
|
||||||
|
|
||||||
|
* screen of unallocated nodes
|
||||||
|
|
||||||
|
* **STATUS** filter is default filter and should have the following values:
|
||||||
|
|
||||||
|
* **error** - checks node ``status`` attribute
|
||||||
|
* **offline** - checks node ``offline`` attribute
|
||||||
|
|
||||||
|
* **MANUFACTURER** filter values are the list of ``manufacturer`` attribute
|
||||||
|
value from all nodes on the screen.
|
||||||
|
* **CPU (real)** filter with ability to set number range of the real CPU
|
||||||
|
amount.
|
||||||
|
* **CPU (total)** filter with ability to set number range of the total CPU
|
||||||
|
amount.
|
||||||
|
* **HDD total size** filter with ability to set number range of node total
|
||||||
|
HDD size.
|
||||||
|
* **DISKS** filter with ability to set number range of node disks amount
|
||||||
|
(this filter is directly used to apply batch disks configuration).
|
||||||
|
* **RAM total size** filter with ability to set number range of node total
|
||||||
|
memory size.
|
||||||
|
* **INTERFACES** filter with ability to set number range of node interfaces
|
||||||
|
amount (this filter is directly used to apply batch interfaces
|
||||||
|
configuration).
|
||||||
|
|
||||||
|
Both environment nodes and unallocated nodes screens also should have
|
||||||
|
a simple **Search nodes** text field for case insensitive filtering nodes by
|
||||||
|
the following attributes:
|
||||||
|
|
||||||
|
* **name** - checks node ``name`` attribute
|
||||||
|
* **MAC address** - checks node ``mac`` attribute
|
||||||
|
* **IP address** - checks node ``ip`` attribute
|
||||||
|
|
||||||
|
Below describes all the possible sorters for each of node list screens.
|
||||||
|
|
||||||
|
* screen of environment nodes
|
||||||
|
|
||||||
|
* **roles** - default sorting. Nodes should have the same order as in
|
||||||
|
environment release role list.
|
||||||
|
* **name** - natural sorting by node ``name`` attribute ('123asd',
|
||||||
|
'19asd', '12345asd', 'asd123', 'asd12' should turn into '19asd', '123asd',
|
||||||
|
'12345asd', 'asd12', 'asd123').
|
||||||
|
* **status** - preffered order for sorting of nodes is 'ready',
|
||||||
|
'pending addition', 'pending deletion', 'provisioned', 'provisioning',
|
||||||
|
'deploying', 'removing', 'error' (node 'status', 'pending_addition',
|
||||||
|
'pending_deletion' attributes are checked).
|
||||||
|
* **offline** - nodes with falsy ``online`` attribute go first.
|
||||||
|
* **manufacturer** - natural sorting by node ``manufacturer`` attribute.
|
||||||
|
* **IP address** - natural sorting by node ``ip`` attribute.
|
||||||
|
* **MAC address** - natural sorting by node ``mac`` attribute.
|
||||||
|
* **CPU (real)** - numeric sorting by node real CPU amount.
|
||||||
|
* **CPU (total)** - numeric sorting by node total CPU amount.
|
||||||
|
* **HDD total size** - numeric sorting by node HDD total size (a sum of node
|
||||||
|
disk sizes).
|
||||||
|
* **disks amount and sizes** - multiple numeric sorting by amount of node
|
||||||
|
disks and its sizes (this sorting is directly used to apply batch disks
|
||||||
|
configuration).
|
||||||
|
* **RAM total size** - numeric sorting by node total memory size.
|
||||||
|
* **interfaces** - numeric sorting by amount of node interfaces (this
|
||||||
|
sorting is directly used to apply batch interfaces configuration).
|
||||||
|
|
||||||
|
* screen of unallocated nodes
|
||||||
|
|
||||||
|
* **status** - default sorting. Nodes with 'error' or 'offline' ``status``
|
||||||
|
attribute go last.
|
||||||
|
* **name** - natural sorting by node ``name`` attribute.
|
||||||
|
* **offline** - nodes with falsy ``online`` attribute go first.
|
||||||
|
* **manufacturer** - natural sorting by node ``manufacturer`` attribute.
|
||||||
|
* **IP address** - natural sorting by node ``ip`` attribute.
|
||||||
|
* **MAC address** - natural sorting by node ``mac`` attribute.
|
||||||
|
* **CPU (real)** - numeric sorting by node real CPU amount.
|
||||||
|
* **CPU (total)** - numeric sorting by node total CPU amount.
|
||||||
|
* **HDD total size** - numeric sorting by node HDD total size (a sum of node
|
||||||
|
disk sizes).
|
||||||
|
* **disks amount and sizes** - multiple numeric sorting by amount of node
|
||||||
|
disks and its sizes (this sorting is directly used to apply batch disks
|
||||||
|
configuration).
|
||||||
|
* **RAM total size** - numeric sorting by node total memory size.
|
||||||
|
* **interfaces** - numeric sorting by amount of node interfaces (this
|
||||||
|
sorting is directly used to apply batch interfaces configuration).
|
||||||
|
|
||||||
|
All the sorters above are described with the assumption of direct sorting
|
||||||
|
order (ascending).
|
||||||
|
|
||||||
|
**SCREEN OF ROLE MANAGEMENT** should not have neither filter nor sorting bar
|
||||||
|
because all nodes are always chosen on this screen and sorting by roles only
|
||||||
|
does make sense on the screen.
|
||||||
|
|
||||||
|
User selection for filters and sorters is not stored neither on the backend
|
||||||
|
nor in browser cookies for now. This task should be considered after
|
||||||
|
UI settings can be coupled with a particular user. In this case the user will
|
||||||
|
be able to keep his own UI state for every client (browser).
|
||||||
|
|
||||||
|
At the same time the selection (except the data from Search field) is
|
||||||
|
automatically translated to page location string now as a simple urlencoded
|
||||||
|
javascript object:
|
||||||
|
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
#cluster/1/nodes/list/{%22filter%22%3A{%22roles%22%3A[%22compute%22%2C
|
||||||
|
%22cinder%22]%2C%22status%22%3A[%22ready%22]}%2C%22sort%22%3A[{%22roles
|
||||||
|
%22%3A%22asc%22}%2C{%22status%22%3A%22desc%22}]}
|
||||||
|
|
||||||
|
User is able to use such url for keeping some filtering and sorting state.
|
||||||
|
|
||||||
|
There are mockups for the feature:
|
||||||
|
|
||||||
|
.. image:: ../../images/7.0/node-list-sorters-and-filters/default-filters.png
|
||||||
|
|
||||||
|
.. image:: ../../images/7.0/node-list-sorters-and-filters/number-filters.png
|
||||||
|
|
||||||
|
.. image:: ../../images/7.0/node-list-sorters-and-filters/filter-values.png
|
||||||
|
|
||||||
|
.. image:: ../../images/7.0/node-list-sorters-and-filters/applied-filters.png
|
||||||
|
|
||||||
|
.. image:: ../../images/7.0/node-list-sorters-and-filters/sorters-panel.png
|
||||||
|
|
||||||
|
.. image:: ../../images/7.0/node-list-sorters-and-filters/applied-sorters.png
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
The alternative here can be query-based language for filtering and sorting
|
||||||
|
nodes, that looks like:
|
||||||
|
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
status = error AND role in (controller, compute) and online = true
|
||||||
|
ORDER BY name ASC, role DESC
|
||||||
|
|
||||||
|
This method is rather flexible and requires no support when adding new node
|
||||||
|
properties. This feature is planned as the next iteration within node
|
||||||
|
management optimization task.
|
||||||
|
|
||||||
|
Node list sorting anf filtering can also be done on server side.
|
||||||
|
This way will allow not to transfer all nodes with their data each time through
|
||||||
|
REST API and will increase speed and velocity of server-client interactions.
|
||||||
|
This alternative is out of scope of this task because of the lack of resources
|
||||||
|
and the need of preliminary refactoring of Nailgun API.
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Existing ``grouping`` attribute of ``Cluster`` model is no longer needed.
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Filtering and sorting support in Nailgun API is highly desirable but should be
|
||||||
|
considered as a separate task. This specification is about UI changes only.
|
||||||
|
|
||||||
|
Upgrade impact
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Since we have a "Data model impact" we have to prepare an Alembic migration
|
||||||
|
that should update clusters to fit the new format.
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Plugin impact
|
||||||
|
-------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Infrastructure impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
|
||||||
|
* Julia Aranovich (jkirnosova@mirantis.com)
|
||||||
|
|
||||||
|
Developers:
|
||||||
|
|
||||||
|
* Julia Aranovich (jkirnosova@mirantis.com) - JS code
|
||||||
|
* Vitaly Kramskikh (vkramskikh@mirantis.com) - Python code
|
||||||
|
* Bogdan Dudko (bdudko@mirantis.com) - visual design
|
||||||
|
|
||||||
|
Mandatory Design Reviewer:
|
||||||
|
|
||||||
|
* Vitaly Kramskikh (vkramskikh@mirantis.com)
|
||||||
|
|
||||||
|
Approver:
|
||||||
|
|
||||||
|
* Sheena Gregson (sgregson@mirantis.com)
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Fix the list of node attributes to filter with all possible values.
|
||||||
|
* Fix the list of node attributes to sort with all possible values.
|
||||||
|
* Implement the new filter bar for node management.
|
||||||
|
* Implement the new sorting bar for node management.
|
||||||
|
* Automatically update page location string with user sorting and filtering
|
||||||
|
selection.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
* Filtering and sorting node list features should be covered by UI functional
|
||||||
|
tests.
|
||||||
|
* Python unit tests should be revisited because of removal of ``Cluster``
|
||||||
|
model ``grouping`` attribute.
|
||||||
|
|
||||||
|
Acceptance criteria
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* User can filter lists of nodes to show only nodes that are characterized
|
||||||
|
by specified parameters.
|
||||||
|
* User can sort nodes based on a parameter type (ascending, descending) or
|
||||||
|
on multiple parameters.
|
||||||
|
* Sorted node list is grouped by sorting parameters.
|
||||||
|
* Filtering and sorting selections are transformed to url location string.
|
||||||
|
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
The documentation should cover how the end user experience has been changed.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
#fuel-ui on freenode
|
Loading…
Reference in New Issue
Block a user