Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
uniset2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UniSet project repositories
uniset2
Commits
09b9fa04
Commit
09b9fa04
authored
Sep 19, 2017
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(LogDB): добавил ограничение на количество создаваемых websocket-ов.
parent
3aab7b07
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
24 additions
and
3 deletions
+24
-3
TODO
TODO
+3
-0
test.xml
conf/test.xml
+1
-0
LogDB.cc
extensions/LogDB/LogDB.cc
+17
-0
LogDB.h
extensions/LogDB/LogDB.h
+3
-3
No files found.
TODO
View file @
09b9fa04
...
...
@@ -86,6 +86,9 @@ DB: Сделать регулируемый буфер на INSERT-ы БД, чт
в ThreadCreator использовать std::function()..
Разобраться с BigEndian и LittleEndian! Использовать htons,htol и т.п. (и реализации для 64bit)
ВОЗМОЖНО СТОИТ:
Уйти от использования libxml2,DebugLog ==> и применять одну библиотеку libpoco (http://pocoproject.org/documentation/index.html)
или всё-таки на boost?
...
...
conf/test.xml
View file @
09b9fa04
...
...
@@ -42,6 +42,7 @@
<LogDB
name=
"LogDB"
>
<logserver
name=
"logserver1"
ip=
"localhost"
port=
"3333"
cmd=
"-s level1"
description=
"Лог сервер процесса управления N1"
/>
<logserver
name=
"logserver2"
ip=
"localhost"
port=
"3333"
cmd=
""
description=
"Лог сервер процесса управления N2"
/>
<logserver
name=
"ses"
ip=
"localhost"
port=
"21107"
cmd=
"-d level8 ALL"
description=
"SES"
/>
</LogDB>
<settings>
...
...
extensions/LogDB/LogDB.cc
View file @
09b9fa04
...
...
@@ -59,6 +59,7 @@ LogDB::LogDB( const string& name , const string& prefix ):
qbufSize
=
conf
->
getArgPInt
(
"--"
+
prefix
+
"buffer-size"
,
it
.
getProp
(
"bufferSize"
),
qbufSize
);
maxdbRecords
=
conf
->
getArgPInt
(
"--"
+
prefix
+
"max-records"
,
it
.
getProp
(
"maxRecords"
),
qbufSize
);
maxwsocks
=
conf
->
getArgPInt
(
"--"
+
prefix
+
"max-websockets"
,
it
.
getProp
(
"maxWebsockets"
),
maxwsocks
);
std
::
string
s_overflow
=
conf
->
getArg2Param
(
"--"
+
prefix
+
"overflow-factor"
,
it
.
getProp
(
"overflowFactor"
),
"1.3"
);
float
ovf
=
atof
(
s_overflow
.
c_str
());
...
...
@@ -322,6 +323,7 @@ void LogDB::help_print()
cout
<<
"--prefix-buffer-size sz - Размер буфера (до скидывания в БД)."
<<
endl
;
cout
<<
"--prefix-max-records sz - Максимальное количество записей в БД. При превышении, старые удаляются. 0 - не удалять"
<<
endl
;
cout
<<
"--prefix-overflow-factor float - Коэффициент переполнения, после которого запускается удаление старых записей. По умолчанию: 1.3"
<<
endl
;
cout
<<
"--prefix-max-websockets num - Максимальное количество websocket-ов"
<<
endl
;
}
// -----------------------------------------------------------------------------
void
LogDB
::
run
(
bool
async
)
...
...
@@ -1009,6 +1011,21 @@ void LogDB::onWebSocketSession(Poco::Net::HTTPServerRequest& req, Poco::Net::HTT
return
;
}
{
uniset_rwmutex_rlock
lk
(
wsocksMutex
);
if
(
wsocks
.
size
()
>=
maxwsocks
)
{
resp
.
setStatus
(
HTTPResponse
::
HTTP_SERVICE_UNAVAILABLE
);
resp
.
setContentType
(
"text/html"
);
resp
.
setStatusAndReason
(
HTTPResponse
::
HTTP_SERVICE_UNAVAILABLE
);
resp
.
setContentLength
(
0
);
std
::
ostream
&
err
=
resp
.
send
();
err
<<
"Error: exceeding the maximum number of open connections ("
<<
maxwsocks
<<
")"
;
err
.
flush
();
return
;
}
}
auto
ws
=
newWebSocket
(
&
req
,
&
resp
,
seg
[
2
]);
if
(
!
ws
)
...
...
extensions/LogDB/LogDB.h
View file @
09b9fa04
...
...
@@ -117,6 +117,8 @@ namespace uniset
\endcode
Где \a logname - это имя логсервера от которого мы хотим получать логи (см. \ref sec_LogDB_Conf).
Количество создаваемых websocket-ов можно ограничить при помощи параметр maxWebsockets (--prefix-max-websockets).
\section sec_LogDB_DETAIL LogDB Технические детали
Вся релизация построена на "однопоточном" eventloop. В нём происходит,
...
...
@@ -131,9 +133,6 @@ namespace uniset
\todo db: Возможно в последствии оптимизировать таблицы (нормализовать) если будет тормозить. Сейчас пока прототип.
\todo db: Пока не очень эффективная работа с датой и временем (заодно подумать всё-таки в чём хранить)
\todo WebSocket: доделать настройку всевозможных timeout-ов
\todo WebSocket: доделать проверку соединения
\todo WebSocket: сделать ограничение на максимальное количество соединений
\todo utils: написать конвертор обычных uniset-логов в БД.
\todo db: возможно всё-таки стоит парсить логи на предмет loglevel, и тогда уж и дату с временем вынимать
\todo web: генерировать html-страничку со списком подключения к логам с использованием готового шаблона
*/
...
...
@@ -355,6 +354,7 @@ namespace uniset
std
::
list
<
std
::
shared_ptr
<
LogWebSocket
>>
wsocks
;
uniset
::
uniset_rwmutex
wsocksMutex
;
size_t
maxwsocks
=
{
50
};
// максимальное количество websocket-ов
#endif
private
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment