UniSet  2.7.0
DBServer_MySQL.h
1 /*
2  * Copyright (c) 2015 Pavel Vainerman.
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License as
6  * published by the Free Software Foundation, version 2.1.
7  *
8  * This program is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  * Lesser General Lesser Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 // --------------------------------------------------------------------------
20 // --------------------------------------------------------------------------
21 #ifndef DBServer_MySQL_H_
22 #define DBServer_MySQL_H_
23 // --------------------------------------------------------------------------
24 #include <unordered_map>
25 #include <queue>
26 #include "UniSetTypes.h"
27 #include "MySQLInterface.h"
28 #include "DBServer.h"
29 // -------------------------------------------------------------------------
30 namespace uniset
31 {
32  //------------------------------------------------------------------------------------------
138  public DBServer
139  {
140  public:
141  DBServer_MySQL( uniset::ObjectId id, const std::string& prefix );
142  explicit DBServer_MySQL( const std::string& prefix );
143  virtual ~DBServer_MySQL();
144 
146  static std::shared_ptr<DBServer_MySQL> init_dbserver( int argc, const char* const* argv, const std::string& prefix = "mysql" );
147 
149  static void help_print( int argc, const char* const* argv );
150 
151  inline std::shared_ptr<LogAgregator> logAggregator()
152  {
153  return loga;
154  }
155  inline std::shared_ptr<DebugStream> log()
156  {
157  return dblog;
158  }
159 
160  protected:
161  typedef std::unordered_map<int, std::string> DBTableMap;
162 
163  virtual void initDBServer() override;
164  virtual void initDB( const std::unique_ptr<MySQLInterface>& db ) {};
165  virtual void initDBTableMap(DBTableMap& tblMap) {};
166 
167  virtual void timerInfo( const uniset::TimerMessage* tm ) override;
168  virtual void sysCommand( const uniset::SystemMessage* sm ) override;
169  virtual void sensorInfo( const uniset::SensorMessage* sm ) override;
170  virtual void confirmInfo( const uniset::ConfirmMessage* cmsg ) override;
171  virtual std::string getMonitInfo( const std::string& params ) override;
172 
173  bool writeToBase( const std::string& query );
174  void createTables( MySQLInterface* db );
175 
176  inline std::string tblName( int key )
177  {
178  return tblMap[key].c_str();
179  }
180 
181  enum Timers
182  {
185  lastNumberOfTimer
186  };
187 
188  std::unique_ptr<MySQLInterface> db;
189  int PingTime = { 15000 };
190  int ReconnectTime = { 30000 };
191  bool connect_ok = { false };
193  bool activate = { false };
194 
195  typedef std::queue<std::string> QueryBuffer;
196 
197  QueryBuffer qbuf;
198  size_t qbufSize = { 200 }; // размер буфера сообщений.
199  bool lastRemove = { false };
200 
201  void flushBuffer();
203 
204  private:
205  DBTableMap tblMap;
206 
207  };
208  // ----------------------------------------------------------------------------------
209 } // end of namespace uniset
210 //------------------------------------------------------------------------------------------
211 #endif
Definition: CallbackTimer.h:29
bool activate
Definition: DBServer_MySQL.h:193
static void help_print(int argc, const char *const *argv)
Definition: DBServer_MySQL.cc:423
Definition: DBServer.h:51
Definition: MessageType.h:168
Definition: MessageType.h:234
Definition: DBServer_MySQL.h:183
Definition: DBServer_MySQL.h:184
Definition: DBServer_MySQL.h:137
Definition: MySQLInterface.h:36
Definition: MessageType.h:124
static std::shared_ptr< DBServer_MySQL > init_dbserver(int argc, const char *const *argv, const std::string &prefix="mysql")
Definition: DBServer_MySQL.cc:400
Definition: Mutex.h:31
Definition: MessageType.h:211
static KeyType key(const uniset::ObjectId id, const uniset::ObjectId node)
Definition: UniSetTypes.h:84
long ObjectId
Definition: UniSetTypes_i.idl:30
Timers
Definition: DBServer_MySQL.h:181