Loading proto/Request.proto +2 −0 Original line number Diff line number Diff line Loading @@ -30,4 +30,6 @@ message Request required int32 file_version = 2; required string file_name = 3; } optional Data data = 3; } src/Configuration.h +33 −37 Original line number Diff line number Diff line Loading @@ -31,19 +31,17 @@ protected: Configuration(std::string certificateFile, std::string privateKeyFile, std::string dHTempFile, ExportedTablesMap exportedTablesMap, AuthorisedUsersMap authorisedUsersMap, std::string storagePath, std::string localHost, unsigned int localPort, unsigned int workerNumber) : // std::string localHost, unsigned int localPort, unsigned int workerNumber, // std::string databaseHost, unsigned int databasePort, // std::string databaseUsername, std::string databasePassword, // unsigned int databaseConnectionNumber) : std::string localHost, unsigned int localPort, unsigned int workerNumber, std::string databaseHost, unsigned int databasePort, std::string databaseUsername, std::string databasePassword, unsigned int databaseConnectionNumber) : m_certificateFile(certificateFile), m_privateKeyFile(privateKeyFile), m_dHTempFile(dHTempFile), m_exportedTablesMap(exportedTablesMap), m_authorisedUsersMap(authorisedUsersMap), m_storagePath(storagePath), m_localHost(localHost), m_localPort(localPort), m_workerNumber(workerNumber) {} // m_localHost(localHost), m_localPort(localPort), m_workerNumber(workerNumber), // m_databaseHost(databaseHost), m_databasePort(databasePort), // m_databaseUsername(databaseUsername), m_databasePassword(databasePassword), // m_databaseConnectionNumber(databaseConnectionNumber) {} m_localHost(localHost), m_localPort(localPort), m_workerNumber(workerNumber), m_databaseHost(databaseHost), m_databasePort(databasePort), m_databaseUsername(databaseUsername), m_databasePassword(databasePassword), m_databaseConnectionNumber(databaseConnectionNumber) {} virtual ~Configuration() {} Loading @@ -63,17 +61,15 @@ public: std::string privateKeyFile, std::string dHTempFile, ExportedTablesMap exportedTablesMap, AuthorisedUsersMap authorisedUsersMap, std::string storagePath, std::string localHost, unsigned int localPort, unsigned int workerNumber) // unsigned int localPort, unsigned int workerNumber, // std::string databaseHost, unsigned int databasePort, // std::string databaseUsername, std::string databasePassword, // unsigned int databaseConnectionNumber) unsigned int localPort, unsigned int workerNumber, std::string databaseHost, unsigned int databasePort, std::string databaseUsername, std::string databasePassword, unsigned int databaseConnectionNumber) { Configuration::SP c_sp(new Configuration(certificateFile, privateKeyFile, dHTempFile, exportedTablesMap, authorisedUsersMap, storagePath, localHost, localPort, workerNumber), // localHost, localPort, workerNumber, databaseHost, databasePort, // databaseUsername, databasePassword, databaseConnectionNumber), localHost, localPort, workerNumber, databaseHost, databasePort, databaseUsername, databasePassword, databaseConnectionNumber), Configuration::Deleter()); return c_sp; Loading @@ -91,11 +87,11 @@ public: std::string getLocalHost() const { return m_localHost; } unsigned int getLocalPort() const { return m_localPort; } unsigned int getWorkerNumber() const { return m_workerNumber; } // std::string getDatabaseHost() const { return m_databaseHost; } // unsigned int getDatabasePort() const { return m_databasePort; } // std::string getDatabaseUsername() const { return m_databaseUsername; } // std::string getDatabasePassword() const { return m_databasePassword; } // unsigned int getDatabaseConnectionNumber() const { return m_databaseConnectionNumber; } std::string getDatabaseHost() const { return m_databaseHost; } unsigned int getDatabasePort() const { return m_databasePort; } std::string getDatabaseUsername() const { return m_databaseUsername; } std::string getDatabasePassword() const { return m_databasePassword; } unsigned int getDatabaseConnectionNumber() const { return m_databaseConnectionNumber; } //------------------------------------------------------------------------------ // [Public] Utilities methods Loading Loading @@ -159,20 +155,20 @@ protected: //Number of threads that call io service run methods const unsigned int m_workerNumber; // //Metadata database host // const std::string m_databaseHost; // // //Metadata database port // const unsigned int m_databasePort; // // //Metadata database login username // const std::string m_databaseUsername; // // //Metadata database login password // const std::string m_databasePassword; // // //Metadata database connections number // const unsigned int m_databaseConnectionNumber; //Metadata database host const std::string m_databaseHost; //Metadata database port const unsigned int m_databasePort; //Metadata database login username const std::string m_databaseUsername; //Metadata database login password const std::string m_databasePassword; //Metadata database connections number const unsigned int m_databaseConnectionNumber; }; } //End of namespace Loading src/DBManager.cpp 0 → 100644 +80 −0 Original line number Diff line number Diff line #include <DBManager.h> #include <boost/date_time.hpp> #include <soci/mysql/soci-mysql.h> #include <soci/use.h> namespace DataExporter_ns { //============================================================================== // DBManager::DBManager() //============================================================================== DBManager::DBManager(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp) : Tango::LogAdapter(deviceImpl_p), m_configuration_sp(configuration_sp) { DEBUG_STREAM << "DBManager::DBManager()" << endl; } //============================================================================== // DBManager::DBManager() //============================================================================== DBManager::~DBManager() { DEBUG_STREAM << "DBManager::~DBManager()" << endl; } //============================================================================== // DBManager::DBManager() //============================================================================== DBManager::SP DBManager::create(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp) { DBManager::SP d_sp(new DBManager(deviceImpl_p, configuration_sp), DBManager::Deleter()); return d_sp; } //============================================================================== // DBManager::connect() //============================================================================== void DBManager::connect() throw(soci::soci_error) { DEBUG_STREAM << "DBManager::connect()" << endl; boost::mutex::scoped_lock lock(m_connectionPoolMutex); unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber(); m_connectionPool_sp.reset(new soci::connection_pool(connectionNumber)); std::stringstream connection; connection << " host=" << m_configuration_sp->getDatabaseHost(); connection << " port=" << m_configuration_sp->getDatabasePort(); connection << " user=" << m_configuration_sp->getDatabaseUsername(); connection << " password=" << m_configuration_sp->getDatabasePassword(); #ifdef VERBOSE_DEBUG INFO_STREAM << "DBManager::connect(): " << connection.str() << endl; #endif for(unsigned int i=0; i<connectionNumber; ++i) m_connectionPool_sp->at(i).open(soci::mysql, connection.str()); } //============================================================================== // DBManager::disconnect() //============================================================================== void DBManager::disconnect() { DEBUG_STREAM << "DBManager::disconnect()" << endl; boost::mutex::scoped_lock lock(m_connectionPoolMutex); m_connectionPool_sp.reset(); } } //namespace src/DBManager.h 0 → 100644 +80 −0 Original line number Diff line number Diff line #ifndef DBMANAGER_H #define DBMANAGER_H #include <Configuration.h> #include <tango.h> #include <ctime> #include <boost/tuple/tuple.hpp> #include <boost/optional/optional.hpp> #include <boost/scoped_ptr.hpp> #include <boost/thread/mutex.hpp> #include <soci/soci.h> #include <soci/error.h> #include <soci/row.h> #include <soci/rowset.h> #include <soci/boost-tuple.h> #include <soci/boost-optional.h> #include <soci/session.h> #include <soci/connection-pool.h> namespace DataExporter_ns { class DBManager : public Tango::LogAdapter { public: //------------------------------------------------------------------------------ // [Public] Shared pointer typedef //------------------------------------------------------------------------------ typedef boost::shared_ptr<DBManager> SP; protected: //------------------------------------------------------------------------------ // [Protected] Constructor destructor deleter //------------------------------------------------------------------------------ DBManager(Tango::DeviceImpl*, Configuration::SP); virtual ~DBManager(); class Deleter; friend Deleter; class Deleter { public: void operator()(DBManager* d) { delete d; } }; public: //------------------------------------------------------------------------------ // [Public] Class creation method //------------------------------------------------------------------------------ static DBManager::SP create(Tango::DeviceImpl*, Configuration::SP); //------------------------------------------------------------------------------ // [Public] Connection management methods //------------------------------------------------------------------------------ virtual void connect() throw(soci::soci_error); virtual void disconnect(); protected: //------------------------------------------------------------------------------ // [Protected] Class variables //------------------------------------------------------------------------------ //Configuration shared pointer Configuration::SP m_configuration_sp; //Connection pool mutex boost::mutex m_connectionPoolMutex; //Database connection pool scoped pointer boost::scoped_ptr<soci::connection_pool> m_connectionPool_sp; }; } //End of namespace #endif /* DBMANAGER_H */ src/DataExporter.cpp +82 −83 Original line number Diff line number Diff line Loading @@ -208,11 +208,11 @@ void DataExporter::get_device_property() dev_prop.push_back(Tango::DbDatum("LocalPort")); dev_prop.push_back(Tango::DbDatum("WorkerNumber")); dev_prop.push_back(Tango::DbDatum("EnableSSL")); // dev_prop.push_back(Tango::DbDatum("DatabaseHost")); // dev_prop.push_back(Tango::DbDatum("DatabasePort")); // dev_prop.push_back(Tango::DbDatum("DatabaseUsername")); // dev_prop.push_back(Tango::DbDatum("DatabasePassword")); // dev_prop.push_back(Tango::DbDatum("DatabaseConnectionNumber")); dev_prop.push_back(Tango::DbDatum("DatabaseHost")); dev_prop.push_back(Tango::DbDatum("DatabasePort")); dev_prop.push_back(Tango::DbDatum("DatabaseUsername")); dev_prop.push_back(Tango::DbDatum("DatabasePassword")); dev_prop.push_back(Tango::DbDatum("DatabaseConnectionNumber")); // is there at least one property to be read ? if (dev_prop.size()>0) Loading Loading @@ -337,60 +337,60 @@ void DataExporter::get_device_property() // And try to extract EnableSSL value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> enableSSL; // // Try to initialize DatabaseHost from class property // cl_prop = ds_class->get_class_property(dev_prop[++i].name); // if (cl_prop.is_empty()==false) cl_prop >> databaseHost; // else { // // Try to initialize DatabaseHost from default device value // def_prop = ds_class->get_default_device_property(dev_prop[i].name); // if (def_prop.is_empty()==false) def_prop >> databaseHost; // } // // And try to extract DatabaseHost value from database // if (dev_prop[i].is_empty()==false) dev_prop[i] >> databaseHost; // // // Try to initialize DatabasePort from class property // cl_prop = ds_class->get_class_property(dev_prop[++i].name); // if (cl_prop.is_empty()==false) cl_prop >> databasePort; // else { // // Try to initialize DatabasePort from default device value // def_prop = ds_class->get_default_device_property(dev_prop[i].name); // if (def_prop.is_empty()==false) def_prop >> databasePort; // } // // And try to extract DatabasePort value from database // if (dev_prop[i].is_empty()==false) dev_prop[i] >> databasePort; // // // Try to initialize DatabaseUsername from class property // cl_prop = ds_class->get_class_property(dev_prop[++i].name); // if (cl_prop.is_empty()==false) cl_prop >> databaseUsername; // else { // // Try to initialize DatabaseUsername from default device value // def_prop = ds_class->get_default_device_property(dev_prop[i].name); // if (def_prop.is_empty()==false) def_prop >> databaseUsername; // } // // And try to extract DatabaseUsername value from database // if (dev_prop[i].is_empty()==false) dev_prop[i] >> databaseUsername; // // // Try to initialize DatabasePassword from class property // cl_prop = ds_class->get_class_property(dev_prop[++i].name); // if (cl_prop.is_empty()==false) cl_prop >> databasePassword; // else { // // Try to initialize DatabasePassword from default device value // def_prop = ds_class->get_default_device_property(dev_prop[i].name); // if (def_prop.is_empty()==false) def_prop >> databasePassword; // } // // And try to extract DatabasePassword value from database // if (dev_prop[i].is_empty()==false) dev_prop[i] >> databasePassword; // // // Try to initialize DatabaseConnectionNumber from class property // cl_prop = ds_class->get_class_property(dev_prop[++i].name); // if (cl_prop.is_empty()==false) cl_prop >> databaseConnectionNumber; // else { // // Try to initialize DatabaseConnectionNumber from default device value // def_prop = ds_class->get_default_device_property(dev_prop[i].name); // if (def_prop.is_empty()==false) def_prop >> databaseConnectionNumber; // } // // And try to extract DatabaseConnectionNumber value from database // if (dev_prop[i].is_empty()==false) dev_prop[i] >> databaseConnectionNumber; // Try to initialize DatabaseHost from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); if (cl_prop.is_empty()==false) cl_prop >> databaseHost; else { // Try to initialize DatabaseHost from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); if (def_prop.is_empty()==false) def_prop >> databaseHost; } // And try to extract DatabaseHost value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> databaseHost; // Try to initialize DatabasePort from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); if (cl_prop.is_empty()==false) cl_prop >> databasePort; else { // Try to initialize DatabasePort from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); if (def_prop.is_empty()==false) def_prop >> databasePort; } // And try to extract DatabasePort value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> databasePort; // Try to initialize DatabaseUsername from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); if (cl_prop.is_empty()==false) cl_prop >> databaseUsername; else { // Try to initialize DatabaseUsername from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); if (def_prop.is_empty()==false) def_prop >> databaseUsername; } // And try to extract DatabaseUsername value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> databaseUsername; // Try to initialize DatabasePassword from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); if (cl_prop.is_empty()==false) cl_prop >> databasePassword; else { // Try to initialize DatabasePassword from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); if (def_prop.is_empty()==false) def_prop >> databasePassword; } // And try to extract DatabasePassword value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> databasePassword; // Try to initialize DatabaseConnectionNumber from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); if (cl_prop.is_empty()==false) cl_prop >> databaseConnectionNumber; else { // Try to initialize DatabaseConnectionNumber from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); if (def_prop.is_empty()==false) def_prop >> databaseConnectionNumber; } // And try to extract DatabaseConnectionNumber value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> databaseConnectionNumber; } Loading Loading @@ -434,33 +434,32 @@ void DataExporter::get_device_property() if(localHost.empty()) throw(invalid_argument("LocalHost property is empty or not defined")); if(localPort<1 || localPort>MAX_LOCAL_PORT) if(localPort<1 || localPort>MAX_PORT_NUMBER) throw(invalid_argument("LocalPort property out of range or not defined")); if(workerNumber<1 || workerNumber>MAX_WORKER_NUMBER) throw(invalid_argument("WorkerNumber property out of range or not defined")); // if(databaseHost.empty()) // throw(invalid_argument("DatabaseHost property is empty or not defined")); // // if(databasePort<1 || databasePort>MAX_DB_PORT) // throw(invalid_argument("DatabasePort property out of range or not defined")); // // if(databaseUsername.empty()) // throw(invalid_argument("DatabaseUsername property is empty or not defined")); // // if(databasePassword.empty()) // throw(invalid_argument("DatabasePassword property is empty or not defined")); // // if(databaseConnectionNumber<1 || databaseConnectionNumber>MAX_DB_CONNECTION_NUMBER) // throw(invalid_argument("DatabaseConnectionNumber property out of range or not defined")); if(databaseHost.empty()) throw(invalid_argument("DatabaseHost property is empty or not defined")); if(databasePort<1 || databasePort>MAX_PORT_NUMBER) throw(invalid_argument("DatabasePort property out of range or not defined")); if(databaseUsername.empty()) throw(invalid_argument("DatabaseUsername property is empty or not defined")); if(databasePassword.empty()) throw(invalid_argument("DatabasePassword property is empty or not defined")); if(databaseConnectionNumber<1 || databaseConnectionNumber>MAX_DB_CONNECTION_NUMBER) throw(invalid_argument("DatabaseConnectionNumber property out of range or not defined")); m_configuration_sp = Configuration::create(certificateFile, privateKeyFile, dHTempFile, exportedTablesMap, authorisedUsersMap, storagePath, localHost, localPort, workerNumber); // storagePath, localHost, localPort, workerNumber, // databaseHost, databasePort, databaseUsername, databasePassword, // databaseConnectionNumber); storagePath, localHost, localPort, workerNumber, databaseHost, databasePort, databaseUsername, databasePassword, databaseConnectionNumber); } catch(invalid_argument& ex) { Loading @@ -481,7 +480,7 @@ void DataExporter::get_device_property() //-------------------------------------------------------- void DataExporter::always_executed_hook() { INFO_STREAM << "DataExporter::always_executed_hook() " << device_name << endl; DEBUG_STREAM << "DataExporter::always_executed_hook() " << device_name << endl; /*----- PROTECTED REGION ID(DataExporter::always_executed_hook) ENABLED START -----*/ if(get_state() != Tango::FAULT) Loading Loading @@ -549,14 +548,14 @@ void DataExporter::on() } catch(std::exception& ex) { set_state(Tango::FAULT); set_state(Tango::ALARM); std::stringstream error_stream; error_stream << "DataExporter::On() " << ex.what() << std::endl; set_status(error_stream.str()); } catch(...) { set_state(Tango::FAULT); set_state(Tango::ALARM); set_status("DataExporter::On() unknown error"); } Loading @@ -581,14 +580,14 @@ void DataExporter::off() } catch(std::exception& ex) { set_state(Tango::FAULT); set_state(Tango::ALARM); std::stringstream error_stream; error_stream << "DataExporter::Off() " << ex.what() << std::endl; set_status(error_stream.str()); } catch(...) { set_state(Tango::FAULT); set_state(Tango::ALARM); set_status("DataExporter::Off() unknown error"); } Loading Loading
proto/Request.proto +2 −0 Original line number Diff line number Diff line Loading @@ -30,4 +30,6 @@ message Request required int32 file_version = 2; required string file_name = 3; } optional Data data = 3; }
src/Configuration.h +33 −37 Original line number Diff line number Diff line Loading @@ -31,19 +31,17 @@ protected: Configuration(std::string certificateFile, std::string privateKeyFile, std::string dHTempFile, ExportedTablesMap exportedTablesMap, AuthorisedUsersMap authorisedUsersMap, std::string storagePath, std::string localHost, unsigned int localPort, unsigned int workerNumber) : // std::string localHost, unsigned int localPort, unsigned int workerNumber, // std::string databaseHost, unsigned int databasePort, // std::string databaseUsername, std::string databasePassword, // unsigned int databaseConnectionNumber) : std::string localHost, unsigned int localPort, unsigned int workerNumber, std::string databaseHost, unsigned int databasePort, std::string databaseUsername, std::string databasePassword, unsigned int databaseConnectionNumber) : m_certificateFile(certificateFile), m_privateKeyFile(privateKeyFile), m_dHTempFile(dHTempFile), m_exportedTablesMap(exportedTablesMap), m_authorisedUsersMap(authorisedUsersMap), m_storagePath(storagePath), m_localHost(localHost), m_localPort(localPort), m_workerNumber(workerNumber) {} // m_localHost(localHost), m_localPort(localPort), m_workerNumber(workerNumber), // m_databaseHost(databaseHost), m_databasePort(databasePort), // m_databaseUsername(databaseUsername), m_databasePassword(databasePassword), // m_databaseConnectionNumber(databaseConnectionNumber) {} m_localHost(localHost), m_localPort(localPort), m_workerNumber(workerNumber), m_databaseHost(databaseHost), m_databasePort(databasePort), m_databaseUsername(databaseUsername), m_databasePassword(databasePassword), m_databaseConnectionNumber(databaseConnectionNumber) {} virtual ~Configuration() {} Loading @@ -63,17 +61,15 @@ public: std::string privateKeyFile, std::string dHTempFile, ExportedTablesMap exportedTablesMap, AuthorisedUsersMap authorisedUsersMap, std::string storagePath, std::string localHost, unsigned int localPort, unsigned int workerNumber) // unsigned int localPort, unsigned int workerNumber, // std::string databaseHost, unsigned int databasePort, // std::string databaseUsername, std::string databasePassword, // unsigned int databaseConnectionNumber) unsigned int localPort, unsigned int workerNumber, std::string databaseHost, unsigned int databasePort, std::string databaseUsername, std::string databasePassword, unsigned int databaseConnectionNumber) { Configuration::SP c_sp(new Configuration(certificateFile, privateKeyFile, dHTempFile, exportedTablesMap, authorisedUsersMap, storagePath, localHost, localPort, workerNumber), // localHost, localPort, workerNumber, databaseHost, databasePort, // databaseUsername, databasePassword, databaseConnectionNumber), localHost, localPort, workerNumber, databaseHost, databasePort, databaseUsername, databasePassword, databaseConnectionNumber), Configuration::Deleter()); return c_sp; Loading @@ -91,11 +87,11 @@ public: std::string getLocalHost() const { return m_localHost; } unsigned int getLocalPort() const { return m_localPort; } unsigned int getWorkerNumber() const { return m_workerNumber; } // std::string getDatabaseHost() const { return m_databaseHost; } // unsigned int getDatabasePort() const { return m_databasePort; } // std::string getDatabaseUsername() const { return m_databaseUsername; } // std::string getDatabasePassword() const { return m_databasePassword; } // unsigned int getDatabaseConnectionNumber() const { return m_databaseConnectionNumber; } std::string getDatabaseHost() const { return m_databaseHost; } unsigned int getDatabasePort() const { return m_databasePort; } std::string getDatabaseUsername() const { return m_databaseUsername; } std::string getDatabasePassword() const { return m_databasePassword; } unsigned int getDatabaseConnectionNumber() const { return m_databaseConnectionNumber; } //------------------------------------------------------------------------------ // [Public] Utilities methods Loading Loading @@ -159,20 +155,20 @@ protected: //Number of threads that call io service run methods const unsigned int m_workerNumber; // //Metadata database host // const std::string m_databaseHost; // // //Metadata database port // const unsigned int m_databasePort; // // //Metadata database login username // const std::string m_databaseUsername; // // //Metadata database login password // const std::string m_databasePassword; // // //Metadata database connections number // const unsigned int m_databaseConnectionNumber; //Metadata database host const std::string m_databaseHost; //Metadata database port const unsigned int m_databasePort; //Metadata database login username const std::string m_databaseUsername; //Metadata database login password const std::string m_databasePassword; //Metadata database connections number const unsigned int m_databaseConnectionNumber; }; } //End of namespace Loading
src/DBManager.cpp 0 → 100644 +80 −0 Original line number Diff line number Diff line #include <DBManager.h> #include <boost/date_time.hpp> #include <soci/mysql/soci-mysql.h> #include <soci/use.h> namespace DataExporter_ns { //============================================================================== // DBManager::DBManager() //============================================================================== DBManager::DBManager(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp) : Tango::LogAdapter(deviceImpl_p), m_configuration_sp(configuration_sp) { DEBUG_STREAM << "DBManager::DBManager()" << endl; } //============================================================================== // DBManager::DBManager() //============================================================================== DBManager::~DBManager() { DEBUG_STREAM << "DBManager::~DBManager()" << endl; } //============================================================================== // DBManager::DBManager() //============================================================================== DBManager::SP DBManager::create(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp) { DBManager::SP d_sp(new DBManager(deviceImpl_p, configuration_sp), DBManager::Deleter()); return d_sp; } //============================================================================== // DBManager::connect() //============================================================================== void DBManager::connect() throw(soci::soci_error) { DEBUG_STREAM << "DBManager::connect()" << endl; boost::mutex::scoped_lock lock(m_connectionPoolMutex); unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber(); m_connectionPool_sp.reset(new soci::connection_pool(connectionNumber)); std::stringstream connection; connection << " host=" << m_configuration_sp->getDatabaseHost(); connection << " port=" << m_configuration_sp->getDatabasePort(); connection << " user=" << m_configuration_sp->getDatabaseUsername(); connection << " password=" << m_configuration_sp->getDatabasePassword(); #ifdef VERBOSE_DEBUG INFO_STREAM << "DBManager::connect(): " << connection.str() << endl; #endif for(unsigned int i=0; i<connectionNumber; ++i) m_connectionPool_sp->at(i).open(soci::mysql, connection.str()); } //============================================================================== // DBManager::disconnect() //============================================================================== void DBManager::disconnect() { DEBUG_STREAM << "DBManager::disconnect()" << endl; boost::mutex::scoped_lock lock(m_connectionPoolMutex); m_connectionPool_sp.reset(); } } //namespace
src/DBManager.h 0 → 100644 +80 −0 Original line number Diff line number Diff line #ifndef DBMANAGER_H #define DBMANAGER_H #include <Configuration.h> #include <tango.h> #include <ctime> #include <boost/tuple/tuple.hpp> #include <boost/optional/optional.hpp> #include <boost/scoped_ptr.hpp> #include <boost/thread/mutex.hpp> #include <soci/soci.h> #include <soci/error.h> #include <soci/row.h> #include <soci/rowset.h> #include <soci/boost-tuple.h> #include <soci/boost-optional.h> #include <soci/session.h> #include <soci/connection-pool.h> namespace DataExporter_ns { class DBManager : public Tango::LogAdapter { public: //------------------------------------------------------------------------------ // [Public] Shared pointer typedef //------------------------------------------------------------------------------ typedef boost::shared_ptr<DBManager> SP; protected: //------------------------------------------------------------------------------ // [Protected] Constructor destructor deleter //------------------------------------------------------------------------------ DBManager(Tango::DeviceImpl*, Configuration::SP); virtual ~DBManager(); class Deleter; friend Deleter; class Deleter { public: void operator()(DBManager* d) { delete d; } }; public: //------------------------------------------------------------------------------ // [Public] Class creation method //------------------------------------------------------------------------------ static DBManager::SP create(Tango::DeviceImpl*, Configuration::SP); //------------------------------------------------------------------------------ // [Public] Connection management methods //------------------------------------------------------------------------------ virtual void connect() throw(soci::soci_error); virtual void disconnect(); protected: //------------------------------------------------------------------------------ // [Protected] Class variables //------------------------------------------------------------------------------ //Configuration shared pointer Configuration::SP m_configuration_sp; //Connection pool mutex boost::mutex m_connectionPoolMutex; //Database connection pool scoped pointer boost::scoped_ptr<soci::connection_pool> m_connectionPool_sp; }; } //End of namespace #endif /* DBMANAGER_H */
src/DataExporter.cpp +82 −83 Original line number Diff line number Diff line Loading @@ -208,11 +208,11 @@ void DataExporter::get_device_property() dev_prop.push_back(Tango::DbDatum("LocalPort")); dev_prop.push_back(Tango::DbDatum("WorkerNumber")); dev_prop.push_back(Tango::DbDatum("EnableSSL")); // dev_prop.push_back(Tango::DbDatum("DatabaseHost")); // dev_prop.push_back(Tango::DbDatum("DatabasePort")); // dev_prop.push_back(Tango::DbDatum("DatabaseUsername")); // dev_prop.push_back(Tango::DbDatum("DatabasePassword")); // dev_prop.push_back(Tango::DbDatum("DatabaseConnectionNumber")); dev_prop.push_back(Tango::DbDatum("DatabaseHost")); dev_prop.push_back(Tango::DbDatum("DatabasePort")); dev_prop.push_back(Tango::DbDatum("DatabaseUsername")); dev_prop.push_back(Tango::DbDatum("DatabasePassword")); dev_prop.push_back(Tango::DbDatum("DatabaseConnectionNumber")); // is there at least one property to be read ? if (dev_prop.size()>0) Loading Loading @@ -337,60 +337,60 @@ void DataExporter::get_device_property() // And try to extract EnableSSL value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> enableSSL; // // Try to initialize DatabaseHost from class property // cl_prop = ds_class->get_class_property(dev_prop[++i].name); // if (cl_prop.is_empty()==false) cl_prop >> databaseHost; // else { // // Try to initialize DatabaseHost from default device value // def_prop = ds_class->get_default_device_property(dev_prop[i].name); // if (def_prop.is_empty()==false) def_prop >> databaseHost; // } // // And try to extract DatabaseHost value from database // if (dev_prop[i].is_empty()==false) dev_prop[i] >> databaseHost; // // // Try to initialize DatabasePort from class property // cl_prop = ds_class->get_class_property(dev_prop[++i].name); // if (cl_prop.is_empty()==false) cl_prop >> databasePort; // else { // // Try to initialize DatabasePort from default device value // def_prop = ds_class->get_default_device_property(dev_prop[i].name); // if (def_prop.is_empty()==false) def_prop >> databasePort; // } // // And try to extract DatabasePort value from database // if (dev_prop[i].is_empty()==false) dev_prop[i] >> databasePort; // // // Try to initialize DatabaseUsername from class property // cl_prop = ds_class->get_class_property(dev_prop[++i].name); // if (cl_prop.is_empty()==false) cl_prop >> databaseUsername; // else { // // Try to initialize DatabaseUsername from default device value // def_prop = ds_class->get_default_device_property(dev_prop[i].name); // if (def_prop.is_empty()==false) def_prop >> databaseUsername; // } // // And try to extract DatabaseUsername value from database // if (dev_prop[i].is_empty()==false) dev_prop[i] >> databaseUsername; // // // Try to initialize DatabasePassword from class property // cl_prop = ds_class->get_class_property(dev_prop[++i].name); // if (cl_prop.is_empty()==false) cl_prop >> databasePassword; // else { // // Try to initialize DatabasePassword from default device value // def_prop = ds_class->get_default_device_property(dev_prop[i].name); // if (def_prop.is_empty()==false) def_prop >> databasePassword; // } // // And try to extract DatabasePassword value from database // if (dev_prop[i].is_empty()==false) dev_prop[i] >> databasePassword; // // // Try to initialize DatabaseConnectionNumber from class property // cl_prop = ds_class->get_class_property(dev_prop[++i].name); // if (cl_prop.is_empty()==false) cl_prop >> databaseConnectionNumber; // else { // // Try to initialize DatabaseConnectionNumber from default device value // def_prop = ds_class->get_default_device_property(dev_prop[i].name); // if (def_prop.is_empty()==false) def_prop >> databaseConnectionNumber; // } // // And try to extract DatabaseConnectionNumber value from database // if (dev_prop[i].is_empty()==false) dev_prop[i] >> databaseConnectionNumber; // Try to initialize DatabaseHost from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); if (cl_prop.is_empty()==false) cl_prop >> databaseHost; else { // Try to initialize DatabaseHost from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); if (def_prop.is_empty()==false) def_prop >> databaseHost; } // And try to extract DatabaseHost value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> databaseHost; // Try to initialize DatabasePort from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); if (cl_prop.is_empty()==false) cl_prop >> databasePort; else { // Try to initialize DatabasePort from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); if (def_prop.is_empty()==false) def_prop >> databasePort; } // And try to extract DatabasePort value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> databasePort; // Try to initialize DatabaseUsername from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); if (cl_prop.is_empty()==false) cl_prop >> databaseUsername; else { // Try to initialize DatabaseUsername from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); if (def_prop.is_empty()==false) def_prop >> databaseUsername; } // And try to extract DatabaseUsername value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> databaseUsername; // Try to initialize DatabasePassword from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); if (cl_prop.is_empty()==false) cl_prop >> databasePassword; else { // Try to initialize DatabasePassword from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); if (def_prop.is_empty()==false) def_prop >> databasePassword; } // And try to extract DatabasePassword value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> databasePassword; // Try to initialize DatabaseConnectionNumber from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); if (cl_prop.is_empty()==false) cl_prop >> databaseConnectionNumber; else { // Try to initialize DatabaseConnectionNumber from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); if (def_prop.is_empty()==false) def_prop >> databaseConnectionNumber; } // And try to extract DatabaseConnectionNumber value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> databaseConnectionNumber; } Loading Loading @@ -434,33 +434,32 @@ void DataExporter::get_device_property() if(localHost.empty()) throw(invalid_argument("LocalHost property is empty or not defined")); if(localPort<1 || localPort>MAX_LOCAL_PORT) if(localPort<1 || localPort>MAX_PORT_NUMBER) throw(invalid_argument("LocalPort property out of range or not defined")); if(workerNumber<1 || workerNumber>MAX_WORKER_NUMBER) throw(invalid_argument("WorkerNumber property out of range or not defined")); // if(databaseHost.empty()) // throw(invalid_argument("DatabaseHost property is empty or not defined")); // // if(databasePort<1 || databasePort>MAX_DB_PORT) // throw(invalid_argument("DatabasePort property out of range or not defined")); // // if(databaseUsername.empty()) // throw(invalid_argument("DatabaseUsername property is empty or not defined")); // // if(databasePassword.empty()) // throw(invalid_argument("DatabasePassword property is empty or not defined")); // // if(databaseConnectionNumber<1 || databaseConnectionNumber>MAX_DB_CONNECTION_NUMBER) // throw(invalid_argument("DatabaseConnectionNumber property out of range or not defined")); if(databaseHost.empty()) throw(invalid_argument("DatabaseHost property is empty or not defined")); if(databasePort<1 || databasePort>MAX_PORT_NUMBER) throw(invalid_argument("DatabasePort property out of range or not defined")); if(databaseUsername.empty()) throw(invalid_argument("DatabaseUsername property is empty or not defined")); if(databasePassword.empty()) throw(invalid_argument("DatabasePassword property is empty or not defined")); if(databaseConnectionNumber<1 || databaseConnectionNumber>MAX_DB_CONNECTION_NUMBER) throw(invalid_argument("DatabaseConnectionNumber property out of range or not defined")); m_configuration_sp = Configuration::create(certificateFile, privateKeyFile, dHTempFile, exportedTablesMap, authorisedUsersMap, storagePath, localHost, localPort, workerNumber); // storagePath, localHost, localPort, workerNumber, // databaseHost, databasePort, databaseUsername, databasePassword, // databaseConnectionNumber); storagePath, localHost, localPort, workerNumber, databaseHost, databasePort, databaseUsername, databasePassword, databaseConnectionNumber); } catch(invalid_argument& ex) { Loading @@ -481,7 +480,7 @@ void DataExporter::get_device_property() //-------------------------------------------------------- void DataExporter::always_executed_hook() { INFO_STREAM << "DataExporter::always_executed_hook() " << device_name << endl; DEBUG_STREAM << "DataExporter::always_executed_hook() " << device_name << endl; /*----- PROTECTED REGION ID(DataExporter::always_executed_hook) ENABLED START -----*/ if(get_state() != Tango::FAULT) Loading Loading @@ -549,14 +548,14 @@ void DataExporter::on() } catch(std::exception& ex) { set_state(Tango::FAULT); set_state(Tango::ALARM); std::stringstream error_stream; error_stream << "DataExporter::On() " << ex.what() << std::endl; set_status(error_stream.str()); } catch(...) { set_state(Tango::FAULT); set_state(Tango::ALARM); set_status("DataExporter::On() unknown error"); } Loading @@ -581,14 +580,14 @@ void DataExporter::off() } catch(std::exception& ex) { set_state(Tango::FAULT); set_state(Tango::ALARM); std::stringstream error_stream; error_stream << "DataExporter::Off() " << ex.what() << std::endl; set_status(error_stream.str()); } catch(...) { set_state(Tango::FAULT); set_state(Tango::ALARM); set_status("DataExporter::Off() unknown error"); } Loading