Add UUIDs for both the logger and parts

These aren't required to be used, but they help track which parts should
go together, and which parts came from the same logger.  The former
being more interesting than the latter, but if we are here, why not
track both?

Follow-up review will add a "sort bunch of files into corresponding
parts" function.

Change-Id: I1e17ae8617b267bc6c5d90ff9d7feb351c0c4b47
diff --git a/aos/events/logging/logger.h b/aos/events/logging/logger.h
index e599091..d4ed786 100644
--- a/aos/events/logging/logger.h
+++ b/aos/events/logging/logger.h
@@ -14,6 +14,7 @@
 #include "aos/events/logging/eigen_mpq.h"
 #include "aos/events/logging/logfile_utils.h"
 #include "aos/events/logging/logger_generated.h"
+#include "aos/events/logging/uuid.h"
 #include "aos/events/simulated_event_loop.h"
 #include "aos/network/message_bridge_server_generated.h"
 #include "aos/network/timestamp_filter.h"
@@ -30,7 +31,7 @@
   virtual ~LogNamer() {}
 
   virtual void WriteHeader(
-      const aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> &header,
+      aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header,
       const Node *node) = 0;
   virtual DetachedBufferWriter *MakeWriter(const Channel *channel) = 0;
 
@@ -39,13 +40,16 @@
       const Channel *channel, const Node *node) = 0;
   virtual void Rotate(
       const Node *node,
-      const aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader>
-          &header) = 0;
+      aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header) = 0;
   const std::vector<const Node *> &nodes() const { return nodes_; }
 
   const Node *node() const { return node_; }
 
  protected:
+  void UpdateHeader(
+      aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header,
+      const UUID &uuid, int part_id);
+
   const Node *const node_;
   std::vector<const Node *> nodes_;
 };
@@ -53,13 +57,17 @@
 class LocalLogNamer : public LogNamer {
  public:
   LocalLogNamer(std::string_view base_name, const Node *node)
-      : LogNamer(node), base_name_(base_name), data_writer_(OpenDataWriter()) {}
+      : LogNamer(node),
+        base_name_(base_name),
+        uuid_(UUID::Random()),
+        data_writer_(OpenDataWriter()) {}
 
   void WriteHeader(
-      const aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> &header,
+      aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header,
       const Node *node) override {
     CHECK_EQ(node, this->node());
-    data_writer_->WriteSizedFlatbuffer(header.full_span());
+    UpdateHeader(header, uuid_, part_number_);
+    data_writer_->WriteSizedFlatbuffer(header->full_span());
   }
 
   DetachedBufferWriter *MakeWriter(const Channel *channel) override {
@@ -68,12 +76,13 @@
   }
 
   void Rotate(const Node *node,
-              const aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader>
-                  &header) override {
+              aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header)
+      override {
     CHECK(node == this->node());
     ++part_number_;
     *data_writer_ = std::move(*OpenDataWriter());
-    data_writer_->WriteSizedFlatbuffer(header.full_span());
+    UpdateHeader(header, uuid_, part_number_);
+    data_writer_->WriteSizedFlatbuffer(header->full_span());
   }
 
   DetachedBufferWriter *MakeTimestampWriter(const Channel *channel) override {
@@ -98,6 +107,7 @@
         absl::StrCat(base_name_, ".part", part_number_, ".bfbs"));
   }
   const std::string base_name_;
+  const UUID uuid_;
   size_t part_number_ = 0;
   std::unique_ptr<DetachedBufferWriter> data_writer_;
 };
@@ -111,17 +121,18 @@
       : LogNamer(node),
         base_name_(base_name),
         configuration_(configuration),
+        uuid_(UUID::Random()),
         data_writer_(OpenDataWriter()) {}
 
   // Writes the header to all log files for a specific node.  This function
   // needs to be called after all the writers are created.
   void WriteHeader(
-      const aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> &header,
+      aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header,
       const Node *node) override;
 
   void Rotate(const Node *node,
-              const aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader>
-                  &header) override;
+              aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header)
+      override;
 
   // Makes a data logger for a specific channel.
   DetachedBufferWriter *MakeWriter(const Channel *channel) override {
@@ -221,6 +232,7 @@
     std::unique_ptr<DetachedBufferWriter> writer = nullptr;
     const Node *node;
     size_t part_number = 0;
+    UUID uuid = UUID::Random();
     std::function<void(const Channel *, DataWriter *)> rotate;
   };
 
@@ -258,6 +270,7 @@
 
   const std::string base_name_;
   const Configuration *const configuration_;
+  const UUID uuid_;
 
   size_t part_number_ = 0;
 
@@ -303,6 +316,7 @@
   void LogUntil(monotonic_clock::time_point t);
 
   EventLoop *event_loop_;
+  const UUID uuid_;
   std::unique_ptr<LogNamer> log_namer_;
 
   // Structure to track both a fetcher, and if the data fetched has been