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
842621e5
Commit
842621e5
authored
Sep 22, 2017
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(LogDB): реализовал независимость от configure.xml.
Теперь можно указать отдельный xml-файл с настроечной секцией, не содержащий всю структуру uniset.
parent
1218d57e
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
123 additions
and
42 deletions
+123
-42
LogDB.cc
extensions/LogDB/LogDB.cc
+41
-16
LogDB.h
extensions/LogDB/LogDB.h
+3
-2
logdb-conf.xml
extensions/LogDB/logdb-conf.xml
+7
-0
main.cc
extensions/LogDB/main.cc
+0
-2
start_fg_single.sh
extensions/LogDB/start_fg_single.sh
+12
-0
UniSetTypes.h
include/UniSetTypes.h
+29
-0
Configuration.cc
src/Core/Configuration.cc
+3
-22
test_utypes.cc
tests/test_utypes.cc
+28
-0
No files found.
extensions/LogDB/LogDB.cc
View file @
842621e5
...
...
@@ -35,17 +35,43 @@
using
namespace
uniset
;
using
namespace
std
;
// --------------------------------------------------------------------------
LogDB
::
LogDB
(
const
string
&
name
,
const
string
&
prefix
)
:
LogDB
::
LogDB
(
const
string
&
name
,
int
argc
,
const
char
*
const
*
argv
,
const
string
&
prefix
)
:
myname
(
name
)
{
dblog
=
make_shared
<
DebugStream
>
();
auto
conf
=
uniset_conf
();
auto
xml
=
conf
->
getConfXML
();
std
::
string
specconfig
;
conf
->
initLogStream
(
dblog
,
prefix
+
"log"
);
int
i
=
uniset
::
findArgParam
(
"--"
+
prefix
+
"single-confile"
,
argc
,
argv
);
if
(
i
!=
-
1
)
specconfig
=
uniset
::
getArgParam
(
"--"
+
prefix
+
"single-confile"
,
argc
,
argv
,
""
);
xmlNode
*
cnode
=
conf
->
findNode
(
xml
->
getFirstNode
(),
"LogDB"
,
name
);
std
::
shared_ptr
<
UniXML
>
xml
;
if
(
specconfig
.
empty
()
)
{
cout
<<
myname
<<
"(init): init from uniset configure..."
<<
endl
;
uniset_init
(
argc
,
argv
,
"configure.xml"
);
auto
conf
=
uniset_conf
();
xml
=
conf
->
getConfXML
();
conf
->
initLogStream
(
dblog
,
prefix
+
"log"
);
}
else
{
cout
<<
myname
<<
"(init): init from single-confile "
<<
specconfig
<<
endl
;
xml
=
make_shared
<
UniXML
>
();
try
{
xml
->
open
(
specconfig
);
}
catch
(
std
::
exception
&
ex
)
{
throw
ex
;
}
}
xmlNode
*
cnode
=
xml
->
findNode
(
xml
->
getFirstNode
(),
"LogDB"
,
name
);
if
(
!
cnode
)
{
...
...
@@ -57,11 +83,11 @@ LogDB::LogDB( const string& name , const string& prefix ):
UniXML
::
iterator
it
(
cnode
);
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
);
qbufSize
=
uniset
::
getArgPInt
(
"--"
+
prefix
+
"buffer-size"
,
argc
,
argv
,
it
.
getProp
(
"bufferSize"
),
qbufSize
);
maxdbRecords
=
uniset
::
getArgPInt
(
"--"
+
prefix
+
"max-records"
,
argc
,
argv
,
it
.
getProp
(
"maxRecords"
),
qbufSize
);
maxwsocks
=
uniset
::
getArgPInt
(
"--"
+
prefix
+
"max-websockets"
,
argc
,
argv
,
it
.
getProp
(
"maxWebsockets"
),
maxwsocks
);
std
::
string
s_overflow
=
conf
->
getArg2Param
(
"--"
+
prefix
+
"overflow-factor"
,
it
.
getProp
(
"overflowFactor"
),
"1.3"
);
std
::
string
s_overflow
=
uniset
::
getArg2Param
(
"--"
+
prefix
+
"overflow-factor"
,
argc
,
argv
,
it
.
getProp
(
"overflowFactor"
),
"1.3"
);
float
ovf
=
atof
(
s_overflow
.
c_str
());
numOverflow
=
lroundf
(
(
float
)
maxdbRecords
*
ovf
);
...
...
@@ -135,7 +161,7 @@ LogDB::LogDB( const string& name , const string& prefix ):
}
const
std
::
string
dbfile
=
conf
->
getArgParam
(
"--"
+
prefix
+
"dbfile"
,
it
.
getProp
(
"dbfile"
));
const
std
::
string
dbfile
=
uniset
::
getArgParam
(
"--"
+
prefix
+
"dbfile"
,
argc
,
argv
,
it
.
getProp
(
"dbfile"
));
if
(
dbfile
.
empty
()
)
{
...
...
@@ -159,8 +185,8 @@ LogDB::LogDB( const string& name , const string& prefix ):
#ifndef DISABLE_REST_API
httpHost
=
conf
->
getArgParam
(
"--"
+
prefix
+
"httpserver-host"
,
"localhost"
);
httpPort
=
conf
->
getArgInt
(
"--"
+
prefix
+
"httpserver-port"
,
"8080"
);
httpHost
=
uniset
::
getArgParam
(
"--"
+
prefix
+
"httpserver-host"
,
argc
,
argv
,
"localhost"
);
httpPort
=
uniset
::
getArgInt
(
"--"
+
prefix
+
"httpserver-port"
,
argc
,
argv
,
"8080"
);
dblog1
<<
myname
<<
"(init): http server parameters "
<<
httpHost
<<
":"
<<
httpPort
<<
endl
;
Poco
::
Net
::
SocketAddress
sa
(
httpHost
,
httpPort
);
...
...
@@ -303,9 +329,7 @@ size_t LogDB::getFirstOfOldRecord( size_t maxnum )
//--------------------------------------------------------------------------------------------
std
::
shared_ptr
<
LogDB
>
LogDB
::
init_logdb
(
int
argc
,
const
char
*
const
*
argv
,
const
std
::
string
&
prefix
)
{
auto
conf
=
uniset_conf
();
string
name
=
conf
->
getArgParam
(
"--"
+
prefix
+
"name"
,
""
);
string
name
=
uniset
::
getArgParam
(
"--"
+
prefix
+
"name"
,
argc
,
argv
,
"LogDB"
);
if
(
name
.
empty
()
)
{
...
...
@@ -313,12 +337,13 @@ std::shared_ptr<LogDB> LogDB::init_logdb( int argc, const char* const* argv, con
return
nullptr
;
}
return
make_shared
<
LogDB
>
(
name
,
prefix
);
return
make_shared
<
LogDB
>
(
name
,
argc
,
argv
,
prefix
);
}
// -----------------------------------------------------------------------------
void
LogDB
::
help_print
()
{
cout
<<
"Default: prefix='logdb'"
<<
endl
;
cout
<<
"--prefix-single-confile conf.xml - Отдельный конфигурационный файл (не требующий структуры uniset)"
<<
endl
;
cout
<<
"--prefix-name name - Имя. Для поиска настроечной секции в configure.xml"
<<
endl
;
cout
<<
"--prefix-buffer-size sz - Размер буфера (до скидывания в БД)."
<<
endl
;
cout
<<
"--prefix-max-records sz - Максимальное количество записей в БД. При превышении, старые удаляются. 0 - не удалять"
<<
endl
;
...
...
extensions/LogDB/LogDB.h
View file @
842621e5
...
...
@@ -125,7 +125,6 @@ namespace uniset
чтение данных от логсерверов, посылка сообщений в websockets, запись в БД.
При этом обработка запросов REST API реализуется отдельными потоками контролируемыми libpoco.
\todo conf: Отвязать конфигурирование от uniset (uniset_conf). Чтобы можно было просто указать xml-файл с настройками
\todo conf: может быть даже добавить поддержку конфигурирования в формате yaml.
\todo Добавить настройки таймаутов, размера буфера, размера для резервирования под строку, количество потоков для http и т.п.
\todo db: Сделать настройку, для формата даты и времени при выгрузке из БД (при формировании json).
...
...
@@ -135,6 +134,8 @@ namespace uniset
\todo WebSocket: доделать настройку всевозможных timeout-ов
\todo db: возможно всё-таки стоит парсить логи на предмет loglevel, и тогда уж и дату с временем вынимать
\todo web: генерировать html-страничку со списком подключения к логам с использованием готового шаблона
\todo db: ведение БД сделать отключаемым в настройках (чтобы можно было запускать только как сервис наблюдения за логами в реальном времени)
\todo db: сделать в RESET API команду включения или отключения запись логов в БД, для управления "на ходу"
*/
class
LogDB
:
public
EventLoopServer
...
...
@@ -144,7 +145,7 @@ namespace uniset
#endif
{
public
:
LogDB
(
const
std
::
string
&
name
,
const
std
::
string
&
prefix
=
""
);
LogDB
(
const
std
::
string
&
name
,
int
argc
,
const
char
*
const
*
argv
,
const
std
::
string
&
prefix
);
virtual
~
LogDB
();
/*! глобальная функция для инициализации объекта */
...
...
extensions/LogDB/logdb-conf.xml
0 → 100644
View file @
842621e5
<?xml version="1.0" encoding="utf-8"?>
<LogDB
name=
"LogDB"
>
<logserver
name=
"ses"
ip=
"localhost"
port=
"21107"
cmd=
"-d level8 ALL"
description=
"(ses): управление электростанцией"
/>
<logserver
name=
"geu"
ip=
"localhost"
port=
"21202"
cmd=
"-a any -d any .*ulog.* -d level8 ALL"
description=
"(geu): управление ГЭУ1 (правый борт)"
/>
<logserver
name=
"logserver1"
ip=
"localhost"
port=
"3333"
cmd=
"-s level1"
description=
"Лог сервер процесса управления N1"
/>
<logserver
name=
"logserver2"
ip=
"localhost"
port=
"3333"
cmd=
""
description=
"Лог сервер процесса управления N2"
/>
</LogDB>
extensions/LogDB/main.cc
View file @
842621e5
...
...
@@ -17,8 +17,6 @@ int main(int argc, char** argv)
return
0
;
}
uniset_init
(
argc
,
argv
,
"configure.xml"
);
auto
db
=
LogDB
::
init_logdb
(
argc
,
argv
);
if
(
!
db
)
...
...
extensions/LogDB/start_fg_single.sh
0 → 100755
View file @
842621e5
#!/bin/sh
ulimit
-Sc
1000000
#uniset2-start.sh -g \
./uniset2-logdb
--logdb-single-confile
logdb-conf.xml
--logdb-name
LogDB
\
--logdb-log-add-levels
any
\
--logdb-dbfile
./test.db
\
--logdb-buffer-size
5
\
--logdb-httpserver-port
8888
\
--logdb-max-records
20000
\
$*
include/UniSetTypes.h
View file @
842621e5
...
...
@@ -248,6 +248,22 @@ namespace uniset
return
defval
;
}
/*! получить значение, если пустое, то defval, если defval="" return defval2 */
inline
std
::
string
getArg2Param
(
const
std
::
string
&
name
,
int
_argc
,
const
char
*
const
*
_argv
,
const
std
::
string
&
defval
,
const
std
::
string
&
defval2
=
""
)
noexcept
{
std
::
string
s
(
uniset
::
getArgParam
(
name
,
_argc
,
_argv
,
""
));
if
(
!
s
.
empty
()
)
return
s
;
if
(
!
defval
.
empty
()
)
return
defval
;
return
defval2
;
}
inline
int
getArgInt
(
const
std
::
string
&
name
,
int
_argc
,
const
char
*
const
*
_argv
,
const
std
::
string
&
defval
=
""
)
noexcept
...
...
@@ -255,6 +271,19 @@ namespace uniset
return
uni_atoi
(
getArgParam
(
name
,
_argc
,
_argv
,
defval
));
}
inline
int
getArgPInt
(
const
std
::
string
&
name
,
int
_argc
,
const
char
*
const
*
_argv
,
const
std
::
string
&
strdefval
,
int
defval
)
noexcept
{
std
::
string
param
=
uniset
::
getArgParam
(
name
,
_argc
,
_argv
,
strdefval
);
if
(
param
.
empty
()
&&
strdefval
.
empty
()
)
return
defval
;
return
uniset
::
uni_atoi
(
param
);
}
/*! Проверка наличия параметра в командной строке
\param name - название параметра
\param _argc - argc
...
...
src/Core/Configuration.cc
View file @
842621e5
...
...
@@ -515,15 +515,7 @@ namespace uniset
// -------------------------------------------------------------------------
std
::
string
Configuration
::
getArg2Param
(
const
std
::
string
&
name
,
const
std
::
string
&
defval
,
const
std
::
string
&
defval2
)
const
noexcept
{
string
s
(
uniset
::
getArgParam
(
name
,
_argc
,
_argv
,
""
));
if
(
!
s
.
empty
()
)
return
s
;
if
(
!
defval
.
empty
()
)
return
defval
;
return
defval2
;
return
uniset
::
getArg2Param
(
name
,
_argc
,
_argv
,
defval
,
defval2
);
}
string
Configuration
::
getArgParam
(
const
string
&
name
,
const
string
&
defval
)
const
noexcept
...
...
@@ -538,25 +530,14 @@ namespace uniset
int
Configuration
::
getArgPInt
(
const
string
&
name
,
int
defval
)
const
noexcept
{
string
param
=
getArgParam
(
name
,
""
);
if
(
param
.
empty
()
)
return
defval
;
return
uniset
::
uni_atoi
(
param
);
return
uniset
::
getArgPInt
(
name
,
_argc
,
_argv
,
""
,
defval
);
}
int
Configuration
::
getArgPInt
(
const
string
&
name
,
const
string
&
strdefval
,
int
defval
)
const
noexcept
{
string
param
=
getArgParam
(
name
,
strdefval
);
if
(
param
.
empty
()
&&
strdefval
.
empty
()
)
return
defval
;
return
uniset
::
uni_atoi
(
param
);
return
uniset
::
getArgPInt
(
name
,
_argc
,
_argv
,
strdefval
,
defval
);
}
// -------------------------------------------------------------------------
void
Configuration
::
initParameters
()
{
...
...
tests/test_utypes.cc
View file @
842621e5
...
...
@@ -291,6 +291,20 @@ TEST_CASE("UniSetTypes: getArgParam", "[utypes][getArgParam]" )
REQUIRE
(
getArgParam
(
"--unknownparam2"
,
argc
,
argv
)
==
""
);
}
// -----------------------------------------------------------------------------
TEST_CASE
(
"UniSetTypes: getArg2Param"
,
"[utypes][getArg2Param]"
)
{
// inline std::string getArg2Param(const std::string& name,
// int _argc, const char* const* _argv,
// const std::string& defval, const std::string& defval2 = "") noexcept
int
argc
=
5
;
char
*
argv
[]
=
{
"progname"
,
"--param1"
,
"val"
,
"--param2"
,
"val2"
};
REQUIRE
(
getArg2Param
(
"--param1"
,
argc
,
argv
,
""
)
==
"val"
);
REQUIRE
(
getArg2Param
(
"--param2"
,
argc
,
argv
,
""
)
==
"val2"
);
REQUIRE
(
getArg2Param
(
"--unknownparam"
,
argc
,
argv
,
"val3"
)
==
"val3"
);
REQUIRE
(
getArg2Param
(
"--unknownparam2"
,
argc
,
argv
,
""
,
"val4"
)
==
"val4"
);
}
// -----------------------------------------------------------------------------
TEST_CASE
(
"UniSetTypes: getArgInt"
,
"[utypes][getArgInt]"
)
{
// inline int getArgInt( const std::string& name,
...
...
@@ -304,6 +318,20 @@ TEST_CASE("UniSetTypes: getArgInt", "[utypes][getArgInt]" )
REQUIRE
(
getArgInt
(
"--unknownparam"
,
argc
,
argv
,
"3"
)
==
3
);
}
// -----------------------------------------------------------------------------
TEST_CASE
(
"UniSetTypes: getArgPInt"
,
"[utypes][getArgPInt]"
)
{
// inline int getArgPInt( const std::string& name,
// int _argc, const char* const* _argv,
// const std::string& strdefval, int defval ) noexcept
int
argc
=
5
;
char
*
argv
[]
=
{
"progname"
,
"--param1"
,
"1"
,
"--param2"
,
"text"
};
REQUIRE
(
getArgPInt
(
"--param1"
,
argc
,
argv
,
""
,
0
)
==
1
);
REQUIRE
(
getArgPInt
(
"--param2"
,
argc
,
argv
,
""
,
0
)
==
0
);
REQUIRE
(
getArgPInt
(
"--unknownparam"
,
argc
,
argv
,
"3"
,
0
)
==
3
);
REQUIRE
(
getArgPInt
(
"--unknownparam"
,
argc
,
argv
,
""
,
42
)
==
42
);
}
// -----------------------------------------------------------------------------
TEST_CASE
(
"UniSetTypes: is_digit"
,
"[utypes][is_digit]"
)
{
// bool is_digit( const std::string& s ) noexcept;
...
...
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