Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
varnish-cache
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
varnishcache
varnish-cache
Commits
b5fa8c5f
Commit
b5fa8c5f
authored
Nov 06, 2013
by
Martin Blix Grydeland
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move all output handling from VUT to the individual utilities.
parent
fed96be0
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
124 additions
and
70 deletions
+124
-70
varnishlog.c
bin/varnishlog/varnishlog.c
+78
-1
varnishlog_options.h
bin/varnishlog/varnishlog_options.h
+22
-2
vut.h
include/vut.h
+9
-4
vut_options.h
include/vut_options.h
+0
-15
vut.c
lib/libvarnishtools/vut.c
+15
-48
No files found.
bin/varnishlog/varnishlog.c
View file @
b5fa8c5f
...
...
@@ -49,9 +49,20 @@
#include "vsb.h"
#include "vtim.h"
#include "vut.h"
#include "miniobj.h"
static
const
char
progname
[]
=
"varnishlog"
;
struct
log
{
/* Options */
int
a_opt
;
int
B_opt
;
char
*
w_arg
;
/* State */
FILE
*
fo
;
}
LOG
;
static
void
usage
(
int
status
)
{
...
...
@@ -63,17 +74,68 @@ usage(int status)
exit
(
status
);
}
static
void
openout
(
int
append
)
{
AN
(
LOG
.
w_arg
);
if
(
LOG
.
B_opt
)
LOG
.
fo
=
VSL_WriteOpen
(
VUT
.
vsl
,
LOG
.
w_arg
,
append
,
VUT
.
u_opt
);
else
LOG
.
fo
=
fopen
(
LOG
.
w_arg
,
append
?
"a"
:
"w"
);
if
(
LOG
.
fo
==
NULL
)
VUT_Error
(
1
,
"Can't open output file (%s)"
,
LOG
.
B_opt
?
VSL_Error
(
VUT
.
vsl
)
:
strerror
(
errno
));
VUT
.
dispatch_priv
=
LOG
.
fo
;
}
static
int
__match_proto__
(
VUT_cb_f
)
rotateout
(
void
)
{
AN
(
LOG
.
w_arg
);
AN
(
LOG
.
fo
);
fclose
(
LOG
.
fo
);
openout
(
0
);
AN
(
LOG
.
fo
);
return
(
0
);
}
static
int
__match_proto__
(
VUT_cb_f
)
flushout
(
void
)
{
AN
(
LOG
.
fo
);
if
(
fflush
(
LOG
.
fo
))
return
(
-
5
);
return
(
0
);
}
int
main
(
int
argc
,
char
*
const
*
argv
)
{
char
opt
;
memset
(
&
LOG
,
0
,
sizeof
LOG
);
VUT_Init
(
progname
);
while
((
opt
=
getopt
(
argc
,
argv
,
vopt_optstring
))
!=
-
1
)
{
switch
(
opt
)
{
case
'a'
:
/* Append to file */
LOG
.
a_opt
=
1
;
break
;
case
'B'
:
/* Binary output */
LOG
.
B_opt
=
1
;
break
;
case
'h'
:
/* Usage help */
usage
(
0
);
case
'w'
:
/* Write to file */
REPLACE
(
LOG
.
w_arg
,
optarg
);
break
;
default:
if
(
!
VUT_Arg
(
opt
,
optarg
))
usage
(
1
);
...
...
@@ -83,9 +145,24 @@ main(int argc, char * const *argv)
if
(
optind
!=
argc
)
usage
(
1
);
/* Setup output */
if
(
LOG
.
B_opt
)
VUT
.
dispatch_f
=
&
VSL_WriteTransactions
;
else
VUT
.
dispatch_f
=
&
VSL_PrintTransactions
;
if
(
LOG
.
w_arg
)
{
openout
(
LOG
.
a_opt
);
AN
(
LOG
.
fo
);
VUT
.
sighup_f
=
&
rotateout
;
}
else
LOG
.
fo
=
stdout
;
VUT
.
idle_f
=
&
flushout
;
VUT_Setup
();
VUT_Main
(
NULL
,
NULL
);
VUT_Main
();
VUT_Fini
();
(
void
)
flushout
();
exit
(
0
);
}
bin/varnishlog/varnishlog_options.h
View file @
b5fa8c5f
...
...
@@ -30,8 +30,28 @@
#include "vapi/vapi_options.h"
#include "vut_options.h"
VUT_OPT_a
#define LOG_OPT_a \
VOPT("a", "[-a]", "Append to file", \
"When writing output to a file, append to it rather than" \
" overwrite it." \
)
#define LOG_OPT_B \
VOPT("B", "[-B]", "Binary output", \
"Output binary data suitable for reading with -r." \
)
#define LOG_OPT_w \
VOPT("w:", "[-w filename]", "Output filename", \
"Redirect output to file. The file will be overwritten" \
" unless the -a option was specified. If the application" \
" receives a SIGHUP the file will be reopened allowing" \
" the old one to be rotated away." \
)
LOG_OPT_a
VSL_OPT_b
LOG_OPT_B
VSL_OPT_c
VSL_OPT_C
VUT_OPT_d
...
...
@@ -50,6 +70,6 @@ VSL_OPT_T
VUT_OPT_u
VSL_OPT_v
VUT_OPT_V
VUT
_OPT_w
LOG
_OPT_w
VSL_OPT_x
VSL_OPT_X
include/vut.h
View file @
b5fa8c5f
...
...
@@ -31,11 +31,12 @@
#include "vdef.h"
typedef
int
VUT_cb_f
(
void
);
struct
VUT
{
const
char
*
progname
;
/* Options */
int
a_opt
;
int
d_opt
;
int
D_opt
;
int
g_arg
;
...
...
@@ -43,17 +44,21 @@ struct VUT {
char
*
q_arg
;
char
*
r_arg
;
int
u_opt
;
char
*
w_arg
;
/* State */
struct
VSL_data
*
vsl
;
struct
VSM_data
*
vsm
;
struct
VSLQ
*
vslq
;
FILE
*
fo
;
struct
vpf_fh
*
pfh
;
int
sighup
;
int
sigint
;
int
sigusr1
;
/* Callback functions */
VUT_cb_f
*
idle_f
;
VUT_cb_f
*
sighup_f
;
VSLQ_dispatch_f
*
dispatch_f
;
void
*
dispatch_priv
;
};
extern
struct
VUT
VUT
;
...
...
@@ -71,4 +76,4 @@ void VUT_Init(const char *progname);
void
VUT_Fini
(
void
);
int
VUT_Main
(
VSLQ_dispatch_f
*
func
,
void
*
priv
);
int
VUT_Main
(
void
);
include/vut_options.h
View file @
b5fa8c5f
...
...
@@ -29,12 +29,6 @@
/* VUT options */
#define VUT_OPT_a \
VOPT("a", "[-a]", "Append binary file output", \
"When writing binary output to a file, append to it rather" \
" than overwrite it." \
)
#define VUT_OPT_d \
VOPT("d", "[-d]", "Process old log entries on startup", \
"Start processing log records at the head of the log" \
...
...
@@ -93,12 +87,3 @@
VOPT("V", "[-V]", "Version", \
"Print version information and exit." \
)
#define VUT_OPT_w \
VOPT("w:", "[-w filename]", "Binary output filename", \
"Write log entries to this file instead of displaying" \
" them. The file will be overwritten unless the -a option" \
" was specified. If the application receives a SIGHUP" \
" while writing to a file, it will reopen the file" \
" allowing the old one to be rotated away." \
)
lib/libvarnishtools/vut.c
View file @
b5fa8c5f
...
...
@@ -116,10 +116,6 @@ VUT_Arg(int opt, const char *arg)
int
i
;
switch
(
opt
)
{
case
'a'
:
/* Binary file append */
VUT
.
a_opt
=
1
;
return
(
1
);
case
'd'
:
/* Head */
VUT
.
d_opt
=
1
;
...
...
@@ -168,10 +164,6 @@ VUT_Arg(int opt, const char *arg)
/* Print version number and exit */
VCS_Message
(
VUT
.
progname
);
exit
(
1
);
case
'w'
:
/* Binary file output */
REPLACE
(
VUT
.
w_arg
,
arg
);
return
(
1
);
default:
AN
(
VUT
.
vsl
);
i
=
VSL_Arg
(
VUT
.
vsl
,
opt
,
arg
);
...
...
@@ -218,16 +210,6 @@ VUT_Setup(void)
if
(
c
==
NULL
)
VUT_Error
(
1
,
"Can't open log (%s)"
,
VSL_Error
(
VUT
.
vsl
));
/* Output */
if
(
VUT
.
w_arg
)
{
VUT
.
fo
=
VSL_WriteOpen
(
VUT
.
vsl
,
VUT
.
w_arg
,
VUT
.
a_opt
,
VUT
.
u_opt
);
if
(
VUT
.
fo
==
NULL
)
VUT_Error
(
1
,
"Can't open output file (%s)"
,
VSL_Error
(
VUT
.
vsl
));
}
else
VUT
.
fo
=
stdout
;
/* Create query */
VUT
.
vslq
=
VSLQ_New
(
VUT
.
vsl
,
&
c
,
VUT
.
g_arg
,
VUT
.
q_arg
);
if
(
VUT
.
vslq
==
NULL
)
...
...
@@ -265,9 +247,6 @@ VUT_Fini(void)
free
(
VUT
.
r_arg
);
free
(
VUT
.
P_arg
);
if
(
VUT
.
fo
!=
NULL
)
fflush
(
VUT
.
fo
);
vut_vpf_remove
();
AZ
(
VUT
.
pfh
);
...
...
@@ -282,40 +261,28 @@ VUT_Fini(void)
}
int
VUT_Main
(
VSLQ_dispatch_f
*
func
,
void
*
priv
)
VUT_Main
(
void
)
{
struct
VSL_cursor
*
c
;
int
i
=
-
1
;
AN
(
VUT
.
vslq
);
if
(
func
==
NULL
)
{
if
(
VUT
.
w_arg
)
func
=
VSL_WriteTransactions
;
else
func
=
VSL_PrintTransactions
;
AN
(
VUT
.
fo
);
priv
=
VUT
.
fo
;
}
while
(
!
VUT
.
sigint
)
{
if
(
VUT
.
w_arg
&&
VUT
.
sighup
)
{
/*
Rotate log
*/
if
(
VUT
.
sighup
&&
VUT
.
sighup_f
)
{
/*
sighup callback
*/
VUT
.
sighup
=
0
;
AN
(
VUT
.
fo
);
fclose
(
VUT
.
fo
);
VUT
.
fo
=
VSL_WriteOpen
(
VUT
.
vsl
,
VUT
.
w_arg
,
0
,
VUT
.
u_opt
);
if
(
VUT
.
fo
==
NULL
)
VUT_Error
(
1
,
"Can't open output file (%s)"
,
VSL_Error
(
VUT
.
vsl
));
i
=
(
VUT
.
sighup_f
)();
if
(
i
)
break
;
}
if
(
VUT
.
sigusr1
)
{
/* Flush and report any incomplete records */
VUT
.
sigusr1
=
0
;
if
(
VUT
.
vslq
!=
NULL
)
VSLQ_Flush
(
VUT
.
vslq
,
func
,
priv
);
VSLQ_Flush
(
VUT
.
vslq
,
VUT
.
dispatch_f
,
VUT
.
dispatch_priv
);
}
if
(
VUT
.
vslq
==
NULL
)
{
...
...
@@ -340,14 +307,17 @@ VUT_Main(VSLQ_dispatch_f *func, void *priv)
VUT_Error
(
0
,
"Log reaquired"
);
}
i
=
VSLQ_Dispatch
(
VUT
.
vslq
,
func
,
priv
);
i
=
VSLQ_Dispatch
(
VUT
.
vslq
,
VUT
.
dispatch_f
,
VUT
.
dispatch_
priv
);
if
(
i
==
1
)
/* Call again */
continue
;
else
if
(
i
==
0
)
{
/* Nothing to do but wait */
if
(
VUT
.
fo
)
fflush
(
VUT
.
fo
);
if
(
VUT
.
idle_f
)
{
i
=
(
VUT
.
idle_f
)();
if
(
i
)
break
;
}
VTIM_sleep
(
0
.
01
);
continue
;
}
else
if
(
i
==
-
1
)
{
...
...
@@ -360,7 +330,7 @@ VUT_Main(VSLQ_dispatch_f *func, void *priv)
/* XXX: Make continuation optional */
VSLQ_Flush
(
VUT
.
vslq
,
func
,
priv
);
VSLQ_Flush
(
VUT
.
vslq
,
VUT
.
dispatch_f
,
VUT
.
dispatch_
priv
);
VSLQ_Delete
(
&
VUT
.
vslq
);
AZ
(
VUT
.
vslq
);
...
...
@@ -374,8 +344,5 @@ VUT_Main(VSLQ_dispatch_f *func, void *priv)
}
}
if
(
VUT
.
fo
)
fflush
(
VUT
.
fo
);
return
(
i
);
}
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