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 void process_fragments();
00136
00145 std::string report(std::string const& which) const;
00146
00151 static DataSenderManager* GetDataSenderManagerPtr() { return sender_ptr_.get(); }
00152
00153 size_t GetFragmentsProcessed() { return fragment_count_; }
00154 private:
00155 Commandable& parent_application_;
00156
00157 std::unique_ptr<CommandableFragmentGenerator> generator_ptr_;
00158 art::RunID run_id_;
00159 std::string name_;
00160
00161 fhicl::ParameterSet data_pset_;
00162 int rt_priority_;
00163 bool skip_seqId_test_;
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173 static std::unique_ptr<artdaq::DataSenderManager> sender_ptr_;
00174
00175 size_t fragment_count_;
00176 artdaq::Fragment::sequence_id_t prev_seq_id_;
00177 std::atomic<bool> stop_requested_;
00178 std::atomic<bool> pause_requested_;
00179
00180
00181 artdaq::StatisticsHelper statsHelper_;
00182
00183 std::string buildStatisticsString_();
00184
00185 artdaq::MetricManager metricMan_;
00186
00187 void sendMetrics_();
00188 };
00189
00190 #endif