00001 #ifndef artdaq_Application_MPI2_BoardReaderCore_hh
00002 #define artdaq_Application_MPI2_BoardReaderCore_hh
00003
00004 #include <string>
00005
00006 #include "artdaq/Application/CommandableFragmentGenerator.hh"
00007 #include "artdaq/Application/Commandable.hh"
00008 #include "fhiclcpp/ParameterSet.h"
00009 #include "canvas/Persistency/Provenance/RunID.h"
00010 #include "artdaq/DAQrate/DataSenderManager.hh"
00011 #include "artdaq/Application/StatisticsHelper.hh"
00012 #include "artdaq-utilities/Plugins/MetricManager.hh"
00013
00014 namespace artdaq
00015 {
00016 class BoardReaderCore;
00017 }
00018
00023 class artdaq::BoardReaderCore
00024 {
00025 public:
00026 static const std::string FRAGMENTS_PROCESSED_STAT_KEY;
00027 static const std::string INPUT_WAIT_STAT_KEY;
00028 static const std::string BRSYNC_WAIT_STAT_KEY;
00029 static const std::string OUTPUT_WAIT_STAT_KEY;
00030 static const std::string FRAGMENTS_PER_READ_STAT_KEY;
00031
00038 BoardReaderCore(Commandable& parent_application, int rank,
00039 std::string name);
00040
00044 BoardReaderCore(BoardReaderCore const&) = delete;
00045
00049 virtual ~BoardReaderCore();
00050
00055 BoardReaderCore& operator=(BoardReaderCore const&) = delete;
00056
00074 bool initialize(fhicl::ParameterSet const& pset, uint64_t, uint64_t);
00075
00083 bool start(art::RunID id, uint64_t timeout, uint64_t timestamp);
00084
00091 bool stop(uint64_t timeout, uint64_t timestamp);
00092
00099 bool pause(uint64_t timeout, uint64_t timestamp);
00100
00107 bool resume(uint64_t timeout, uint64_t timestamp);
00108
00113 bool shutdown(uint64_t);
00114
00120 bool soft_initialize(fhicl::ParameterSet const& pset, uint64_t, uint64_t);
00121
00127 bool reinitialize(fhicl::ParameterSet const& pset, uint64_t, uint64_t);
00128
00135 size_t process_fragments();
00136
00145 std::string report(std::string const& which) const;
00146
00151 static DataSenderManager* GetDataSenderManagerPtr() { return sender_ptr_.get(); }
00152 private:
00153 Commandable& parent_application_;
00154
00155 std::unique_ptr<CommandableFragmentGenerator> generator_ptr_;
00156 art::RunID run_id_;
00157 std::string name_;
00158
00159 fhicl::ParameterSet data_pset_;
00160 int rt_priority_;
00161 bool skip_seqId_test_;
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171 static std::unique_ptr<artdaq::DataSenderManager> sender_ptr_;
00172
00173 size_t fragment_count_;
00174 artdaq::Fragment::sequence_id_t prev_seq_id_;
00175 std::atomic<bool> stop_requested_;
00176 std::atomic<bool> pause_requested_;
00177
00178
00179 artdaq::StatisticsHelper statsHelper_;
00180
00181 std::string buildStatisticsString_();
00182
00183 artdaq::MetricManager metricMan_;
00184
00185 void sendMetrics_();
00186 };
00187
00188 #endif