artdaq  v3_12_02
HostMap.hh
1 #ifndef ARTDAQ_DAQDATA_HOSTMAP_HH
2 #define ARTDAQ_DAQDATA_HOSTMAP_HH
3 
4 #include <map>
5 #include <string>
6 #include <vector>
7 
8 #include "fhiclcpp/ParameterSet.h"
9 #include "fhiclcpp/types/Atom.h"
10 #include "fhiclcpp/types/Comment.h"
11 #include "fhiclcpp/types/Sequence.h" // Must pre-empt fhiclcpp/types/Atom.h
12 #include "fhiclcpp/types/Table.h"
13 
14 #include "TRACE/trace.h"
15 
16 namespace artdaq {
17 
18 struct HostMap
19 {
23  struct HostConfig
24  {
26  fhicl::Atom<int> rank{fhicl::Name{"rank"}, fhicl::Comment{"Rank index"}};
28  fhicl::Atom<std::string> host{fhicl::Name{"host"}, fhicl::Comment{"Hostname for artdaq application with this rank"}};
29  };
33  struct Config
34  {
38  fhicl::Sequence<fhicl::Table<HostConfig>> host_map{fhicl::Name("host_map"), fhicl::Comment("List of artdaq applications by rank and location")};
39  };
40 };
41 
42 typedef std::map<int, std::string> hostMap_t;
43 
49 inline std::vector<fhicl::ParameterSet> MakeHostMapPset(std::map<int, std::string> input)
50 {
51  std::vector<fhicl::ParameterSet> output;
52  for (auto& rank : input)
53  {
54  fhicl::ParameterSet rank_output;
55  rank_output.put<int>("rank", rank.first);
56  rank_output.put<std::string>("host", rank.second);
57  output.push_back(rank_output);
58  }
59  return output;
60 }
61 
68 inline hostMap_t MakeHostMap(fhicl::ParameterSet const& pset, hostMap_t map = hostMap_t())
69 {
70  if (pset.has_key("host_map"))
71  {
72  auto hosts = pset.get<std::vector<fhicl::ParameterSet>>("host_map");
73  for (auto& ps : hosts)
74  {
75  auto rank = ps.get<int>("rank");
76  auto hostname = ps.get<std::string>("host");
77 
78  if (map.count(rank) && (map[rank] != hostname))
79  {
80  TLOG(TLVL_ERROR) << "Inconsistent host maps supplied! Check configuration! There may be TCPSocket-related failures!";
81  }
82  map[rank] = hostname;
83  }
84  }
85  return map;
86 }
87 } // namespace artdaq
88 
89 #endif // ARTDAQ_DAQDATA_HOSTMAP_HH
fhicl::Sequence< fhicl::Table< HostConfig > > host_map
List of artdaq applications by rank and location. See artdaq::HostMap::HostConfig ...
Definition: HostMap.hh:38
fhicl::Atom< int > rank
&quot;rank&quot;: Rank index
Definition: HostMap.hh:26
std::vector< fhicl::ParameterSet > MakeHostMapPset(std::map< int, std::string > input)
Create a list of HostMap::HostConfig ParameterSets from a hostMap_t map
Definition: HostMap.hh:49
Template for the host_map configuration parameter.
Definition: HostMap.hh:33
fhicl::Atom< std::string > host
&quot;host&quot;: Hostname for artdaq application with this rank
Definition: HostMap.hh:28
Entries in the host_map should have these parameters. May be used for parameter validation ...
Definition: HostMap.hh:23
std::map< int, std::string > hostMap_t
The host_map is a map associating ranks with artdaq::DestinationInfo objects.
Definition: HostMap.hh:42
hostMap_t MakeHostMap(fhicl::ParameterSet const &pset, hostMap_t map=hostMap_t())
Make a hostMap_t from a HostMap::Config ParameterSet
Definition: HostMap.hh:68