12#ifndef RTCTK_COMPONENTFRAMEWORK_RECORDINGUNIT_HPP
13#define RTCTK_COMPONENTFRAMEWORK_RECORDINGUNIT_HPP
22#include <boost/signals2.hpp>
23#include <boost/signals2/connection.hpp>
26#include <shared_mutex>
32class ServiceContainer;
42template <
class T,
class...
Args>
44 units.emplace_back(std::make_unique<T>(std::forward<Args>(
args)...));
110 virtual std::vector<std::filesystem::path>
Stop() = 0;
121 boost::signals2::connection
146 void SetFailed(
const std::exception_ptr& exception);
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";
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
virtual ~RecordingUnit()=default
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.