UniSet  2.8.0
Открытые члены | Открытые статические члены | Защищенные типы | Защищенные члены | Защищенные данные | Полный список членов класса
Класс uniset::DBServer_MySQL
Граф наследования:uniset::DBServer_MySQL:
Inheritance graph
[см. легенду]
Граф связей класса uniset::DBServer_MySQL:
Collaboration graph
[см. легенду]

Открытые члены

 DBServer_MySQL (uniset::ObjectId id, const std::string &prefix)
 
 DBServer_MySQL (const std::string &prefix)
 
std::shared_ptr< LogAgregatorlogAggregator ()
 
std::shared_ptr< DebugStreamlog ()
 
- Открытые члены унаследованные от uniset::DBServer
 DBServer (uniset::ObjectId id, const std::string &prefix="db")
 
 DBServer (const std::string &prefix="db")
 
virtual uniset::SimpleInfogetInfo (const char *userparam="") override
 
- Открытые члены унаследованные от uniset::UniSetObject
 UniSetObject (const std::string &name, const std::string &section)
 
 UniSetObject (uniset::ObjectId id)
 
virtual CORBA::Boolean exist () override
 
virtual uniset::ObjectId getId () override
 
const uniset::ObjectId getId () const
 
std::string getName () const
 
virtual uniset::ObjectType getType () override
 
const std::string getStrType ()
 
virtual uniset::SimpleInfoapiRequest (const char *query) override
 
virtual void push (const uniset::TransportMessage &msg) override
 поместить сообщение в очередь Подробнее...
 
virtual void pushMessage (const char *msg, ::CORBA::Long mtype, const ::uniset::Timespec &tm, const ::uniset::ProducerInfo &pi, ::CORBA::Long priority, ::CORBA::Long consumer) override
 поместить текстовое сообщение в очередь Подробнее...
 
virtual Poco::JSON::Object::Ptr httpGet (const Poco::URI::QueryParameters &p) override
 
virtual Poco::JSON::Object::Ptr httpHelp (const Poco::URI::QueryParameters &p) override
 
uniset::ObjectPtr getRef () const
 
std::shared_ptr< UniSetObjectget_ptr ()
 
virtual timeout_t askTimer (uniset::TimerId timerid, timeout_t timeMS, clock_t ticks=-1, uniset::Message::Priority p=uniset::Message::High) override
 
- Открытые члены унаследованные от uniset::LT_Object
timeout_t checkTimers (UniSetObject *obj)
 
timeout_t getTimeInterval (uniset::TimerId timerid) const
 
timeout_t getTimeLeft (uniset::TimerId timerid) const
 
- Открытые члены унаследованные от uniset::UHttp::IHttpRequest
virtual Poco::JSON::Object::Ptr httpRequest (const std::string &req, const Poco::URI::QueryParameters &p)
 

Открытые статические члены

static std::shared_ptr< DBServer_MySQLinit_dbserver (int argc, const char *const *argv, const std::string &prefix="mysql")
 
static void help_print (int argc, const char *const *argv)
 
- Открытые статические члены унаследованные от uniset::DBServer
static std::string help_print ()
 

Защищенные типы

enum  Timers { PingTimer, ReconnectTimer, lastNumberOfTimer }
 
typedef std::unordered_map< int, std::string > DBTableMap
 
typedef std::queue< std::string > QueryBuffer
 
- Защищенные типы унаследованные от uniset::LT_Object
typedef std::deque< TimerInfoTimersList
 

Защищенные члены

virtual void initDBServer () override
 
virtual void initDB (const std::unique_ptr< MySQLInterface > &db)
 
virtual void initDBTableMap (DBTableMap &tblMap)
 
virtual void timerInfo (const uniset::TimerMessage *tm) override
 
virtual void sysCommand (const uniset::SystemMessage *sm) override
 
virtual void sensorInfo (const uniset::SensorMessage *sm) override
 
virtual void confirmInfo (const uniset::ConfirmMessage *cmsg) override
 
virtual void onTextMessage (const uniset::TextMessage *msg) override
 
virtual std::string getMonitInfo (const std::string &params) override
 
bool writeToBase (const std::string &query)
 
