Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
varnishevent
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
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
uplex-varnish
varnishevent
Commits
a7edfb9d
Commit
a7edfb9d
authored
Apr 02, 2015
by
Geoff Simmons
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
implement and test formatters for %{Varnish:hitmiss} and %{Varnish:handling}
parent
9372a68a
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
158 additions
and
27 deletions
+158
-27
format.c
src/format.c
+38
-27
format.h
src/format.h
+2
-0
test_format.c
src/test/test_format.c
+118
-0
No files found.
src/format.c
View file @
a7edfb9d
...
...
@@ -59,6 +59,13 @@ typedef struct compiled_fmt_t {
/* XXX: When FMT_Init is implemented, malloc to config.max_reclen */
static
char
scratch
[
DEFAULT_MAX_RECLEN
];
static
char
hit
[]
=
"hit"
;
static
char
miss
[]
=
"miss"
;
static
char
pass
[]
=
"pass"
;
static
char
pipe
[]
=
"pipe"
;
static
char
error
[]
=
"error"
;
static
char
dash
[]
=
"-"
;
#if 0
static compiled_fmt_t cformat, bformat, zformat;
...
...
@@ -68,11 +75,6 @@ static char i_arg[BUFSIZ] = "";
static int read_rx_hdr = 0, read_tx_hdr = 0, read_vcl_log = 0,
read_vcl_call = 0, ntags = 0;
static char hit[4];
static char miss[5];
static char pass[5];
static char dash[2];
#endif
void
...
...
@@ -579,41 +581,50 @@ format_Xttfb_backend(tx_t *tx, char *name, enum VSL_tag_e tag,
format_Xttfb
(
tx
,
"Beresp"
,
s
,
len
);
}
#if 0
static void
format_VCL_disp(logline_t *ll, char *name, enum VSL_tag_e tag,
void
format_VCL_disp
(
tx_t
*
tx
,
char
*
name
,
enum
VSL_tag_e
tag
,
char
**
s
,
size_t
*
len
)
{
hdr_t *vcl_call = ll->vcl_call;
(void) tag;
logline_t
*
rec
;
(
void
)
tag
;
*
s
=
dash
;
for (int i = 0; i < vcl_call->nrec; i++) {
record_t *rec = &vcl_call->record[i];
if (strncmp(rec->data, "hit", rec->len) == 0) {
VSTAILQ_FOREACH
(
rec
,
&
tx
->
lines
,
linelist
)
{
CHECK_OBJ_NOTNULL
(
rec
,
LOGLINE_MAGIC
);
if
(
rec
->
tag
!=
SLT_VCL_call
&&
rec
->
tag
!=
SLT_VCL_return
)
continue
;
get_payload
(
rec
);
char
*
data
=
VSB_data
(
payload
);
if
(
rec
->
tag
==
SLT_VCL_call
)
{
if
(
strcasecmp
(
data
,
"hit"
)
==
0
)
*
s
=
hit
;
break;
else
if
(
strcasecmp
(
data
,
"miss"
)
==
0
)
*
s
=
miss
;
else
if
(
strcasecmp
(
data
,
"pass"
)
==
0
)
{
if
(
*
name
==
'm'
)
*
s
=
miss
;
else
*
s
=
pass
;
}
else if (strncmp(rec->data, "miss", rec->len) == 0) {
else
if
(
strcasecmp
(
data
,
"error"
)
==
0
)
{
if
(
*
name
==
'm'
)
*
s
=
miss
;
break;
else
*
s
=
error
;
}
}
else if (str
ncmp(rec->data, "pass", rec->len
) == 0) {
else
if
(
str
casecmp
(
data
,
"pipe"
)
==
0
)
{
if
(
*
name
==
'm'
)
*
s
=
miss
;
else
*s = pass;
break;
*
s
=
pipe
;
}
else if (strncmp(rec->data, "pipe", rec->len) == 0)
break;
}
*
len
=
strlen
(
*
s
);
}
#if 0
static void
format_VCL_Log(logline_t *ll, char *name, enum VSL_tag_e tag,
...
...
src/format.h
View file @
a7edfb9d
...
...
@@ -94,3 +94,5 @@ formatter_f format_Xt;
formatter_f
format_Xttfb_client
;
formatter_f
format_Xttfb_backend
;
formatter_f
format_VCL_disp
;
src/test/test_format.c
View file @
a7edfb9d
...
...
@@ -72,6 +72,14 @@ set_record_data(logline_t *rec, chunk_t *chunk, const char *data,
rec
->
tag
=
tag
;
}
static
void
add_record_data
(
tx_t
*
tx
,
logline_t
*
rec
,
chunk_t
*
chunk
,
const
char
*
data
,
enum
VSL_tag_e
tag
)
{
add_rec_chunk
(
tx
,
rec
,
chunk
);
set_record_data
(
rec
,
chunk
,
data
,
tag
);
}
/* N.B.: Always run the tests in this order */
static
const
char
*
test_format_init
(
void
)
...
...
@@ -1059,6 +1067,115 @@ static const char
return
NULL
;
}
static
const
char
*
test_format_VCL_disp
(
void
)
{
tx_t
tx
;
logline_t
*
recs
[
NRECORDS
];
chunk_t
*
c
[
NRECORDS
];
char
*
str
,
hitmiss
[]
=
"m"
,
handling
[]
=
"n"
;
size_t
len
;
printf
(
"... testing format_VCL_disp_*()
\n
"
);
tx
.
magic
=
TX_MAGIC
;
VSTAILQ_INIT
(
&
tx
.
lines
);
for
(
int
i
=
0
;
i
<
NRECORDS
;
i
++
)
{
recs
[
i
]
=
(
logline_t
*
)
calloc
(
1
,
sizeof
(
logline_t
));
MAN
(
recs
[
i
]);
c
[
i
]
=
(
chunk_t
*
)
calloc
(
1
,
sizeof
(
chunk_t
));
MAN
(
c
[
i
]);
}
/* %{Varnish:hitmiss} for a hit */
add_record_data
(
&
tx
,
recs
[
0
],
c
[
0
],
"RECV"
,
SLT_VCL_call
);
add_record_data
(
&
tx
,
recs
[
1
],
c
[
1
],
"hash"
,
SLT_VCL_return
);
add_record_data
(
&
tx
,
recs
[
2
],
c
[
2
],
"HASH"
,
SLT_VCL_call
);
add_record_data
(
&
tx
,
recs
[
3
],
c
[
3
],
"lookup"
,
SLT_VCL_return
);
add_record_data
(
&
tx
,
recs
[
4
],
c
[
4
],
"HIT"
,
SLT_VCL_call
);
add_record_data
(
&
tx
,
recs
[
5
],
c
[
5
],
"deliver"
,
SLT_VCL_return
);
add_record_data
(
&
tx
,
recs
[
6
],
c
[
6
],
"DELIVER"
,
SLT_VCL_call
);
add_record_data
(
&
tx
,
recs
[
7
],
c
[
7
],
"deliver"
,
SLT_VCL_return
);
for
(
int
i
=
8
;
i
<
NRECORDS
;
i
++
)
add_record_data
(
&
tx
,
recs
[
i
],
c
[
i
],
""
,
SLT__Bogus
);
format_VCL_disp
(
&
tx
,
hitmiss
,
SLT__Bogus
,
&
str
,
&
len
);
MASSERT
(
strcmp
(
str
,
"hit"
)
==
0
);
MASSERT
(
len
==
3
);
/* %{Varnish:handling} for a hit */
format_VCL_disp
(
&
tx
,
handling
,
SLT__Bogus
,
&
str
,
&
len
);
MASSERT
(
strcmp
(
str
,
"hit"
)
==
0
);
MASSERT
(
len
==
3
);
/* %{Varnish:hitmiss} for a miss */
add_record_data
(
&
tx
,
recs
[
4
],
c
[
4
],
"MISS"
,
SLT_VCL_call
);
add_record_data
(
&
tx
,
recs
[
5
],
c
[
5
],
"fetch"
,
SLT_VCL_return
);
format_VCL_disp
(
&
tx
,
hitmiss
,
SLT__Bogus
,
&
str
,
&
len
);
MASSERT
(
strcmp
(
str
,
"miss"
)
==
0
);
MASSERT
(
len
==
4
);
/* %{Varnish:handling} for a miss */
format_VCL_disp
(
&
tx
,
handling
,
SLT__Bogus
,
&
str
,
&
len
);
MASSERT
(
strcmp
(
str
,
"miss"
)
==
0
);
MASSERT
(
len
==
4
);
/* %{Varnish:hitmiss} for a pass */
add_record_data
(
&
tx
,
recs
[
4
],
c
[
4
],
"PASS"
,
SLT_VCL_call
);
format_VCL_disp
(
&
tx
,
hitmiss
,
SLT__Bogus
,
&
str
,
&
len
);
MASSERT
(
strcmp
(
str
,
"miss"
)
==
0
);
MASSERT
(
len
==
4
);
/* %{Varnish:handling} for a pass */
format_VCL_disp
(
&
tx
,
handling
,
SLT__Bogus
,
&
str
,
&
len
);
MASSERT
(
strcmp
(
str
,
"pass"
)
==
0
);
MASSERT
(
len
==
4
);
/* %{Varnish:hitmiss} for an error */
add_record_data
(
&
tx
,
recs
[
4
],
c
[
4
],
"ERROR"
,
SLT_VCL_call
);
add_record_data
(
&
tx
,
recs
[
5
],
c
[
5
],
"synth"
,
SLT_VCL_return
);
format_VCL_disp
(
&
tx
,
hitmiss
,
SLT__Bogus
,
&
str
,
&
len
);
MASSERT
(
strcmp
(
str
,
"miss"
)
==
0
);
MASSERT
(
len
==
4
);
/* %{Varnish:handling} for an error */
format_VCL_disp
(
&
tx
,
handling
,
SLT__Bogus
,
&
str
,
&
len
);
MASSERT
(
strcmp
(
str
,
"error"
)
==
0
);
MASSERT
(
len
==
5
);
/* %{Varnish:hitmiss} for noe of the above */
add_record_data
(
&
tx
,
recs
[
0
],
c
[
0
],
"RECV"
,
SLT_VCL_call
);
add_record_data
(
&
tx
,
recs
[
1
],
c
[
1
],
"synth"
,
SLT_VCL_return
);
add_record_data
(
&
tx
,
recs
[
2
],
c
[
2
],
"HASH"
,
SLT_VCL_call
);
add_record_data
(
&
tx
,
recs
[
3
],
c
[
3
],
"lookup"
,
SLT_VCL_return
);
add_record_data
(
&
tx
,
recs
[
4
],
c
[
4
],
"SYNTH"
,
SLT_VCL_call
);
add_record_data
(
&
tx
,
recs
[
5
],
c
[
5
],
"deliver"
,
SLT_VCL_return
);
for
(
int
i
=
6
;
i
<
NRECORDS
;
i
++
)
add_record_data
(
&
tx
,
recs
[
i
],
c
[
i
],
""
,
SLT__Bogus
);
format_VCL_disp
(
&
tx
,
hitmiss
,
SLT__Bogus
,
&
str
,
&
len
);
MASSERT
(
strcmp
(
str
,
"-"
)
==
0
);
MASSERT
(
len
==
1
);
/* %{Varnish:handling} for noe of the above */
format_VCL_disp
(
&
tx
,
handling
,
SLT__Bogus
,
&
str
,
&
len
);
MASSERT
(
strcmp
(
str
,
"-"
)
==
0
);
MASSERT
(
len
==
1
);
/* %{Varnish:hitmiss} for a pipe */
add_record_data
(
&
tx
,
recs
[
1
],
c
[
1
],
"pipe"
,
SLT_VCL_return
);
for
(
int
i
=
2
;
i
<
NRECORDS
;
i
++
)
add_record_data
(
&
tx
,
recs
[
i
],
c
[
i
],
""
,
SLT__Bogus
);
format_VCL_disp
(
&
tx
,
hitmiss
,
SLT__Bogus
,
&
str
,
&
len
);
MASSERT
(
strcmp
(
str
,
"miss"
)
==
0
);
MASSERT
(
len
==
4
);
/* %{Varnish:handling} for an pipe */
format_VCL_disp
(
&
tx
,
handling
,
SLT__Bogus
,
&
str
,
&
len
);
MASSERT
(
strcmp
(
str
,
"pipe"
)
==
0
);
MASSERT
(
len
==
4
);
return
NULL
;
}
static
const
char
*
all_tests
(
void
)
{
...
...
@@ -1087,6 +1204,7 @@ static const char
mu_run_test
(
test_format_Xo
);
mu_run_test
(
test_format_Xt
);
mu_run_test
(
test_format_Xttfb
);
mu_run_test
(
test_format_VCL_disp
);
return
NULL
;
}
...
...
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