RTC Toolkit 6.0.0-pre2
Loading...
Searching...
No Matches
recordingUnit.hpp
Go to the documentation of this file.
1
12#ifndef RTCTK_COMPONENTFRAMEWORK_RECORDINGUNIT_HPP
13#define RTCTK_COMPONENTFRAMEWORK_RECORDINGUNIT_HPP
14
20
21#include <atomic>
22#include <boost/signals2.hpp>
23#include <boost/signals2/connection.hpp>
24#include <filesystem>
25#include <optional>
26#include <shared_mutex>
27#include <vector>
28
30
31class RecordingUnit;
33
34using RecUnitListType = std::list<std::unique_ptr<RecordingUnit>>;
35using RecUnitFactoryType = std::function<RecUnitListType(const std::string&, ServiceContainer&)>;
36
42template <class T, class... Args>
43void AddRecUnit(RecUnitListType& units, Args&&... args) {
44 units.emplace_back(std::make_unique<T>(std::forward<Args>(args)...));
45}
46
52public:
53 enum class State : uint8_t { STOPPED, PREPARING, IDLE, WAITING, RUNNING, FINISHED, FAILED };
54
55 const std::map<State, std::string> m_state_text = {
56 {State::STOPPED, "Stopped"},
57 {State::PREPARING, "Preparing"},
58 {State::IDLE, "Idle"},
59 {State::WAITING, "Waiting"},
60 {State::RUNNING, "Running"},
61 {State::FINISHED, "Finished"},
62 {State::FAILED, "Failed"},
63 }; //< States names
64
72 RecordingUnit(const std::string& comp_id,
73 const std::string& unit_id,
74 const std::string& unit_type,
75 ServiceContainer& services);
76
77 RecordingUnit() = delete;
78
79 virtual ~RecordingUnit() = default;
80
82
86 std::string GetId();
87
92
96 bool IsEnabled();
97
101 virtual void CheckErrors();
106 virtual void Prepare(const std::filesystem::path& file_path) = 0;
110 virtual void Start() = 0;
115 virtual std::vector<std::filesystem::path> Stop() = 0;
119 virtual void Update();
120
126 boost::signals2::connection
127 Connect(const std::function<void(const std::string&, const State&)>& function);
128
129protected:
136 bool SetState(State state, State precondition);
137
146 void SetState(State state, State precondition, const std::string& error_message);
147
151 void SetFailed(const std::exception_ptr& exception);
155 void SetStopped();
160 bool HasLeaders();
173 void ResetLeaderStates();
174
175 std::string m_comp_id;
176 std::string m_unit_id;
180 std::optional<std::filesystem::path> m_file_path;
181 boost::signals2::signal<void(const std::string&, const State&)> m_signal;
182
183private:
184 std::mutex m_leader_mutex;
185 std::atomic<bool> m_enabled;
186 std::atomic<State> m_state;
187 std::exception_ptr m_exception = nullptr;
188 std::shared_mutex m_exception_mutex;
189 std::vector<std::string> m_leaders;
190 std::map<std::string, State> m_leader_states;
191 std::vector<boost::signals2::scoped_connection> m_leader_connections;
192 bool m_first_leader_started = false;
193 bool m_last_leader_finished = false;
197 inline static constexpr std::string_view RTR_PATH_ENABLED =
198 "/{}/dynamic/rec_units/{}/enabled";
202 inline static constexpr std::string_view RTR_PATH_LEADER_LIST =
203 "/{}/static/rec_units/{}/leader_list";
207 inline static constexpr std::string_view OLDB_PATH_UNIT_STATE = "/{}/rec_units/{}/state";
211 inline static constexpr std::string_view OLDB_PATH_UNIT_TYPE = "/{}/rec_units/{}/type";
212};
213
214} // namespace rtctk::componentFramework
215
216#endif // RTCTK_COMPONENTFRAMEWORK_RECORDINGUNIT_HPP
Class used to parse default command line arguments.
Definition rtcComponentArgs.hpp:33
Component metrics interface.
Definition componentMetricsIf.hpp:164
Base interface for all OLDB adapters.
Definition oldbIf.hpp:25
Abstract base class for all sources that can be recorded by the MetadataCollector and TelemetryRecord...
Definition recordingUnit.hpp:51
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:185
std::string m_comp_id
Definition recordingUnit.hpp:175
bool HasLeaders()
Check if this unit is following any leaders.
Definition recordingUnit.cpp:105
OldbIf & m_oldb
Definition recordingUnit.hpp:178
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:181
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:19
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:114
bool HasFirstLeaderStarted()
This function is used to determine if this unit should start recording when waiting for leaders.
Definition recordingUnit.cpp:109
virtual void Update()
Update dynamic settings.
Definition recordingUnit.cpp:178
void SetFailed(const std::exception_ptr &exception)
Set the unit into failed state, with the given exception.
Definition recordingUnit.cpp:150
virtual void CheckErrors()
Check for Errors, will rethrow errors thrown in the recorder.
Definition recordingUnit.cpp:170
std::string GetId()
Get the unit_it of this RecordingUnit.
Definition recordingUnit.cpp:128
std::string m_unit_id
Definition recordingUnit.hpp:176
void ResetLeaderStates()
Definition recordingUnit.cpp:119
ComponentMetricsIf & m_metrics
Definition recordingUnit.hpp:179
RuntimeRepoIf & m_rtr
Definition recordingUnit.hpp:177
void SetStopped()
Set the Unit state to STOPPED independent of the current State.
Definition recordingUnit.cpp:157
State
Definition recordingUnit.hpp:53
@ STOPPED
Definition recordingUnit.hpp:53
@ WAITING
Definition recordingUnit.hpp:53
@ FINISHED
Definition recordingUnit.hpp:53
@ RUNNING
Definition recordingUnit.hpp:53
@ IDLE
Definition recordingUnit.hpp:53
@ FAILED
Definition recordingUnit.hpp:53
@ PREPARING
Definition recordingUnit.hpp:53
void ConnectWithLeaders(RecUnitListType &units)
Definition recordingUnit.cpp:61
State GetState()
Get the current state of the Recording Unit.
Definition recordingUnit.cpp:162
const std::map< State, std::string > m_state_text
Definition recordingUnit.hpp:55
bool SetState(State state, State precondition)
Sets the new state, only goes to new state, if expected state matches.
Definition recordingUnit.cpp:132
std::optional< std::filesystem::path > m_file_path
Definition recordingUnit.hpp:180
bool IsEnabled()
Checks whether the Recording Unit is enabled.
Definition recordingUnit.cpp:166
Base interface for all Runtime Configuration Repository adapters.
Definition runtimeRepoIf.hpp:27
Container class that holds services of any type.
Definition serviceContainer.hpp:39
Header file for ComponentMetricsIf.
Provides macros and utilities for exception handling.
Definition commandReplier.cpp:22
std::list< std::unique_ptr< RecordingUnit > > RecUnitListType
Definition recordingUnit.hpp:34
void AddRecUnit(RecUnitListType &units, Args &&... args)
Add a RecordingUnit to the RecordingUnit list of a TelemetryRecorder oder MetadataCollector.
Definition recordingUnit.hpp:43
std::function< RecUnitListType(const std::string &, ServiceContainer &)> RecUnitFactoryType
Definition recordingUnit.hpp:35
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.