Commit 7ab89d38 authored by Marco De Marco's avatar Marco De Marco
Browse files

Database manager draft integrated

parent 5a5de31f
Loading
Loading
Loading
Loading

src/DBManager.cpp

0 → 100644
+94 −0
Original line number Diff line number Diff line
#include <DBManager.h>

#include <soci/mysql/soci-mysql.h>

namespace MetadataExporter_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;

    unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber();

    m_connectionPool_sp.reset(new soci::connection_pool(connectionNumber));
}

//==============================================================================
//      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;

    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();

    unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber();

    for(unsigned int i=0; i<connectionNumber; ++i)
    {
        m_connectionPool_sp->at(i).open(connection.str());

        #ifdef VERBOSE_DEBUG
            INFO_STREAM << "CONNECTION: " << connection.str() << " -> OPEN" << endl;
            INFO_STREAM << "-------------------------------------------------" << endl;
        #endif
    }
}

//==============================================================================
//      DBManager::disconnect()
//==============================================================================
void DBManager::disconnect()
{
    DEBUG_STREAM << "DBManager::disconnect()" << endl;

    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();

    unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber();

    for(unsigned int i=0; i<connectionNumber; ++i)
    {
        m_connectionPool_sp->at(i).close();

        #ifdef VERBOSE_DEBUG
            INFO_STREAM << "CONNECTION: " << connection.str() << " -> CLOSE" << endl;
            INFO_STREAM << "-------------------------------------------------" << endl;
        #endif
    }
}

}   //namespace

src/DBManager.h

0 → 100644
+78 −0
Original line number Diff line number Diff line
/*
 * File:   DBManager.h
 * Author: mdm
 *
 * Created on October 24, 2013, 2:57 PM
 */

#ifndef DBMANAGER_H
#define	DBMANAGER_H

#include <Configuration.h>

#include <tango.h>

#include <boost/scoped_ptr.hpp>

#include <soci/error.h>
#include <soci/session.h>
#include <soci/connection-pool.h>

namespace MetadataExporter_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();

//------------------------------------------------------------------------------
//  [Public] Data access methods
//------------------------------------------------------------------------------

protected:
//------------------------------------------------------------------------------
//  [Protected] Class variables
//------------------------------------------------------------------------------
    //Configuration shared pointer
    Configuration::SP m_configuration_sp;

    //Database connection pool scoped pointer
    boost::scoped_ptr<soci::connection_pool> m_connectionPool_sp;
};

}   //End of namespace

#endif	/* DBMANAGER_H */
+2 −1
Original line number Diff line number Diff line
@@ -43,7 +43,8 @@ void PlainServer::startAccept()
{
    DEBUG_STREAM << "PlainServer::startAccept()" << endl;

    Session::SP session_sp = PlainSession::create(m_deviceImpl_p, m_ioService_sp);
    Session::SP session_sp = PlainSession::create(m_deviceImpl_p,
        m_configuration_sp, m_dBManager_sp, m_ioService_sp);

    m_acceptor_sp->async_accept(session_sp->getSocket(),
        boost::bind(&PlainServer::handleAccept, this,
+6 −4
Original line number Diff line number Diff line
@@ -11,8 +11,10 @@ namespace MetadataExporter_ns
//      PlainSession::PlainSession()
//==============================================================================
PlainSession::PlainSession(Tango::DeviceImpl* deviceImpl_p,
    Configuration::SP configuration_sp, DBManager::SP dBManager_sp,
    boost::shared_ptr<boost::asio::io_service> ioService_sp) :
    Session::Session(deviceImpl_p, ioService_sp), m_plainSocket(*ioService_sp)
    Session::Session(deviceImpl_p,configuration_sp, dBManager_sp, ioService_sp),
    m_plainSocket(*ioService_sp)
{
    DEBUG_STREAM << "PlainSession::PlainSession()" << endl;
}
@@ -35,10 +37,11 @@ PlainSession::~PlainSession()
//      PlainSession::create()
//==============================================================================
Session::SP PlainSession::create(Tango::DeviceImpl* deviceImpl_p,
    Configuration::SP configuration_sp, DBManager::SP dBManager_sp,
    boost::shared_ptr<boost::asio::io_service> ioService_sp)
{
    Session::SP s_sp(new PlainSession(deviceImpl_p, ioService_sp),
        PlainSession::Deleter());
    Session::SP s_sp(new PlainSession(deviceImpl_p, configuration_sp,
    dBManager_sp, ioService_sp), PlainSession::Deleter());

    return s_sp;
}
@@ -114,7 +117,6 @@ void PlainSession::startWriteResponse()

    ResponseSP response_sp = prepareResponse(request_sp);

    //@warning: byteSize return int not unsigned
    boost::uint32_t bodySize = response_sp->ByteSize();

    DEBUG_STREAM << "PlainSession::startWriteResponse() SIZE: " << bodySize << endl;
+7 −4
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ protected:
//------------------------------------------------------------------------------
//	[Protected] Constructor destructor deleter
//------------------------------------------------------------------------------
    PlainSession(Tango::DeviceImpl*,
    PlainSession(Tango::DeviceImpl*, Configuration::SP, DBManager::SP,
        boost::shared_ptr<boost::asio::io_service>);

    virtual ~PlainSession();
@@ -32,11 +32,14 @@ protected:

public:
//------------------------------------------------------------------------------
//	[Public] Users methods
//	[Public] Class creation method
//------------------------------------------------------------------------------
    static Session::SP create(Tango::DeviceImpl*,
        boost::shared_ptr<boost::asio::io_service>);
    static Session::SP create(Tango::DeviceImpl*, Configuration::SP,
        DBManager::SP, boost::shared_ptr<boost::asio::io_service>);

//------------------------------------------------------------------------------
//	[Public] Incoming connection methods
//------------------------------------------------------------------------------
    virtual boost::asio::ip::tcp::socket& getSocket();

    virtual void start();
Loading