artdaq  v3_06_00
TokenReceiver.hh
1 #ifndef ARTDAQ_DAQRATE_TOKEN_RECEIVER_HH
2 #define ARTDAQ_DAQRATE_TOKEN_RECEIVER_HH
3 
4 #include "artdaq/RoutingPolicies/RoutingMasterPolicy.hh"
5 #include "artdaq/DAQrate/StatisticsHelper.hh"
6 #include "fhiclcpp/ParameterSet.h"
7 #include "fhiclcpp/types/Atom.h"
8 #include "fhiclcpp/types/ConfigurationTable.h"
9 
10 #include <boost/thread.hpp>
11 #include <map>
12 #include <sys/epoll.h>
13 
14 namespace artdaq
15 {
20  {
21  public:
25  struct Config
26  {
28  fhicl::Atom<int> routing_token_port{ fhicl::Name{"routing_token_port"}, fhicl::Comment{"Port to listen for routing tokens on"}, 355555 };
29  };
31  using Parameters = fhicl::WrappedTable<Config>;
32 
38  explicit TokenReceiver(const fhicl::ParameterSet& ps, std::shared_ptr<RoutingMasterPolicy> policy,
39  detail::RoutingMasterMode routing_mode, size_t number_of_senders, size_t update_interval_msec);
40 
44  virtual ~TokenReceiver();
45 
49  void startTokenReception();
50 
54  void pauseTokenReception() {reception_is_paused_ = true;}
55 
59  void resumeTokenReception() {reception_is_paused_ = false;}
60 
65  void stopTokenReception(bool force = false);
66 
72  void setStatsHelper(std::shared_ptr<StatisticsHelper> helper, std::string const& stat_key)
73  {
74  statsHelperPtr_ = helper;
75  tokens_received_stat_key_ = stat_key;
76  }
77 
82  void setRunNumber(uint32_t run) {run_number_ = run;}
83 
88  size_t getReceivedTokenCount() const {return received_token_count_;}
89 
90  private:
91  void receiveTokensLoop_();
92 
93  int token_port_;
94  std::shared_ptr<RoutingMasterPolicy> policy_;
95  detail::RoutingMasterMode routing_mode_;
96  size_t number_of_senders_;
97  size_t update_interval_msec_;
98 
99  int token_socket_;
100  std::vector<epoll_event> receive_token_events_;
101  std::unordered_map<int, std::string> receive_token_addrs_;
102  int token_epoll_fd_;
103 
104  boost::thread token_thread_;
105  std::atomic<bool> thread_is_running_;
106  std::atomic<bool> reception_is_paused_;
107  std::atomic<bool> shutdown_requested_;
108  std::atomic<uint32_t> run_number_;
109 
110  std::atomic<size_t> received_token_count_;
111  std::unordered_map<int, size_t> received_token_counter_;
112  std::shared_ptr<StatisticsHelper> statsHelperPtr_;
113  std::string tokens_received_stat_key_;
114  };
115 }
116 
117 #endif //ARTDAQ_DAQRATE_TOKEN_RECEIVER_HH
Configuration of the TokenReceiver. May be used for parameter validation.
RoutingMasterMode
Mode indicating whether the RoutingMaster is routing events by Sequence ID or by Send Count...
fhicl::WrappedTable< Config > Parameters
Used for ParameterSet validation (if desired)
Receives event builder &quot;free buffer&quot; tokens and adds them to a specified RoutingPolicy.
size_t getReceivedTokenCount() const
Returns the number of tokens that have been received.
void stopTokenReception(bool force=false)
Stops the reception of event builder tokens.
void setRunNumber(uint32_t run)
Sets the current run number.
TokenReceiver(const fhicl::ParameterSet &ps, std::shared_ptr< RoutingMasterPolicy > policy, detail::RoutingMasterMode routing_mode, size_t number_of_senders, size_t update_interval_msec)
TokenReceiver Constructor.
Definition: TokenReceiver.cc:8
fhicl::Atom< int > routing_token_port
&quot;routing_token_port&quot; (Default: 35555) : Port on which routing tokens will be received ...
void startTokenReception()
Starts the reception of event builder tokens.
void setStatsHelper(std::shared_ptr< StatisticsHelper > helper, std::string const &stat_key)
Specifies a StatisticsHelper instance to use when gathering statistics.
virtual ~TokenReceiver()
TokenReceiver Destructor.
void pauseTokenReception()
Temporarily suspends the reception of event builder tokens.
void resumeTokenReception()
Resumes the reception of event builder tokens after a suspension.