void createTables (MySQLInterface *db)
 
std::string tblName (int key)
 
void flushBuffer ()
 
- Защищенные члены унаследованные от uniset::DBServer
virtual void processingMessage (const uniset::VoidMessage *msg) override
 
virtual bool activateObject () override
 Активизация объекта (переопределяется для необходимых действий после активизации) Подробнее...
 
- Защищенные члены унаследованные от uniset::UniSetObject
VoidMessagePtr receiveMessage ()
 
VoidMessagePtr waitMessage (timeout_t msec=UniSetTimer::WaitUpTime)
 
void termWaiting ()
 
size_t countMessages ()
 
size_t getCountOfLostMessages () const
 
virtual bool deactivateObject ()
 Деактивация объекта (переопределяется для необходимых действий при завершении работы) Подробнее...
 
void uterminate ()
 
void thread (bool create)
 
void offThread ()
 
void onThread ()
 
virtual void callback ()
 
void setID (uniset::ObjectId id)
 
void setThreadPriority (Poco::Thread::Priority p)
 
void setMaxSizeOfMessageQueue (size_t s)
 
size_t getMaxSizeOfMessageQueue () const
 
bool isActive () const
 
void setActive (bool set)
 
virtual Poco::JSON::Object::Ptr httpGetMyInfo (Poco::JSON::Object::Ptr root)
 
Poco::JSON::Object::Ptr request_conf (const std::string &req, const Poco::URI::QueryParameters &p)
 
Poco::JSON::Object::Ptr request_conf_name (const std::string &name, const std::string &props)
 
- Защищенные члены унаследованные от uniset::LT_Object
virtual std::string getTimerName (int id) const
 
TimersList getTimersList () const
 

Защищенные данные

std::unique_ptr< MySQLInterfacedb
 
int PingTime = { 15000 }
 
int ReconnectTime = { 30000 }
 
bool connect_ok = { false }
 
bool activate = { false }
 
QueryBuffer qbuf
 
size_t qbufSize = { 200 }
 
bool lastRemove = { false }
 
uniset::uniset_rwmutex mqbuf
 
- Защищенные данные унаследованные от uniset::DBServer
std::shared_ptr< LogAgregatorloga
 
std::shared_ptr< DebugStreamdblog
 
std::shared_ptr< LogServerlogserv
 
std::string logserv_host = {""}
 
int logserv_port = {0}
 
const std::string prefix = { "db" }
 
- Защищенные данные унаследованные от uniset::UniSetObject
std::shared_ptr< UInterfaceui
 
std::string myname
 
std::weak_ptr< UniSetManagermymngr
 
- Защищенные данные унаследованные от uniset::LT_Object
timeout_t sleepTime
 

Подробное описание

  \page page_DBServer_MySQL (DBServer_MySQL) Реализация сервиса ведения БД на основе MySQL

  - \ref sec_DBS_Comm
  - \ref sec_DBS_Conf
  - \ref sec_DBS_Tables
  - \ref sec_DBS_Buffer


\section sec_DBS_Comm Общее описание работы DBServer_MySQL
    Сервис предназначен для работы с БД MySQL. В его задачи входит
сохранение всех событий происходящих в системе в БД. К этим
событиям относятся изменение состояния датчиков, различные логи
работы процессов и т.п.
   К моменту запуска, подразумевается, что необходимые таблицы уже
созданы, все необходимые настройки mysql сделаны.
\par
При работе с БД, сервис в основном пишет в БД. Обработка накопленных данных
ведётся уже другими программами (web-интерфейс).

\par
    Для повышения надежности DBServer периодически ( DBServer_MySQL::PingTimer ) проверяет наличие связи с сервером БД.
В случае если связь пропала (или не была установлена при старте) DBServer пытается вновь каждые DBServer::ReconnectTimer
произвести соединение.    При этом все запросы которые поступают для записи в БД, но не могут быть записаны складываются
в буфер (см. \ref sec_DBS_Buffer).
\warning При каждой попытке восстановить соединение DBServer заново читает конф. файл. Поэтому он может подхватить
новые настройки.

\todo Может не сохранять текст, если задан код... (для экономии в БД)

