16#include <google/protobuf/util/json_util.h>
17#include <glog/logging.h>
20#include "../ipc_stream_writer.hpp"
21#include "file_ipc_configuration.hpp"
23namespace presage::smartspectra::file_ipc {
34template<container::settings::IntegrationMode TIntegrationMode>
38 using typename Base::BackgroundContainer;
41 virtual ~FileIpcStreamWriter();
44 absl::Status
WriteStatus(
const presage::physiology::StatusValue& status)
override;
46 const presage::physiology::MetricsBuffer& metrics,
49 absl::Status
WriteEdgeMetrics(
const presage::physiology::Metrics& metrics, int64_t timestamp_us)
override;
50 absl::Status
WriteFrame(
const cv::Mat& frame, int64_t timestamp_us)
override;
51 void Close()
override;
53 absl::Status
Flush()
override;
65 absl::Status
WriteJsonLine(std::ofstream& stream,
const std::string& json_data);
71 const std::string& type,
72 const std::string& json_payload,
84 static std::string
JsonEscape(
const std::string& value);
89 static const google::protobuf::util::JsonPrintOptions&
GetJsonOptions();
101 std::filesystem::path base_directory_;
104 std::ofstream core_metrics_stream_;
105 std::ofstream edge_metrics_stream_;
106 std::ofstream status_stream_;
109 std::vector<char> core_metrics_buffer_;
110 std::vector<char> edge_metrics_buffer_;
111 std::vector<char> status_buffer_;
114 std::filesystem::path frames_dir_;
117 mutable std::mutex write_mutex_;
118 std::mutex frame_mutex_;
121 std::atomic<bool> is_operational_{
false};
124 std::filesystem::path recording_state_path_;
125 std::filesystem::path recording_command_path_;
128 tjhandle turbo_jpeg_compressor_ =
nullptr;
static std::string BuildStatusPayload(const presage::physiology::StatusValue &status)
Definition file_ipc_stream_writer_impl.hpp:345
absl::Status Flush() override
Definition file_ipc_stream_writer_impl.hpp:296
static const google::protobuf::util::JsonPrintOptions & GetJsonOptions()
Definition file_ipc_stream_writer_impl.hpp:386
void Close() override
Definition file_ipc_stream_writer_impl.hpp:272
absl::Status WriteJsonLine(std::ofstream &stream, const std::string &json_data)
Definition file_ipc_stream_writer_impl.hpp:314
absl::Status WriteCoreMetrics(const presage::physiology::MetricsBuffer &metrics, int64_t timestamp_us) override
Definition file_ipc_stream_writer_impl.hpp:142
absl::Status Initialize()
Definition file_ipc_stream_writer_impl.hpp:50
absl::Status WriteStatus(const presage::physiology::StatusValue &status) override
Definition file_ipc_stream_writer_impl.hpp:131
absl::Status CompressFrameWithTurboJpeg(const cv::Mat &frame, std::vector< unsigned char > &jpeg_data)
Definition file_ipc_stream_writer_impl.hpp:398
bool IsOperational() const override
Definition file_ipc_stream_writer_impl.hpp:291
static std::string BuildEnvelope(const std::string &type, const std::string &json_payload, int64_t timestamp_us)
Definition file_ipc_stream_writer_impl.hpp:330
absl::Status WriteEdgeMetrics(const presage::physiology::Metrics &metrics, int64_t timestamp_us) override
Definition file_ipc_stream_writer_impl.hpp:164
absl::Status WriteFrame(const cv::Mat &frame, int64_t timestamp_us) override
Definition file_ipc_stream_writer_impl.hpp:185
static std::string JsonEscape(const std::string &value)
Definition file_ipc_stream_writer_impl.hpp:359
Definition ipc_stream_writer.hpp:46
Definition file_ipc_configuration.hpp:27