11#ifndef RTCTK_COMPONENTFRAMEWORK_IPCQRECORDINGUNIT_HPP
12#define RTCTK_COMPONENTFRAMEWORK_IPCQRECORDINGUNIT_HPP
23#include <fmt/format.h>
35template <
typename T,
typename =
int>
40 : std::conditional_t<std::is_same_v<uint32_t, decltype(std::declval<T>().sample_id)>,
54template <
typename RecInfoType>
58 "Topic struct must contain member 'sample_id' with type 'uint32_t'!");
68 const std::string& unit_id,
80 void Prepare(
const std::filesystem::path& file_path)
override;
84 void Start()
override;
89 std::vector<std::filesystem::path>
Stop()
override;
103 static typename RecInfoType::Recorder::DisabledFields
110 void LoadDynamicConfig();
118 std::thread m_process_thread;
122 std::atomic<bool> m_start =
false;
123 std::atomic<bool> m_stop =
false;
127 std::string m_queue_name;
131 std::optional<size_t> m_cpu_affinity;
135 typename RecInfoType::Recorder m_output;
139 int64_t m_subsample_factor = -1;
143 int64_t m_start_sample_id = -1;
147 int64_t m_stop_after_num_samples = -1;
151 uint64_t m_sampling_counter = 0;
155 perfc::CounterI64 m_samples_written;
156 perfc::ScopedRegistration m_samples_written_reg;
160 perfc::CounterI64 m_last_observed_sample_id;
161 perfc::ScopedRegistration m_last_observed_sample_id_reg;
163 std::unique_ptr<FrequencyEstimator<>> m_freq_estimator;
164 std::unique_ptr<DurationMonitor<>> m_dur_monitor;
165 std::unique_ptr<BufferMonitor<>> m_buffer_monitor;
169 inline static constexpr std::string_view RTR_PATH_QUEUE_NAME =
170 "/{}/static/rec_units/{}/shm_queue_name";
174 inline static constexpr std::string_view RTR_PATH_CPU_AFFINITY =
175 "/{}/static/rec_units/{}/cpu_affinity";
179 inline static constexpr std::string_view RTR_PATH_TELEMETRY_SUBSET =
180 "/{}/dynamic/rec_units/{}/telemetry_subset";
184 inline static constexpr std::string_view RTR_PATH_SUBSAMPLE_FACTOR =
185 "/{}/dynamic/rec_units/{}/subsample_factor";
189 inline static constexpr std::string_view RTR_PATH_START_SAMPLE_ID =
190 "/{}/dynamic/rec_units/{}/start_at_sample_id";
194 inline static constexpr std::string_view RTR_PATH_STOP_AFTER_NUM_SAMPLES =
195 "/{}/dynamic/rec_units/{}/stop_after_num_samples";
199 inline static constexpr std::string_view OLDB_PATH_QUEUE_NAME =
"/{}/rec_units/{}/queue_name";
204 inline static constexpr size_t MAX_SAMPLES_READ = 16;
Header file for Buffer Monitor.
This class provides a wrapper for a data point path.
Definition dataPointPath.hpp:76
std::vector< std::filesystem::path > Stop() override
Stop the recording thread and wait for it's termination.
Definition ipcqRecordingUnit.ipp:112
void Update() override
Update settings from RuntimeRepo.
Definition ipcqRecordingUnit.ipp:127
void Prepare(const std::filesystem::path &file_path) override
Prepare the recording thread and start recording.
Definition ipcqRecordingUnit.ipp:85
static RecInfoType::Recorder::DisabledFields GetDisabled(RepositoryIf &rtr, const DataPointPath &sub_path)
get disabled fields from a DataPoint in the runtime repo.
Definition ipcqRecordingUnit.ipp:312
IpcqRecordingUnit(const std::string &comp_id, const std::string &unit_id, ServiceContainer &services)
Create a new Ipcq Recorder reading from a given queue and outputting to the given output stage.
Definition ipcqRecordingUnit.ipp:32
void Start() override
Start the recording.
Definition ipcqRecordingUnit.ipp:107
~IpcqRecordingUnit() override
Destructor.
Definition ipcqRecordingUnit.ipp:77
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
Abstract interface providing basic read and write facilities to a repository.
Definition repositoryIf.hpp:50
Container class that holds services of any type.
Definition serviceContainer.hpp:38
Header file for ComponentMetricsIf.
Provides an abstract DataRecorder class as the output stage for a recording unit.
Header file for Duration Monitor.
Provides macros and utilities for exception handling.
Header file for Frequency Estimator.
Recording Unit that can record from shared memory queue.
Definition commandReplier.cpp:21
constexpr bool HAS_MEMBER_SAMPLE_ID_UINT32T
Definition ipcqRecordingUnit.hpp:46
Definition ddsSub.hpp:155
FitsRecorder allows to write ColumnData to into fits files in a specified directory.
Abstract base class defining functionality common to all recording units.
Definition ipcqRecordingUnit.hpp:36