RTC Toolkit 6.0.0
Loading...
Searching...
No Matches
recordingUnit.hpp
Go to the documentation of this file.
1
11#ifndef RTCTK_COMPONENTFRAMEWORK_RECORDINGUNIT_HPP
12#define RTCTK_COMPONENTFRAMEWORK_RECORDINGUNIT_HPP
13
19
20#include <atomic>
21#include <boost/signals2.hpp>
22#include <boost/signals2/connection.hpp>
23#include <filesystem>
24#include <optional>
25#include <shared_mutex>
26#include <vector>
27
29
30class RecordingUnit;
32
33using RecUnitListType = std::list<std::unique_ptr<RecordingUnit>>;
34using RecUnitFactoryType = std::function<RecUnitListType(const std::string&, ServiceContainer&)>;
35
41template <class T, class... Args>
42void AddRecUnit(RecUnitListType& units, Args&&... args) {
43 units.emplace_back(std::make_unique<T>(std::forward<Args>(args)...));
44}
45
51public:
52 enum class State : uint8_t { STOPPED, PREPARING, IDLE, WAITING, RUNNING, FINISHED, FAILED };
53
54 const std::map<State, std::string> m_state_text = {
55 {State::STOPPED, "Stopped"},
56 {State::PREPARING, "Preparing"},
57 {State::IDLE, "Idle"},
58 {State::WAITING, "Waiting"},
59 {State::RUNNING, "Running"},
60 {State::FINISHED, "Finished"},
61 {State::FAILED, "Failed"},
62 }; //< States names
63
71 RecordingUnit(const std::string& comp_id,
72 const std::string& unit_id,
73 const std::string& unit_type,
74 ServiceContainer& services);
75
76 RecordingUnit() = delete;
77
78 virtual ~RecordingUnit() = default;
79
81
85 const std::string& GetId() const;
86
90 State GetState() const;
91
95 bool IsEnabled() const;
96
100 virtual void CheckErrors();
105 virtual void Prepare(const std::filesystem::path& file_path) = 0;
109 virtual void Start() = 0;
114 virtual std::vector<std::filesystem::path> Stop() = 0;
118 virtual void Update();
119
125 boost::signals2::connection
126 Connect(const std::function<void(const std::string&, const State&)>& function);
127
128protected:
135 bool SetState(State state, State precondition);
136
145 void SetState(State state, State precondition, const std::string& error_message);
146
150 void SetFailed(const std::exception_ptr& exception);
154 void SetStopped();
159 bool HasLeaders();
172 void ResetLeaderStates();
173
174 std::string m_comp_id;
175 std::string m_unit_id;
179 std::optional<std::filesystem::path> m_file_path;
180 boost::signals2::signal<void(const std::string&, const State&)> m_signal;
181
182private:
183 std::mutex m_leader_mutex;
184 std::atomic<bool> m_enabled;
185 std::atomic<State> m_state;
186 std::exception_ptr m_exception = nullptr;
187 std::shared_mutex m_exception_mutex;
188 std::vector<std::string> m_leaders;
189 std::map<std::string, State> m_leader_states;
190 std::vector<boost::signals2::scoped_connection> m_leader_connections;
191 bool m_first_leader_started = false;
192 bool m_last_leader_finished = false;
196 inline static constexpr std::string_view RTR_PATH_ENABLED = "/{}/dynamic/rec_units/{}/enabled";
200 inline static constexpr std::string_view RTR_PATH_LEADER_LIST =
201 "/{}/static/rec_units/{}/leader_list";
205 inline static constexpr std::string_view OLDB_PATH_UNIT_STATE = "/{}/rec_units/{}/state";
209 inline static constexpr std::string_view OLDB_PATH_UNIT_TYPE = "/{}/rec_units/{}/type";
210};
211
212} // namespace rtctk::componentFramework
213
214#endif // RTCTK_COMPONENTFRAMEWORK_RECORDINGUNIT_HPP
Class used to parse default command line arguments.
Definition rtcComponentArgs.hpp:32
Component metrics interface.
Definition componentMetricsIf.hpp:163
Base interface for all OLDB adapters.
Definition oldbIf.hpp:24
Abstract base class for all sources that can be recorded by the MetadataCollector and TelemetryRecord...
Definition recordingUnit.hpp:50
virtual void Start()=0
Start the recording.
boost::signals2::connection Connect(const std::function< void(const std::string &, const State &)> &function)
Connect to State change signal.
Definition recordingUnit.cpp:186
std::string m_comp_id
Definition recordingUnit.hpp:174
bool HasLeaders()
Check if this unit is following any leaders.
Definition recordingUnit.cpp:106
OldbIf & m_oldb
Definition recordingUnit.hpp:177
virtual void Prepare(const std::filesystem::path &file_path)=0
Prepare the recording.
boost::signals2::signal< void(const std::string &, const State &)> m_signal
Definition recordingUnit.hpp:180
RecordingUnit(const std::string &comp_id, const std::string &unit_id, const std::string &unit_type, ServiceContainer &services)
Create a new RecordingIngestion.
Definition recordingUnit.cpp:18
virtual std::vector< std::filesystem::path > Stop()=0
Stop the recording and wait for it's termination.
bool HasLastLeaderFinished()
This function is used to determine if this unit should stop recording when waiting for leaders.
Definition recordingUnit.cpp:115
bool HasFirstLeaderStarted()
This function is used to determine if this unit should start recording when waiting for leaders.
Definition recordingUnit.cpp:110
virtual void Update()
Update dynamic settings.
Definition recordingUnit.cpp:179
void SetFailed(const std::exception_ptr &exception)
Set the unit into failed state, with the given exception.
Definition recordingUnit.cpp:151
bool IsEnabled() const
Checks whether the Recording Unit is enabled.
Definition recordingUnit.cpp:167
virtual void CheckErrors()
Check for Errors, will rethrow errors thrown in the recorder.
Definition recordingUnit.cpp:171
std::string m_unit_id
Definition recordingUnit.hpp:175
void ResetLeaderStates()
Definition recordingUnit.cpp:120
ComponentMetricsIf & m_metrics
Definition recordingUnit.hpp:178
const std::string & GetId() const
Get the unit_it of this RecordingUnit.
Definition recordingUnit.cpp:129
RuntimeRepoIf & m_rtr
Definition recordingUnit.hpp:176
void SetStopped()
Set the Unit state to STOPPED independent of the current State.
Definition recordingUnit.cpp:158
State
Definition recordingUnit.hpp:52
@ STOPPED
Definition recordingUnit.hpp:52
@ WAITING
Definition recordingUnit.hpp:52
@ FINISHED
Definition recordingUnit.hpp:52
@ RUNNING
Definition recordingUnit.hpp:52
@ IDLE
Definition recordingUnit.hpp:52
@ FAILED
Definition recordingUnit.hpp:52
@ PREPARING
Definition recordingUnit.hpp:52
void ConnectWithLeaders(RecUnitListType &units)
Definition recordingUnit.cpp:62
const std::map< State, std::string > m_state_text
Definition recordingUnit.hpp:54
State GetState() const
Get the current state of the Recording Unit.
Definition recordingUnit.cpp:163
bool SetState(State state, State precondition)
Sets the new state, only goes to new state, if expected state matches.
Definition recordingUnit.cpp:133
std::optional< std::filesystem::path > m_file_path
Definition recordingUnit.hpp:179
Base interface for all Runtime Configuration Repository adapters.
Definition runtimeRepoIf.hpp:26
Container class that holds services of any type.
Definition serviceContainer.hpp:38
Header file for ComponentMetricsIf.
Provides macros and utilities for exception handling.
Definition commandReplier.cpp:21
std::list< std::unique_ptr< RecordingUnit > > RecUnitListType
Definition recordingUnit.hpp:33
void AddRecUnit(RecUnitListType &units, Args &&... args)
Add a RecordingUnit to the RecordingUnit list of a TelemetryRecorder oder MetadataCollector.
Definition recordingUnit.hpp:42
std::function< RecUnitListType(const std::string &, ServiceContainer &)> RecUnitFactoryType
Definition recordingUnit.hpp:34
Header file for OldbIf, which defines the API for OldbAdapters.
Header file for RuntimeRepoIf, which defines the API for RuntimeRepoAdapters.
A container that can hold any type of service.