Commit 3b4b4066 authored by Pavel Vainerman's avatar Pavel Vainerman

(LogDB): добавил отключение записи в БД, чтобы можно было запускать

на работу в режиме "микросервиса", только просмотр логов в реальном времени.
parent 842621e5
...@@ -100,6 +100,11 @@ LogDB::LogDB( const string& name, int argc, const char* const* argv, const strin ...@@ -100,6 +100,11 @@ LogDB::LogDB( const string& name, int argc, const char* const* argv, const strin
flushBufferTimer.set<LogDB, &LogDB::onCheckBuffer>(this); flushBufferTimer.set<LogDB, &LogDB::onCheckBuffer>(this);
wsactivate.set<LogDB, &LogDB::onActivate>(this); wsactivate.set<LogDB, &LogDB::onActivate>(this);
bool dbDisabled = ( uniset::findArgParam("--" + prefix + "db-disable", argc, argv) != -1 );
if( dbDisabled )
dbinfo << myname << "(init): save to database DISABLED.." << endl;
UniXML::iterator sit(cnode); UniXML::iterator sit(cnode);
if( !sit.goChildren() ) if( !sit.goChildren() )
...@@ -146,7 +151,8 @@ LogDB::LogDB( const string& name, int argc, const char* const* argv, const strin ...@@ -146,7 +151,8 @@ LogDB::LogDB( const string& name, int argc, const char* const* argv, const strin
// l->tcp = make_shared<UTCPStream>(); // l->tcp = make_shared<UTCPStream>();
l->dblog = dblog; l->dblog = dblog;
l->signal_on_read().connect(sigc::mem_fun(this, &LogDB::addLog)); if( !dbDisabled )
l->signal_on_read().connect(sigc::mem_fun(this, &LogDB::addLog));
// l->set(loop); // l->set(loop);
logservers.push_back(l); logservers.push_back(l);
...@@ -161,28 +167,30 @@ LogDB::LogDB( const string& name, int argc, const char* const* argv, const strin ...@@ -161,28 +167,30 @@ LogDB::LogDB( const string& name, int argc, const char* const* argv, const strin
} }
const std::string dbfile = uniset::getArgParam("--" + prefix + "dbfile", argc, argv, it.getProp("dbfile")); if( !dbDisabled )
if( dbfile.empty() )
{ {
ostringstream err; const std::string dbfile = uniset::getArgParam("--" + prefix + "dbfile", argc, argv, it.getProp("dbfile"));
err << name << "(init): dbfile (sqlite) not defined. Use: <LogDB name='" << name << "' dbfile='..' ...>";
dbcrit << err.str() << endl;
throw uniset::SystemError(err.str());
}
db = unisetstd::make_unique<SQLiteInterface>(); if( dbfile.empty() )
{
ostringstream err;
err << name << "(init): dbfile (sqlite) not defined. Use: <LogDB name='" << name << "' dbfile='..' ...>";
dbcrit << err.str() << endl;
throw uniset::SystemError(err.str());
}
if( !db->connect(dbfile, false, SQLITE_OPEN_FULLMUTEX) ) db = unisetstd::make_unique<SQLiteInterface>();
{
ostringstream err;
err << myname
<< "(init): DB connection error: "
<< db->error();
dbcrit << err.str() << endl;
throw uniset::SystemError(err.str());
}
if( !db->connect(dbfile, false, SQLITE_OPEN_FULLMUTEX) )
{
ostringstream err;
err << myname
<< "(init): DB connection error: "
<< db->error();
dbcrit << err.str() << endl;
throw uniset::SystemError(err.str());
}
}
#ifndef DISABLE_REST_API #ifndef DISABLE_REST_API
httpHost = uniset::getArgParam("--" + prefix + "httpserver-host", argc, argv, "localhost"); httpHost = uniset::getArgParam("--" + prefix + "httpserver-host", argc, argv, "localhost");
...@@ -222,7 +230,7 @@ LogDB::~LogDB() ...@@ -222,7 +230,7 @@ LogDB::~LogDB()
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
void LogDB::flushBuffer() void LogDB::flushBuffer()
{ {
if( qbuf.empty() || !db->isConnection() ) if( !db || qbuf.empty() || !db->isConnection() )
return; return;
// без BEGIN и COMMIT вставка большого количества данных будет тормозить! // без BEGIN и COMMIT вставка большого количества данных будет тормозить!
...@@ -252,6 +260,9 @@ void LogDB::flushBuffer() ...@@ -252,6 +260,9 @@ void LogDB::flushBuffer()
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
void LogDB::rotateDB() void LogDB::rotateDB()
{ {
if( !db )
return;
// ротация отключена // ротация отключена
if( maxdbRecords == 0 ) if( maxdbRecords == 0 )
return; return;
...@@ -349,6 +360,7 @@ void LogDB::help_print() ...@@ -349,6 +360,7 @@ void LogDB::help_print()
cout << "--prefix-max-records sz - Максимальное количество записей в БД. При превышении, старые удаляются. 0 - не удалять" << endl; cout << "--prefix-max-records sz - Максимальное количество записей в БД. При превышении, старые удаляются. 0 - не удалять" << endl;
cout << "--prefix-overflow-factor float - Коэффициент переполнения, после которого запускается удаление старых записей. По умолчанию: 1.3" << endl; cout << "--prefix-overflow-factor float - Коэффициент переполнения, после которого запускается удаление старых записей. По умолчанию: 1.3" << endl;
cout << "--prefix-max-websockets num - Максимальное количество websocket-ов" << endl; cout << "--prefix-max-websockets num - Максимальное количество websocket-ов" << endl;
cout << "--prefix-db-disable - Отключить запись в БД" << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void LogDB::run( bool async ) void LogDB::run( bool async )
...@@ -370,8 +382,11 @@ void LogDB::evfinish() ...@@ -370,8 +382,11 @@ void LogDB::evfinish()
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void LogDB::evprepare() void LogDB::evprepare()
{ {
flushBufferTimer.set(loop); if( db )
flushBufferTimer.start(0, tmFlushBuffer_sec); {
flushBufferTimer.set(loop);
flushBufferTimer.start(0, tmFlushBuffer_sec);
}
wsactivate.set(loop); wsactivate.set(loop);
wsactivate.start(); wsactivate.start();
...@@ -721,6 +736,16 @@ void LogDB::handleRequest( Poco::Net::HTTPServerRequest& req, Poco::Net::HTTPSer ...@@ -721,6 +736,16 @@ void LogDB::handleRequest( Poco::Net::HTTPServerRequest& req, Poco::Net::HTTPSer
return; return;
} }
if( !db )
{
ostringstream err;
err << "Working with the database is disabled";
auto jdata = respError(resp, HTTPResponse::HTTP_SERVICE_UNAVAILABLE, err.str());
jdata->stringify(out);
out.flush();
return;
}
auto qp = uri.getQueryParameters(); auto qp = uri.getQueryParameters();
resp.setStatus(HTTPResponse::HTTP_OK); resp.setStatus(HTTPResponse::HTTP_OK);
......
...@@ -134,7 +134,6 @@ namespace uniset ...@@ -134,7 +134,6 @@ namespace uniset
\todo WebSocket: доделать настройку всевозможных timeout-ов \todo WebSocket: доделать настройку всевозможных timeout-ов
\todo db: возможно всё-таки стоит парсить логи на предмет loglevel, и тогда уж и дату с временем вынимать \todo db: возможно всё-таки стоит парсить логи на предмет loglevel, и тогда уж и дату с временем вынимать
\todo web: генерировать html-страничку со списком подключения к логам с использованием готового шаблона \todo web: генерировать html-страничку со списком подключения к логам с использованием готового шаблона
\todo db: ведение БД сделать отключаемым в настройках (чтобы можно было запускать только как сервис наблюдения за логами в реальном времени)
\todo db: сделать в RESET API команду включения или отключения запись логов в БД, для управления "на ходу" \todo db: сделать в RESET API команду включения или отключения запись логов в БД, для управления "на ходу"
*/ */
class LogDB: class LogDB:
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
ulimit -Sc 1000000 ulimit -Sc 1000000
#uniset2-start.sh -g \ #uniset2-start.sh -g \
./uniset2-logdb --logdb-single-confile logdb-conf.xml --logdb-name LogDB \ ./uniset2-logdb --logdb-single-confile logdb-conf.xml --logdb-name LogDB --logdb-db-disable \
--logdb-log-add-levels any \ --logdb-log-add-levels any \
--logdb-dbfile ./test.db \ --logdb-dbfile ./test.db \
--logdb-buffer-size 5 \ --logdb-buffer-size 5 \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment