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

(LogDB): добавил функцию экранирования кавычек перед записью в БД

parent badf49e2
...@@ -265,7 +265,7 @@ void LogDB::addLog( LogDB::Log* log, const string& txt ) ...@@ -265,7 +265,7 @@ void LogDB::addLog( LogDB::Log* log, const string& txt )
<< tm.tv_sec << "','" // timestamp << tm.tv_sec << "','" // timestamp
<< tm.tv_nsec << "','" // usec << tm.tv_nsec << "','" // usec
<< log->name << "','" << log->name << "','"
<< txt << "');"; << qEscapeString(txt) << "');";
qbuf.emplace(q.str()); qbuf.emplace(q.str());
} }
...@@ -964,6 +964,21 @@ string LogDB::qDate( const string& p, const char sep ) ...@@ -964,6 +964,21 @@ string LogDB::qDate( const string& p, const char sep )
return p.substr(0, 4) + "-" + p.substr(4, 2) + "-" + p.substr(6, 2); return p.substr(0, 4) + "-" + p.substr(4, 2) + "-" + p.substr(6, 2);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
std::string LogDB::qEscapeString( const string& txt )
{
ostringstream ret;
for( const auto& c : txt )
{
ret << c;
if( c == '\'' || c == '"' )
ret << c;
}
return ret.str();
}
// -----------------------------------------------------------------------------
void LogDB::onWebSocketSession(Poco::Net::HTTPServerRequest& req, Poco::Net::HTTPServerResponse& resp) void LogDB::onWebSocketSession(Poco::Net::HTTPServerRequest& req, Poco::Net::HTTPServerResponse& resp)
{ {
using Poco::Net::WebSocket; using Poco::Net::WebSocket;
......
...@@ -66,12 +66,13 @@ namespace uniset ...@@ -66,12 +66,13 @@ namespace uniset
и каждый лог будет генерировать не более 2-5 мегабайт записей. Поэтому sqlite должно хватить. и каждый лог будет генерировать не более 2-5 мегабайт записей. Поэтому sqlite должно хватить.
\section sec_LogDB_Conf Конфигурирование LogDB \section sec_LogDB_Conf Конфигурирование LogDB
\code
<LogDB name="LogDB" ...> <LogDB name="LogDB" ...>
<logserver name="" ip=".." port=".." cmd=".." description=".."/> <logserver name="" ip=".." port=".." cmd=".." description=".."/>
<logserver name="" ip=".." port=".." cmd=".." description=".."/> <logserver name="" ip=".." port=".." cmd=".." description=".."/>
<logserver name="" ip=".." port=".." cmd=".."/> <logserver name="" ip=".." port=".." cmd=".."/>
</LogDB> </LogDB>
\endcode
\section sec_LogDB_DB LogDB Работа с БД \section sec_LogDB_DB LogDB Работа с БД
Для оптимизации, запись в БД сделана не по каждому сообщению, а через промежуточнй буффер. Для оптимизации, запись в БД сделана не по каждому сообщению, а через промежуточнй буффер.
...@@ -87,7 +88,7 @@ namespace uniset ...@@ -87,7 +88,7 @@ namespace uniset
--prefix-httpserver-host и --prefix-httpserver-port. --prefix-httpserver-host и --prefix-httpserver-port.
Запросы обрабатываются по пути: api/version/logdb/... Запросы обрабатываются по пути: api/version/logdb/...
\code
/help - Получение списка доступных команд /help - Получение списка доступных команд
/list - список доступных логов /list - список доступных логов
/logs?logname&..parameters.. - получение логов 'logname' /logs?logname&..parameters.. - получение логов 'logname'
...@@ -100,7 +101,7 @@ namespace uniset ...@@ -100,7 +101,7 @@ namespace uniset
По умолчанию: минут По умолчанию: минут
/count?logname - Получить текущее количество записей /count?logname - Получить текущее количество записей
\endcode
\section sec_LogDB_WEBSOCK LogDB Поддержка web socket \section sec_LogDB_WEBSOCK LogDB Поддержка web socket
...@@ -195,6 +196,9 @@ namespace uniset ...@@ -195,6 +196,9 @@ namespace uniset
// преобразование в дату 'YYYY-MM-DD' из строки 'YYYYMMDD' или 'YYYY/MM/DD' // преобразование в дату 'YYYY-MM-DD' из строки 'YYYYMMDD' или 'YYYY/MM/DD'
static std::string qDate(const std::string& p , const char sep = '-'); static std::string qDate(const std::string& p , const char sep = '-');
// экранирование кавычек (удваивание для sqlite)
static std::string qEscapeString( const std::string& s );
std::shared_ptr<LogWebSocket> newWebSocket(Poco::Net::HTTPServerRequest* req, Poco::Net::HTTPServerResponse* resp, const std::string& logname ); std::shared_ptr<LogWebSocket> newWebSocket(Poco::Net::HTTPServerRequest* req, Poco::Net::HTTPServerResponse* resp, const std::string& logname );
void delWebSocket( std::shared_ptr<LogWebSocket>& ws ); void delWebSocket( std::shared_ptr<LogWebSocket>& ws );
#endif #endif
......
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