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
00036 BoardReaderCore(Commandable& parent_application);
00037
00041 BoardReaderCore(BoardReaderCore const&) = delete;
00042
00046 virtual ~BoardReaderCore();
00047
00052 BoardReaderCore& operator=(BoardReaderCore const&) = delete;
00053
00071 bool initialize(fhicl::ParameterSet const& pset, uint64_t, uint64_t);
00072
00080 bool start(art::RunID id, uint64_t timeout, uint64_t timestamp);
00081
00088 bool stop(uint64_t timeout, uint64_t timestamp);
00089
00096 bool pause(uint64_t timeout, uint64_t timestamp);
00097
00104 bool resume(uint64_t timeout, uint64_t timestamp);
00105
00110 bool shutdown(uint64_t);
00111
00117 bool soft_initialize(fhicl::ParameterSet const& pset, uint64_t, uint64_t);
00118
00124 bool reinitialize(fhicl::ParameterSet const& pset, uint64_t, uint64_t);
00125
00132 void process_fragments();
00133
00142 std::string report(std::string const& which) const;
00143
00150 bool metaCommand(std::string const& command, std::string const& arg);
00151
00156 static DataSenderManager* GetDataSenderManagerPtr() { return sender_ptr_.get(); }
00157
00158 size_t GetFragmentsProcessed() { return fragment_count_; }
00159 private:
00160 Commandable& parent_application_;
00161 std::unique_ptr<CommandableFragmentGenerator> generator_ptr_;
00162 art::RunID run_id_;
00163
00164 fhicl::ParameterSet data_pset_;
00165 int rt_priority_;
00166 bool skip_seqId_test_;
00167
00168 static std::unique_ptr<artdaq::DataSenderManager> sender_ptr_;
00169
00170 size_t fragment_count_;
00171 artdaq::Fragment::sequence_id_t prev_seq_id_;
00172 std::atomic<bool> stop_requested_;
00173 std::atomic<bool> pause_requested_;
00174
00175
00176 artdaq::StatisticsHelper statsHelper_;
00177
00178 std::string buildStatisticsString_();
00179
00180 artdaq::MetricManager metricMan_;
00181
00182 void sendMetrics_();
00183 };
00184
00185 #endif