00001 #ifndef artdaq_Application_MPI2_EventBuilderCore_hh
00002 #define artdaq_Application_MPI2_EventBuilderCore_hh
00003
00004 #include <string>
00005 #include <atomic>
00006
00007 #include "fhiclcpp/ParameterSet.h"
00008 #include "canvas/Persistency/Provenance/RunID.h"
00009
00010 #include "artdaq-utilities/Plugins/MetricManager.hh"
00011
00012 #include "artdaq/DAQrate/DataReceiverManager.hh"
00013 #include "artdaq/DAQrate/EventStore.hh"
00014 #include "artdaq/Application/StatisticsHelper.hh"
00015
00016 namespace artdaq
00017 {
00018 class EventBuilderCore;
00019 }
00020
00025 class artdaq::EventBuilderCore
00026 {
00027 public:
00028 static const std::string INPUT_FRAGMENTS_STAT_KEY;
00029 static const std::string INPUT_WAIT_STAT_KEY;
00030 static const std::string STORE_EVENT_WAIT_STAT_KEY;
00031
00037 EventBuilderCore(int rank, std::string name);
00038
00042 EventBuilderCore(EventBuilderCore const&) = delete;
00043
00047 ~EventBuilderCore();
00048
00053 EventBuilderCore& operator=(EventBuilderCore const&) = delete;
00054
00075 bool initialize(fhicl::ParameterSet const& pset);
00076
00082 bool start(art::RunID id);
00083
00088 bool stop();
00089
00094 bool pause();
00095
00100 bool resume();
00101
00106 bool shutdown();
00107
00113 bool soft_initialize(fhicl::ParameterSet const& pset);
00114
00120 bool reinitialize(fhicl::ParameterSet const& pset);
00121
00127 size_t process_fragments();
00128
00140 std::string report(std::string const& which) const;
00141
00142 private:
00143 void initializeEventStore(fhicl::ParameterSet pset);
00144
00145 std::string name_;
00146
00147 std::string init_string_;
00148 fhicl::ParameterSet previous_pset_;
00149
00150 fhicl::ParameterSet data_pset_;
00151 size_t expected_fragments_per_event_;
00152 size_t eod_fragments_received_;
00153 bool use_art_;
00154 art::RunID run_id_;
00155
00156 std::unique_ptr<artdaq::DataReceiverManager> receiver_ptr_;
00157 std::unique_ptr<artdaq::EventStore> event_store_ptr_;
00158 bool art_initialized_;
00159 std::atomic<bool> stop_requested_;
00160 std::atomic<bool> pause_requested_;
00161 std::atomic<bool> run_is_paused_;
00162 std::atomic<bool> processing_fragments_;
00163 size_t inrun_recv_timeout_usec_;
00164 size_t endrun_recv_timeout_usec_;
00165 size_t pause_recv_timeout_usec_;
00166 bool verbose_;
00167
00168 size_t fragment_count_in_run_;
00169
00170
00171
00172
00173
00174
00175
00176
00177 std::mutex flush_mutex_;
00178
00179
00180 artdaq::StatisticsHelper statsHelper_;
00181
00182 std::string buildStatisticsString_();
00183
00184 artdaq::MetricManager metricMan_;
00185
00186 void sendMetrics_();
00187
00188 void logMessage_(std::string const& text);
00189 };
00190
00191 #endif