Improved dataloss subcommand
Current dataloss subcommand has multiple problems:
- It is not scoped to a virtual storage. This makes it hard to determine which virtual storages have data loss as multiple virtual storages might have a repository with the same relative path.
- It only considers dead jobs. Replication jobs always replicate the complete state of the repository, meaning that dead jobs followed by a succesful job do not indicate data loss.
- It works over a timerange rather than just showing the data loss from the previous write-enabled primary.
- It does not show which Gitaly node does not have the writes replicated.
This improved version of dataloss fixes all the points by
- Scoping the command to a virtual storage.
- Only considering the status of the latest replication job to a repository by storage.
- Dropping the timerange and reporting unreplicated writes from the previous write-enabled primary.
- Showing which storages are missing writes to which repositories.
Closes #2683 (closed) and #2766 (closed), partially addresses #2781 (closed)