Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
BIND
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
635
Issues
635
List
Boards
Labels
Service Desk
Milestones
Merge Requests
105
Merge Requests
105
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ISC Open Source Projects
BIND
Commits
10966da9
Commit
10966da9
authored
Jun 23, 2016
by
Mark Andrews
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
4402. [func] Collect statistics for RSSAC02v3 traffic-volume,
traffic-sizes and rcode-volume reporting. [RT #41475]
parent
393c9780
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
521 additions
and
104 deletions
+521
-104
CHANGES
CHANGES
+3
-0
bin/named/client.c
bin/named/client.c
+55
-8
bin/named/include/named/server.h
bin/named/include/named/server.h
+9
-4
bin/named/server.c
bin/named/server.c
+45
-16
bin/named/statschannel.c
bin/named/statschannel.c
+301
-68
bin/tests/system/conf.sh.in
bin/tests/system/conf.sh.in
+1
-1
bin/tests/system/statschannel/server-json.pl
bin/tests/system/statschannel/server-json.pl
+3
-0
bin/tests/system/statschannel/tests.sh
bin/tests/system/statschannel/tests.sh
+7
-0
bin/tests/system/statschannel/traffic-json.pl
bin/tests/system/statschannel/traffic-json.pl
+4
-4
bin/tests/system/statschannel/traffic-xml.pl
bin/tests/system/statschannel/traffic-xml.pl
+2
-2
lib/dns/include/dns/stats.h
lib/dns/include/dns/stats.h
+41
-0
lib/dns/include/dns/types.h
lib/dns/include/dns/types.h
+4
-0
lib/dns/stats.c
lib/dns/stats.c
+43
-1
lib/dns/win32/libdns.def.in
lib/dns/win32/libdns.def.in
+3
-0
No files found.
CHANGES
View file @
10966da9
4402. [func] Collect statistics for RSSAC02v3 traffic-volume,
traffic-sizes and rcode-volume reporting. [RT #41475]
4401. [bug] Fix leaks in contrib DLZ code. [RT #42707]
4400. [doc] Description of masters with TSIG, allow-query and
...
...
bin/named/client.c
View file @
10966da9
...
...
@@ -1199,8 +1199,20 @@ client_send(ns_client_t *client) {
}
#endif
/* HAVE_DNSTAP */
isc_stats_increment
(
ns_g_server
->
tcpoutstats
,
ISC_MIN
((
int
)
respsize
/
16
,
256
));
switch
(
isc_sockaddr_pf
(
&
client
->
peeraddr
))
{
case
AF_INET
:
isc_stats_increment
(
ns_g_server
->
tcpoutstats4
,
ISC_MIN
((
int
)
respsize
/
16
,
256
));
break
;
case
AF_INET6
:
isc_stats_increment
(
ns_g_server
->
tcpoutstats6
,
ISC_MIN
((
int
)
respsize
/
16
,
256
));
break
;
default:
INSIST
(
0
);
break
;
}
}
else
{
respsize
=
isc_buffer_usedlength
(
&
buffer
);
result
=
client_sendpkg
(
client
,
&
buffer
);
...
...
@@ -1213,13 +1225,26 @@ client_send(ns_client_t *client) {
}
#endif
/* HAVE_DNSTAP */
isc_stats_increment
(
ns_g_server
->
udpoutstats
,
ISC_MIN
((
int
)
respsize
/
16
,
256
));
switch
(
isc_sockaddr_pf
(
&
client
->
peeraddr
))
{
case
AF_INET
:
isc_stats_increment
(
ns_g_server
->
udpoutstats4
,
ISC_MIN
((
int
)
respsize
/
16
,
256
));
break
;
case
AF_INET6
:
isc_stats_increment
(
ns_g_server
->
udpoutstats6
,
ISC_MIN
((
int
)
respsize
/
16
,
256
));
break
;
default:
INSIST
(
0
);
break
;
}
}
/* update statistics (XXXJT: is it okay to access message->xxxkey?) */
isc_stats_increment
(
ns_g_server
->
nsstats
,
dns_nsstatscounter_response
);
dns_rcodestats_increment
(
ns_g_server
->
rcodestats
,
client
->
message
->
rcode
);
if
(
opt_included
)
{
isc_stats_increment
(
ns_g_server
->
nsstats
,
dns_nsstatscounter_edns0out
);
...
...
@@ -2332,11 +2357,33 @@ client_request(isc_task_t *task, isc_event_t *event) {
if
(
TCP_CLIENT
(
client
))
{
isc_stats_increment
(
ns_g_server
->
nsstats
,
dns_nsstatscounter_requesttcp
);
isc_stats_increment
(
ns_g_server
->
tcpinstats
,
ISC_MIN
((
int
)
reqsize
/
16
,
18
));
switch
(
isc_sockaddr_pf
(
&
client
->
peeraddr
))
{
case
AF_INET
:
isc_stats_increment
(
ns_g_server
->
tcpinstats4
,
ISC_MIN
((
int
)
reqsize
/
16
,
18
));
break
;
case
AF_INET6
:
isc_stats_increment
(
ns_g_server
->
tcpinstats6
,
ISC_MIN
((
int
)
reqsize
/
16
,
18
));
break
;
default:
INSIST
(
0
);
break
;
}
}
else
{
isc_stats_increment
(
ns_g_server
->
udpinstats
,
ISC_MIN
((
int
)
reqsize
/
16
,
18
));
switch
(
isc_sockaddr_pf
(
&
client
->
peeraddr
))
{
case
AF_INET
:
isc_stats_increment
(
ns_g_server
->
udpinstats4
,
ISC_MIN
((
int
)
reqsize
/
16
,
18
));
break
;
case
AF_INET6
:
isc_stats_increment
(
ns_g_server
->
udpinstats6
,
ISC_MIN
((
int
)
reqsize
/
16
,
18
));
break
;
default:
INSIST
(
0
);
break
;
}
}
/*
...
...
bin/named/include/named/server.h
View file @
10966da9
...
...
@@ -101,10 +101,15 @@ struct ns_server {
isc_stats_t
*
zonestats
;
/*% Zone management stats */
isc_stats_t
*
resolverstats
;
/*% Resolver stats */
isc_stats_t
*
sockstats
;
/*%< Socket stats */
isc_stats_t
*
udpinstats
;
/*%< Traffic size: UDP in */
isc_stats_t
*
udpoutstats
;
/*%< Traffic size: UDP out */
isc_stats_t
*
tcpinstats
;
/*%< Traffic size: TCP in */
isc_stats_t
*
tcpoutstats
;
/*%< Traffic size: TCP out */
isc_stats_t
*
udpinstats4
;
/*%< Traffic size: UDPv4 in */
isc_stats_t
*
udpoutstats4
;
/*%< Traffic size: UDPv4 out */
isc_stats_t
*
udpinstats6
;
/*%< Traffic size: UDPv6 in */
isc_stats_t
*
udpoutstats6
;
/*%< Traffic size: UDPv6 out */
isc_stats_t
*
tcpinstats4
;
/*%< Traffic size: TCPv4 in */
isc_stats_t
*
tcpoutstats4
;
/*%< Traffic size: TCPv4 out */
isc_stats_t
*
tcpinstats6
;
/*%< Traffic size: TCPv6 in */
isc_stats_t
*
tcpoutstats6
;
/*%< Traffic size: TCPv6 out */
dns_stats_t
*
rcodestats
;
/*%< Sent Response code stats */
ns_controls_t
*
controls
;
/*%< Control channels */
unsigned
int
dispatchgen
;
...
...
bin/named/server.c
View file @
10966da9
...
...
@@ -7834,13 +7834,18 @@ ns_server_create(isc_mem_t *mctx, ns_server_t **serverp) {
server->nsstats = NULL;
server->rcvquerystats = NULL;
server->opcodestats = NULL;
server->rcodestats = NULL;
server->zonestats = NULL;
server->resolverstats = NULL;
server->sockstats = NULL;
server->udpinstats = NULL;
server->udpoutstats = NULL;
server->tcpinstats = NULL;
server->tcpoutstats = NULL;
server->udpinstats4 = NULL;
server->udpoutstats4 = NULL;
server->udpinstats6 = NULL;
server->udpoutstats6 = NULL;
server->tcpinstats4 = NULL;
server->tcpoutstats4 = NULL;
server->tcpinstats6 = NULL;
server->tcpoutstats6 = NULL;
CHECKFATAL(isc_stats_create(server->mctx, &server->sockstats,
isc_sockstatscounter_max),
"isc_stats_create");
...
...
@@ -7882,6 +7887,9 @@ ns_server_create(isc_mem_t *mctx, ns_server_t **serverp) {
CHECKFATAL(dns_opcodestats_create(ns_g_mctx, &server->opcodestats),
"dns_stats_create (opcode)");
CHECKFATAL(dns_rcodestats_create(ns_g_mctx, &server->rcodestats),
"dns_stats_create (rcode)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->zonestats,
dns_zonestatscounter_max),
"dns_stats_create (zone)");
...
...
@@ -7890,21 +7898,37 @@ ns_server_create(isc_mem_t *mctx, ns_server_t **serverp) {
dns_resstatscounter_max),
"dns_stats_create (resolver)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->udpinstats,
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->udpinstats4,
dns_sizecounter_in_max),
"dns_stats_create (inbound UDP IPv4 traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->udpoutstats4,
dns_sizecounter_out_max),
"dns_stats_create (outbound UDP IPv4 traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->udpinstats6,
dns_sizecounter_in_max),
"dns_stats_create (inbound UDP IPv6 traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->udpoutstats6,
dns_sizecounter_out_max),
"dns_stats_create (outbound UDP IPv6 traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->tcpinstats4,
dns_sizecounter_in_max),
"dns_stats_create (inbound
UDP
traffic size)");
"dns_stats_create (inbound
TCP IPv4
traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->
udpoutstats
,
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->
tcpoutstats4
,
dns_sizecounter_out_max),
"dns_stats_create (outbound
UDP
traffic size)");
"dns_stats_create (outbound
TCP IPv4
traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->tcpinstats,
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->tcpinstats
6
,
dns_sizecounter_in_max),
"dns_stats_create (inbound TCP traffic size)");
"dns_stats_create (inbound TCP
IPv6
traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->tcpoutstats,
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->tcpoutstats
6
,
dns_sizecounter_out_max),
"dns_stats_create (outbound TCP traffic size)");
"dns_stats_create (outbound TCP
IPv6
traffic size)");
server->flushonshutdown = ISC_FALSE;
server->log_queries = ISC_FALSE;
...
...
@@ -7948,13 +7972,18 @@ ns_server_destroy(ns_server_t **serverp) {
isc_stats_detach(&server->nsstats);
dns_stats_detach(&server->rcvquerystats);
dns_stats_detach(&server->opcodestats);
dns_stats_detach(&server->rcodestats);
isc_stats_detach(&server->zonestats);
isc_stats_detach(&server->resolverstats);
isc_stats_detach(&server->sockstats);
isc_stats_detach(&server->udpinstats);
isc_stats_detach(&server->udpoutstats);
isc_stats_detach(&server->tcpinstats);
isc_stats_detach(&server->tcpoutstats);
isc_stats_detach(&server->udpinstats4);
isc_stats_detach(&server->udpoutstats4);
isc_stats_detach(&server->udpinstats6);
isc_stats_detach(&server->udpoutstats6);
isc_stats_detach(&server->tcpinstats4);
isc_stats_detach(&server->tcpoutstats4);
isc_stats_detach(&server->tcpinstats6);
isc_stats_detach(&server->tcpoutstats6);
isc_mem_free(server->mctx, server->statsfile);
isc_mem_free(server->mctx, server->bindkeysfile);
...
...
bin/named/statschannel.c
View file @
10966da9
...
...
@@ -32,9 +32,10 @@
#include <dns/cache.h>
#include <dns/db.h>
#include <dns/opcode.h>
#include <dns/r
esolver
.h>
#include <dns/r
code
.h>
#include <dns/rdataclass.h>
#include <dns/rdatatype.h>
#include <dns/resolver.h>
#include <dns/stats.h>
#include <dns/view.h>
#include <dns/zt.h>
...
...
@@ -1279,8 +1280,8 @@ opcodestat_dump(dns_opcode_t code, isc_uint64_t val, void *arg) {
TRY0
(
xmlTextWriterWriteAttribute
(
writer
,
ISC_XMLCHAR
"name"
,
ISC_XMLCHAR
codebuf
));
TRY0
(
xmlTextWriterWriteFormatString
(
writer
,
"%"
ISC_PRINT_QUADFORMAT
"u"
,
val
));
"%"
ISC_PRINT_QUADFORMAT
"u"
,
val
));
TRY0
(
xmlTextWriterEndElement
(
writer
));
/* counter */
#endif
break
;
...
...
@@ -1305,6 +1306,62 @@ opcodestat_dump(dns_opcode_t code, isc_uint64_t val, void *arg) {
#endif
}
static
void
rcodestat_dump
(
dns_rcode_t
code
,
isc_uint64_t
val
,
void
*
arg
)
{
FILE
*
fp
;
isc_buffer_t
b
;
char
codebuf
[
64
];
stats_dumparg_t
*
dumparg
=
arg
;
#ifdef HAVE_LIBXML2
xmlTextWriterPtr
writer
;
int
xmlrc
;
#endif
#ifdef HAVE_JSON
json_object
*
zoneobj
,
*
obj
;
#endif
isc_buffer_init
(
&
b
,
codebuf
,
sizeof
(
codebuf
)
-
1
);
dns_rcode_totext
(
code
,
&
b
);
codebuf
[
isc_buffer_usedlength
(
&
b
)]
=
'\0'
;
switch
(
dumparg
->
type
)
{
case
isc_statsformat_file
:
fp
=
dumparg
->
arg
;
fprintf
(
fp
,
"%20"
ISC_PRINT_QUADFORMAT
"u %s
\n
"
,
val
,
codebuf
);
break
;
case
isc_statsformat_xml
:
#ifdef HAVE_LIBXML2
writer
=
dumparg
->
arg
;
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"counter"
));
TRY0
(
xmlTextWriterWriteAttribute
(
writer
,
ISC_XMLCHAR
"name"
,
ISC_XMLCHAR
codebuf
));
TRY0
(
xmlTextWriterWriteFormatString
(
writer
,
"%"
ISC_PRINT_QUADFORMAT
"u"
,
val
));
TRY0
(
xmlTextWriterEndElement
(
writer
));
/* counter */
#endif
break
;
case
isc_statsformat_json
:
#ifdef HAVE_JSON
zoneobj
=
(
json_object
*
)
dumparg
->
arg
;
obj
=
json_object_new_int64
(
val
);
if
(
obj
==
NULL
)
return
;
json_object_object_add
(
zoneobj
,
codebuf
,
obj
);
#endif
break
;
}
return
;
#ifdef HAVE_LIBXML2
error:
isc_log_write
(
ns_g_lctx
,
NS_LOGCATEGORY_GENERAL
,
NS_LOGMODULE_SERVER
,
ISC_LOG_ERROR
,
"failed at rcodestat_dump()"
);
dumparg
->
result
=
ISC_R_FAILURE
;
return
;
#endif
}
#ifdef HAVE_LIBXML2
/*
* Which statistics to include when rendering to XML
...
...
@@ -1480,6 +1537,17 @@ generatexml(ns_server_t *server, isc_uint32_t flags,
TRY0
(
xmlTextWriterEndElement
(
writer
));
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"counters"
));
TRY0
(
xmlTextWriterWriteAttribute
(
writer
,
ISC_XMLCHAR
"type"
,
ISC_XMLCHAR
"rcode"
));
dns_rcodestats_dump
(
server
->
rcodestats
,
rcodestat_dump
,
&
dumparg
,
ISC_STATSDUMP_VERBOSE
);
if
(
dumparg
.
result
!=
ISC_R_SUCCESS
)
goto
error
;
TRY0
(
xmlTextWriterEndElement
(
writer
));
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"counters"
));
TRY0
(
xmlTextWriterWriteAttribute
(
writer
,
ISC_XMLCHAR
"type"
,
ISC_XMLCHAR
"qtype"
));
...
...
@@ -1555,12 +1623,13 @@ generatexml(ns_server_t *server, isc_uint32_t flags,
if
((
flags
&
STATS_XML_TRAFFIC
)
!=
0
)
{
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"traffic"
));
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"ipv4"
));
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"udp"
));
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"counters"
));
TRY0
(
xmlTextWriterWriteAttribute
(
writer
,
ISC_XMLCHAR
"type"
,
ISC_XMLCHAR
"request-size"
));
result
=
dump_counters
(
server
->
udpinstats
,
result
=
dump_counters
(
server
->
udpinstats
4
,
isc_statsformat_xml
,
writer
,
NULL
,
udpinsizestats_xmldesc
,
dns_sizecounter_in_max
,
...
...
@@ -1575,7 +1644,7 @@ generatexml(ns_server_t *server, isc_uint32_t flags,
TRY0
(
xmlTextWriterWriteAttribute
(
writer
,
ISC_XMLCHAR
"type"
,
ISC_XMLCHAR
"response-size"
));
result
=
dump_counters
(
server
->
udpoutstats
,
result
=
dump_counters
(
server
->
udpoutstats
4
,
isc_statsformat_xml
,
writer
,
NULL
,
udpoutsizestats_xmldesc
,
dns_sizecounter_out_max
,
...
...
@@ -1592,7 +1661,7 @@ generatexml(ns_server_t *server, isc_uint32_t flags,
TRY0
(
xmlTextWriterWriteAttribute
(
writer
,
ISC_XMLCHAR
"type"
,
ISC_XMLCHAR
"request-size"
));
result
=
dump_counters
(
server
->
tcpinstats
,
result
=
dump_counters
(
server
->
tcpinstats
4
,
isc_statsformat_xml
,
writer
,
NULL
,
tcpinsizestats_xmldesc
,
dns_sizecounter_in_max
,
...
...
@@ -1607,7 +1676,7 @@ generatexml(ns_server_t *server, isc_uint32_t flags,
TRY0
(
xmlTextWriterWriteAttribute
(
writer
,
ISC_XMLCHAR
"type"
,
ISC_XMLCHAR
"response-size"
));
result
=
dump_counters
(
server
->
tcpoutstats
,
result
=
dump_counters
(
server
->
tcpoutstats
4
,
isc_statsformat_xml
,
writer
,
NULL
,
tcpoutsizestats_xmldesc
,
dns_sizecounter_out_max
,
...
...
@@ -1618,10 +1687,76 @@ generatexml(ns_server_t *server, isc_uint32_t flags,
TRY0
(
xmlTextWriterEndElement
(
writer
));
/* </counters> */
TRY0
(
xmlTextWriterEndElement
(
writer
));
/* </tcp> */
TRY0
(
xmlTextWriterEndElement
(
writer
));
/* </ipv4> */
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"ipv6"
));
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"udp"
));
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"counters"
));
TRY0
(
xmlTextWriterWriteAttribute
(
writer
,
ISC_XMLCHAR
"type"
,
ISC_XMLCHAR
"request-size"
));
result
=
dump_counters
(
server
->
udpinstats6
,
isc_statsformat_xml
,
writer
,
NULL
,
udpinsizestats_xmldesc
,
dns_sizecounter_in_max
,
udpinsizestats_index
,
udpinsizestat_values
,
0
);
if
(
result
!=
ISC_R_SUCCESS
)
goto
error
;
TRY0
(
xmlTextWriterEndElement
(
writer
));
/* </counters> */
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"counters"
));
TRY0
(
xmlTextWriterWriteAttribute
(
writer
,
ISC_XMLCHAR
"type"
,
ISC_XMLCHAR
"response-size"
));
result
=
dump_counters
(
server
->
udpoutstats6
,
isc_statsformat_xml
,
writer
,
NULL
,
udpoutsizestats_xmldesc
,
dns_sizecounter_out_max
,
udpoutsizestats_index
,
udpoutsizestat_values
,
0
);
if
(
result
!=
ISC_R_SUCCESS
)
goto
error
;
TRY0
(
xmlTextWriterEndElement
(
writer
));
/* </counters> */
TRY0
(
xmlTextWriterEndElement
(
writer
));
/* </udp> */
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"tcp"
));
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"counters"
));
TRY0
(
xmlTextWriterWriteAttribute
(
writer
,
ISC_XMLCHAR
"type"
,
ISC_XMLCHAR
"request-size"
));
result
=
dump_counters
(
server
->
tcpinstats6
,
isc_statsformat_xml
,
writer
,
NULL
,
tcpinsizestats_xmldesc
,
dns_sizecounter_in_max
,
tcpinsizestats_index
,
tcpinsizestat_values
,
0
);
if
(
result
!=
ISC_R_SUCCESS
)
goto
error
;
TRY0
(
xmlTextWriterEndElement
(
writer
));
/* </counters> */
TRY0
(
xmlTextWriterStartElement
(
writer
,
ISC_XMLCHAR
"counters"
));
TRY0
(
xmlTextWriterWriteAttribute
(
writer
,
ISC_XMLCHAR
"type"
,
ISC_XMLCHAR
"response-size"
));
result
=
dump_counters
(
server
->
tcpoutstats6
,
isc_statsformat_xml
,
writer
,
NULL
,
tcpoutsizestats_xmldesc
,
dns_sizecounter_out_max
,
tcpoutsizestats_index
,
tcpoutsizestat_values
,
0
);
if
(
result
!=
ISC_R_SUCCESS
)
goto
error
;
TRY0
(
xmlTextWriterEndElement
(
writer
));
/* </counters> */
TRY0
(
xmlTextWriterEndElement
(
writer
));
/* </tcp> */
TRY0
(
xmlTextWriterEndElement
(
writer
));
/* </ipv6> */
TRY0
(
xmlTextWriterEndElement
(
writer
));
/* </traffic> */
}
/*
* Render views. For each view we know of, call its
* rendering function.
...
...
@@ -1928,6 +2063,12 @@ render_xml_traffic(const char *url, isc_httpdurl_t *urlinfo,
#define STATS_JSON_TRAFFIC 0x20
#define STATS_JSON_ALL 0xff
#define CHECK(m) do { \
result = (m); \
if (result != ISC_R_SUCCESS) \
goto error; \
} while (0)
#define CHECKMEM(m) do { \
if (m == NULL) { \
result = ISC_R_NOMEMORY;\
...
...
@@ -2061,6 +2202,11 @@ generatejson(ns_server_t *server, size_t *msglen,
dns_view_t
*
view
;
isc_result_t
result
=
ISC_R_SUCCESS
;
json_object
*
bindstats
,
*
viewlist
,
*
counters
,
*
obj
;
json_object
*
traffic
=
NULL
;
json_object
*
udpreq4
=
NULL
,
*
udpresp4
=
NULL
;
json_object
*
tcpreq4
=
NULL
,
*
tcpresp4
=
NULL
;
json_object
*
udpreq6
=
NULL
,
*
udpresp6
=
NULL
;
json_object
*
tcpreq6
=
NULL
,
*
tcpresp6
=
NULL
;
isc_uint64_t
nsstat_values
[
dns_nsstatscounter_max
];
isc_uint64_t
resstat_values
[
dns_resstatscounter_max
];
isc_uint64_t
adbstat_values
[
dns_adbstats_max
];
...
...
@@ -2134,6 +2280,24 @@ generatejson(ns_server_t *server, size_t *msglen,
else
json_object_put
(
counters
);
/* OPCODE counters */
counters
=
json_object_new_object
();
dumparg
.
type
=
isc_statsformat_json
;
dumparg
.
arg
=
counters
;
dns_rcodestats_dump
(
server
->
rcodestats
,
rcodestat_dump
,
&
dumparg
,
ISC_STATSDUMP_VERBOSE
);
if
(
dumparg
.
result
!=
ISC_R_SUCCESS
)
{
json_object_put
(
counters
);
goto
error
;
}
if
(
json_object_get_object
(
counters
)
->
count
!=
0
)
json_object_object_add
(
bindstats
,
"rcodes"
,
counters
);
else
json_object_put
(
counters
);
/* QTYPE counters */
counters
=
json_object_new_object
();
...
...
@@ -2419,76 +2583,124 @@ generatejson(ns_server_t *server, size_t *msglen,
}
if
((
flags
&
STATS_JSON_TRAFFIC
)
!=
0
)
{
json_object
*
traffic
,
*
udpreq
,
*
udpresp
,
*
tcpreq
,
*
tcpresp
;
traffic
=
json_object_new_object
();
CHECKMEM
(
traffic
);
udpreq
=
json_object_new_object
();
CHECKMEM
(
udpreq
);
udpresp
=
json_object_new_object
();
CHECKMEM
(
udpresp
);
tcpreq
=
json_object_new_object
();
CHECKMEM
(
tcpreq
);
tcpresp
=
json_object_new_object
();
CHECKMEM
(
tcpresp
);
result
=
dump_counters
(
server
->
udpinstats
,
isc_statsformat_json
,
udpreq
,
NULL
,
udpinsizestats_xmldesc
,
dns_sizecounter_in_max
,
udpinsizestats_index
,
udpinsizestat_values
,
0
);
if
(
result
!=
ISC_R_SUCCESS
)
{
json_object_put
(
traffic
);
goto
error
;
}
result
=
dump_counters
(
server
->
udpoutstats
,
isc_statsformat_json
,
udpresp
,
NULL
,
udpoutsizestats_xmldesc
,
dns_sizecounter_out_max
,
udpoutsizestats_index
,
udpoutsizestat_values
,
0
);
if
(
result
!=
ISC_R_SUCCESS
)
{
json_object_put
(
traffic
);
goto
error
;
}
result
=
dump_counters
(
server
->
tcpinstats
,
isc_statsformat_json
,
tcpreq
,
NULL
,
tcpinsizestats_xmldesc
,
dns_sizecounter_in_max
,
tcpinsizestats_index
,
tcpinsizestat_values
,
0
);
if
(
result
!=
ISC_R_SUCCESS
)
{
json_object_put
(
traffic
);
goto
error
;
}
result
=
dump_counters
(
server
->
tcpoutstats
,
isc_statsformat_json
,
tcpresp
,
NULL
,
tcpoutsizestats_xmldesc
,
dns_sizecounter_out_max
,
tcpoutsizestats_index
,
tcpoutsizestat_values
,
0
);
if
(
result
!=
ISC_R_SUCCESS
)
{
json_object_put
(
traffic
);
goto
error
;
}
udpreq4
=
json_object_new_object
();
CHECKMEM
(
udpreq4
);
udpresp4
=
json_object_new_object
();
CHECKMEM
(
udpresp4
);
tcpreq4
=
json_object_new_object
();
CHECKMEM
(
tcpreq4
);
tcpresp4
=
json_object_new_object
();
CHECKMEM
(
tcpresp4
);
udpreq6
=
json_object_new_object
();
CHECKMEM
(
udpreq6
);
udpresp6
=
json_object_new_object
();
CHECKMEM
(
udpresp6
);
tcpreq6
=
json_object_new_object
();
CHECKMEM
(
tcpreq6
);
tcpresp6
=
json_object_new_object
();
CHECKMEM
(
tcpresp6
);
CHECK
(
dump_counters
(
server
->
udpinstats4
,
isc_statsformat_json
,
udpreq4
,
NULL
,
udpinsizestats_xmldesc
,
dns_sizecounter_in_max
,
udpinsizestats_index
,
udpinsizestat_values
,
0
));
CHECK
(
dump_counters
(
server
->
udpoutstats4
,
isc_statsformat_json
,
udpresp4
,
NULL
,
udpoutsizestats_xmldesc
,
dns_sizecounter_out_max
,
udpoutsizestats_index
,
udpoutsizestat_values
,
0
));
CHECK
(
dump_counters
(
server
->
tcpinstats4
,
isc_statsformat_json
,
tcpreq4
,
NULL
,
tcpinsizestats_xmldesc
,
dns_sizecounter_in_max
,
tcpinsizestats_index
,
tcpinsizestat_values
,
0
));
CHECK
(
dump_counters
(
server
->
tcpoutstats4
,
isc_statsformat_json
,
tcpresp4
,
NULL
,
tcpoutsizestats_xmldesc
,
dns_sizecounter_out_max
,
tcpoutsizestats_index
,
tcpoutsizestat_values
,
0
));
CHECK
(
dump_counters
(
server
->
udpinstats6
,
isc_statsformat_json
,
udpreq6
,
NULL
,
udpinsizestats_xmldesc
,
dns_sizecounter_in_max
,
udpinsizestats_index
,
udpinsizestat_values
,
0
));
CHECK
(
dump_counters
(
server
->
udpoutstats6
,
isc_statsformat_json
,
udpresp6
,
NULL
,
udpoutsizestats_xmldesc
,
dns_sizecounter_out_max
,
udpoutsizestats_index
,
udpoutsizestat_values
,
0
));
CHECK
(
dump_counters
(
server
->
tcpinstats6
,
isc_statsformat_json
,
tcpreq6
,
NULL
,
tcpinsizestats_xmldesc
,
dns_sizecounter_in_max
,
tcpinsizestats_index
,
tcpinsizestat_values
,
0
));
CHECK
(
dump_counters
(
server
->
tcpoutstats6
,