DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::datahandlinglibs::RecorderModel< ReadoutType > Class Template Reference

#include <RecorderModel.hpp>

Inheritance diagram for dunedaq::datahandlinglibs::RecorderModel< ReadoutType >:
[legend]
Collaboration diagram for dunedaq::datahandlinglibs::RecorderModel< ReadoutType >:
[legend]

Public Member Functions

 RecorderModel (std::string name)
 
void init (const appmodel::DataRecorderModule *conf) override
 
void do_conf (const nlohmann::json &) override
 
void do_scrap (const nlohmann::json &) override
 
void do_start (const nlohmann::json &) override
 
void do_stop (const nlohmann::json &) override
 
- Public Member Functions inherited from dunedaq::datahandlinglibs::RecorderConcept
 RecorderConcept ()
 
virtual ~RecorderConcept ()
 
 RecorderConcept (const RecorderConcept &)=delete
 
RecorderConceptoperator= (const RecorderConcept &)=delete
 
 RecorderConcept (RecorderConcept &&)=delete
 
RecorderConceptoperator= (RecorderConcept &&)=delete
 

Protected Member Functions

virtual void generate_opmon_data () override
 

Private Types

using source_t = dunedaq::iomanager::ReceiverConcept<ReadoutType>
 

Private Member Functions

void do_work ()
 

Private Attributes

std::shared_ptr< source_tm_data_receiver
 
std::string m_output_file
 
size_t m_stream_buffer_size = 0
 
std::string m_compression_algorithm
 
bool m_use_o_direct
 
BufferedFileWriter m_buffered_writer
 
utilities::ReusableThread m_work_thread
 
std::atomic< bool > m_run_marker
 
std::atomic< int > m_bytes_processed { 0 }
 
std::atomic< int > m_packets_processed { 0 }
 
std::chrono::steady_clock::time_point m_time_point_last_info
 
std::string m_name
 

Detailed Description

template<class ReadoutType>
class dunedaq::datahandlinglibs::RecorderModel< ReadoutType >

Definition at line 35 of file RecorderModel.hpp.

Member Typedef Documentation

◆ source_t

template<class ReadoutType >
using dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::source_t = dunedaq::iomanager::ReceiverConcept<ReadoutType>
private

Definition at line 58 of file RecorderModel.hpp.

Constructor & Destructor Documentation

◆ RecorderModel()

template<class ReadoutType >
dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::RecorderModel ( std::string name)
inlineexplicit

Definition at line 38 of file RecorderModel.hpp.

39 : m_work_thread(0)
40 , m_name(name)
41 {}
utilities::ReusableThread m_work_thread

Member Function Documentation

◆ do_conf()

template<class ReadoutType >
void dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::do_conf ( const nlohmann::json & )
overridevirtual

Implements dunedaq::datahandlinglibs::RecorderConcept.

Definition at line 35 of file RecorderModel.hxx.

36{
37
38 if (remove(m_output_file.c_str()) == 0) {
39 TLOG(TLVL_WORK_STEPS) << "Removed existing output file from previous run" << std::endl;
40 }
41
45}
void open(std::string filename, size_t buffer_size, std::string compression_algorithm="None", bool use_o_direct=true)
void set_name(const std::string &name, int tid)
#define TLOG(...)
Definition macro.hpp:22
void remove(QString const &db, QString const &fn)

◆ do_scrap()

template<class ReadoutType >
void dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::do_scrap ( const nlohmann::json & )
inlineoverridevirtual

◆ do_start()

template<class ReadoutType >
void dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::do_start ( const nlohmann::json & )
overridevirtual

◆ do_stop()

template<class ReadoutType >
void dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::do_stop ( const nlohmann::json & )
overridevirtual

Implements dunedaq::datahandlinglibs::RecorderConcept.

Definition at line 60 of file RecorderModel.hxx.

61{
62 m_run_marker.store(false);
63 while (!m_work_thread.get_readiness()) {
64 std::this_thread::sleep_for(std::chrono::milliseconds(100));
65 }
66}

◆ do_work()

template<class ReadoutType >
void dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::do_work ( )
private

Definition at line 70 of file RecorderModel.hxx.

