DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
snbmodules
include
snbmodules
readout
detail
FileSourceModel.hxx
Go to the documentation of this file.
1
// Declarations for FileSourceModel
2
3
#include "
datahandlinglibs/DataHandlingIssues.hpp
"
4
#include "
datahandlinglibs/ReadoutLogging.hpp
"
5
#include "
datahandlinglibs/DataMoveCallbackRegistry.hpp
"
6
7
using
dunedaq::datahandlinglibs::CannotWriteToQueue;
8
using
dunedaq::datahandlinglibs::ConfigurationError;
9
using
dunedaq::datahandlinglibs::logging::TLVL_BOOKKEEPING
;
10
using
dunedaq::datahandlinglibs::logging::TLVL_TAKE_NOTE
;
11
using
dunedaq::datahandlinglibs::logging::TLVL_WORK_STEPS
;
12
13
namespace
dunedaq
{
14
namespace
snbmodules
{
15
16
template
<
class
ReadoutType>
17
void
18
FileSourceModel<ReadoutType>::set_sender
(
const
appmodel::DataMoveCallbackConf
* sink)
19
{
20
m_raw_sender_conf
= sink;
21
}
22
23
template
<
class
ReadoutType>
24
void
25
FileSourceModel<ReadoutType>::conf
(
const
confmodel::DetectorStream
* link_conf,
26
const
appmodel::SNBFileSourceParameters
* file_params)
27
{
28
if
(
m_is_configured
) {
29
TLOG_DEBUG
(
TLVL_WORK_STEPS
) <<
"This emulator is already configured!"
;
30
}
else
{
31
// m_conf = args.get<module_conf_t>();
32
// m_link_conf = link_conf.get<link_conf_t>();
33
m_raw_sender_timeout_ms
= std::chrono::milliseconds(1000);
34
35
m_sourceid
.id = link_conf->
get_source_id
();
36
m_sourceid
.subsystem = ReadoutType::subsystem;
37
38
m_file_names
= file_params->
get_data_files
();
39
m_file_iterator
=
m_file_names
.begin();
40
41
m_input_buffer_size
= file_params->
get_input_buffer_size
();
42
m_compression_algorithm
= file_params->
get_file_compression_algorithm
();
43
44
open_next_file
();
45
46
m_is_configured
=
true
;
47
}
48
// Configure thread:
49
m_producer_thread
.set_name(
"fileread"
,
m_sourceid
.id);
50
}
51
52
template
<
class
ReadoutType>
53
void
54
FileSourceModel<ReadoutType>::open_next_file
()
55
{
56
if
(
m_file_iterator
==
m_file_names
.end()) {
57
if
(
m_file_reader
) {
58
m_file_reader
->close();
59
}
60
m_file_reader
.reset();
61
m_is_configured
=
false
;
62
return
;
63
}
64
try
{
65
m_file_reader
= std::make_unique<datahandlinglibs::BufferedFileReader<ReadoutType>>(
66
*
m_file_iterator
,
m_input_buffer_size
,
m_compression_algorithm
);
67
++
m_file_iterator
;
68
}
catch
(
const
ers::Issue
& ex) {
69
ers::fatal
(ex);
70
throw
ConfigurationError(
ERS_HERE
,
m_sourceid
,
""
, ex);
71
}
72
}
73
74
template
<
class
ReadoutType>
75
void
76
FileSourceModel<ReadoutType>::start
(
const
appfwk::DAQModule::CommandData_t&
/*args*/
)
77
{
78
m_packet_count_tot
= 0;
79
TLOG_DEBUG
(
TLVL_WORK_STEPS
) <<
"Starting threads..."
;
80
// FIXME: don't know where to take the slowdown from... m_rate_limiter = std::make_unique<RateLimiter>(m_rate_khz /
81
// m_link_conf.slowdown);
82
m_rate_limiter
= std::make_unique<datahandlinglibs::RateLimiter>(
m_rate_khz
);
83
// m_stats_thread.set_work(&FileSourceModel<ReadoutType>::run_stats, this);
84
m_producer_thread
.set_work(&
FileSourceModel<ReadoutType>::run_produce
,
this
);
85
}
86
87
template
<
class
ReadoutType>
88
void
89
FileSourceModel<ReadoutType>::stop
(
const
appfwk::DAQModule::CommandData_t&
/*args*/
)
90
{
91
while
(!
m_producer_thread
.get_readiness()) {
92
std::this_thread::sleep_for(std::chrono::milliseconds(100));
93
}
94
}
95
96
template
<
class
ReadoutType>
97
void
98
FileSourceModel<ReadoutType>::generate_opmon_data
()
99
{
100
datahandlinglibs::opmon::DataSourceInfo
info;
101
info.set_sum_packets(
m_packet_count_tot
.load());
102
info.set_num_packets(
m_packet_count
.exchange(0));
103
104
this->
publish
(std::move(info));
105
}
106
107
template
<
class
ReadoutType>
108
void
109
FileSourceModel<ReadoutType>::run_produce
()
110
{
111
TLOG_DEBUG
(
TLVL_WORK_STEPS
) <<
"Data generation thread "
<<
m_sourceid
.to_string() <<
" started"
;
112
113
// pthread_setname_np(pthread_self(), get_name().c_str());
114
115
ReadoutType elem;
116
while
(
m_run_marker
.load()) {
117
auto
read_sts =
m_file_reader
->read(elem);
118
119
if
(!read_sts) {
120
TLOG_DEBUG
(
TLVL_BOOKKEEPING
) <<
"Failed to read, moving to next file"
;
121
open_next_file
();
122
if
(!
m_is_configured
) {
123
break
;
124
}
125
continue
;
126
}
127
128
TLOG_DEBUG
(
TLVL_BOOKKEEPING
) <<
"Read element with timestamp "
<< elem.get_timestamp() <<
" from file"
;
129
130
// send it
131
while
(
m_raw_data_callback
==
nullptr
&&
m_run_marker
.load()) {
132
m_raw_data_callback
=
133
datahandlinglibs::DataMoveCallbackRegistry::get
()->get_callback<ReadoutType>(
m_raw_sender_conf
);
134
TLOG_DEBUG
(
TLVL_WORK_STEPS
) <<
"Sender not set yet, waiting..."
;
135
std::this_thread::sleep_for(std::chrono::milliseconds(100));
136
}
137
138
if
(!
m_run_marker
.load()) {
139
break
;
140
}
141
(*m_raw_data_callback)(std::move(elem));
142
143
// Count packet and limit rate if needed.
144
++
m_packet_count
;
145
++
m_packet_count_tot
;
146
147
m_rate_limiter
->limit();
148
}
149
TLOG_DEBUG
(
TLVL_WORK_STEPS
) <<
"Data generation thread "
<<
m_sourceid
.to_string() <<
" finished"
;
150
}
151
152
}
// namespace snbmodules
153
}
// namespace dunedaq
DataHandlingIssues.hpp
DataMoveCallbackRegistry.hpp
TLVL_BOOKKEEPING
@ TLVL_BOOKKEEPING
Definition
IfaceWrapper.cpp:53
TLVL_WORK_STEPS
@ TLVL_WORK_STEPS
Definition
IfaceWrapper.cpp:52
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
ReadoutLogging.hpp
dunedaq::appmodel::DataMoveCallbackConf
Definition
DataMoveCallbackConf.hpp:20
dunedaq::appmodel::SNBFileSourceParameters
Definition
SNBFileSourceParameters.hpp:20
dunedaq::appmodel::SNBFileSourceParameters::get_file_compression_algorithm
const std::string & get_file_compression_algorithm() const
Get "file_compression_algorithm" attribute value. Compression algorithm used when writing data.
Definition
SNBFileSourceParameters.hpp:159
dunedaq::appmodel::SNBFileSourceParameters::get_data_files
const std::vector< std::string > & get_data_files() const
Get "data_files" attribute value.
Definition
SNBFileSourceParameters.hpp:96
dunedaq::appmodel::SNBFileSourceParameters::get_input_buffer_size
uint32_t get_input_buffer_size() const
Get "input_buffer_size" attribute value.
Definition
SNBFileSourceParameters.hpp:127
dunedaq::confmodel::DetectorStream
Definition
DetectorStream.hpp:32
dunedaq::confmodel::DetectorStream::get_source_id
uint32_t get_source_id() const
Get "source_id" attribute value.
Definition
DetectorStream.hpp:103
dunedaq::datahandlinglibs::DataMoveCallbackRegistry::get
static std::shared_ptr< DataMoveCallbackRegistry > get()
Definition
DataMoveCallbackRegistry.hpp:50
dunedaq::datahandlinglibs::opmon::DataSourceInfo
Definition
datahandling_info.pb.h:268
dunedaq::opmonlib::MonitorableObject::publish
void publish(google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept
Definition
MonitorableObject.cpp:58
dunedaq::snbmodules::FileSourceModel::m_sourceid
daqdataformats::SourceID m_sourceid
Definition
FileSourceModel.hpp:96
dunedaq::snbmodules::FileSourceModel::stop
void stop(const appfwk::DAQModule::CommandData_t &)
Definition
FileSourceModel.hxx:89
dunedaq::snbmodules::FileSourceModel::m_rate_limiter
std::unique_ptr< dunedaq::datahandlinglibs::RateLimiter > m_rate_limiter
Definition
FileSourceModel.hpp:113
dunedaq::snbmodules::FileSourceModel::m_raw_sender_timeout_ms
std::chrono::milliseconds m_raw_sender_timeout_ms
Definition
FileSourceModel.hpp:105
dunedaq::snbmodules::FileSourceModel::open_next_file
void open_next_file()
Definition
FileSourceModel.hxx:54
dunedaq::snbmodules::FileSourceModel::m_packet_count
std::atomic< int > m_packet_count
Definition
FileSourceModel.hpp:99
dunedaq::snbmodules::FileSourceModel::generate_opmon_data
virtual void generate_opmon_data() override
Definition
FileSourceModel.hxx:98
dunedaq::snbmodules::FileSourceModel::conf
void conf(const confmodel::DetectorStream *stream_conf, const appmodel::SNBFileSourceParameters *file_params)
Definition
FileSourceModel.hxx:25
dunedaq::snbmodules::FileSourceModel::m_packet_count_tot
std::atomic< int > m_packet_count_tot
Definition
FileSourceModel.hpp:100
dunedaq::snbmodules::FileSourceModel::m_rate_khz
double m_rate_khz
Definition
FileSourceModel.hpp:89
dunedaq::snbmodules::FileSourceModel::m_file_reader
std::unique_ptr< dunedaq::datahandlinglibs::BufferedFileReader< ReadoutType > > m_file_reader
Definition
FileSourceModel.hpp:114
dunedaq::snbmodules::FileSourceModel::m_producer_thread
utilities::ReusableThread m_producer_thread
Definition
FileSourceModel.hpp:116
dunedaq::snbmodules::FileSourceModel::m_run_marker
std::atomic< bool > & m_run_marker
Definition
FileSourceModel.hpp:84
dunedaq::snbmodules::FileSourceModel::m_input_buffer_size
uint32_t m_input_buffer_size
Definition
FileSourceModel.hpp:93
dunedaq::snbmodules::FileSourceModel::run_produce
void run_produce()
Definition
FileSourceModel.hxx:109
dunedaq::snbmodules::FileSourceModel::set_sender
void set_sender(const appmodel::DataMoveCallbackConf *sink)
Definition
FileSourceModel.hxx:18
dunedaq::snbmodules::FileSourceModel::m_file_names
std::vector< std::string > m_file_names
Definition
FileSourceModel.hpp:91
dunedaq::snbmodules::FileSourceModel::m_raw_data_callback
std::shared_ptr< std::function< void(ReadoutType &&)> > m_raw_data_callback
Definition
FileSourceModel.hpp:107
dunedaq::snbmodules::FileSourceModel::m_is_configured
bool m_is_configured
Definition
FileSourceModel.hpp:88
dunedaq::snbmodules::FileSourceModel::m_file_iterator
std::vector< std::string >::const_iterator m_file_iterator
Definition
FileSourceModel.hpp:92
dunedaq::snbmodules::FileSourceModel::m_raw_sender_conf
const appmodel::DataMoveCallbackConf * m_raw_sender_conf
Definition
FileSourceModel.hpp:106
dunedaq::snbmodules::FileSourceModel::m_compression_algorithm
std::string m_compression_algorithm
Definition
FileSourceModel.hpp:94
dunedaq::snbmodules::FileSourceModel::start
void start(const appfwk::DAQModule::CommandData_t &)
Definition
FileSourceModel.hxx:76
ers::Issue
Base class for any user define issue.
Definition
Issue.hpp:80
TLOG_DEBUG
#define TLOG_DEBUG(lvl,...)
Definition
Logging.hpp:112
dunedaq::datahandlinglibs::logging::TLVL_TAKE_NOTE
@ TLVL_TAKE_NOTE
Definition
ReadoutLogging.hpp:21
dunedaq::datahandlinglibs::logging::TLVL_BOOKKEEPING
@ TLVL_BOOKKEEPING
Definition
ReadoutLogging.hpp:26
dunedaq::datahandlinglibs::logging::TLVL_WORK_STEPS
@ TLVL_WORK_STEPS
Definition
ReadoutLogging.hpp:23
dunedaq::snbmodules
Definition
bookkeeper.hpp:30
dunedaq
Including Qt Headers.
Definition
module.cpp:16
ers::fatal
void fatal(const Issue &issue)
Definition
ers.hpp:99
Generated on
for DUNE-DAQ by
1.17.0