mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
93 lines
2.9 KiB
C++
93 lines
2.9 KiB
C++
#include "ConnectionManager.h"
|
|
#include <sstream>
|
|
|
|
ConnectionManager* ConnectionManager::getInstance()
|
|
{
|
|
static ConnectionManager only;
|
|
return &only;
|
|
}
|
|
|
|
|
|
ConnectionManager::ConnectionManager()
|
|
{
|
|
|
|
}
|
|
|
|
ConnectionManager::~ConnectionManager()
|
|
{
|
|
|
|
}
|
|
|
|
bool ConnectionManager::setConnectionsFromConfig(const Poco::Util::LayeredConfiguration& config, ConnectionType type)
|
|
{
|
|
/*
|
|
phpServer.url = 127.0.0.1:80/gradido_php
|
|
phpServer.db.host = localhost
|
|
phpServer.db.name = cake_gradido_node
|
|
phpServer.db.user = root
|
|
phpServer.db.password =
|
|
phpServer.db.port = 3306
|
|
|
|
loginServer.url =
|
|
loginServer.db.host = localhost
|
|
loginServer.db.name = gradido_login
|
|
loginServer.db.user = gradido_login
|
|
loginServer.db.password = hj2-sk28sKsj8(u_ske
|
|
loginServer.db.port = 3306
|
|
*/
|
|
|
|
/*
|
|
connectionString example: host=localhost;port=3306;db=mydb;user=alice;password=s3cr3t;compress=true;auto-reconnect=true
|
|
*/
|
|
std::string firstKeyPart;
|
|
switch (type) {
|
|
case CONNECTION_MYSQL_LOGIN_SERVER: firstKeyPart = "loginServer"; break;
|
|
case CONNECTION_MYSQL_PHP_SERVER: firstKeyPart = "phpServer"; break;
|
|
default: addError(new Error(__FUNCTION__, "type invalid")); return false;
|
|
}
|
|
std::stringstream dbConfig;
|
|
dbConfig << "host=" << config.getString(firstKeyPart + ".db.host", "localhost") << ";";
|
|
dbConfig << "port=" << config.getInt(firstKeyPart + ".db.port", 3306) << ";";
|
|
std::string dbName = config.getString(firstKeyPart + ".db.name", "");
|
|
if (dbName == "") {
|
|
addError(new Error(__FUNCTION__, "no db name given"));
|
|
return false;
|
|
}
|
|
dbConfig << "db=" << dbName << ";";
|
|
dbConfig << "user=" << config.getString(firstKeyPart + ".db.user", "root") << ";";
|
|
dbConfig << "password=" << config.getString(firstKeyPart + ".db.password", "") << ";";
|
|
dbConfig << "auto-reconnect=true";
|
|
|
|
setConnection(dbConfig.str(), type);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
Poco::Data::Session ConnectionManager::getConnection(ConnectionType type)
|
|
{
|
|
Poco::ScopedLock<Poco::FastMutex> _lock(mWorkingMutex);
|
|
|
|
if (CONNECTION_MYSQL_LOGIN_SERVER != type && CONNECTION_MYSQL_PHP_SERVER != type) {
|
|
addError(new ParamError("[ConnectionManager::getConnection]", "Connection Type unknown", std::to_string(type)));
|
|
throw Poco::NotFoundException("Connection Type unknown", std::to_string(type));
|
|
}
|
|
auto session = mSessionPools.getPool(mSessionPoolNames[type]).get();
|
|
|
|
//return mSessionPoolNames[type];
|
|
if (!session.isConnected()) {
|
|
printf("reconnect called\n");
|
|
try {
|
|
session.reconnect();
|
|
}
|
|
catch (Poco::Exception& e) {
|
|
addError(new ParamError("[ConnectionManager::getConnection]", "reconnect throw exception, try with next new one, without further check", e.displayText()));
|
|
sendErrorsAsEmail();
|
|
return mSessionPools.getPool(mSessionPoolNames[type]).get();
|
|
}
|
|
|
|
}//*/
|
|
//std::string dateTimeString = Poco::DateTimeFormatter::format(Poco::DateTime(), "%d.%m.%y %H:%M:%S");
|
|
//printf("[getConnection] %s impl: %p\n", dateTimeString.data(), session.impl());
|
|
return session;
|
|
} |