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
13ac8507
Commit
13ac8507
authored
Sep 05, 2017
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(LogDB): ушёл от использования getopt при разборе команд
(т.к. оставил только три команды set,add,del.
parent
00eb5a61
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
84 additions
and
209 deletions
+84
-209
LogDB.cc
extensions/LogDB/LogDB.cc
+30
-21
LogDB.h
extensions/LogDB/LogDB.h
+24
-24
LogServerTypes.h
include/LogServerTypes.h
+0
-5
LogServerTypes.cc
src/Log/LogServerTypes.cc
+30
-159
No files found.
extensions/LogDB/LogDB.cc
View file @
13ac8507
...
@@ -62,6 +62,7 @@ LogDB::LogDB( const string& name , const string& prefix ):
...
@@ -62,6 +62,7 @@ LogDB::LogDB( const string& name , const string& prefix ):
checkBufferTimer
.
set
<
LogDB
,
&
LogDB
::
onCheckBuffer
>
(
this
);
checkBufferTimer
.
set
<
LogDB
,
&
LogDB
::
onCheckBuffer
>
(
this
);
UniXML
::
iterator
sit
(
cnode
);
UniXML
::
iterator
sit
(
cnode
);
if
(
!
sit
.
goChildren
()
)
if
(
!
sit
.
goChildren
()
)
{
{
ostringstream
err
;
ostringstream
err
;
...
@@ -70,7 +71,7 @@ LogDB::LogDB( const string& name , const string& prefix ):
...
@@ -70,7 +71,7 @@ LogDB::LogDB( const string& name , const string& prefix ):
throw
uniset
::
SystemError
(
err
.
str
());
throw
uniset
::
SystemError
(
err
.
str
());
}
}
for
(
;
sit
.
getCurrent
();
sit
++
)
for
(
;
sit
.
getCurrent
();
sit
++
)
{
{
auto
l
=
make_shared
<
Log
>
();
auto
l
=
make_shared
<
Log
>
();
...
@@ -103,15 +104,15 @@ LogDB::LogDB( const string& name , const string& prefix ):
...
@@ -103,15 +104,15 @@ LogDB::LogDB( const string& name , const string& prefix ):
throw
uniset
::
SystemError
(
err
.
str
());
throw
uniset
::
SystemError
(
err
.
str
());
}
}
// if( l->cmd.empty() )
// if( l->cmd.empty() )
// {
// {
// ostringstream err;
// ostringstream err;
// err << name << "(init): Unknown 'cmd' for '" << l->name << "'..";
// err << name << "(init): Unknown 'cmd' for '" << l->name << "'..";
// dbcrit << err.str() << endl;
// dbcrit << err.str() << endl;
// throw uniset::SystemError(err.str());
// throw uniset::SystemError(err.str());
// }
// }
// l->tcp = make_shared<UTCPStream>();
// l->tcp = make_shared<UTCPStream>();
l
->
dblog
=
dblog
;
l
->
dblog
=
dblog
;
l
->
signal_on_read
().
connect
(
sigc
::
mem_fun
(
this
,
&
LogDB
::
addLog
));
l
->
signal_on_read
().
connect
(
sigc
::
mem_fun
(
this
,
&
LogDB
::
addLog
));
...
@@ -128,6 +129,7 @@ LogDB::LogDB( const string& name , const string& prefix ):
...
@@ -128,6 +129,7 @@ LogDB::LogDB( const string& name , const string& prefix ):
std
::
string
dbfile
=
conf
->
getArgParam
(
"--"
+
prefix
+
"-dbfile"
,
it
.
getProp
(
"dbfile"
));
std
::
string
dbfile
=
conf
->
getArgParam
(
"--"
+
prefix
+
"-dbfile"
,
it
.
getProp
(
"dbfile"
));
if
(
dbfile
.
empty
()
)
if
(
dbfile
.
empty
()
)
{
{
ostringstream
err
;
ostringstream
err
;
...
@@ -137,12 +139,13 @@ LogDB::LogDB( const string& name , const string& prefix ):
...
@@ -137,12 +139,13 @@ LogDB::LogDB( const string& name , const string& prefix ):
}
}
db
=
unisetstd
::
make_unique
<
SQLiteInterface
>
();
db
=
unisetstd
::
make_unique
<
SQLiteInterface
>
();
if
(
!
db
->
connect
(
dbfile
,
false
)
)
if
(
!
db
->
connect
(
dbfile
,
false
)
)
{
{
ostringstream
err
;
ostringstream
err
;
err
<<
myname
err
<<
myname
<<
"(init): DB connection error: "
<<
"(init): DB connection error: "
<<
db
->
error
();
<<
db
->
error
();
dbcrit
<<
err
.
str
()
<<
endl
;
dbcrit
<<
err
.
str
()
<<
endl
;
throw
uniset
::
SystemError
(
err
.
str
());
throw
uniset
::
SystemError
(
err
.
str
());
}
}
...
@@ -240,7 +243,7 @@ void LogDB::onTimer( ev::timer& t, int revents )
...
@@ -240,7 +243,7 @@ void LogDB::onTimer( ev::timer& t, int revents )
}
}
// проверяем соединения..
// проверяем соединения..
for
(
const
auto
&
s
:
logservers
)
for
(
const
auto
&
s
:
logservers
)
{
{
if
(
!
s
->
isConnected
()
)
if
(
!
s
->
isConnected
()
)
{
{
...
@@ -272,7 +275,7 @@ bool LogDB::Log::connect() noexcept
...
@@ -272,7 +275,7 @@ bool LogDB::Log::connect() noexcept
if
(
tcp
&&
tcp
->
isConnected
()
)
if
(
tcp
&&
tcp
->
isConnected
()
)
return
true
;
return
true
;
// dbinfo << name << "(connect): connect " << ip << ":" << port << "..." << endl;
// dbinfo << name << "(connect): connect " << ip << ":" << port << "..." << endl;
if
(
peername
.
empty
()
)
if
(
peername
.
empty
()
)
peername
=
ip
+
":"
+
std
::
to_string
(
port
);
peername
=
ip
+
":"
+
std
::
to_string
(
port
);
...
@@ -281,8 +284,8 @@ bool LogDB::Log::connect() noexcept
...
@@ -281,8 +284,8 @@ bool LogDB::Log::connect() noexcept
{
{
tcp
=
make_shared
<
UTCPStream
>
();
tcp
=
make_shared
<
UTCPStream
>
();
tcp
->
create
(
ip
,
port
);
tcp
->
create
(
ip
,
port
);
// tcp->setReceiveTimeout( UniSetTimer::millisecToPoco(inTimeout) );
// tcp->setReceiveTimeout( UniSetTimer::millisecToPoco(inTimeout) );
// tcp->setSendTimeout( UniSetTimer::millisecToPoco(outTimeout) );
// tcp->setSendTimeout( UniSetTimer::millisecToPoco(outTimeout) );
tcp
->
setKeepAlive
(
true
);
tcp
->
setKeepAlive
(
true
);
tcp
->
setBlocking
(
false
);
tcp
->
setBlocking
(
false
);
dbinfo
<<
name
<<
"(connect): connect OK to "
<<
ip
<<
":"
<<
port
<<
endl
;
dbinfo
<<
name
<<
"(connect): connect OK to "
<<
ip
<<
":"
<<
port
<<
endl
;
...
@@ -304,7 +307,7 @@ bool LogDB::Log::connect() noexcept
...
@@ -304,7 +307,7 @@ bool LogDB::Log::connect() noexcept
{
{
std
::
exception_ptr
p
=
std
::
current_exception
();
std
::
exception_ptr
p
=
std
::
current_exception
();
dbwarn
<<
name
<<
"(connect): connection "
<<
peername
<<
" error: "
dbwarn
<<
name
<<
"(connect): connection "
<<
peername
<<
" error: "
<<
(
p
?
p
.
__cxa_exception_type
()
->
name
()
:
"null"
)
<<
endl
;
<<
(
p
?
p
.
__cxa_exception_type
()
->
name
()
:
"null"
)
<<
endl
;
}
}
tcp
->
disconnect
();
tcp
->
disconnect
();
...
@@ -327,9 +330,10 @@ void LogDB::Log::ioprepare( ev::dynamic_loop& loop )
...
@@ -327,9 +330,10 @@ void LogDB::Log::ioprepare( ev::dynamic_loop& loop )
//! \todo Пока закрываем глаза на не оптимальность, того, что парсим строку каждый раз
//! \todo Пока закрываем глаза на не оптимальность, того, что парсим строку каждый раз
auto
cmdlist
=
LogServerTypes
::
getCommands
(
cmd
);
auto
cmdlist
=
LogServerTypes
::
getCommands
(
cmd
);
if
(
!
cmdlist
.
empty
()
)
if
(
!
cmdlist
.
empty
()
)
{
{
for
(
const
auto
&
msg
:
cmdlist
)
for
(
const
auto
&
msg
:
cmdlist
)
wbuf
.
emplace
(
new
UTCPCore
::
Buffer
((
unsigned
char
*
)
&
msg
,
sizeof
(
msg
)));
wbuf
.
emplace
(
new
UTCPCore
::
Buffer
((
unsigned
char
*
)
&
msg
,
sizeof
(
msg
)));
io
.
set
(
ev
::
WRITE
);
io
.
set
(
ev
::
WRITE
);
...
@@ -363,21 +367,22 @@ void LogDB::Log::read( ev::io& watcher )
...
@@ -363,21 +367,22 @@ void LogDB::Log::read( ev::io& watcher )
int
n
=
tcp
->
available
();
int
n
=
tcp
->
available
();
n
=
std
::
min
(
n
,
bufsize
);
n
=
std
::
min
(
n
,
bufsize
);
if
(
n
>
0
)
if
(
n
>
0
)
{
{
tcp
->
receiveBytes
(
buf
,
n
);
tcp
->
receiveBytes
(
buf
,
n
);
// нарезаем на строки
// нарезаем на строки
for
(
size_t
i
=
0
;
i
<
n
;
i
++
)
for
(
size_t
i
=
0
;
i
<
n
;
i
++
)
{
{
if
(
buf
[
i
]
!=
'\n'
)
if
(
buf
[
i
]
!=
'\n'
)
text
+=
buf
[
i
];
text
+=
buf
[
i
];
else
else
{
{
sigRead
.
emit
(
this
,
text
);
sigRead
.
emit
(
this
,
text
);
text
=
""
;
text
=
""
;
if
(
text
.
capacity
()
<
reservsize
)
if
(
text
.
capacity
()
<
reservsize
)
text
.
reserve
(
reservsize
);
text
.
reserve
(
reservsize
);
}
}
...
@@ -386,13 +391,16 @@ void LogDB::Log::read( ev::io& watcher )
...
@@ -386,13 +391,16 @@ void LogDB::Log::read( ev::io& watcher )
else
if
(
n
==
0
)
else
if
(
n
==
0
)
{
{
dbinfo
<<
name
<<
": "
<<
ip
<<
":"
<<
port
<<
" connection is closed.."
<<
endl
;
dbinfo
<<
name
<<
": "
<<
ip
<<
":"
<<
port
<<
" connection is closed.."
<<
endl
;
if
(
!
text
.
empty
()
)
if
(
!
text
.
empty
()
)
{
{
sigRead
.
emit
(
this
,
text
);
sigRead
.
emit
(
this
,
text
);
text
=
""
;
text
=
""
;
if
(
text
.
capacity
()
<
reservsize
)
if
(
text
.
capacity
()
<
reservsize
)
text
.
reserve
(
reservsize
);
text
.
reserve
(
reservsize
);
}
}
close
();
close
();
}
}
}
}
...
@@ -400,6 +408,7 @@ void LogDB::Log::read( ev::io& watcher )
...
@@ -400,6 +408,7 @@ void LogDB::Log::read( ev::io& watcher )
void
LogDB
::
Log
::
write
(
ev
::
io
&
io
)
void
LogDB
::
Log
::
write
(
ev
::
io
&
io
)
{
{
UTCPCore
::
Buffer
*
buffer
=
0
;
UTCPCore
::
Buffer
*
buffer
=
0
;
if
(
wbuf
.
empty
()
)
if
(
wbuf
.
empty
()
)
{
{
io
.
set
(
EV_READ
);
io
.
set
(
EV_READ
);
...
...
extensions/LogDB/LogDB.h
View file @
13ac8507
...
@@ -115,37 +115,37 @@ namespace uniset
...
@@ -115,37 +115,37 @@ namespace uniset
class
Log
class
Log
{
{
public
:
public
:
std
::
string
name
;
std
::
string
name
;
std
::
string
ip
;
std
::
string
ip
;
int
port
=
{
0
};
int
port
=
{
0
};
std
::
string
cmd
;
std
::
string
cmd
;
std
::
string
peername
;
std
::
string
peername
;
std
::
shared_ptr
<
DebugStream
>
dblog
;
std
::
shared_ptr
<
DebugStream
>
dblog
;
bool
connect
()
noexcept
;
bool
connect
()
noexcept
;
bool
isConnected
()
const
;
bool
isConnected
()
const
;
void
ioprepare
(
ev
::
dynamic_loop
&
loop
);
void
ioprepare
(
ev
::
dynamic_loop
&
loop
);
void
event
(
ev
::
io
&
watcher
,
int
revents
);
void
event
(
ev
::
io
&
watcher
,
int
revents
);
void
read
(
ev
::
io
&
watcher
);
void
read
(
ev
::
io
&
watcher
);
void
write
(
ev
::
io
&
io
);
void
write
(
ev
::
io
&
io
);
void
close
();
void
close
();
typedef
sigc
::
signal
<
void
,
Log
*
,
const
std
::
string
&>
ReadSignal
;
typedef
sigc
::
signal
<
void
,
Log
*
,
const
std
::
string
&>
ReadSignal
;
ReadSignal
signal_on_read
();
ReadSignal
signal_on_read
();
private
:
private
:
ReadSignal
sigRead
;
ReadSignal
sigRead
;
ev
::
io
io
;
ev
::
io
io
;
std
::
shared_ptr
<
UTCPStream
>
tcp
;
std
::
shared_ptr
<
UTCPStream
>
tcp
;
static
const
int
bufsize
=
{
10001
};
static
const
int
bufsize
=
{
10001
};
char
buf
[
bufsize
];
char
buf
[
bufsize
];
static
const
size_t
reservsize
=
{
1000
};
static
const
size_t
reservsize
=
{
1000
};
std
::
string
text
;
std
::
string
text
;
// буфер для посылаемых данных (write buffer)
// буфер для посылаемых данных (write buffer)
std
::
queue
<
UTCPCore
::
Buffer
*>
wbuf
;
std
::
queue
<
UTCPCore
::
Buffer
*>
wbuf
;
};
};
std
::
vector
<
std
::
shared_ptr
<
Log
>
>
logservers
;
std
::
vector
<
std
::
shared_ptr
<
Log
>
>
logservers
;
...
...
include/LogServerTypes.h
View file @
13ac8507
...
@@ -84,11 +84,6 @@ namespace uniset
...
@@ -84,11 +84,6 @@ namespace uniset
* [-a | --add] info,warn,crit,... [logfilter] - Add log levels.
* [-a | --add] info,warn,crit,... [logfilter] - Add log levels.
* [-d | --del] info,warn,crit,... [logfilter] - Delete log levels.
* [-d | --del] info,warn,crit,... [logfilter] - Delete log levels.
* [-s | --set] info,warn,crit,... [logfilter] - Set log levels.
* [-s | --set] info,warn,crit,... [logfilter] - Set log levels.
* [-o | --off] [logfilter] - Off the write log file (if enabled).
* [-e | --on] [logfilter] - On(enable) the write log file (if before disabled).
* [-r | --rotate] [logfilter] - rotate log file.
* [-u | --save-loglevels] [logfilter] - save log levels (disable restore after disconnected).
* [-y | --restore-loglevels] [logfilter] - restore default log levels.
*
*
* 'logfilter' - regexp for name of log. Default: ALL logs
* 'logfilter' - regexp for name of log. Default: ALL logs
*/
*/
...
...
src/Log/LogServerTypes.cc
View file @
13ac8507
...
@@ -14,7 +14,6 @@
...
@@ -14,7 +14,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
*/
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
#include <getopt.h> // не хорошо завязыватся на getopt.. но пока так удобнее
#include "UniSetTypes.h"
#include "UniSetTypes.h"
#include "LogServerTypes.h"
#include "LogServerTypes.h"
#include "Debug.h"
#include "Debug.h"
...
@@ -84,183 +83,55 @@ namespace uniset
...
@@ -84,183 +83,55 @@ namespace uniset
logname
[
s
]
=
'\0'
;
logname
[
s
]
=
'\0'
;
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
static
struct
option
longopts
[]
=
static
const
std
::
string
checkArg
(
size_t
i
,
const
std
::
vector
<
std
::
string
>&
v
)
{
{
{
"add"
,
required_argument
,
0
,
'a'
},
if
(
i
<
v
.
size
()
&&
(
v
[
i
])[
0
]
!=
'-'
)
{
"del"
,
required_argument
,
0
,
'd'
},
return
v
[
i
];
{
"set"
,
required_argument
,
0
,
's'
},
{
"off"
,
required_argument
,
0
,
'o'
},
{
"on"
,
required_argument
,
0
,
'e'
},
{
"save-loglevels"
,
required_argument
,
0
,
'u'
},
{
"restore-loglevels"
,
required_argument
,
0
,
'y'
},
{
"rotate"
,
optional_argument
,
0
,
'r'
},
{
"logfilter"
,
required_argument
,
0
,
'n'
},
{
"timeout"
,
required_argument
,
0
,
't'
},
{
"reconnect-delay"
,
required_argument
,
0
,
'x'
},
{
NULL
,
0
,
0
,
0
}
};
// --------------------------------------------------------------------------
static
const
char
*
checkArg
(
int
i
,
int
argc
,
const
char
*
argv
[]
)
{
if
(
i
<
argc
&&
(
argv
[
i
])[
0
]
!=
'-'
)
return
argv
[
i
];
return
0
;
return
""
;
}
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
std
::
vector
<
LogServerTypes
::
lsMessage
>
LogServerTypes
::
getCommands
(
const
std
::
string
&
cmd
)
std
::
vector
<
LogServerTypes
::
lsMessage
>
LogServerTypes
::
getCommands
(
const
std
::
string
&
cmd
)
{
{
// формируем argc, argv и проходим getopt-ом
vector
<
lsMessage
>
vcmd
;
// пока это самый простой способ..
auto
v
=
uniset
::
explode_str
(
cmd
,
' '
);
auto
v
=
uniset
::
explode_str
(
cmd
,
' '
);
const
size_t
argc
=
v
.
size
()
+
1
;
const
char
**
argv
=
new
const
char
*
[
argc
];
argv
[
0
]
=
" "
;
if
(
v
.
empty
()
)
for
(
size_t
i
=
1
;
i
<
argc
;
i
++
)
return
vcmd
;
argv
[
i
]
=
v
[
i
-
1
].
c_str
();
// use strdup?
int
optindex
=
0
;
int
opt
=
0
;
vector
<
lsMessage
>
vcmd
;
while
(
1
)
for
(
size_t
i
=
0
;
i
<
v
.
size
();
i
++
)
{
{
opt
=
getopt_long
(
argc
,
(
char
**
)
argv
,
"la:d:s:n:eorx:t:uby:"
,
longopts
,
&
optindex
);
auto
c
=
v
[
i
];
if
(
opt
==
-
1
)
break
;
switch
(
opt
)
{
case
'a'
:
{
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdAddLevel
;
std
::
string
filter
(
""
);
std
::
string
d
=
string
(
optarg
);
const
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
filter
=
string
(
arg2
);
vcmd
.
emplace_back
(
cmd
,
(
int
)
Debug
::
value
(
d
),
filter
);
}
break
;
case
'd'
:
{
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdDelLevel
;
std
::
string
filter
(
""
);
std
::
string
d
=
string
(
optarg
);
const
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
filter
=
string
(
arg2
);
vcmd
.
emplace_back
(
cmd
,
(
int
)
Debug
::
value
(
d
),
filter
);
}
break
;
case
's'
:
{
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdSetLevel
;
std
::
string
filter
(
""
);
std
::
string
d
=
string
(
optarg
);
const
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
filter
=
string
(
arg2
);
vcmd
.
emplace_back
(
cmd
,
(
int
)
Debug
::
value
(
d
),
filter
);
}
break
;
case
'l'
:
{
std
::
string
filter
(
""
);
const
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
filter
=
string
(
arg2
);
vcmd
.
emplace_back
(
LogServerTypes
::
cmdList
,
0
,
filter
);
string
arg1
=
checkArg
(
i
+
1
,
v
);
}
if
(
arg1
.
empty
()
)
break
;
continue
;
case
'o'
:
i
++
;
{
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdOffLogFile
;
std
::
string
filter
(
""
);
const
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
std
::
string
filter
=
checkArg
(
i
+
2
,
v
);
filter
=
string
(
arg2
);
if
(
!
filter
.
empty
()
)
i
++
;
vcmd
.
emplace_back
(
cmd
,
0
,
filter
);
if
(
c
==
"-s"
||
c
==
"--set"
)
}
{
break
;
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdSetLevel
;
vcmd
.
emplace_back
(
cmd
,
(
int
)
Debug
::
value
(
arg1
),
filter
);
case
'u'
:
// --save-loglevels
}
{
else
if
(
c
==
"-a"
||
c
==
"--add"
)
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdSaveLogLevel
;
{
std
::
string
filter
(
""
);
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdAddLevel
;
const
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
vcmd
.
emplace_back
(
cmd
,
(
int
)
Debug
::
value
(
arg1
),
filter
);
}
if
(
arg2
)
else
if
(
c
==
"-d"
||
c
==
"--del"
)
filter
=
string
(
arg2
);
{
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdDelLevel
;
vcmd
.
emplace_back
(
cmd
,
0
,
filter
);
vcmd
.
emplace_back
(
cmd
,
(
int
)
Debug
::
value
(
arg1
),
filter
);
}
break
;
case
'y'
:
// --restore-loglevels
{
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdRestoreLogLevel
;
std
::
string
filter
(
""
);
const
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
filter
=
string
(
arg2
);
vcmd
.
emplace_back
(
cmd
,
0
,
filter
);
}
break
;
case
'e'
:
{
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdOnLogFile
;
std
::
string
filter
(
""
);
const
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
filter
=
string
(
arg2
);
vcmd
.
emplace_back
(
cmd
,
0
,
filter
);
}
break
;
case
'r'
:
{
LogServerTypes
::
Command
cmd
=
LogServerTypes
::
cmdRotate
;
std
::
string
filter
(
""
);
const
char
*
arg2
=
checkArg
(
optind
,
argc
,
argv
);
if
(
arg2
)
filter
=
string
(
arg2
);
vcmd
.
emplace_back
(
cmd
,
0
,
filter
);
}
break
;
case
'?'
:
default
:
break
;
}
}
}
}
delete
[]
argv
;
return
vcmd
;
return
vcmd
;
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
...
...
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