/workspaces/astro/sol3-sdk/cpp/sol3/core/any_message_log_writer.h Source File

Space-ng SDK: /workspaces/astro/sol3-sdk/cpp/sol3/core/any_message_log_writer.h Source File
Space-ng SDK
any_message_log_writer.h
Go to the documentation of this file.
1 // Copyright (c) Space-ng, inc. All rights reserved.
2 
3 #pragma once
4 
7 #include "sol3/core/msg/message_log_config.h"
8 #include "sol3/core/msg/message_log_header.h"
11 
12 #include <flatbuffers/flatbuffers.h>
13 
14 #include <optional>
15 #include <string>
16 namespace sol3::core {
36  public:
39  msg::MessageLogConfigT const& cfg,
40  MessageSchema const& schema,
41  std::chrono::system_clock::time_point start_stamp);
42 
45 
50  void logMessage(
51  flatbuffers::span<uint8_t const> header_span,
52  flatbuffers::span<uint8_t const> payload_span);
53 
55  void commit(size_t message_count);
56 
58  void rollback();
59 
63  void write(char const* data, size_t size) override;
64 
68  cpp::fs::path closeLog(std::chrono::system_clock::time_point end_stamp);
69 
73  cpp::fs::path rotateLog(std::chrono::system_clock::time_point stamp);
74 
75  cpp::fs::path const& currentLogPath() const { return log_path_; }
76 
77  private:
78  void writeFileHeader(std::chrono::system_clock::time_point start_stamp);
79  void closeAndUpdateFileHeader(
80  std::chrono::system_clock::time_point end_stamp);
81 
82  msg::MessageLogConfigT log_config_;
83  MessagePort port_;
84  std::string host_id_;
85  std::string run_id_;
86  cpp::fs::path log_dir_;
87  cpp::fs::path log_path_;
88  std::chrono::system_clock::time_point log_start_stamp_;
89  std::optional<size_t> log_header_offset_;
90  uint64_t message_count_ = 0;
91  std::optional<SizeDelimitedLogWriter> writer_;
92 
93  MessageSchema payload_schema_;
94  msg::MessageLogHeaderT log_header_;
95  flatbuffers::FlatBufferBuilder log_header_builder_;
96 };
97 } // namespace sol3::core
Definition: any_message_log_writer.h:35
void commit(size_t message_count)
Commit N messages written via write().
void rollback()
Roll back to the last committed position.
cpp::fs::path rotateLog(std::chrono::system_clock::time_point stamp)
AnyMessageLogWriter(msg::MessageLogConfigT const &cfg, MessageSchema const &schema, std::chrono::system_clock::time_point start_stamp)
Construct a writer for the given config and initial epoch.
void logMessage(flatbuffers::span< uint8_t const > header_span, flatbuffers::span< uint8_t const > payload_span)
~AnyMessageLogWriter()
Flush and close any open log file.
cpp::fs::path const & currentLogPath() const
Definition: any_message_log_writer.h:75
void write(char const *data, size_t size) override
cpp::fs::path closeLog(std::chrono::system_clock::time_point end_stamp)
Minimal append-only byte sink for streaming writes.
Definition: stream_writer.h:9
Definition: message_port.h:19
Definition: message_schema.h:12
Definition: any_message_input.h:15