CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Utilities.cc
Go to the documentation of this file.
5 
6 //local includes
14 #include <boost/foreach.hpp>
15 #include <fstream>
16 #include <iostream>
17 
19 
20 
22 }
24 
26  std::string positionalParameter):m_name(commandName),
27  m_options(std::string("Usage: ")+m_name+
28  std::string(" [options] ")+positionalParameter
29  +std::string(" \n")),
30  m_positionalOptions(),
31  m_values(),
32  m_dbConnection(0),
33  m_dbSessions(){
34  m_options.add_options()
35  ("debug","switch on debug mode")
36  ("help,h", "help message")
37  ;
38  if(!positionalParameter.empty()) {
39  m_positionalOptions.add( positionalParameter.c_str(), -1);
40  addOption<std::string>(positionalParameter,"",positionalParameter);
41  }
42 }
43 
44 
46  if(m_dbConnection) delete m_dbConnection;
47 }
48 
50  return 0;
51 }
52 
53 int cond::Utilities::run( int argc, char** argv ){
56 
57  std::vector<edm::ParameterSet> psets;
58  edm::ParameterSet pSet;
59  pSet.addParameter("@service_type",std::string("SiteLocalConfigService"));
60  psets.push_back(pSet);
62  m_currentToken = &servToken;
64 
65  int ret = 0;
66  try{
67  parseCommand( argc, argv );
68  if (m_values.count("help")) {
69  std::cout << m_options <<std::endl;;
70  return 0;
71  }
72  if(m_options.find_nothrow("dictionary",false)&& m_values.count("dictionary")){
73  std::vector<std::string> dictionaries =
74  m_values["dictionary"].as<std::vector<std::string> >();
75  if(!dictionaries.empty()){
76  ora::SharedLibraryName libName;
77  BOOST_FOREACH(std::string const & dict, dictionaries)
78  edmplugin::SharedLibrary( libName(dict) );
79  }
80  }
81  ret = execute();
82  if(m_dbConnection){
83  if(m_options.find_nothrow("sql",false) && m_values.count("sql")){
84  cond::SQLReport report(*m_dbConnection);
85  for(std::set<std::string>::const_iterator iSess = m_dbSessions.begin();
86  iSess != m_dbSessions.end();
87  iSess++) report.reportForConnection(*iSess);
88  report.putOnFile();
89  }
90  }
91 
92  }catch( cond::Exception& err ){
93  std::cout << err.what() << std::endl;
94  ret = 1;
95  }catch( const std::exception& exc ){
96  std::cout << exc.what() << std::endl;
97  ret = 1;
98  }
99  m_currentToken = nullptr;
100  return ret;
101 }
102 
103 void
105  addOption<std::string>("authPath","P","path to authentication xml");
106  addOption<std::string>("user","u","user name");
107  addOption<std::string>("pass","p","password");
108 }
109 
110 void
112  addOption<std::string>("connect","c","connection string (required)");
113  m_dbSessions.insert("connect");
114 }
115 
116 void
117 cond::Utilities::addConnectOption(const std::string& connectionOptionName,
118  const std::string& shortName,
119  const std::string& helpEntry ){
120  addOption<std::string>(connectionOptionName,shortName,helpEntry);
121  m_dbSessions.insert(connectionOptionName);
122 }
123 
124 
125 void
127  addConnectOption("logDB","l","logDB(optional");
128 }
129 
130 void
132  addOption<std::vector<std::string> >("dictionary","D","data dictionaries (required if no plugin available)");
133 }
134 
135 void
137  addOption<std::string>("configFile","f","configuration file(optional)");
138 }
139 
140 void
142  addOption<bool>("sql","S","dump the sql output (optional)");
143 }
144 
146  boost::program_options::store(boost::program_options::command_line_parser(argc, argv).options(m_options).positional(m_positionalOptions).run(), m_values);
147  if(m_options.find_nothrow("configFile",false)){
148  std::string configFileName = getValueIfExists("configFile");
149  if (! configFileName.empty()){
150  std::fstream configFile;
151  configFile.open(configFileName.c_str(), std::fstream::in);
152  boost::program_options::store(boost::program_options::parse_config_file(configFile,m_options), m_values);
153  configFile.close();
154  }
155  }
156  boost::program_options::notify(m_values);
157 }
158 
160  return getOptionValue<std::string>("authPath");
161 }
162 
164  return getOptionValue<std::string>("user");
165 }
166 
168  return getOptionValue<std::string>("pass");
169 }
170 
172  return getOptionValue<std::string>("connect");
173 }
174 
176  return getOptionValue<std::string>("logDB");
177 }
178 
180  return getOptionValue<std::string>("dictionary");
181 }
182 
184  return getOptionValue<std::string>("configFile");
185 }
186 
187 
189  const void* found = m_options.find_nothrow(fullName, false);
190  if(!found){
191  std::stringstream message;
192  message << "Utilities::hasOptionValue: option \"" << fullName << "\" is not known by the command.";
193  sendException(message.str());
194  }
195  return m_values.count(fullName);
196 }
197 
199  return m_values.count("debug");
200 }
201 
203  // dummy, to avoid to adapt non-CondCore clients
204 }
205 
207  if(!m_dbConnection){
208  m_dbConnection = new cond::DbConnection();
209  if( hasDebug() ){
210  m_dbConnection->configuration().setMessageLevel(coral::Debug);
211  } else {
212  m_dbConnection->configuration().setMessageLevel(coral::Error);
213  }
214  m_dbConnection->configuration().setPoolAutomaticCleanUp( false );
215  m_dbConnection->configuration().setConnectionTimeOut(0);
216 
217  if(m_options.find_nothrow("authPath", false) &&
218  m_options.find_nothrow("user",false) &&
219  m_options.find_nothrow("pass",false)){
220  std::string authPath = getValueIfExists("authPath");
221  std::string user = getValueIfExists("user");
222  std::string pass = getValueIfExists("pass");
223  if( !authPath.empty() ){
224  m_dbConnection->configuration().setAuthenticationPath(authPath);
225  } else {
226  if( !user.empty() && !pass.empty() ){
227  std::string userenv(std::string("CORAL_AUTH_USER=")+user);
228  std::string passenv(std::string("CORAL_AUTH_PASSWORD=")+pass);
229  ::putenv(const_cast<char*>(userenv.c_str()));
230  ::putenv(const_cast<char*>(passenv.c_str()));
231  }
232  }
233  }
234  if(m_options.find_nothrow("sql",false)){
235  if(m_values.count("sql")) {
236  m_dbConnection->configuration().setSQLMonitoring( true );
237  }
238  }
239  m_dbConnection->configure();
240 
241  }
242 
243 }
244 
246  bool readOnly ){
247  initializeForDbConnection();
248  cond::DbSession session = m_dbConnection->createSession();
249  session.open( connectionString, readOnly );
250  return session;
251 }
253  const std::string& role,
254  bool readOnly ){
255  initializeForDbConnection();
256  cond::DbSession session = m_dbConnection->createSession();
257  session.open( connectionString, role, readOnly );
258  return session;
259 }
261  const std::string& role,
262  bool readOnly ){
263  std::string connectionString = getOptionValue<std::string>( connectionParameterName );
264  return newDbSession( connectionString, role, readOnly );
265 }
266 
268  bool readOnly ){
269  std::string connectionString = getOptionValue<std::string>( connectionParameterName );
270  return newDbSession( connectionString, readOnly );
271 }
272 
274  std::string val("");
275  if(m_values.count(fullName)){
276  val = m_values[fullName].as<std::string>();
277  }
278  return val;
279 }
280 
282  throw cond::UtilitiesError(message);
283 }
284 
286  throw cond::Exception(message);
287 }
288 
std::string getUserValue()
Definition: Utilities.cc:163
void parseCommand(int argc, char **argv)
Definition: Utilities.cc:145
virtual char const * what() const
Definition: Exception.cc:141
virtual ~UtilitiesError()
Definition: Utilities.cc:23
int run(int argc, char **argv)
Definition: Utilities.cc:53
static PluginManager & configure(const Config &)
void open(const std::string &connectionString, bool readOnly=false)
Definition: DbSession.cc:159
std::string getValueIfExists(const std::string &fullName)
Definition: Utilities.cc:273
UtilitiesError(const std::string &message)
Definition: Utilities.cc:21
void addConnectOption()
Definition: Utilities.cc:111
virtual ~Utilities()
Definition: Utilities.cc:45
std::string getPasswordValue()
Definition: Utilities.cc:167
std::string getDictionaryValue()
Definition: Utilities.cc:179
std::string getConfigFileValue()
Definition: Utilities.cc:183
tuple report
Definition: zeeHLT_cff.py:9
std::string getAuthenticationPathValue()
Definition: Utilities.cc:159
PluginManager::Config config()
Definition: standard.cc:21
void addAuthenticationOptions()
Definition: Utilities.cc:104
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:144
void addSQLOutputOption()
Definition: Utilities.cc:141
void addConfigFileOption()
Definition: Utilities.cc:136
static ServiceToken createSet(std::vector< ParameterSet > &)
std::string getConnectValue()
Definition: Utilities.cc:171
void addLogDBOption()
Definition: Utilities.cc:126
void reportForConnection(const std::string &connectionString)
Definition: SQLReport.cc:8
void initializePluginManager()
Definition: Utilities.cc:202
string connectionString
Definition: autoCondHLT.py:4
string fullName
void addDictionaryOption()
Definition: Utilities.cc:131
Utilities(const std::string &commandName, std::string positionalParameter=std::string(""))
Definition: Utilities.cc:25
tuple argc
Definition: dir2webdir.py:38
std::string getLogDBValue()
Definition: Utilities.cc:175
bool hasOptionValue(const std::string &fullName)
Definition: Utilities.cc:188
void sendError(const std::string &message)
Definition: Utilities.cc:281
cond::DbSession openDbSession(const std::string &connectionParameterName, bool readOnly=false)
Definition: Utilities.cc:267
void sendException(const std::string &message)
Definition: Utilities.cc:285
bool putOnFile(std::string fileName=std::string(""))
Definition: SQLReport.cc:13
tuple cout
Definition: gather_cfg.py:121
cond::DbSession newDbSession(const std::string &connectionString, bool readOnly=false)
Definition: Utilities.cc:245
boost::program_options::options_description m_options
Definition: Utilities.h:80
const bool Debug
virtual int execute()
Definition: Utilities.cc:49
void initializeForDbConnection()
Definition: Utilities.cc:206
boost::program_options::positional_options_description m_positionalOptions
Definition: Utilities.h:81