artdaq  v3_07_01
PrintSharedMemory.cc
1 
2 #include <boost/program_options.hpp>
3 #include <sstream>
4 namespace bpo = boost::program_options;
5 
6 #include "artdaq-core/Core/SharedMemoryEventReceiver.hh"
7 #include "artdaq/DAQdata/Globals.hh"
8 #include "fhiclcpp/make_ParameterSet.h"
9 
10 int main(int argc, char* argv[])
11 {
12  artdaq::configureMessageFacility("PrintSharedMemory");
13 
14  std::ostringstream descstr;
15  descstr << argv[0]
16  << " <-c <config-file>> <other-options> [<source-file>]+";
17  bpo::options_description desc(descstr.str());
18  desc.add_options()("config,c", bpo::value<std::string>(), "Configuration file.")("events,e", "Print event information")("key,M", bpo::value<std::string>(), "Shared Memory to attach to")("help,h", "produce help message");
19  bpo::variables_map vm;
20  try
21  {
22  bpo::store(bpo::command_line_parser(argc, argv).options(desc).run(), vm);
23  bpo::notify(vm);
24  }
25  catch (bpo::error const& e)
26  {
27  std::cerr << "Exception from command line processing in " << argv[0]
28  << ": " << e.what() << "\n";
29  return -1;
30  }
31  if (vm.count("help"))
32  {
33  std::cout << desc << std::endl;
34  return 1;
35  }
36  if (!vm.count("config") && !vm.count("key"))
37  {
38  std::cerr << "Exception from command line processing in " << argv[0]
39  << ": no configuration file given.\n"
40  << "For usage and an options list, please do '"
41  << argv[0] << " --help"
42  << "'.\n";
43  return 2;
44  }
45 
46  fhicl::ParameterSet pset;
47  if (vm.count("key"))
48  {
49  pset.put("shared_memory_key", vm["key"].as<std::string>());
50  pset.put("buffer_count", 1);
51  pset.put("max_event_size_bytes", 1024);
52  pset.put("ReadEventInfo", vm.count("events") > 0);
53  }
54  else
55  {
56  if (getenv("FHICL_FILE_PATH") == nullptr)
57  {
58  std::cerr
59  << "INFO: environment variable FHICL_FILE_PATH was not set. Using \".\"\n";
60  setenv("FHICL_FILE_PATH", ".", 0);
61  }
62  cet::filepath_lookup_after1 lookup_policy("FHICL_FILE_PATH");
63  fhicl::make_ParameterSet(vm["config"].as<std::string>(), lookup_policy, pset);
64  }
65 
66  if (!pset.has_key("shared_memory_key")) std::cerr << "You must specify a shared_memory_key in FHiCL or provide one on the command line!" << std::endl;
67 
68  if (pset.get<bool>("ReadEventInfo", false))
69  {
70  artdaq::SharedMemoryEventReceiver t(pset.get<uint32_t>("shared_memory_key"), pset.get<uint32_t>("broadcast_shared_memory_key", pset.get<uint32_t>("shared_memory_key")));
71  std::cout << t.toString() << std::endl;
72  }
73  else
74  {
75  artdaq::SharedMemoryManager t(pset.get<uint32_t>("shared_memory_key"),
76  pset.get<size_t>("buffer_count"),
77  pset.get<size_t>("max_event_size_bytes"),
78  pset.get<size_t>("stale_buffer_timeout_usec", 1000000));
79  std::cout << t.toString() << std::endl;
80  }
81 }