DDS  ver. 2.0
dds-info/src/Options.h
Go to the documentation of this file.
1 // Copyright 2014 GSI, Inc. All rights reserved.
2 //
3 //
4 //
5 #ifndef DDSOPTIONS_H
6 #define DDSOPTIONS_H
7 //=============================================================================
8 // BOOST
9 #include <boost/program_options/options_description.hpp>
10 #include <boost/program_options/parsers.hpp>
11 // DDS
12 #include "ProtocolCommands.h"
13 #include "Res.h"
14 #include "version.h"
15 // STD
16 #include <string>
17 //=============================================================================
18 namespace bpo = boost::program_options;
19 //=============================================================================
20 namespace dds
21 {
22  namespace info_cmd
23  {
25  typedef struct SOptions
26  {
28  : m_bNeedCommanderPid(false)
29  , m_bNeedDDSStatus(false)
30  , m_bNeedAgentsNumber(false)
31  , m_bNeedAgentsList(false)
32  , m_bNeedPropList(false)
33  , m_bNeedPropValues(false)
34  , m_propertyID()
35  , m_sid(boost::uuids::nil_uuid())
36  {
37  }
38 
45  std::string m_propertyID;
46  boost::uuids::uuid m_sid;
47  } SOptions_t;
48  //=============================================================================
49  inline void PrintVersion()
50  {
51  LOG(MiscCommon::log_stdout) << " v" << PROJECT_VERSION_STRING << "\n"
52  << "DDS configuration"
53  << " v" << USER_DEFAULTS_CFG_VERSION << "\n"
55  }
56  //=============================================================================
57  // Command line parser
58  inline bool ParseCmdLine(int _argc, char* _argv[], SOptions* _options)
59  {
60  if (nullptr == _options)
61  throw std::runtime_error("Internal error: options' container is empty.");
62 
63  // Generic options
64  bpo::options_description options("dds-info options");
65  options.add_options()("help,h", "Produce help message");
66  options.add_options()("version,v", "Version information");
67  options.add_options()("session,s", bpo::value<std::string>(), "DDS Session ID");
68  options.add_options()("commander-pid",
69  bpo::bool_switch(&_options->m_bNeedCommanderPid),
70  "Return the pid of the commander server");
71  options.add_options()("status",
72  bpo::bool_switch(&_options->m_bNeedDDSStatus),
73  "Query current status of DDS commander server");
74  options.add_options()("agents-number,n",
75  bpo::bool_switch(&_options->m_bNeedAgentsNumber),
76  "Returns a number of online agents");
77  options.add_options()("agents-list,l",
78  bpo::bool_switch(&_options->m_bNeedAgentsList),
79  "Show detailed info about all online agents");
80  options.add_options()(
81  "prop-list", bpo::bool_switch(&_options->m_bNeedPropList), "Returns a property list from all agents.");
82  options.add_options()("prop-values",
83  bpo::bool_switch(&_options->m_bNeedPropValues),
84  "Returns a key-value pairs from all agents.");
85  options.add_options()("prop-id",
86  bpo::value<std::string>(&_options->m_propertyID),
87  "Specify property IDs that have to be returned.");
88 
89  // Parsing command-line
90  bpo::variables_map vm;
91  bpo::store(bpo::command_line_parser(_argc, _argv).options(options).run(), vm);
92  bpo::notify(vm);
93 
94  // check for non-defaulted arguments
95  bpo::variables_map::const_iterator found =
96  find_if(vm.begin(), vm.end(), [](const bpo::variables_map::value_type& _v) {
97  return (!_v.second.defaulted());
98  });
99 
100  if (vm.count("help") || vm.end() == found)
101  {
102  LOG(MiscCommon::log_stdout) << options;
103  return false;
104  }
105  if (vm.count("version"))
106  {
107  PrintVersion();
108  return false;
109  }
110  if (vm.count("prop-id") && !_options->m_bNeedPropValues)
111  {
112  LOG(MiscCommon::log_stdout) << "Option prop-id has to be used together with prop-values.";
113  return false;
114  }
115 
116  if (vm.count("session"))
117  _options->m_sid = boost::uuids::string_generator()(vm["session"].as<std::string>());
118 
119  return true;
120  }
121  }
122 }
123 #endif
Definition: def.h:154
dds-commander&#39;s container of options
Definition: dds-info/src/Options.h:25
void PrintVersion()
Definition: dds-info/src/Options.h:49
bool m_bNeedAgentsList
Definition: dds-info/src/Options.h:42
#define LOG(severity)
Definition: Logger.h:54
boost::uuids::uuid m_sid
Definition: dds-info/src/Options.h:46
const LPCSTR g_cszReportBugsAddr("Report bugs/comments to fairroot@gsi.de")
Definition: dds-agent/src/AgentConnectionManager.h:18
bool m_bNeedPropValues
Definition: dds-info/src/Options.h:44
bool m_bNeedAgentsNumber
Definition: dds-info/src/Options.h:41
bool m_bNeedDDSStatus
Definition: dds-info/src/Options.h:40
SOptions()
Definition: dds-info/src/Options.h:27
bool m_bNeedPropList
Definition: dds-info/src/Options.h:43
std::string m_propertyID
Definition: dds-info/src/Options.h:45
struct dds::info_cmd::SOptions SOptions_t
dds-commander&#39;s container of options
bool m_bNeedCommanderPid
Definition: dds-info/src/Options.h:39
bool ParseCmdLine(int _argc, char *_argv[], SOptions *_options)
Definition: dds-info/src/Options.h:58