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