11#ifndef RTCTK_COMPONENTFRAMEWORK_RECORDINGUNIT_HPP
12#define RTCTK_COMPONENTFRAMEWORK_RECORDINGUNIT_HPP
21#include <boost/signals2.hpp>
22#include <boost/signals2/connection.hpp>
25#include <shared_mutex>
41template <
class T,
class...
Args>
43 units.emplace_back(std::make_unique<T>(std::forward<Args>(args)...));
72 const std::string& unit_id,
73 const std::string& unit_type,
85 const std::string&
GetId()
const;
105 virtual void Prepare(
const std::filesystem::path& file_path) = 0;
114 virtual std::vector<std::filesystem::path>
Stop() = 0;
125 boost::signals2::connection
126 Connect(
const std::function<
void(
const std::string&,
const State&)>& function);
150 void SetFailed(
const std::exception_ptr& exception);
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";
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
virtual ~RecordingUnit()=default
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.