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
dcc56de5
Commit
dcc56de5
authored
Jun 02, 2015
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(LogServer): реализовал поддержку обработки нескольких команд.
(LogReader): рефакторинг
parent
1f406d70
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
286 additions
and
133 deletions
+286
-133
log.cc
Utilities/ULog/log.cc
+60
-50
LogReader.h
include/LogReader.h
+14
-5
LogServerTypes.h
include/LogServerTypes.h
+2
-0
LogReader.cc
src/Log/LogReader.cc
+167
-42
LogServerTypes.cc
src/Log/LogServerTypes.cc
+3
-0
LogSession.cc
src/Log/LogSession.cc
+35
-30
test_logserver.cc
tests/test_logserver.cc
+5
-6
No files found.
Utilities/ULog/log.cc
View file @
dcc56de5
// --------------------------------------------------------------------------
#include <string>
#include <vector>
#include <getopt.h>
#include "Debug.h"
#include "UniSetTypes.h"
...
...
@@ -25,7 +26,7 @@ static struct option longopts[] =
{
"list"
,
optional_argument
,
0
,
'l'
},
{
"rotate"
,
optional_argument
,
0
,
'r'
},
{
"logfilter"
,
required_argument
,
0
,
'n'
},
{
"command-only"
,
no_argument
,
0
,
'
b
'
},
{
"command-only"
,
no_argument
,
0
,
'
c
'
},
{
"timeout"
,
required_argument
,
0
,
'w'
},
{
"reconnect-delay"
,
required_argument
,
0
,
'x'
},
{
NULL
,
0
,
0
,
0
}
...
...
@@ -37,7 +38,7 @@ static void print_help()
printf
(
"-v, --verbose - Print all messages to stdout
\n
"
);
printf
(
"[-i|--iaddr] addr - LogServer ip or hostname.
\n
"
);
printf
(
"[-p|--port] port - LogServer port.
\n
"
);
printf
(
"[-
b
|--command-only] - Send command and break. (No read logs).
\n
"
);
printf
(
"[-
c
|--command-only] - Send command and break. (No read logs).
\n
"
);
printf
(
"[-w|--timeout] msec - Timeout for wait data. Default: 0 - endless waiting
\n
"
);
printf
(
"[-x|--reconnect-delay] msec - Pause for repeat connect to LogServer. Default: 5000 msec.
\n
"
);
...
...
@@ -58,6 +59,7 @@ static void print_help()
// --------------------------------------------------------------------------
static
char
*
checkArg
(
int
i
,
int
argc
,
char
*
argv
[]
);
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
int
main
(
int
argc
,
char
**
argv
)
{
// std::ios::sync_with_stdio(false); // нельзя отключать.. тогда "обмен с сервером" рассинхронизируется
...
...
@@ -68,11 +70,10 @@ int main( int argc, char** argv )
string
addr
(
"localhost"
);
int
port
=
3333
;
DebugStream
dlog
;
int
cmd
=
LogServerTypes
::
cmdNOP
;
int
data
=
0
;
string
sdata
(
""
);
int
cmdonly
=
0
;
vector
<
LogReader
::
Command
>
vcmd
;
string
logfilter
(
""
);
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdNOP
;
int
cmdonly
=
0
;
timeout_t
tout
=
0
;
timeout_t
rdelay
=
5000
;
...
...
@@ -88,96 +89,109 @@ int main( int argc, char** argv )
case
'a'
:
{
cmd
=
LogServerTypes
::
cmdAddLevel
;
sdata
=
string
(
optarg
);
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdAddLevel
;
std
::
string
filter
(
""
);
std
::
string
d
=
string
(
optarg
);
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
log
filter
=
string
(
arg2
);
else
logfilter
=
""
;
filter
=
string
(
arg2
);
vcmd
.
push_back
(
LogReader
::
Command
(
cmd
,
(
int
)
Debug
::
value
(
d
),
filter
)
)
;
}
break
;
case
'd'
:
{
cmd
=
LogServerTypes
::
cmdDelLevel
;
sdata
=
string
(
optarg
);
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdDelLevel
;
std
::
string
filter
(
""
);
std
::
string
d
=
string
(
optarg
);
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
log
filter
=
string
(
arg2
);
else
logfilter
=
""
;
filter
=
string
(
arg2
);
vcmd
.
push_back
(
LogReader
::
Command
(
cmd
,
(
int
)
Debug
::
value
(
d
),
filter
)
)
;
}
break
;
case
's'
:
{
cmd
=
LogServerTypes
::
cmdSetLevel
;
sdata
=
string
(
optarg
);
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdSetLevel
;
std
::
string
filter
(
""
);
std
::
string
d
=
string
(
optarg
);
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
log
filter
=
string
(
arg2
);
else
logfilter
=
""
;
filter
=
string
(
arg2
);
vcmd
.
push_back
(
LogReader
::
Command
(
cmd
,
(
int
)
Debug
::
value
(
d
),
filter
)
)
;
}
break
;
case
'l'
:
{
cmd
=
LogServerTypes
::
cmdList
;
cmdonly
=
1
;
cmd
=
LogServerTypes
::
cmdList
;
std
::
string
filter
(
""
);
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
log
filter
=
string
(
arg2
);
else
logfilter
=
""
;
filter
=
string
(
arg2
);
logfilter
=
filter
;
}
break
;
case
'o'
:
{
cmd
=
LogServerTypes
::
cmdOffLogFile
;
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdOffLogFile
;
std
::
string
filter
(
""
);
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
log
filter
=
string
(
arg2
);
else
logfilter
=
""
;
filter
=
string
(
arg2
);
vcmd
.
push_back
(
LogReader
::
Command
(
cmd
,
0
,
filter
)
)
;
}
break
;
case
'
f
'
:
case
'
e
'
:
{
cmd
=
LogServerTypes
::
cmdFilterMode
;
logfilter
=
string
(
optarg
);
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdOnLogFile
;
std
::
string
filter
(
""
);
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
filter
=
string
(
arg2
);
vcmd
.
push_back
(
LogReader
::
Command
(
cmd
,
0
,
filter
)
);
}
break
;
case
'
e
'
:
case
'
f
'
:
{
cmd
=
LogServerTypes
::
cmdOnLogFile
;
cmd
=
LogServerTypes
::
cmdFilterMode
;
std
::
string
filter
(
""
);
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
log
filter
=
string
(
arg2
);
else
logfilter
=
""
;
filter
=
string
(
arg2
);
logfilter
=
filter
;
}
break
;
case
'r'
:
{
cmd
=
LogServerTypes
::
cmdRotate
;
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdRotate
;
std
::
string
filter
(
""
);
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
log
filter
=
string
(
arg2
);
else
logfilter
=
""
;
filter
=
string
(
arg2
);
vcmd
.
push_back
(
LogReader
::
Command
(
cmd
,
0
,
filter
)
)
;
}
break
;
...
...
@@ -185,7 +199,7 @@ int main( int argc, char** argv )
addr
=
string
(
optarg
);
break
;
case
'
b
'
:
case
'
c
'
:
cmdonly
=
1
;
break
;
...
...
@@ -224,15 +238,11 @@ int main( int argc, char** argv )
lr
.
setinTimeout
(
tout
);
lr
.
setReconnectDelay
(
rdelay
);
if
(
!
sdata
.
empty
()
)
{
data
=
(
int
)
Debug
::
value
(
sdata
);
if
(
verb
)
cout
<<
"SEND COMMAND: '"
<<
(
LogServerTypes
::
Command
)
cmd
<<
" data='"
<<
sdata
<<
"'("
<<
(
int
)
data
<<
")"
<<
endl
;
}
if
(
!
vcmd
.
empty
()
)
lr
.
sendCommand
(
addr
,
port
,
vcmd
,
cmdonly
,
verb
);
lr
.
readlogs
(
addr
,
port
,
(
LogServerTypes
::
Command
)
cmd
,
data
,
logfilter
,
verb
);
if
(
!
cmdonly
)
lr
.
readlogs
(
addr
,
port
,
cmd
,
logfilter
,
verb
);
}
catch
(
const
SystemError
&
err
)
{
...
...
include/LogReader.h
View file @
dcc56de5
...
...
@@ -3,6 +3,7 @@
// -------------------------------------------------------------------------
#include <string>
#include <queue>
#include <vector>
#include <cc++/socket.h>
#include "UTCPStream.h"
#include "DebugStream.h"
...
...
@@ -15,13 +16,20 @@ class LogReader
LogReader
();
~
LogReader
();
void
readlogs
(
const
std
::
string
&
addr
,
ost
::
tpport_t
port
,
LogServerTypes
::
Command
c
=
LogServerTypes
::
cmdNOP
,
int
data
=
0
,
const
std
::
string
&
logname
=
""
,
struct
Command
{
Command
(
LogServerTypes
::
Command
c
,
unsigned
int
d
,
const
std
::
string
&
f
=
""
)
:
cmd
(
c
),
data
(
d
),
logfilter
(
f
)
{}
LogServerTypes
::
Command
cmd
=
{
LogServerTypes
::
cmdNOP
};
unsigned
int
data
=
{
0
};
std
::
string
logfilter
=
{
""
};
};
void
sendCommand
(
const
std
::
string
&
addr
,
ost
::
tpport_t
port
,
std
::
vector
<
Command
>&
vcmd
,
bool
cmd_only
=
true
,
bool
verbose
=
false
);
void
readlogs
(
const
std
::
string
&
addr
,
ost
::
tpport_t
port
,
LogServerTypes
::
lsMessage
&
m
,
bool
verbose
=
false
);
void
readlogs
(
const
std
::
string
&
addr
,
ost
::
tpport_t
port
,
LogServerTypes
::
Command
c
=
LogServerTypes
::
cmdNOP
,
const
std
::
string
logfilter
=
""
,
bool
verbose
=
false
);
bool
isConnection
();
...
...
@@ -58,6 +66,7 @@ class LogReader
void
connect
(
ost
::
InetAddress
addr
,
ost
::
tpport_t
port
,
timeout_t
tout
=
TIMEOUT_INF
);
void
disconnect
();
void
logOnEvent
(
const
std
::
string
&
s
);
void
sendCommand
(
LogServerTypes
::
lsMessage
&
msg
,
bool
verbose
=
false
);
timeout_t
inTimeout
;
timeout_t
outTimeout
;
...
...
include/LogServerTypes.h
View file @
dcc56de5
...
...
@@ -17,6 +17,8 @@ namespace LogServerTypes
cmdRotate
,
/*!< пересоздать файл с логами */
cmdOffLogFile
,
/*!< отключить запись файла логов (если включена) */
cmdOnLogFile
,
/*!< включить запись файла логов (если была отключена) */
// команды требующий ответа..
cmdList
,
/*!< вывести список контролируемых логов */
cmdFilterMode
/*!< включить режим работы "фильтр" - вывод только от интересующих логов, заданных в lognmae (regexp) */
// cmdSetLogFile
...
...
src/Log/LogReader.cc
View file @
dcc56de5
...
...
@@ -119,34 +119,38 @@ bool LogReader::isConnection()
return
tcp
&&
tcp
->
isConnected
();
}
// -------------------------------------------------------------------------
void
LogReader
::
readlogs
(
const
std
::
string
&
_addr
,
ost
::
tpport_t
_port
,
LogServerTypes
::
Command
cmd
,
int
data
,
const
std
::
string
&
logname
,
bool
verbose
)
{
LogServerTypes
::
lsMessage
msg
;
msg
.
cmd
=
cmd
;
msg
.
data
=
data
;
msg
.
setLogName
(
logname
);
readlogs
(
_addr
,
_port
,
msg
,
verbose
);
}
// -------------------------------------------------------------------------
void
LogReader
::
readlogs
(
const
std
::
string
&
_addr
,
ost
::
tpport_t
_port
,
LogServerTypes
::
lsMessage
&
msg
,
bool
verbose
)
void
LogReader
::
sendCommand
(
const
std
::
string
&
_addr
,
ost
::
tpport_t
_port
,
std
::
vector
<
Command
>&
vcmd
,
bool
cmd_only
,
bool
verbose
)
{
if
(
vcmd
.
empty
()
)
return
;
char
buf
[
100001
];
if
(
verbose
)
rlog
.
addLevel
(
Debug
::
ANY
);
bool
send_ok
=
false
;
if
(
inTimeout
==
0
)
inTimeout
=
TIMEOUT_INF
;
if
(
outTimeout
==
0
)
outTimeout
=
TIMEOUT_INF
;
unsigned
int
n
=
1
;
for
(
const
auto
&
c
:
vcmd
)
{
if
(
c
.
cmd
==
LogServerTypes
::
cmdNOP
)
continue
;
if
(
readcount
>
0
)
n
=
readcount
;
if
(
c
.
cmd
==
LogServerTypes
::
cmdFilterMode
)
{
if
(
verbose
)
cerr
<<
"WARNING: sendCommand() ignore '"
<<
c
.
cmd
<<
"'..."
<<
endl
;
continue
;
}
LogServerTypes
::
lsMessage
msg
;
msg
.
cmd
=
c
.
cmd
;
msg
.
data
=
c
.
data
;
msg
.
setLogName
(
c
.
logfilter
);
unsigned
int
n
=
2
;
// две попытки на посылку
while
(
n
>
0
)
{
...
...
@@ -162,58 +166,156 @@ void LogReader::readlogs( const std::string& _addr, ost::tpport_t _port, LogServ
if
(
cmdonly
)
return
;
if
(
readcount
>
0
)
n
--
;
if
(
n
<
0
)
if
(
n
==
0
)
break
;
msleep
(
reconDelay
);
continue
;
}
if
(
!
send_ok
&&
msg
.
cmd
!=
LogServerTypes
::
cmdNOP
)
sendCommand
(
msg
,
verbose
);
break
;
}
catch
(
const
ost
::
SockException
&
e
)
{
if
(
tcp
->
isPending
(
ost
::
Socket
::
pendingOutput
,
outTimeout
)
)
cerr
<<
"(LogReader): "
<<
e
.
getString
()
<<
" ("
<<
_addr
<<
")"
<<
endl
;
}
catch
(
const
std
::
exception
&
ex
)
{
rlog
.
info
()
<<
"(LogReader): ** send command: cmd='"
<<
msg
.
cmd
<<
"' logname='"
<<
msg
.
logname
<<
"' data='"
<<
msg
.
data
<<
"'"
<<
endl
;
cerr
<<
"(LogReader): "
<<
ex
.
what
()
<<
endl
;
}
for
(
size_t
i
=
0
;
i
<
sizeof
(
msg
);
i
++
)
(
*
tcp
)
<<
((
unsigned
char
*
)(
&
msg
))[
i
];
n
--
;
}
}
// end for send all command
tcp
->
sync
();
send_ok
=
true
;
// после команд.. выводим список текущий..
timeout_t
reply_timeout
=
4000
;
// TIMEOUT_INF;
LogServerTypes
::
lsMessage
msg
;
msg
.
cmd
=
LogServerTypes
::
cmdList
;
msg
.
data
=
0
;
msg
.
setLogName
(
"ALL"
);
sendCommand
(
msg
,
verbose
);
// теперь ждём ответ..
try
{
int
a
=
3
;
while
(
a
>
0
&&
tcp
->
isPending
(
ost
::
Socket
::
pendingInput
,
reply_timeout
)
)
{
int
n
=
0
;
do
{
n
=
tcp
->
peek
(
buf
,
sizeof
(
buf
)
-
1
);
if
(
n
>
0
)
{
tcp
->
read
(
buf
,
n
);
buf
[
n
]
=
'\0'
;
log
<<
buf
;
a
--
;
}
}
while
(
n
>
0
);
}
else
rlog
.
warn
()
<<
"(LogReader): **** SEND COMMAND ('"
<<
msg
.
cmd
<<
"' FAILED!"
<<
endl
;
if
(
cmdonly
&&
msg
.
cmd
!=
LogServerTypes
::
cmdList
)
// rlog.warn() << "(LogReader): ...wait reply timeout..." << endl;
}
catch
(
const
ost
::
SockException
&
e
)
{
cerr
<<
"(LogReader): "
<<
e
.
getString
()
<<
" ("
<<
_addr
<<
")"
<<
endl
;
}
catch
(
const
std
::
exception
&
ex
)
{
cerr
<<
"(LogReader): "
<<
ex
.
what
()
<<
endl
;
}
if
(
cmdonly
&&
isConnection
()
)
disconnect
();
return
;
}
// -------------------------------------------------------------------------
void
LogReader
::
readlogs
(
const
std
::
string
&
_addr
,
ost
::
tpport_t
_port
,
LogServerTypes
::
Command
cmd
,
const
std
::
string
logfilter
,
bool
verbose
)
{
char
buf
[
100001
];
if
(
verbose
)
rlog
.
addLevel
(
Debug
::
ANY
);
if
(
inTimeout
==
0
)
inTimeout
=
TIMEOUT_INF
;
if
(
outTimeout
==
0
)
outTimeout
=
TIMEOUT_INF
;
unsigned
int
rcount
=
1
;
if
(
readcount
>
0
)
rcount
=
readcount
;
LogServerTypes
::
lsMessage
msg
;
msg
.
cmd
=
cmd
;
msg
.
data
=
0
;
msg
.
setLogName
(
logfilter
);
bool
send_ok
=
cmd
==
LogServerTypes
::
cmdNOP
?
true
:
false
;
while
(
rcount
>
0
)
{
try
{
if
(
!
isConnection
()
)
connect
(
_addr
,
_port
,
reconDelay
);
if
(
!
isConnection
()
)
{
rlog
.
warn
()
<<
"(LogReader): **** connection timeout.."
<<
endl
;
if
(
rcount
>
0
&&
readcount
>
0
)
rcount
--
;
if
(
rcount
==
0
)
break
;
msleep
(
reconDelay
);
continue
;
}
if
(
!
send_ok
)
{
sendCommand
(
msg
,
verbose
);
send_ok
=
true
;
}
while
(
(
!
cmdonly
||
msg
.
cmd
==
LogServerTypes
::
cmdList
)
&&
tcp
->
isPending
(
ost
::
Socket
::
pendingInput
,
inTimeout
)
)
while
(
tcp
->
isPending
(
ost
::
Socket
::
pendingInput
,
inTimeout
)
)
{
int
n
=
tcp
->
peek
(
buf
,
sizeof
(
buf
)
-
1
);
if
(
n
>
0
)
{
tcp
->
read
(
buf
,
n
);
buf
[
n
]
=
'\0'
;
log
<<
buf
;
// if( msg.cmd == LogServerTypes::cmdList )
// break;
}
else
if
(
rcount
>
0
&&
readcount
>
0
)
rcount
--
;
if
(
readcount
>
0
&&
rcount
==
0
)
break
;
}
if
(
rcount
>
0
&&
readcount
>
0
)
rcount
--
;
if
(
rcount
!=
0
)
rlog
.
warn
()
<<
"(LogReader): ...connection timeout..."
<<
endl
;
send_ok
=
false
;
// ??!! делать ли?
disconnect
();
}
catch
(
const
ost
::
SockException
&
e
)
...
...
@@ -225,11 +327,8 @@ void LogReader::readlogs( const std::string& _addr, ost::tpport_t _port, LogServ
cerr
<<
"(LogReader): "
<<
ex
.
what
()
<<
endl
;
}
if
(
cmdonly
)
if
(
rcount
==
0
&&
readcount
>
0
)
break
;
if
(
readcount
>
0
)
n
--
;
}
if
(
isConnection
()
)
...
...
@@ -241,3 +340,29 @@ void LogReader::logOnEvent( const std::string& s )
m_logsig
.
emit
(
s
);
}
// -------------------------------------------------------------------------
void
LogReader
::
sendCommand
(
LogServerTypes
::
lsMessage
&
msg
,
bool
verbose
)
{
try
{
if
(
tcp
->
isPending
(
ost
::
Socket
::
pendingOutput
,
outTimeout
)
)
{
rlog
.
info
()
<<
"(LogReader): ** send command: cmd='"
<<
msg
.
cmd
<<
"' logname='"
<<
msg
.
logname
<<
"' data='"
<<
msg
.
data
<<
"'"
<<
endl
;
for
(
size_t
i
=
0
;
i
<
sizeof
(
msg
);
i
++
)
(
*
tcp
)
<<
((
unsigned
char
*
)(
&
msg
))[
i
];
tcp
->
sync
();
}
else
rlog
.
warn
()
<<
"(LogReader): **** SEND COMMAND ('"
<<
msg
.
cmd
<<
"' FAILED!"
<<
endl
;
}
catch
(
const
ost
::
SockException
&
e
)
{
cerr
<<
"(LogReader): "
<<
e
.
getString
()
<<
endl
;
// " (" << _addr << ")" << endl;
}
catch
(
const
std
::
exception
&
ex
)
{
cerr
<<
"(LogReader): "
<<
ex
.
what
()
<<
endl
;
}
}
// -------------------------------------------------------------------------
src/Log/LogServerTypes.cc
View file @
dcc56de5
...
...
@@ -31,6 +31,9 @@ std::ostream& LogServerTypes::operator<<(std::ostream& os, LogServerTypes::Comma
case
LogServerTypes
:
:
cmdFilterMode
:
return
os
<<
"cmdFilterMode"
;
case
LogServerTypes
:
:
cmdNOP
:
return
os
<<
"No command(NOP)"
;
default
:
return
os
<<
"Unknown"
;
}
...
...
src/Log/LogSession.cc
View file @
dcc56de5
...
...
@@ -95,7 +95,7 @@ void LogSession::run()
setKeepAlive
(
true
);
// Команды могут посылаться только в начале сессии..
if
(
isPending
(
Socket
::
pendingInput
,
cmdTimeout
)
)
while
(
isPending
(
Socket
::
pendingInput
,
cmdTimeout
)
)
{
LogServerTypes
::
lsMessage
msg
;
...
...
@@ -105,9 +105,11 @@ void LogSession::run()
ssize_t
ret
=
readData
(
&
msg
,
sizeof
(
msg
)
);
if
(
ret
!=
sizeof
(
msg
)
||
msg
.
magic
!=
LogServerTypes
::
MAGICNUM
)
slog
.
warn
()
<<
peername
<<
"(run): BAD MESSAGE..."
<<
endl
;
else
{
slog
.
warn
()
<<
peername
<<
"(run): BAD MESSAGE..."
<<
endl
;
continue
;
}
slog
.
info
()
<<
peername
<<
"(run): receive command: '"
<<
msg
.
cmd
<<
"'"
<<
endl
;
string
cmdLogName
(
msg
.
logname
);
...
...
@@ -129,28 +131,6 @@ void LogSession::run()
}
}
// если команда "вывести список"
// выводим и завершаем работу
if
(
msg
.
cmd
==
LogServerTypes
::
cmdList
)
{
ostringstream
s
;
s
<<
"List of managed logs(filter='"
<<
cmdLogName
<<
"'):"
<<
endl
;
s
<<
"====================="
<<
endl
;
LogAgregator
::
printLogList
(
s
,
loglist
);
s
<<
"====================="
<<
endl
<<
endl
;
if
(
isPending
(
Socket
::
pendingOutput
,
cmdTimeout
)
)
{
*
tcp
()
<<
s
.
str
();
tcp
()
->
sync
();
}
// вывели список и завершили работу..
cancelled
=
true
;
disconnect
();
return
;
}
if
(
msg
.
cmd
==
LogServerTypes
::
cmdFilterMode
)
{
// отлючаем старый обработчик
...
...
@@ -200,15 +180,41 @@ void LogSession::run()
slog
.
warn
()
<<
peername
<<
"(run): Unknown command '"
<<
msg
.
cmd
<<
"'"
<<
endl
;
break
;
}
}
// end if for
// если команда "вывести список"
// выводим и завершаем работу
if
(
msg
.
cmd
==
LogServerTypes
::
cmdList
)
{
ostringstream
s
;
s
<<
"List of managed logs(filter='"
<<
cmdLogName
<<
"'):"
<<
endl
;
s
<<
"====================="
<<
endl
;
LogAgregator
::
printLogList
(
s
,
loglist
);
s
<<
"====================="
<<
endl
<<
endl
;
if
(
isPending
(
Socket
::
pendingOutput
,
cmdTimeout
)
)
{
*
tcp
()
<<
s
.
str
();
tcp
()
->
sync
();
}
// вывели список и завершили работу..
// cancelled = true;
// disconnect();
// return;
}
}
}
// end of while pending input (cmd processing)..
#if 0
// Выводим итоговый получившийся список (с учётом выполненных команд)
ostringstream s;
if( msg.cmd == LogServerTypes::cmdFilterMode )
{
s << "List of managed logs(filter='" << cmdLogName << "'):" << endl;
s << "=====================" << endl;
LogAgregator
::
printLogList
(
s
,
loglist
);
LogAgregator::printLogList(s,
loglist);
s << "=====================" << endl << endl;
}
else
...
...
@@ -220,7 +226,7 @@ void LogSession::run()
if( alog )
{
auto lst = alog->getLogList();
LogAgregator
::
printLogList
(
s
,
lst
);
LogAgregator::printLogList(s,
lst);
}
else
s << log->getLogName() << " [" << Debug::str(log->level()) << " ]" << endl;
...
...
@@ -233,9 +239,8 @@ void LogSession::run()
*tcp() << s.str();
tcp()->sync();
}
}
}
}
#endif
cancelled
=
false
;
...
...
tests/test_logserver.cc
View file @
dcc56de5
...
...
@@ -94,18 +94,16 @@ TEST_CASE("LogAgregator", "[LogServer][LogAgregator]" )
log2
->
any
()
<<
test_msg2
;
REQUIRE
(
la_msg
.
str
()
==
test_msg2
);
#if 0
auto
lst
=
la
->
getLogList
();
REQUIRE
(
lst
.
size
()
==
2
);
// Проверка поиска по регулярным выражениям
auto lst2 = la->getLogList("lo.*");
auto
lst2
=
la
->
getLogList
(
"
/
lo.*"
);
REQUIRE
(
lst2
.
size
()
==
2
);
auto lst3 = la->getLogList("log\\d{1}");
auto
lst3
=
la
->
getLogList
(
"
/
log
\\
d{1}"
);
REQUIRE
(
lst3
.
size
()
==
2
);
#endif
}
// --------------------------------------------------------------------------
TEST_CASE
(
"LogServer"
,
"[LogServer]"
)
...
...
@@ -170,7 +168,7 @@ TEST_CASE("LogServer", "[LogServer]" )
}
g_read_cancel
=
true
;
msleep
(
readTimeout
);
if
(
r_thr
->
joinable
()
)
r_thr
->
join
();
}
...
...
@@ -236,6 +234,7 @@ TEST_CASE("MaxSessions", "[LogServer]" )
}
g_read_cancel
=
true
;
msleep
(
readTimeout
);
if
(
r1_thr
->
joinable
()
)
r1_thr
->
join
();
...
...
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