Commit bc664eb1 authored by Pavel Vainerman's avatar Pavel Vainerman

(LogDB): сделал единую утилиту uniset2-logdb-adm, для работы с БД

(создание, загрузка логов, ...)
parent 3b4b4066
...@@ -45,7 +45,7 @@ namespace uniset ...@@ -45,7 +45,7 @@ namespace uniset
{ {
//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------
/*! /*!
\page page_LogDB База логов \page page_LogDB База логов (LogDB)
- \ref sec_LogDB_Comm - \ref sec_LogDB_Comm
- \ref sec_LogDB_Conf - \ref sec_LogDB_Conf
...@@ -53,6 +53,7 @@ namespace uniset ...@@ -53,6 +53,7 @@ namespace uniset
- \ref sec_LogDB_REST - \ref sec_LogDB_REST
- \ref sec_LogDB_WEBSOCK - \ref sec_LogDB_WEBSOCK
- \ref sec_LogDB_DETAIL - \ref sec_LogDB_DETAIL
- \ref sec_LogDB_ADMIN
\section sec_LogDB_Comm Общее описание работы LogDB \section sec_LogDB_Comm Общее описание работы LogDB
...@@ -62,10 +63,11 @@ namespace uniset ...@@ -62,10 +63,11 @@ namespace uniset
REST сервиса, позволяющего получать логи за указанный период в виде json. REST сервиса, позволяющего получать логи за указанный период в виде json.
Реализация намеренно простая, т.к. пока неясно нужно ли это и в каком виде. Реализация намеренно простая, т.к. пока неясно нужно ли это и в каком виде.
Ожидается что контролируемых логов будет не очень много (максимум несколько десятков) Ожидается что контролируемых логсерверов будет не очень много (максимум несколько десятков)
и каждый лог будет генерировать не более 2-5 мегабайт записей. Поэтому sqlite должно хватить. и каждый лог будет генерировать не более 2-5 мегабайт записей. Поэтому sqlite должно хватить.
\section sec_LogDB_Conf Конфигурирование LogDB \section sec_LogDB_Conf Конфигурирование LogDB
Для конфигурования необходимо создать секцию вида:
\code \code
<LogDB name="LogDB" ...> <LogDB name="LogDB" ...>
<logserver name="" ip=".." port=".." cmd=".." description=".."/> <logserver name="" ip=".." port=".." cmd=".." description=".."/>
...@@ -74,6 +76,17 @@ namespace uniset ...@@ -74,6 +76,17 @@ namespace uniset
</LogDB> </LogDB>
\endcode \endcode
При этом доступно два способа:
* Первый - это использование секции в общем файле проекта (cofigure.xml).
* Второй способ - позволят просто создать xml-файл с одной настроечной секцией и указать его
в аргументах командной строки
\code
uniset2-logdb --single-confile logdbconf.xml
\endcode
\section sec_LogDB_DB LogDB Работа с БД \section sec_LogDB_DB LogDB Работа с БД
Для оптимизации, запись в БД сделана не по каждому сообщению, а через промежуточнй буффер. Для оптимизации, запись в БД сделана не по каждому сообщению, а через промежуточнй буффер.
Т.е. только после того как в буфере скапливается \a qbufSize сообщений (строк) буфер скидывается в базу. Т.е. только после того как в буфере скапливается \a qbufSize сообщений (строк) буфер скидывается в базу.
...@@ -106,7 +119,7 @@ namespace uniset ...@@ -106,7 +119,7 @@ namespace uniset
\section sec_LogDB_WEBSOCK LogDB Поддержка web socket \section sec_LogDB_WEBSOCK LogDB Поддержка web socket
В LogDB встроена возможность realtime чтения логов, через websocket. В LogDB встроена возможность просмотра логов в реальном времени, через websocket.
Список доступных для подключения лог-серверов доступен по адресу: Список доступных для подключения лог-серверов доступен по адресу:
\code \code
ws://host:port/logdb/ws/ ws://host:port/logdb/ws/
...@@ -125,6 +138,24 @@ namespace uniset ...@@ -125,6 +138,24 @@ namespace uniset
чтение данных от логсерверов, посылка сообщений в websockets, запись в БД. чтение данных от логсерверов, посылка сообщений в websockets, запись в БД.
При этом обработка запросов REST API реализуется отдельными потоками контролируемыми libpoco. При этом обработка запросов REST API реализуется отдельными потоками контролируемыми libpoco.
\section sec_LogDB_ADMIN LogDB Вспомогательная утилита (uniset2-logdb-adm).
Для "обслуживания БД" (создание, конвертирование, ротация) имеется специальная утилита uniset2-logdb-adm.
Т.к. logdb при своём запуске подразумевает, что БД уже создана. То для создания БД можно воспользоваться
командой
\code
uniset2-logdb-adm create dbfilename
\endcode
Для того, чтобы конвертировать (загрузить) отдельные лог-файлы в базу, можно воспользоваться командой
\code
uniset2-logdb-adm load logfile1 logfile2...logfileN
\endcode
Более детальное описание параметров см. \b uniset2-logdb-adm \b help
\todo conf: может быть даже добавить поддержку конфигурирования в формате yaml. \todo conf: может быть даже добавить поддержку конфигурирования в формате yaml.
\todo Добавить настройки таймаутов, размера буфера, размера для резервирования под строку, количество потоков для http и т.п. \todo Добавить настройки таймаутов, размера буфера, размера для резервирования под строку, количество потоков для http и т.п.
\todo db: Сделать настройку, для формата даты и времени при выгрузке из БД (при формировании json). \todo db: Сделать настройку, для формата даты и времени при выгрузке из БД (при формировании json).
......
...@@ -2,7 +2,7 @@ if DISABLE_SQLITE ...@@ -2,7 +2,7 @@ if DISABLE_SQLITE
else else
bin_SCRIPTS = @PACKAGE@-logdb-create bin_SCRIPTS = @PACKAGE@-logdb-adm
bin_PROGRAMS = @PACKAGE@-logdb @PACKAGE@-logdb-conv bin_PROGRAMS = @PACKAGE@-logdb @PACKAGE@-logdb-conv
@PACKAGE@_logdb_LDADD = $(top_builddir)/extensions/DBServer-SQLite/libUniSet2-sqlite.la $(top_builddir)/lib/libUniSet2.la @PACKAGE@_logdb_LDADD = $(top_builddir)/extensions/DBServer-SQLite/libUniSet2-sqlite.la $(top_builddir)/lib/libUniSet2.la
......
...@@ -3,16 +3,32 @@ ...@@ -3,16 +3,32 @@
usage() usage()
{ {
echo "Usage: ${0##*/} dbfile" echo "Usage: ${0##*/} command [arguments]"
echo "Commands:"
echo " help - this mesage"
echo " create dbfile - create database"
echo " load dbfile [logname1:]logfile1.log [logname2:]logfile2.log... - load logs to database"
echo " logfile - log file"
echo " [lognameX] - log name for db. Default: name of logfile"
echo " : - separator for logname"
echo ""
} }
[ -z "$1" ] && usage && exit 1 [ -z "$1" ] && usage && exit 1
dbfile="$1"
[ -a "$dbfile" ] && echo "$dbfile already exists.." && exit 1
# create database
if [ "$1" == "create" ]; then
sqlite3 $dbfile <<"_EOF_" shift
dbfile="$1"
[ -z "$dbfile" ] && usage && exit 1
[ -a "$dbfile" ] && echo "$dbfile already exists.." && exit 1
sqlite3 $dbfile <<"_EOF_"
PRAGMA foreign_keys=ON; PRAGMA foreign_keys=ON;
...@@ -26,3 +42,17 @@ CREATE TABLE logs ( ...@@ -26,3 +42,17 @@ CREATE TABLE logs (
); );
_EOF_ _EOF_
exit $?
fi
# load
if [ "$1" == "load" ]; then
shift
[ -z "$1" ] && usage && exit 1
[ -z "$2" ] && usage && exit 1
uniset2-logdb-conv $*
exit $?
fi
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