RTC Toolkit 5.1.0
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;
32class ServiceContainer;
33
34using RecUnitListType = std::list<std::unique_ptr<RecordingUnit>>;
35using RecUnitFactoryType = std::function<RecUnitListType(const std::string&, ServiceContainer&)>;
36
42template <class T, class... Args>
44 units.emplace_back(std::make_unique<T>(std::forward<Args>(args)...));
45}
46
52public:
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 virtual void CheckErrors();
101 virtual void Prepare(const std::filesystem::path& file_path) = 0;
105 virtual void Start() = 0;
110 virtual std::vector<std::filesystem::path> Stop() = 0;
114 virtual void Update();
115
121 boost::signals2::connection
122 Connect(const std::function<void(const std::string&, const State&)>& function);
123
124protected:
131 bool SetState(State state, State precondition);
132
141 void SetState(State state, State precondition, const std::string& error_message);
142
146 void SetFailed(const std::exception_ptr& exception);
150 void SetStopped();
155 bool HasLeaders();
168 void ResetLeaderStates();
169
170 std::string m_comp_id;
171 std::string m_unit_id;
175 std::optional<std::filesystem::path> m_file_path;
176 boost::signals2::signal<void(const std::string&, const State&)> m_signal;
177
178private:
179 std::mutex m_leader_mutex;
180 std::atomic<State> m_state;
181 std::exception_ptr m_exception = nullptr;
182 std::shared_mutex m_exception_mutex;
183 std::vector<std::string> m_leaders;
184 std::map<std::string, State> m_leader_states;
185 std::vector<boost::signals2::scoped_connection> m_leader_connections;
186 bool m_first_leader_started = false;
187 bool m_last_leader_finished = false;
191 inline static constexpr std::string_view RTR_PATH_LEADER_LIST =
192 "/{}/static/rec_units/{}/leader_list";
196 inline static constexpr std::string_view OLDB_PATH_UNIT_STATE = "/{}/rec_units/{}/state";
200 inline static constexpr std::string_view OLDB_PATH_UNIT_TYPE = "/{}/rec_units/{}/type";
201};
202
203} // namespace rtctk::componentFramework
204
205#endif // RTCTK_COMPONENTFRAMEWORK_RECORDINGUNIT_HPP
Class used to parse default command line arguments.
Definition rtcComponentArgs.hpp:33
Component metrics interface.
Definition componentMetricsIf.hpp:85
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:169
std::string m_comp_id
Definition recordingUnit.hpp:170
bool HasLeaders()
Check if this unit is following any leaders.
Definition recordingUnit.cpp:97
OldbIf & m_oldb
Definition recordingUnit.hpp:173
virtual void Prepare(const std::filesystem::path &file_path)=0
Prepare the recording.
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:106
boost::signals2::signal< void(const std::string &, const State &) m_signal)
Definition recordingUnit.hpp:176
bool HasFirstLeaderStarted()
This function is used to determine if this unit should start recording when waiting for leaders.
Definition recordingUnit.cpp:101
virtual void Update()
Update dynamic settings.
Definition recordingUnit.cpp:166
void SetFailed(const std::exception_ptr &exception)
Set the unit into failed state, with the given exception.
Definition recordingUnit.cpp:142
virtual void CheckErrors()
Check for Errors, will rethrow errors thrown in the recorder.
Definition recordingUnit.cpp:158
std::string GetId()
Get the unit_it of this RecordingUnit.
Definition recordingUnit.cpp:120
std::string m_unit_id
Definition recordingUnit.hpp:171
void ResetLeaderStates()
Definition recordingUnit.cpp:111
ComponentMetricsIf & m_metrics
Definition recordingUnit.hpp:174
RuntimeRepoIf & m_rtr
Definition recordingUnit.hpp:172
void SetStopped()
Set the Unit state to STOPPED independent of the current State.
Definition recordingUnit.cpp:149
State
Definition recordingUnit.hpp:53
void ConnectWithLeaders(RecUnitListType &units)
Definition recordingUnit.cpp:53
State GetState()
Get the current state of the Recording Unit.
Definition recordingUnit.cpp:154
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:124
std::optional< std::filesystem::path > m_file_path
Definition recordingUnit.hpp:175
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
elt::mal::future< std::string > InjectReqRepEvent(StateMachineEngine &engine)
Definition malEventInjector.hpp:23
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.