From f10adc36275eeda8625949a684aa8c5b099e200d Mon Sep 17 00:00:00 2001 From: Andrea Bignamini <bignamini@oats.inaf.it> Date: Fri, 5 May 2017 12:36:47 +0200 Subject: [PATCH] Add remoteSchema and remoteTable The remoteSchema and remote Table device properties have been added. The shcema and the table names on the local machine can be different with respect to the names in the remote machine. --- src/Configuration.h | 15 ++++++++++++-- src/MetadataImporter.cpp | 38 ++++++++++++++++++++++++++++++++--- src/MetadataImporter.h | 4 ++++ src/MetadataImporter.xmi | 8 ++++++++ src/MetadataImporterClass.cpp | 26 ++++++++++++++++++++++++ src/ProtocolManager.cpp | 18 +++++++++++------ 6 files changed, 98 insertions(+), 11 deletions(-) diff --git a/src/Configuration.h b/src/Configuration.h index 98bf4d6..f54a8b2 100644 --- a/src/Configuration.h +++ b/src/Configuration.h @@ -21,13 +21,15 @@ private: Configuration(std::string certificateFile, std::string remoteHost, unsigned int remotePort, std::string remoteUsername, std::string remotePassword, + std::string remoteSchema, std::string remoteTable, std::string databaseHost, unsigned int databasePort, std::string databaseUsername, std::string databasePassword, std::string databaseSchema, std::string databaseTable, unsigned int refreshTime, unsigned int timeout) : m_certificateFile (certificateFile), m_remoteHost(remoteHost), m_remotePort(remotePort), m_remoteUsername(remoteUsername), - m_remotePassword(remotePassword), m_databaseHost(databaseHost), + m_remotePassword(remotePassword), m_remoteSchema(remoteSchema), + m_remoteTable(remoteTable), m_databaseHost(databaseHost), m_databasePort(databasePort), m_databaseUsername(databaseUsername), m_databasePassword(databasePassword), m_databaseSchema(databaseSchema), m_databaseTable(databaseTable), m_refreshTime(refreshTime), @@ -50,13 +52,14 @@ public: static Configuration::SP create(std::string certificateFile, std::string remoteHost, unsigned int remotePort, std::string remoteUsername, std::string remotePassword, + std::string remoteSchema, std::string remoteTable, std::string databaseHost, unsigned int databasePort, std::string databaseUsername, std::string databasePassword, std::string databaseSchema, std::string databaseTable, unsigned int refreshTime, unsigned int timeout) { Configuration::SP c_sp(new Configuration(certificateFile, remoteHost, - remotePort, remoteUsername, remotePassword, databaseHost, + remotePort, remoteUsername, remotePassword, remoteSchema, remoteTable, databaseHost, databasePort, databaseUsername, databasePassword, databaseSchema, databaseTable, refreshTime, timeout), Configuration::Deleter()); @@ -72,6 +75,8 @@ public: unsigned int getRemotePort() const { return m_remotePort; } std::string getRemoteUsername() const { return m_remoteUsername; } std::string getRemotePassword() const { return m_remotePassword; } + std::string getRemoteSchema() const { return m_remoteSchema; } + std::string getRemoteTable() const { return m_remoteTable; } std::string getDatabaseHost() const { return m_databaseHost; } unsigned int getDatabasePort() const { return m_databasePort; } std::string getDatabaseUsername() const { return m_databaseUsername; } @@ -100,6 +105,12 @@ private: //Metadata exporter remote password const std::string m_remotePassword; + //Metadata remote database schema + const std::string m_remoteSchema; + + //Metadata remote database table + const std::string m_remoteTable; + //Metadata local database host const std::string m_databaseHost; diff --git a/src/MetadataImporter.cpp b/src/MetadataImporter.cpp index 51af1f0..9d81565 100644 --- a/src/MetadataImporter.cpp +++ b/src/MetadataImporter.cpp @@ -214,6 +214,8 @@ void MetadataImporter::get_device_property() dev_prop.push_back(Tango::DbDatum("RemotePort")); dev_prop.push_back(Tango::DbDatum("RemoteUsername")); dev_prop.push_back(Tango::DbDatum("RemotePassword")); + dev_prop.push_back(Tango::DbDatum("RemoteSchema")); + dev_prop.push_back(Tango::DbDatum("RemoteTable")); dev_prop.push_back(Tango::DbDatum("EnableSSL")); dev_prop.push_back(Tango::DbDatum("DatabaseHost")); dev_prop.push_back(Tango::DbDatum("DatabasePort")); @@ -293,6 +295,28 @@ void MetadataImporter::get_device_property() // And try to extract RemotePassword value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> remotePassword; + // Try to initialize RemoteSchema from class property + cl_prop = ds_class->get_class_property(dev_prop[++i].name); + if (cl_prop.is_empty()==false) cl_prop >> remoteSchema; + else { + // Try to initialize RemoteSchema from default device value + def_prop = ds_class->get_default_device_property(dev_prop[i].name); + if (def_prop.is_empty()==false) def_prop >> remoteSchema; + } + // And try to extract RemoteSchema value from database + if (dev_prop[i].is_empty()==false) dev_prop[i] >> remoteSchema; + + // Try to initialize RemoteTable from class property + cl_prop = ds_class->get_class_property(dev_prop[++i].name); + if (cl_prop.is_empty()==false) cl_prop >> remoteTable; + else { + // Try to initialize RemoteTable from default device value + def_prop = ds_class->get_default_device_property(dev_prop[i].name); + if (def_prop.is_empty()==false) def_prop >> remoteTable; + } + // And try to extract RemoteTable value from database + if (dev_prop[i].is_empty()==false) dev_prop[i] >> remoteTable; + // Try to initialize EnableSSL from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); if (cl_prop.is_empty()==false) cl_prop >> enableSSL; @@ -421,6 +445,14 @@ void MetadataImporter::get_device_property() if(remotePassword.empty()) throw(invalid_argument("RemotePassword property is empty or not defined")); + // If remoteSchema is not set, use databaseSchema + if(remoteSchema.empty()) + remoteSchema=databaseSchema; + + // If remoteTable is not set, use databaseTable + if(remoteTable.empty()) + remoteTable=databaseTable; + if(enableSSL) { if(certificateFile.empty()) @@ -454,9 +486,9 @@ void MetadataImporter::get_device_property() throw(invalid_argument("Timeout property out of range or not defined")); m_configuration_sp = Configuration::create(certificateFile, - remoteHost, remotePort, remoteUsername, remotePassword, databaseHost, - databasePort, databaseUsername, databasePassword, databaseSchema, - databaseTable, refreshTime, timeout); + remoteHost, remotePort, remoteUsername, remotePassword, remoteSchema, remoteTable, databaseHost, + databasePort, databaseUsername, databasePassword, databaseSchema, + databaseTable, refreshTime, timeout); } catch(invalid_argument& ex) { diff --git a/src/MetadataImporter.h b/src/MetadataImporter.h index 591cadd..698b568 100644 --- a/src/MetadataImporter.h +++ b/src/MetadataImporter.h @@ -100,6 +100,10 @@ public: string remoteUsername; // RemotePassword: Metadata exporter remote password string remotePassword; + // RemoteSchema: Metadata remote database schema + string remoteSchema; + // RemoteTable: Metadata remote database table + string remoteTable; // EnableSSL: Enable or disable SSL connections Tango::DevBoolean enableSSL; // DatabaseHost: Metadata local database host diff --git a/src/MetadataImporter.xmi b/src/MetadataImporter.xmi index 0705401..e039d3e 100644 --- a/src/MetadataImporter.xmi +++ b/src/MetadataImporter.xmi @@ -29,6 +29,14 @@ <type xsi:type="pogoDsl:StringType"/> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> </deviceProperties> + <deviceProperties name="RemoteSchema" description="Metadata remote database schema"> + <type xsi:type="pogoDsl:StringType"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </deviceProperties> + <deviceProperties name="RemoteTable" description="Metadata remote database table"> + <type xsi:type="pogoDsl:StringType"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </deviceProperties> <deviceProperties name="EnableSSL" description="Enable or disable SSL connections"> <type xsi:type="pogoDsl:BooleanType"/> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> diff --git a/src/MetadataImporterClass.cpp b/src/MetadataImporterClass.cpp index 1af6970..2a6106f 100644 --- a/src/MetadataImporterClass.cpp +++ b/src/MetadataImporterClass.cpp @@ -477,6 +477,32 @@ void MetadataImporterClass::set_default_property() dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } + else + add_wiz_dev_prop(prop_name, prop_desc); + prop_name = "RemoteSchema"; + prop_desc = "Metadata remote database schema"; + prop_def = ""; + vect_data.clear(); + if (prop_def.length()>0) + { + Tango::DbDatum data(prop_name); + data << vect_data ; + dev_def_prop.push_back(data); + add_wiz_dev_prop(prop_name, prop_desc, prop_def); + } + else + add_wiz_dev_prop(prop_name, prop_desc); + prop_name = "RemoteTable"; + prop_desc = "Metadata remote database table"; + prop_def = ""; + vect_data.clear(); + if (prop_def.length()>0) + { + Tango::DbDatum data(prop_name); + data << vect_data ; + dev_def_prop.push_back(data); + add_wiz_dev_prop(prop_name, prop_desc, prop_def); + } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "DatabaseTable"; diff --git a/src/ProtocolManager.cpp b/src/ProtocolManager.cpp index 41dd047..1885d1d 100644 --- a/src/ProtocolManager.cpp +++ b/src/ProtocolManager.cpp @@ -177,13 +177,15 @@ RequestSP ProtocolManager::createValidation() throw(std::runtime_error) std::string schema = m_configuration_sp->getDatabaseSchema(); std::string table = m_configuration_sp->getDatabaseTable(); + std::string rschema = m_configuration_sp->getRemoteSchema(); + std::string rtable = m_configuration_sp->getRemoteTable(); - INFO_STREAM << "ProtocolManager::createValidation() Send schema " + INFO_STREAM << "ProtocolManager::createValidation() Send local schema " << schema << " table " << table << " to " << m_remoteEndpoint << endl; Request::Validation* validation = request_sp->mutable_validation(); - validation->set_schema(schema); - validation->set_table(table); + validation->set_schema(rschema); + validation->set_table(rtable); DBManager::InformationList informationList = m_dBManager_sp->retrieveInformation(schema, table); @@ -234,6 +236,8 @@ RequestSP ProtocolManager::createMetadata() std::string schema = m_configuration_sp->getDatabaseSchema(); std::string table = m_configuration_sp->getDatabaseTable(); + std::string rschema = m_configuration_sp->getRemoteSchema(); + std::string rtable = m_configuration_sp->getRemoteTable(); std::tm tmTimestamp = m_dBManager_sp->retrieveLastTimestamp(schema, table); @@ -241,7 +245,7 @@ RequestSP ProtocolManager::createMetadata() boost::posix_time::ptime_from_tm(tmTimestamp); INFO_STREAM << "ProtocolManager::createMetadata() Send schema " - << schema << " table " << table << " timestamp " + << rschema << " table " << rtable << " timestamp " << boost::posix_time::to_simple_string(ptTimestamp) << " to " << m_remoteEndpoint << endl; @@ -318,10 +322,12 @@ void ProtocolManager::processMetadata(ResponseSP response_sp) { std::string schema = m_configuration_sp->getDatabaseSchema(); std::string table = m_configuration_sp->getDatabaseTable(); + std::string rschema = m_configuration_sp->getRemoteSchema(); + std::string rtable = m_configuration_sp->getRemoteTable(); INFO_STREAM << "ProtocolManager::processMetadata() State ACCEPTED " - << "status " << metadata.status() << " schema " << schema - << " table " << table << " from " << m_remoteEndpoint << endl; + << "status " << metadata.status() << " schema " << rschema + << " table " << rtable << " from " << m_remoteEndpoint << endl; if(metadata.rows_size() != 0) { -- GitLab