\section sec_DBS_Conf Настройка DBServer
    Объект DBServer берёт настройки из конфигурационного файла из секции \b<LocalDBServer>.
Возможно задать следующие параметры:

- \b dbname - название БД
- \b dbnode - узел БД
- \b dbuser - пользователь
- \b dbpass - пароль для доступа к БД
- \b pingTime - период проверки связи с сервером MySQL
- \b reconnectTime - время повторной попытки соединения с БД

\section sec_DBS_Buffer Защита от потери данных
 Для того, чтобы на момент отсутствия связи с БД данные по возможности не потерялись,
сделан "кольцевой" буфер. Размер которого можно регулировать параметром "--dbserver-buffer-size"
или параметром \b bufferSize=".." в конфигурационном файле секции "<LocalDBSErver...>".

Механизм построен на том, что если связь с mysql сервером отсутствует или пропала,
то сообщения помещаются в нулевой буфер, который "опустошается" как только она восстановится.
Если связь не восстановилась, а буфер достиг максимального заданного размера, то удаляются
более ранние сообщения. Эту логику можно сменить, если указать параметр "--dbserver-buffer-last-remove"
или \b bufferLastRemove="1", то теряться будут сообщения добавляемые в конец.

\section sec_DBS_Tables Таблицы MySQL
  К основным таблицам относятся следующие:
DROP TABLE IF EXISTS `main_history`;
CREATE TABLE `main_history` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`time` time NOT NULL,
`time_usec` int(10) unsigned NOT NULL,
`sensor_id` int(10) unsigned NOT NULL,
`value` double NOT NULL,
`node` int(10) unsigned NOT NULL,
`confirm` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `main_history_sensor_id` (`sensor_id`),
CONSTRAINT `sensor_id_refs_id_3d679168` FOREIGN KEY (`sensor_id`) REFERENCES `main_sensor` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `main_emergencylog`;
CREATE TABLE `main_emergencylog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`time` time NOT NULL,
`time_usec` int(10) unsigned NOT NULL,
`type_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `main_emergencylog_type_id` (`type_id`),
CONSTRAINT `type_id_refs_id_a3133ca` FOREIGN KEY (`type_id`) REFERENCES `main_emergencytype` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `main_emergencyrecords`;
CREATE TABLE `main_emergencyrecords` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`time` time NOT NULL,
`time_usec` int(10) unsigned NOT NULL,
`log_id` int(11) NOT NULL,
`sensor_id` int(10) unsigned NOT NULL,
`value` double NOT NULL,
PRIMARY KEY (`id`),
KEY `main_emergencyrecords_log_id` (`log_id`),
KEY `main_emergencyrecords_sensor_id` (`sensor_id`),
CONSTRAINT `log_id_refs_id_77a37ea9` FOREIGN KEY (`log_id`) REFERENCES `main_emergencylog` (`id`),
CONSTRAINT `sensor_id_refs_id_436bab5e` FOREIGN KEY (`sensor_id`) REFERENCES `main_sensor` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `main_messages`;
CREATE TABLE `main_messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`time` time NOT NULL,
`time_usec` int(10) unsigned NOT NULL,
`text` text NOT NULL,
`node` int(10) unsigned NOT NULL,
`confirm` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `main_messages_key` (date,time,node)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Предупреждения
Временно, для обратной совместимости поле 'time_usec' в таблицах оставлено с таким названием, хотя фактически туда сейчас сохраняется значение в наносекундах!

Перечисления

◆ Timers

Элементы перечислений
PingTimer 

таймер на пере одическую проверку соединения с сервером БД

ReconnectTimer 

таймер на повторную попытку соединения с сервером БД (или восстановления связи)

Методы

◆ help_print()

void DBServer_MySQL::help_print ( int  argc,
const char *const *  argv 
)
static

глобальная функция для вывода help-а

◆ init_dbserver()

std::shared_ptr< DBServer_MySQL > DBServer_MySQL::init_dbserver ( int  argc,
const char *const *  argv,
const std::string &  prefix = "mysql" 
)
static

глобальная функция для инициализации объекта

Данные класса

◆ activate

bool uniset::DBServer_MySQL::activate = { false }
protected

признак наличия соединения с сервером БД