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
std::uint64_t freeSpace() const
Definition: bag_writer.h:55
std::uint64_t splitSizeInBytes() const
Definition: bag_writer.h:46
filename
void setCompression(rosbag::compression::CompressionType type)
Definition: bag_writer.cpp:336
rosbag::compression::CompressionType compression() const
Definition: bag_writer.h:67
std::uint64_t deleteOldAtInBytes() const
Definition: bag_writer.h:52
std::vector< std::uint64_t > m_byteCounts
Definition: bag_writer.h:112
std::uint64_t sizeInBytes() const
Definition: bag_writer.h:43
std::uint64_t m_freeSpace
Definition: bag_writer.h:98
std::mutex m_cleanupMutex
Definition: bag_writer.h:105
std::thread m_thread
Definition: bag_writer.h:92
BagWriter(MessageQueue &queue, const std::string &filename, Naming namingMode, std::uint64_t splitSizeInBytes, std::uint64_t deleteOldAtInBytes)
Definition: bag_writer.cpp:87
tf2_ros::Buffer m_tf_buf
Definition: bag_writer.h:108
std::string m_expandedFilename
Definition: bag_writer.h:82
const std::vector< std::uint64_t > & byteCounts() const
Definition: bag_writer.h:64
std::string m_filename
Definition: bag_writer.h:79
std::string bagfileName() const
Definition: bag_writer.h:58
std::uint64_t directorySizeInBytes() const
Definition: bag_writer.h:49
rosbag::compression::CompressionType m_compressionType
Definition: bag_writer.h:114
std::atomic< std::uint64_t > m_sizeInBytes
Definition: bag_writer.h:97
boost::shared_ptr< std::map< std::string, std::string > > m_tf_header
Definition: bag_writer.h:109
std::condition_variable m_cleanupCondition
Definition: bag_writer.h:106
std::uint64_t m_deleteOldAtInBytes
Definition: bag_writer.h:86
std::vector< std::uint64_t > m_messageCounts
Definition: bag_writer.h:111
bool running() const
Definition: bag_writer.h:40
MessageQueue & m_queue
Definition: bag_writer.h:77
ros::SteadyTimer m_freeSpaceTimer
Definition: bag_writer.h:100
std::atomic< std::uint64_t > m_directorySizeInBytes
Definition: bag_writer.h:87
const std::vector< std::uint64_t > & messageCounts() const
Definition: bag_writer.h:61
std::atomic< bool > m_running
Definition: bag_writer.h:102
std::uint64_t m_splitSizeInBytes
Definition: bag_writer.h:85
std::thread m_cleanup_thread
Definition: bag_writer.h:93


rosbag_fancy
Author(s):
autogenerated on Fri Dec 9 2022 04:00:08