71{
72 m_time_point_last_info = std::chrono::steady_clock::now();
73
74 ReadoutType element;
75 while (m_run_marker) {
76 try {
77 element = m_data_receiver->receive(std::chrono::milliseconds(100)); // RS -> Use confed timeout?
78 if (!m_buffered_writer.write(reinterpret_cast<char*>(&element), sizeof(element))) { // NOLINT
79 ers::warning(CannotWriteToFile(ERS_HERE, m_output_file));
80 break;
81 }
83 m_bytes_processed+=sizeof(element);
84 } catch (const dunedaq::iomanager::TimeoutExpired& excpt) {
85 continue;
86 }
87 }
89}
#define ERS_HERE
bool write(const char *memory, const size_t size)
std::shared_ptr< source_t > m_data_receiver
std::chrono::steady_clock::time_point m_time_point_last_info
ReadoutType
Which type of readout to use for TriggerDecision and DataRequest.
Definition Types.hpp:51
void warning(const Issue &issue)
Definition ers.hpp:115

◆ generate_opmon_data()

template<class ReadoutType >
void dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::generate_opmon_data ( )
overrideprotectedvirtual

Definition at line 25 of file RecorderModel.hxx.

26{
27 opmon::RecordingInfo info;
28 info.set_recording_status("Y");
29 info.set_packets_recorded(m_packets_processed.exchange(0));
30 info.set_bytes_recorded(m_bytes_processed.exchange(0));
31}

◆ init()

template<class ReadoutType >
void dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::init ( const appmodel::DataRecorderModule * conf)
overridevirtual

Implements dunedaq::datahandlinglibs::RecorderConcept.

Definition at line 8 of file RecorderModel.hxx.

9{
10 for (auto input : conf->get_inputs()) {
11 try {
13 } catch (const ers::Issue& excpt) {
14 throw ResourceQueueError(ERS_HERE, "raw_recording", "RecorderModel");
15 }
16 }
17 m_output_file = conf->get_configuration()->get_output_file();
18 m_stream_buffer_size = conf->get_configuration()->get_streaming_buffer_size();
19 m_compression_algorithm = conf->get_configuration()->get_compression_algorithm();
20 m_use_o_direct = conf->get_configuration()->get_use_o_direct();
21}
Base class for any user define issue.
Definition Issue.hpp:69
static std::shared_ptr< iomanager::ReceiverConcept< Datatype > > get_iom_receiver(iomanager::ConnectionId const &id)

Member Data Documentation

◆ m_buffered_writer

template<class ReadoutType >
BufferedFileWriter dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::m_buffered_writer
private

Definition at line 68 of file RecorderModel.hpp.

◆ m_bytes_processed

template<class ReadoutType >
std::atomic<int> dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::m_bytes_processed { 0 }
private

Definition at line 75 of file RecorderModel.hpp.

75{ 0 };

◆ m_compression_algorithm

template<class ReadoutType >
std::string dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::m_compression_algorithm
private

Definition at line 65 of file RecorderModel.hpp.

◆ m_data_receiver

template<class ReadoutType >
std::shared_ptr<source_t> dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::m_data_receiver
private

Definition at line 59 of file RecorderModel.hpp.

◆ m_name

template<class ReadoutType >
std::string dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::m_name
private

Definition at line 79 of file RecorderModel.hpp.

◆ m_output_file

template<class ReadoutType >
std::string dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::m_output_file
private

Definition at line 63 of file RecorderModel.hpp.

◆ m_packets_processed

template<class ReadoutType >
std::atomic<int> dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::m_packets_processed { 0 }
private

Definition at line 76 of file RecorderModel.hpp.

76{ 0 };

◆ m_run_marker

template<class ReadoutType >
std::atomic<bool> dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::m_run_marker
private

Definition at line 72 of file RecorderModel.hpp.

◆ m_stream_buffer_size

template<class ReadoutType >
size_t dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::m_stream_buffer_size = 0
private

Definition at line 64 of file RecorderModel.hpp.

◆ m_time_point_last_info

template<class ReadoutType >
std::chrono::steady_clock::time_point dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::m_time_point_last_info
private

Definition at line 77 of file RecorderModel.hpp.

◆ m_use_o_direct

template<class ReadoutType >
bool dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::m_use_o_direct
private

Definition at line 66 of file RecorderModel.hpp.

◆ m_work_thread

template<class ReadoutType >
utilities::ReusableThread dunedaq::datahandlinglibs::RecorderModel< ReadoutType >::m_work_thread
private

Definition at line 71 of file RecorderModel.hpp.


The documentation for this class was generated from the following files: