Add UUID to families in Onionoo

This is an enhancement of the implementation proposed in #16599 (moved)

Some services that depend onOnionoorequire persistence in family data. For instance, some of the proposed features of Roster such as replacing Tor Weather require knowing when a certain relay goes down. Analogous to Tor spec proposal #242 (moved),Onionoo should implement such a scheme.

Put simply, the implementation would be as follows:

  • Each family will have some UUID, which would be tagged on all member relays (like an extra fingerprint).
  • A new relay will be tagged by its family's UUID by looking up the ID of older relatives.
  • There are two schemes for storing key-value based data. One is for looking up families via UUID, the other for looking up a UUID via relay fingerprint.

Unlike #16599 (moved), this implementation does not require any a priori information about the family. The UUIDs are guaranteed to be unique. Currently, Roster has a half-baked implementation of the above. Despite the simplicity of the implementation, the benefits are potentially great, as querying for and storing persistent data of families would become possible.

[1] https://trac.torproject.org/projects/tor/ticket/16599 

[2] https://gitweb.torproject.org/torspec.git/tree/proposals/242-better-families.txt 

On uniqueness of UUIDs

[3] https://stackoverflow.com/questions/703035/when-are-you-truly-forced-to-use-uuid-as-part-of-the-design/786541#786541 

Trac:
Username: seansaito