After the initial merge, we had to resolve a few build and packaging related issues, to streamline the ongoing development, testing and packaging of the new dashboard as part of the main Ceph project.
With these teething problems out of the way, the team has started working on several topics in parallel. A lot of these are "groundwork/foundation" kind of tasks, e.g. adding UI components and backend functionality that pave the way to enable the additional user-visible management features.
In the meanwhile, we have submitted over 80 additional pull requests, of which more than 60 have been merged already.
In this post, I'd like to summarize some of the highlights and notable improvements we're currently working on or that have been added to the code base already. This is by no means a complete list - it's more a subjective selection of changes that caught my attention.
It's also noteworthy that we've already received a number of pull requests from Ceph community members outside of the original openATTIC team that started this project - we're very grateful for the support and look forward to future contributions!
New backend improvements
Let's start with highlighting a few backend improvements that have already been merged:
PR#20870 added asynchronous tasks management, to support the execution of long-running tasks by dashboard backend controllers (e.g. RBD or Pool creation). The tasks are executed asynchronously and can be queried for their respective execution status. (The UI part of this is in review/test - see below)
PR#20873 added a browseable REST API that provides a simple HTML form to POST data to a RESTController's create() method via a web browser. This is primarily a tool for developers, but it's something that we found quite usable in openATTIC (where the Django REST framework provided a similar feature).
PR#20865 added support for creating Ceph Pools via the REST API - this is a prerequisite for the advanced pool management features of the dashboard.
PR#20751 added support for creating RBDs via the REST API, laying the foundation for the additional RBD management capabilities in the UI.
PR#21239 changed the type of request dispatcher used in the dashboard backend from the simple/default CherryPy dispatcher to the routes based dispatcher. This change was triggered by the necessity of having more control on the URL patterns for the controllers, in particular for REST controllers.
New UI improvements
We also added many UI components and widgets required for adding new mangement features:
PR#21128: A usage bar component that provides a visual representation of the utilization of a given object. It's already enabled on the cluster health page, the CephFS pool list and the list of OSDs.
PR#21087: A custom date pipe that can be used to format dates on table columns, e.g. when displaying creation dates.
PR#20972: A directive that can be used to provide a "size" input to the user, e.g. when defining the size of an RBD to be created.
PR#20971: A component that can be used to provide additional information to the user, e.g. to give some contextual help.
PR#20757 fixed a small glitch we inherited from dashboard v1 in which tool tips were cropped at the chart boundaries.
There are numerous other UI improvements and additional components that are being worked on.
The following features are still marked as "work in progress" or under code review, but close to getting merged:
PR#20962 will add the frontend support to the asynchronous task manager, providing a visual representation of all executing and most recently finished asynchronous tasks.
PR#20920 adds erasure code profile management to the backend (which is needed for the Pool management)
PR#21066 improves the exception handling in the backend.
Some other features that are currently being worked on, but no pull requests have been submitted yet:
- Block device (RBD) management: adding/removing/copying/snapshotting
- Ceph Pool management: create/delete pools and EC profiles
- A configuration settings editor
- Localization of the WebUI (we're currently evaluating POEditor vs. Transifex to facilitate translation support by the community)