bag_writer.h
Go to the documentation of this file.
1 // Output thread
2 // Author: Max Schwarz <max.schwarz@ais.uni-bonn.de>
3 
4 #ifndef ROSBAG_FANCY_BAG_WRITER_H
5 #define ROSBAG_FANCY_BAG_WRITER_H
6 
7 #include <atomic>
8 #include <string>
9 #include <thread>
10 #include <mutex>
11 #include <condition_variable>
12 
13 #include <rosbag/bag.h>
14 #include <ros/steady_timer.h>
15 
16 #include <tf2_ros/buffer.h>
17 
18 namespace rosbag_fancy
19 {
20 
21 class MessageQueue;
22 
23 class BagWriter
24 {
25 public:
26  enum class Naming
27  {
28  Verbatim,
30  };
31 
32  explicit BagWriter(
33  MessageQueue& queue, const std::string& filename, Naming namingMode,
34  std::uint64_t splitSizeInBytes, std::uint64_t deleteOldAtInBytes
35  );
36  ~BagWriter();
37 
38  void start();
39  void stop();
40  bool running() const
41  { return m_running; }
42 
43  std::uint64_t sizeInBytes() const
44  { return m_sizeInBytes; }
45 
46  std::uint64_t splitSizeInBytes() const
47  { return m_splitSizeInBytes; }
48 
49  std::uint64_t directorySizeInBytes() const
50  { return m_directorySizeInBytes; }
51 
52  std::uint64_t deleteOldAtInBytes() const
53  { return m_deleteOldAtInBytes; }
54 
55  std::uint64_t freeSpace() const
56  { return m_freeSpace; }
57 
58  std::string bagfileName() const
59  { return m_expandedFilename; }
60 
61  const std::vector<std::uint64_t>& messageCounts() const
62  { return m_messageCounts; }
63 
64  const std::vector<std::uint64_t>& byteCounts() const
65  { return m_byteCounts; }
66 
68  { return m_compressionType; }
69 
71 private:
72  void run();
73  void cleanupThread();
74 
75  void checkFreeSpace();
76 
78 
79  std::string m_filename;
81 
82  std::string m_expandedFilename;
83 
84  bool m_isReopeningBag{false};
85  std::uint64_t m_splitSizeInBytes = 0;
86  std::uint64_t m_deleteOldAtInBytes = 0;
87  std::atomic<std::uint64_t> m_directorySizeInBytes{0};
88 
90  bool m_bagOpen{false};
91 
92  std::thread m_thread;
93  std::thread m_cleanup_thread;
94 
95  bool m_shouldShutdown{false};
96 
97  std::atomic<std::uint64_t> m_sizeInBytes{0};
98  std::uint64_t m_freeSpace = 0;
99 
101 
102  std::atomic<bool> m_running{false};
103  std::mutex m_mutex;
104 
105  std::mutex m_cleanupMutex;
106  std::condition_variable m_cleanupCondition;
107 
110 
111  std::vector<std::uint64_t> m_messageCounts;
112  std::vector<std::uint64_t> m_byteCounts;
113 
115 };
116 
117 }
118 
119 #endif
rosbag_fancy::MessageQueue
Definition: message_queue.h:23
rosbag_fancy::BagWriter::m_bag
rosbag::Bag m_bag
Definition: bag_writer.h:89
rosbag_fancy::BagWriter::m_freeSpace
std::uint64_t m_freeSpace
Definition: bag_writer.h:98
rosbag_fancy::BagWriter::m_expandedFilename
std::string m_expandedFilename
Definition: bag_writer.h:82
rosbag_fancy::BagWriter::deleteOldAtInBytes
std::uint64_t deleteOldAtInBytes() const
Definition: bag_writer.h:52
rosbag::Bag
rosbag_fancy::BagWriter::BagWriter
BagWriter(MessageQueue &queue, const std::string &filename, Naming namingMode, std::uint64_t splitSizeInBytes, std::uint64_t deleteOldAtInBytes)
Definition: bag_writer.cpp:87
boost::shared_ptr
rosbag_fancy::BagWriter::m_isReopeningBag
bool m_isReopeningBag
Definition: bag_writer.h:84
rosbag_fancy::BagWriter::compression
rosbag::compression::CompressionType compression() const
Definition: bag_writer.h:67
rosbag_fancy::BagWriter::stop
void stop()
Definition: bag_writer.cpp:249
rosbag_fancy::BagWriter::freeSpace
std::uint64_t freeSpace() const
Definition: bag_writer.h:55
rosbag_fancy
Definition: bag_reader.cpp:240
rosbag_fancy::BagWriter::Naming
Naming
Definition: bag_writer.h:26
buffer.h
rosbag_fancy::BagWriter::m_messageCounts
std::vector< std::uint64_t > m_messageCounts
Definition: bag_writer.h:111
bag.h
rosbag_fancy::BagWriter::sizeInBytes
std::uint64_t sizeInBytes() const
Definition: bag_writer.h:43
rosbag_fancy::BagWriter::messageCounts
const std::vector< std::uint64_t > & messageCounts() const
Definition: bag_writer.h:61
rosbag_fancy::BagWriter::m_mutex
std::mutex m_mutex
Definition: bag_writer.h:103
rosbag_fancy::BagWriter::bagfileName
std::string bagfileName() const
Definition: bag_writer.h:58
steady_timer.h
ros::SteadyTimer
rosbag_fancy::BagWriter::Naming::AppendTimestamp
@ AppendTimestamp
rosbag_fancy::BagWriter::m_namingMode
Naming m_namingMode
Definition: bag_writer.h:80
rosbag_fancy::BagWriter::cleanupThread
void cleanupThread()
Definition: bag_writer.cpp:278
rosbag_fancy::BagWriter::m_running
std::atomic< bool > m_running
Definition: bag_writer.h:102
rosbag_fancy::BagWriter::start
void start()
Definition: bag_writer.cpp:175
rosbag_fancy::BagWriter::m_sizeInBytes
std::atomic< std::uint64_t > m_sizeInBytes
Definition: bag_writer.h:97
rosbag_fancy::BagWriter::checkFreeSpace
void checkFreeSpace()
Definition: bag_writer.cpp:268
rosbag_fancy::BagWriter::m_bagOpen
bool m_bagOpen
Definition: bag_writer.h:90
tf2_ros::Buffer
rosbag_fancy::BagWriter::m_shouldShutdown
bool m_shouldShutdown
Definition: bag_writer.h:95
rosbag_fancy::BagWriter::directorySizeInBytes
std::uint64_t directorySizeInBytes() const
Definition: bag_writer.h:49
rosbag_fancy::BagWriter::m_compressionType
rosbag::compression::CompressionType m_compressionType
Definition: bag_writer.h:114
rosbag_fancy::BagWriter::m_freeSpaceTimer
ros::SteadyTimer m_freeSpaceTimer
Definition: bag_writer.h:100
rosbag_fancy::BagWriter::splitSizeInBytes
std::uint64_t splitSizeInBytes() const
Definition: bag_writer.h:46
rosbag_fancy::BagWriter::run
void run()
Definition: bag_writer.cpp:130
rosbag::compression::CompressionType
CompressionType
rosbag_fancy::BagWriter
Definition: bag_writer.h:23
rosbag_fancy::BagWriter::setCompression
void setCompression(rosbag::compression::CompressionType type)
Definition: bag_writer.cpp:336
rosbag_fancy::BagWriter::running
bool running() const
Definition: bag_writer.h:40
rosbag_fancy::BagWriter::m_cleanupMutex
std::mutex m_cleanupMutex
Definition: bag_writer.h:105
rosbag::compression::Uncompressed
Uncompressed
rosbag_fancy::BagWriter::m_deleteOldAtInBytes
std::uint64_t m_deleteOldAtInBytes
Definition: bag_writer.h:86
rosbag_fancy::BagWriter::m_tf_header
boost::shared_ptr< std::map< std::string, std::string > > m_tf_header
Definition: bag_writer.h:109
rosbag_fancy::BagWriter::m_filename
std::string m_filename
Definition: bag_writer.h:79
rosbag_fancy::BagWriter::m_tf_buf
tf2_ros::Buffer m_tf_buf
Definition: bag_writer.h:108
rosbag_fancy::BagWriter::m_directorySizeInBytes
std::atomic< std::uint64_t > m_directorySizeInBytes
Definition: bag_writer.h:87
rosbag_fancy::BagWriter::Naming::Verbatim
@ Verbatim
rosbag_fancy::BagWriter::~BagWriter
~BagWriter()
Definition: bag_writer.cpp:117
rosbag_fancy::BagWriter::m_cleanupCondition
std::condition_variable m_cleanupCondition
Definition: bag_writer.h:106
rosbag_fancy::BagWriter::m_cleanup_thread
std::thread m_cleanup_thread
Definition: bag_writer.h:93
rosbag_fancy::BagWriter::m_byteCounts
std::vector< std::uint64_t > m_byteCounts
Definition: bag_writer.h:112
rosbag_fancy::BagWriter::m_queue
MessageQueue & m_queue
Definition: bag_writer.h:77
rosbag_fancy::BagWriter::byteCounts
const std::vector< std::uint64_t > & byteCounts() const
Definition: bag_writer.h:64
rosbag_fancy::BagWriter::m_thread
std::thread m_thread
Definition: bag_writer.h:92
rosbag_fancy::BagWriter::m_splitSizeInBytes
std::uint64_t m_splitSizeInBytes
Definition: bag_writer.h:85


rosbag_fancy
Author(s):
autogenerated on Tue Feb 20 2024 03:20:59