mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
2388. [bug] Avoid using tables for layout purposes in
statistics XSL [RT #18159].
This commit is contained in:
parent
f65d2e1c04
commit
7c60401dbd
5 changed files with 425 additions and 465 deletions
3
CHANGES
3
CHANGES
|
|
@ -1,3 +1,6 @@
|
|||
2388. [bug] Avoid using tables for layout purposes in
|
||||
statistics XSL [RT #18159].
|
||||
|
||||
2387. [bug] Silence compiler warnings in lib/isc/radix.c.
|
||||
[RT #18147] [RT #18258]
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: bind9.xsl,v 1.18 2008/06/23 19:41:18 jinmei Exp $ -->
|
||||
<!-- $Id: bind9.xsl,v 1.19 2008/07/17 23:43:26 jinmei Exp $ -->
|
||||
|
||||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
|
|
@ -60,7 +60,7 @@ td, th {
|
|||
padding-left: 5px;
|
||||
}
|
||||
|
||||
.header {
|
||||
.header h1 {
|
||||
background-color: teal;
|
||||
color: #ffffff;
|
||||
padding: 4px;
|
||||
|
|
@ -81,11 +81,53 @@ td, th {
|
|||
padding: 4px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.statcounter h2 {
|
||||
text-align: center;
|
||||
font-size: large;
|
||||
border: 1px solid #000000;
|
||||
background-color: #8080ff;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
div.statcounter dl {
|
||||
float: left;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
div.statcounter dt {
|
||||
width: 200px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
border: 0.5px solid #000000;
|
||||
background-color: #8080ff;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
div.statcounter dd {
|
||||
width: 200px;
|
||||
text-align: right;
|
||||
border: 0.5px solid #000000;
|
||||
background-color: teal;
|
||||
color: #ffffff;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
div.statcounter br {
|
||||
clear: left;
|
||||
}
|
||||
</style>
|
||||
<title>BIND 9 Statistics</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">Bind 9 Configuration and Statistics</div>
|
||||
<div class="header">
|
||||
<h1>Bind 9 Configuration and Statistics</h1>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
|
||||
<table>
|
||||
|
|
@ -143,231 +185,53 @@ td, th {
|
|||
|
||||
<br/>
|
||||
|
||||
<table>
|
||||
<tr class="rowh"><th colspan="10">Server Statistics</th></tr>
|
||||
<tr class="rowh">
|
||||
<!-- The ordering of the following items must be consistent
|
||||
with dns_nsstatscounter_xxx -->
|
||||
<th>Requestv4</th>
|
||||
<th>Requestv6</th>
|
||||
<th>ReqEdns0</th>
|
||||
<th>ReqBadEDNSVer</th>
|
||||
<th>ReqTSIG</th>
|
||||
<th>ReqSIG0</th>
|
||||
<th>ReqBadSIG</th>
|
||||
<th>ReqTCP</th>
|
||||
<th>AuthQryRej</th>
|
||||
<th>RecQryRej</th>
|
||||
</tr>
|
||||
<tr class="lrow">
|
||||
<td><xsl:value-of select="server/nsstats/Requestv4"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/Requestv6"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/ReqEdns0"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/ReqBadEDNSVer"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/ReqTSIG"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/ReqSIG0"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/ReqBadSIG"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/ReqTCP"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/AuthQryRej"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/RecQryRej"/></td>
|
||||
</tr>
|
||||
<tr class="rowh">
|
||||
<th>XfrRej</th>
|
||||
<th>UpdateRej</th>
|
||||
<th>Response</th>
|
||||
<th>RespTruncated</th>
|
||||
<th>RespEDNS0</th>
|
||||
<th>RespTSIG</th>
|
||||
<th>RespSIG0</th>
|
||||
<th>QrySuccess</th>
|
||||
<th>QryAuthAns</th>
|
||||
<th>QryNoauthAns</th>
|
||||
</tr>
|
||||
<tr class="lrow">
|
||||
<td><xsl:value-of select="server/nsstats/XfrRej"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/UpdateRej"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/Response"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/TruncatedResp"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/RespEDNS0"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/RespTSIG"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/RespSIG0"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/QrySuccess"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/QryAuthAns"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/QryNoauthAns"/></td>
|
||||
</tr>
|
||||
<tr class="rowh">
|
||||
<th>QryReferral</th>
|
||||
<th>QryNxrrset</th>
|
||||
<th>QrySERVFAIL</th>
|
||||
<th>QryFORMERR</th>
|
||||
<th>QryNXDOMAIN</th>
|
||||
<th>QryRecursion</th>
|
||||
<th>QryDuplicate</th>
|
||||
<th>QryDropped</th>
|
||||
<th>QryFailure</th>
|
||||
<th>XfrReqDone</th>
|
||||
</tr>
|
||||
<tr class="lrow">
|
||||
<td><xsl:value-of select="server/nsstats/QryReferral"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/QryNxrrset"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/QrySERVFAIL"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/QryFORMERR"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/QryNXDOMAIN"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/QryRecursion"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/QryDuplicate"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/QryDropped"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/QryFailure"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/XfrReqDone"/></td>
|
||||
</tr>
|
||||
<tr class="rowh">
|
||||
<th>UpdateReqFwd</th>
|
||||
<th>UpdateRespFwd</th>
|
||||
<th>UpdateFwdFail</th>
|
||||
<th>UpdateDone</th>
|
||||
<th>UpdateFail</th>
|
||||
<th>UpdateBadPrereq</th>
|
||||
<th>RespMismatch</th>
|
||||
<th />
|
||||
<th />
|
||||
<th />
|
||||
</tr>
|
||||
<tr class="lrow">
|
||||
<td><xsl:value-of select="server/nsstats/UpdateReqFwd"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/UpdateRespFwd"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/UpdateFwdFail"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/UpdateDone"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/UpdateFail"/></td>
|
||||
<td><xsl:value-of select="server/nsstats/UpdateBadPrereq"/></td>
|
||||
<td><xsl:value-of select="server/resstats/Mismatch"/></td>
|
||||
<td />
|
||||
<td />
|
||||
<td />
|
||||
</tr>
|
||||
</table>
|
||||
<div class="statcounter">
|
||||
<h2>Server Statistics</h2>
|
||||
<xsl:for-each select="server/nsstat">
|
||||
<dl>
|
||||
<dt><xsl:value-of select="name"/></dt>
|
||||
<dd><xsl:value-of select="counter"/></dd>
|
||||
</dl>
|
||||
</xsl:for-each>
|
||||
<br/>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
<div class="statcounter">
|
||||
<h2>Zone Maintenance Statistics</h2>
|
||||
<xsl:for-each select="server/zonestat">
|
||||
<dl>
|
||||
<dt><xsl:value-of select="name"/></dt>
|
||||
<dd><xsl:value-of select="counter"/></dd>
|
||||
</dl>
|
||||
</xsl:for-each>
|
||||
<br />
|
||||
</div>
|
||||
|
||||
<table>
|
||||
<tr class="rowh"><th colspan="10">Zone Maintenance Statistics</th></tr>
|
||||
<tr class="rowh">
|
||||
<!-- The ordering of the following items must be consistent
|
||||
with dns_zonestatscounter_xxx -->
|
||||
<th>NotifyOutv4</th>
|
||||
<th>NotifyOutv6</th>
|
||||
<th>NotifyInv4</th>
|
||||
<th>NotifyInv6</th>
|
||||
<th>NotifyRej</th>
|
||||
<th>SOAOutv4</th>
|
||||
<th>SOAOutv6</th>
|
||||
<th>AXFRReqv4</th>
|
||||
<th>AXFRReqv6</th>
|
||||
<th>IXFRReqv4</th>
|
||||
</tr>
|
||||
<tr class="lrow">
|
||||
<td><xsl:value-of select="server/zonestats/NotifyOutv4"/></td>
|
||||
<td><xsl:value-of select="server/zonestats/NotifyOutv6"/></td>
|
||||
<td><xsl:value-of select="server/zonestats/NotifyInv4"/></td>
|
||||
<td><xsl:value-of select="server/zonestats/NotifyInv6"/></td>
|
||||
<td><xsl:value-of select="server/zonestats/NotifyRej"/></td>
|
||||
<td><xsl:value-of select="server/zonestats/SOAOutv4"/></td>
|
||||
<td><xsl:value-of select="server/zonestats/SOAOutv6"/></td>
|
||||
<td><xsl:value-of select="server/zonestats/AXFRReqv4"/></td>
|
||||
<td><xsl:value-of select="server/zonestats/AXFRReqv6"/></td>
|
||||
<td><xsl:value-of select="server/zonestats/IXFRReqv4"/></td>
|
||||
</tr>
|
||||
<tr class="rowh">
|
||||
<th>IXFRReqv6</th>
|
||||
<th>XfrSuccess</th>
|
||||
<th>XfrFail</th>
|
||||
<th/>
|
||||
<th/>
|
||||
<th/>
|
||||
<th/>
|
||||
<th/>
|
||||
<th/>
|
||||
<th/>
|
||||
</tr>
|
||||
<tr class="lrow">
|
||||
<td><xsl:value-of select="server/zonestats/IXFRReqv6"/></td>
|
||||
<td><xsl:value-of select="server/zonestats/XfrSuccess"/></td>
|
||||
<td><xsl:value-of select="server/zonestats/XfrFail"/></td>
|
||||
<td/>
|
||||
<td/>
|
||||
<td/>
|
||||
<td/>
|
||||
<td/>
|
||||
<td/>
|
||||
<td/>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br/>
|
||||
<div class="statcounter">
|
||||
<h2>Resolver Statistics (Common)</h2>
|
||||
<xsl:for-each select="server/resstat">
|
||||
<dl>
|
||||
<dt><xsl:value-of select="name"/></dt>
|
||||
<dd><xsl:value-of select="counter"/></dd>
|
||||
</dl>
|
||||
</xsl:for-each>
|
||||
<br />
|
||||
</div>
|
||||
|
||||
<xsl:for-each select="views/view">
|
||||
<table>
|
||||
<tr class="rowh">
|
||||
<th colspan="10">Resolver Statistics for View <xsl:value-of select="name"/></th>
|
||||
</tr>
|
||||
<tr class="rowh">
|
||||
<!-- The ordering of the following items must be consistent
|
||||
with dns_resstatscounter_xxx -->
|
||||
<th>Queryv4</th>
|
||||
<th>Queryv6</th>
|
||||
<th>Responsev4</th>
|
||||
<th>Responsev6</th>
|
||||
<th>NXDOMAIN</th>
|
||||
<th>SERVFAIL</th>
|
||||
<th>FORMERR</th>
|
||||
<th>OtherError</th>
|
||||
<th>EDNS0Fail</th>
|
||||
<!-- this counter is not applicable to per-view stat,
|
||||
but keep it for generating the description table used in
|
||||
the statschannel.c.
|
||||
<th>Mismatch</th> -->
|
||||
<th>Truncated</th>
|
||||
</tr>
|
||||
<tr class="lrow">
|
||||
<td><xsl:value-of select="resstats/Queryv4"/></td>
|
||||
<td><xsl:value-of select="resstats/Queryv6"/></td>
|
||||
<td><xsl:value-of select="resstats/Responsev4"/></td>
|
||||
<td><xsl:value-of select="resstats/Responsev6"/></td>
|
||||
<td><xsl:value-of select="resstats/NXDOMAIN"/></td>
|
||||
<td><xsl:value-of select="resstats/SERVFAIL"/></td>
|
||||
<td><xsl:value-of select="resstats/FORMERR"/></td>
|
||||
<td><xsl:value-of select="resstats/OtherError"/></td>
|
||||
<td><xsl:value-of select="resstats/EDNS0Fail"/></td>
|
||||
<!-- <td><xsl:value-of select="resstats/Mismatch"/></td> -->
|
||||
<td><xsl:value-of select="resstats/Truncated"/></td>
|
||||
</tr>
|
||||
<tr class="rowh">
|
||||
<th>Lame</th>
|
||||
<th>Retry</th>
|
||||
<th>GlueFetchv4</th>
|
||||
<th>GlueFetchv6</th>
|
||||
<th>GlueFetchv4Fail</th>
|
||||
<th>GlueFetchv6Fail</th>
|
||||
<th>ValAttempt</th>
|
||||
<th>ValOk</th>
|
||||
<th>ValNegOk</th>
|
||||
<th>ValFail</th>
|
||||
</tr>
|
||||
<tr class="lrow">
|
||||
<td><xsl:value-of select="resstats/Lame"/></td>
|
||||
<td><xsl:value-of select="resstats/Retry"/></td>
|
||||
<td><xsl:value-of select="resstats/GlueFetchv4"/></td>
|
||||
<td><xsl:value-of select="resstats/GlueFetchv6"/></td>
|
||||
<td><xsl:value-of select="resstats/GlueFetchv4Fail"/></td>
|
||||
<td><xsl:value-of select="resstats/GlueFetchv6Fail"/></td>
|
||||
<td><xsl:value-of select="resstats/ValAttempt"/></td>
|
||||
<td><xsl:value-of select="resstats/ValOk"/></td>
|
||||
<td><xsl:value-of select="resstats/ValNegOk"/></td>
|
||||
<td><xsl:value-of select="resstats/ValFail"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
<br/>
|
||||
</xsl:for-each>
|
||||
<div class="statcounter">
|
||||
<h2>Resolver Statistics for View <xsl:value-of select="name"/></h2>
|
||||
<xsl:for-each select="resstat">
|
||||
<dl>
|
||||
<dt><xsl:value-of select="name"/></dt>
|
||||
<dd><xsl:value-of select="counter"/></dd>
|
||||
</dl>
|
||||
</xsl:for-each>
|
||||
<br />
|
||||
</div>
|
||||
</xsl:for-each>
|
||||
|
||||
<br/>
|
||||
<br />
|
||||
|
||||
<xsl:for-each select="views/view">
|
||||
<table>
|
||||
|
|
|
|||
|
|
@ -14,19 +14,18 @@
|
|||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: convertxsl.pl,v 1.13 2008/04/03 10:52:46 marka Exp $
|
||||
# $Id: convertxsl.pl,v 1.14 2008/07/17 23:43:26 jinmei Exp $
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my $rev = '$Id: convertxsl.pl,v 1.13 2008/04/03 10:52:46 marka Exp $';
|
||||
my $rev = '$Id: convertxsl.pl,v 1.14 2008/07/17 23:43:26 jinmei Exp $';
|
||||
$rev =~ s/\$//g;
|
||||
$rev =~ s/,v//g;
|
||||
$rev =~ s/Id: //;
|
||||
|
||||
my $xsl = "unknown";
|
||||
my $lines = '';
|
||||
my (@nsstatsdesc, @zonestatsdesc, @resstatsdesc);
|
||||
|
||||
while (<>) {
|
||||
chomp;
|
||||
|
|
@ -34,13 +33,6 @@ while (<>) {
|
|||
$xsl = $_ if (/<!-- .Id:.* -->/);
|
||||
# convert Id string to a form not recognisable by cvs.
|
||||
$_ =~ s/<!-- .Id:(.*). -->/<!-- \\045Id: $1\\045 -->/;
|
||||
if (/server\/nsstats\/(\w+)\"/) {
|
||||
push(@nsstatsdesc, $1);
|
||||
} elsif (/server\/zonestats\/(\w+)\"/) {
|
||||
push(@zonestatsdesc, $1);
|
||||
} elsif (/\"resstats\/(\w+)\"/) {
|
||||
push(@resstatsdesc, $1);
|
||||
}
|
||||
s/[\ \t]+/ /g;
|
||||
s/\>\ \</\>\</g;
|
||||
s/\"/\\\"/g;
|
||||
|
|
@ -63,29 +55,3 @@ print 'static char xslmsg[] =',"\n";
|
|||
print $lines;
|
||||
|
||||
print ';', "\n";
|
||||
|
||||
print '#ifdef HAVE_LIBXML2', "\n";
|
||||
print "static const char *nsstats_xmldesc[] = {";
|
||||
while (my $desc = shift(@nsstatsdesc)) {
|
||||
print "\t\"$desc\"";
|
||||
print "," if (@nsstatsdesc);
|
||||
print "\n";
|
||||
}
|
||||
print "};\n";
|
||||
|
||||
print "static const char *zonestats_xmldesc[] = {";
|
||||
while (my $desc = shift(@zonestatsdesc)) {
|
||||
print "\t\"$desc\"";
|
||||
print "," if (@zonestatsdesc);
|
||||
print "\n";
|
||||
}
|
||||
print "};\n";
|
||||
|
||||
print "static const char *resstats_xmldesc[] = {";
|
||||
while (my $desc = shift(@resstatsdesc)) {
|
||||
print "\t\"$desc\"";
|
||||
print "," if (@resstatsdesc);
|
||||
print "\n";
|
||||
}
|
||||
print "};\n";
|
||||
print '#endif', "\n";
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: statschannel.c,v 1.10 2008/04/09 22:53:36 tbox Exp $ */
|
||||
/* $Id: statschannel.c,v 1.11 2008/07/17 23:43:26 jinmei Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
|
@ -65,12 +65,309 @@ typedef struct
|
|||
stats_dumparg {
|
||||
statsformat_t type;
|
||||
void *arg; /* type dependent argument */
|
||||
const char *category; /* used for general statistics */
|
||||
const char **desc; /* used for general statistics */
|
||||
int ncounters; /* used for general statistics */
|
||||
} stats_dumparg_t;
|
||||
|
||||
static isc_once_t once = ISC_ONCE_INIT;
|
||||
|
||||
/*%
|
||||
* Statistics descriptions. These could be statistically initialized at
|
||||
* compile time, but we configure them run time in the init_desc() function
|
||||
* below so that they'll be less susceptible to counter name changes.
|
||||
*/
|
||||
static const char *nsstats_desc[dns_nsstatscounter_max];
|
||||
static const char *resstats_desc[dns_resstatscounter_max];
|
||||
static const char *zonestats_desc[dns_zonestatscounter_max];
|
||||
#ifdef HAVE_LIBXML2
|
||||
static const char *nsstats_xmldesc[dns_nsstatscounter_max];
|
||||
static const char *resstats_xmldesc[dns_resstatscounter_max];
|
||||
static const char *zonestats_xmldesc[dns_zonestatscounter_max];
|
||||
#else
|
||||
#define nsstats_xmldesc NULL
|
||||
#define resstats_xmldesc NULL
|
||||
#define zonestats_xmldesc NULL
|
||||
#endif /* HAVE_LIBXML2 */
|
||||
|
||||
static inline void
|
||||
set_desc(int counter, int maxcounter, const char *fdesc, const char **fdescs,
|
||||
const char *xdesc, const char **xdescs)
|
||||
{
|
||||
REQUIRE(counter < maxcounter);
|
||||
REQUIRE(fdescs[counter] == NULL);
|
||||
#ifdef HAVE_LIBXML2
|
||||
REQUIRE(xdescs[counter] == NULL);
|
||||
#endif
|
||||
|
||||
fdescs[counter] = fdesc;
|
||||
#ifdef HAVE_LIBXML2
|
||||
xdescs[counter] = xdesc;
|
||||
#else
|
||||
UNUSED(xdesc);
|
||||
UNUSED(xdescs);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
init_desc() {
|
||||
int i;
|
||||
|
||||
/* Initialize name server statistics */
|
||||
memset(nsstats_desc, 0,
|
||||
dns_nsstatscounter_max * sizeof(nsstats_desc[0]));
|
||||
#ifdef HAVE_LIBXML2
|
||||
memset(nsstats_xmldesc, 0,
|
||||
dns_nsstatscounter_max * sizeof(nsstats_xmldesc[0]));
|
||||
#endif
|
||||
set_desc(dns_nsstatscounter_requestv4, dns_nsstatscounter_max,
|
||||
"IPv4 requests received", nsstats_desc,
|
||||
"Requestv4", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_requestv6, dns_nsstatscounter_max,
|
||||
"IPv6 requests received", nsstats_desc,
|
||||
"Requestv6", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_edns0in, dns_nsstatscounter_max,
|
||||
"requests with EDNS(0) received", nsstats_desc,
|
||||
"ReqEdns0", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_badednsver, dns_nsstatscounter_max,
|
||||
"requests with unsupported EDNS version received",
|
||||
nsstats_desc,
|
||||
"ReqBadEDNSVer", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_tsigin, dns_nsstatscounter_max,
|
||||
"requests with TSIG received", nsstats_desc,
|
||||
"ReqTSIG", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_sig0in, dns_nsstatscounter_max,
|
||||
"requests with SIG(0) received", nsstats_desc,
|
||||
"ReqSIG0", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_invalidsig, dns_nsstatscounter_max,
|
||||
"requests with invalid signature", nsstats_desc,
|
||||
"ReqBadSIG", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_tcp, dns_nsstatscounter_max,
|
||||
"TCP requests received", nsstats_desc,
|
||||
"ReqTCP", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_authrej, dns_nsstatscounter_max,
|
||||
"auth queries rejected", nsstats_desc,
|
||||
"AuthQryRej", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_recurserej, dns_nsstatscounter_max,
|
||||
"recursive queries rejected", nsstats_desc,
|
||||
"RecQryRej", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_xfrrej, dns_nsstatscounter_max,
|
||||
"transfer requests rejected", nsstats_desc,
|
||||
"XfrRej", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_updaterej, dns_nsstatscounter_max,
|
||||
"update requests rejected", nsstats_desc,
|
||||
"UpdateRej", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_response, dns_nsstatscounter_max,
|
||||
"responses sent", nsstats_desc,
|
||||
"Response", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_truncatedresp, dns_nsstatscounter_max,
|
||||
"truncated responses sent", nsstats_desc,
|
||||
"TruncatedResp", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_edns0out, dns_nsstatscounter_max,
|
||||
"responses with EDNS(0) sent", nsstats_desc,
|
||||
"RespEDNS0", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_tsigout, dns_nsstatscounter_max,
|
||||
"responses with TSIG sent", nsstats_desc,
|
||||
"RespTSIG", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_sig0out, dns_nsstatscounter_max,
|
||||
"responses with SIG(0) sent", nsstats_desc,
|
||||
"RespSIG0", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_success, dns_nsstatscounter_max,
|
||||
"queries resulted in successful answer", nsstats_desc,
|
||||
"QrySuccess", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_authans, dns_nsstatscounter_max,
|
||||
"queries resulted in authoritative answer", nsstats_desc,
|
||||
"QryAuthAns", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_nonauthans, dns_nsstatscounter_max,
|
||||
"queries resulted in non authoritative answer", nsstats_desc,
|
||||
"QryNoauthAns", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_referral, dns_nsstatscounter_max,
|
||||
"queries resulted in referral answer", nsstats_desc,
|
||||
"QryReferral", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_nxrrset, dns_nsstatscounter_max,
|
||||
"queries resulted in nxrrset", nsstats_desc,
|
||||
"QryNxrrset", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_servfail, dns_nsstatscounter_max,
|
||||
"queries resulted in SERVFAIL", nsstats_desc,
|
||||
"QrySERVFAIL", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_formerr, dns_nsstatscounter_max,
|
||||
"queries resulted in FORMERR", nsstats_desc,
|
||||
"QryFORMERR", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_nxdomain, dns_nsstatscounter_max,
|
||||
"queries resulted in NXDOMAIN", nsstats_desc,
|
||||
"QryNXDOMAIN", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_recursion, dns_nsstatscounter_max,
|
||||
"queries caused recursion", nsstats_desc,
|
||||
"QryRecursion", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_duplicate, dns_nsstatscounter_max,
|
||||
"duplicate queries received", nsstats_desc,
|
||||
"QryDuplicate", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_dropped, dns_nsstatscounter_max,
|
||||
"queries dropped", nsstats_desc,
|
||||
"QryDropped", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_failure, dns_nsstatscounter_max,
|
||||
"other query failures", nsstats_desc,
|
||||
"QryFailure", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_xfrdone, dns_nsstatscounter_max,
|
||||
"requested transfers completed", nsstats_desc,
|
||||
"XfrReqDone", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_updatereqfwd, dns_nsstatscounter_max,
|
||||
"update requests forwarded", nsstats_desc,
|
||||
"UpdateReqFwd", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_updaterespfwd, dns_nsstatscounter_max,
|
||||
"update responses forwarded", nsstats_desc,
|
||||
"UpdateRespFwd", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_updatefwdfail, dns_nsstatscounter_max,
|
||||
"update forward failed", nsstats_desc,
|
||||
"UpdateFwdFail", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_updatedone, dns_nsstatscounter_max,
|
||||
"updates completed", nsstats_desc,
|
||||
"UpdateDone", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_updatefail, dns_nsstatscounter_max,
|
||||
"updates failed", nsstats_desc,
|
||||
"UpdateFail", nsstats_xmldesc);
|
||||
set_desc(dns_nsstatscounter_updatebadprereq, dns_nsstatscounter_max,
|
||||
"updates rejected due to prerequisite failure", nsstats_desc,
|
||||
"UpdateBadPrereq", nsstats_xmldesc);
|
||||
|
||||
/* Initialize resolver statistics */
|
||||
memset(resstats_desc, 0,
|
||||
dns_resstatscounter_max * sizeof(resstats_desc[0]));
|
||||
#ifdef HAVE_LIBXML2
|
||||
memset(resstats_xmldesc, 0,
|
||||
dns_resstatscounter_max * sizeof(resstats_xmldesc[0]));
|
||||
#endif
|
||||
set_desc(dns_resstatscounter_queryv4, dns_resstatscounter_max,
|
||||
"IPv4 queries sent", resstats_desc,
|
||||
"Queryv4", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_queryv6, dns_resstatscounter_max,
|
||||
"IPv6 queries sent", resstats_desc,
|
||||
"Queryv6", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_responsev4, dns_resstatscounter_max,
|
||||
"IPv4 responses received", resstats_desc,
|
||||
"Responsev4", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_responsev6, dns_resstatscounter_max,
|
||||
"IPv6 responses received", resstats_desc,
|
||||
"Responsev6", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_nxdomain, dns_resstatscounter_max,
|
||||
"NXDOMAIN received", resstats_desc,
|
||||
"NXDOMAIN", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_servfail, dns_resstatscounter_max,
|
||||
"SERVFAIL received", resstats_desc,
|
||||
"SERVFAIL", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_formerr, dns_resstatscounter_max,
|
||||
"FORMERR received", resstats_desc,
|
||||
"FORMERR", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_othererror, dns_resstatscounter_max,
|
||||
"other errors received", resstats_desc,
|
||||
"OtherError", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_edns0fail, dns_resstatscounter_max,
|
||||
"EDNS(0) query failures", resstats_desc,
|
||||
"EDNS0Fail", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_mismatch, dns_resstatscounter_max,
|
||||
"mismatch responses received", resstats_desc,
|
||||
"Mismatch", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_truncated, dns_resstatscounter_max,
|
||||
"truncated responses received", resstats_desc,
|
||||
"Truncated", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_lame, dns_resstatscounter_max,
|
||||
"lame delegations received", resstats_desc,
|
||||
"Lame", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_retry, dns_resstatscounter_max,
|
||||
"query retries", resstats_desc,
|
||||
"Retry", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_gluefetchv4, dns_resstatscounter_max,
|
||||
"IPv4 NS address fetches", resstats_desc,
|
||||
"GlueFetchv4", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_gluefetchv6, dns_resstatscounter_max,
|
||||
"IPv6 NS address fetches", resstats_desc,
|
||||
"GlueFetchv6", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_gluefetchv4fail, dns_resstatscounter_max,
|
||||
"IPv4 NS address fetch failed", resstats_desc,
|
||||
"GlueFetchv4Fail", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_gluefetchv6fail, dns_resstatscounter_max,
|
||||
"IPv6 NS address fetch failed", resstats_desc,
|
||||
"GlueFetchv6Fail", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_val, dns_resstatscounter_max,
|
||||
"DNSSEC validation attempted", resstats_desc,
|
||||
"ValAttempt", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_valsuccess, dns_resstatscounter_max,
|
||||
"DNSSEC validation succeeded", resstats_desc,
|
||||
"ValOk", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_valnegsuccess, dns_resstatscounter_max,
|
||||
"DNSSEC NX validation succeeded", resstats_desc,
|
||||
"ValNegOk", resstats_xmldesc);
|
||||
set_desc(dns_resstatscounter_valfail, dns_resstatscounter_max,
|
||||
"DNSSEC validation failed", resstats_desc,
|
||||
"ValFail", resstats_xmldesc);
|
||||
|
||||
/* Initialize zone statistics */
|
||||
memset(zonestats_desc, 0,
|
||||
dns_zonestatscounter_max * sizeof(zonestats_desc[0]));
|
||||
#ifdef HAVE_LIBXML2
|
||||
memset(zonestats_xmldesc, 0,
|
||||
dns_zonestatscounter_max * sizeof(zonestats_xmldesc[0]));
|
||||
#endif
|
||||
set_desc(dns_zonestatscounter_notifyoutv4, dns_zonestatscounter_max,
|
||||
"IPv4 notifies sent", zonestats_desc,
|
||||
"NotifyOutv4", zonestats_xmldesc);
|
||||
set_desc(dns_zonestatscounter_notifyoutv6, dns_zonestatscounter_max,
|
||||
"IPv6 notifies sent", zonestats_desc,
|
||||
"NotifyOutv6", zonestats_xmldesc);
|
||||
set_desc(dns_zonestatscounter_notifyinv4, dns_zonestatscounter_max,
|
||||
"IPv4 notifies received", zonestats_desc,
|
||||
"NotifyInv4", zonestats_xmldesc);
|
||||
set_desc(dns_zonestatscounter_notifyinv6, dns_zonestatscounter_max,
|
||||
"IPv6 notifies received", zonestats_desc,
|
||||
"NotifyInv6", zonestats_xmldesc);
|
||||
set_desc(dns_zonestatscounter_notifyrej, dns_zonestatscounter_max,
|
||||
"notifies rejected", zonestats_desc,
|
||||
"NotifyRej", zonestats_xmldesc);
|
||||
set_desc(dns_zonestatscounter_soaoutv4, dns_zonestatscounter_max,
|
||||
"IPv4 SOA queries sent", zonestats_desc,
|
||||
"SOAOutv4", zonestats_xmldesc);
|
||||
set_desc(dns_zonestatscounter_soaoutv6, dns_zonestatscounter_max,
|
||||
"IPv6 SOA queries sent", zonestats_desc,
|
||||
"SOAOutv6", zonestats_xmldesc);
|
||||
set_desc(dns_zonestatscounter_axfrreqv4, dns_zonestatscounter_max,
|
||||
"IPv4 AXFR requested", zonestats_desc,
|
||||
"AXFRReqv4", zonestats_xmldesc);
|
||||
set_desc(dns_zonestatscounter_axfrreqv6, dns_zonestatscounter_max,
|
||||
"IPv6 AXFR requested", zonestats_desc,
|
||||
"AXFRReqv6", zonestats_xmldesc);
|
||||
set_desc(dns_zonestatscounter_ixfrreqv4, dns_zonestatscounter_max,
|
||||
"IPv4 IXFR requested", zonestats_desc,
|
||||
"IXFRReqv4", zonestats_xmldesc);
|
||||
set_desc(dns_zonestatscounter_ixfrreqv6, dns_zonestatscounter_max,
|
||||
"IPv6 IXFR requested", zonestats_desc,
|
||||
"IXFRReqv6", zonestats_xmldesc);
|
||||
set_desc(dns_zonestatscounter_xfrsuccess, dns_zonestatscounter_max,
|
||||
"transfer requests succeeded", zonestats_desc,
|
||||
"XfrSuccess", zonestats_xmldesc);
|
||||
set_desc(dns_zonestatscounter_xfrfail, dns_zonestatscounter_max,
|
||||
"transfer requests failed", zonestats_desc,
|
||||
"XfrFail", zonestats_xmldesc);
|
||||
|
||||
/* Sanity check */
|
||||
for (i = 0; i < dns_nsstatscounter_max; i++)
|
||||
INSIST(nsstats_desc[i] != NULL);
|
||||
for (i = 0; i < dns_resstatscounter_max; i++)
|
||||
INSIST(resstats_desc[i] != NULL);
|
||||
for (i = 0; i < dns_zonestatscounter_max; i++)
|
||||
INSIST(zonestats_desc[i] != NULL);
|
||||
#ifdef HAVE_LIBXML2
|
||||
for (i = 0; i < dns_nsstatscounter_max; i++)
|
||||
INSIST(nsstats_xmldesc[i] != NULL);
|
||||
for (i = 0; i < dns_resstatscounter_max; i++)
|
||||
INSIST(resstats_xmldesc[i] != NULL);
|
||||
for (i = 0; i < dns_zonestatscounter_max; i++)
|
||||
INSIST(zonestats_xmldesc[i] != NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*%
|
||||
* Dump callback functions.
|
||||
*/
|
||||
static void
|
||||
generalstat_dump(dns_statscounter_t counter, isc_uint64_t val, void *arg) {
|
||||
stats_dumparg_t *dumparg = arg;
|
||||
|
|
@ -91,12 +388,27 @@ generalstat_dump(dns_statscounter_t counter, isc_uint64_t val, void *arg) {
|
|||
#ifdef HAVE_LIBXML2
|
||||
writer = dumparg->arg;
|
||||
|
||||
xmlTextWriterStartElement(writer, ISC_XMLCHAR
|
||||
dumparg->desc[counter]);
|
||||
if (dumparg->category != NULL) {
|
||||
xmlTextWriterStartElement(writer,
|
||||
ISC_XMLCHAR
|
||||
dumparg->category);
|
||||
xmlTextWriterStartElement(writer, ISC_XMLCHAR "name");
|
||||
xmlTextWriterWriteString(writer, ISC_XMLCHAR
|
||||
dumparg->desc[counter]);
|
||||
xmlTextWriterEndElement(writer); /* name */
|
||||
|
||||
xmlTextWriterStartElement(writer, ISC_XMLCHAR
|
||||
"counter");
|
||||
} else {
|
||||
xmlTextWriterStartElement(writer, ISC_XMLCHAR
|
||||
dumparg->desc[counter]);
|
||||
}
|
||||
xmlTextWriterWriteFormatString(writer,
|
||||
"%" ISC_PRINT_QUADFORMAT "u",
|
||||
val);
|
||||
xmlTextWriterEndElement(writer);
|
||||
xmlTextWriterEndElement(writer); /* counter */
|
||||
if (dumparg->category != NULL)
|
||||
xmlTextWriterEndElement(writer); /* category */
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
|
@ -279,6 +591,7 @@ zone_xmlrender(dns_zone_t *zone, void *arg) {
|
|||
|
||||
dumparg.type = statsformat_xml;
|
||||
dumparg.arg = writer;
|
||||
dumparg.category = NULL;
|
||||
dumparg.desc = nsstats_xmldesc;
|
||||
dumparg.ncounters = dns_nsstatscounter_max;
|
||||
|
||||
|
|
@ -352,13 +665,11 @@ generatexml(ns_server_t *server, int *buflen, xmlChar **buf) {
|
|||
}
|
||||
|
||||
if (view->resstats != NULL) {
|
||||
xmlTextWriterStartElement(writer,
|
||||
ISC_XMLCHAR "resstats");
|
||||
dumparg.ncounters = dns_resstatscounter_max;
|
||||
dumparg.desc = resstats_xmldesc; /* auto-generated */
|
||||
dumparg.category = "resstat";
|
||||
dumparg.desc = resstats_xmldesc;
|
||||
dns_generalstats_dump(view->resstats, generalstat_dump,
|
||||
&dumparg, DNS_STATSDUMP_VERBOSE);
|
||||
xmlTextWriterEndElement(writer); /* resstats */
|
||||
}
|
||||
|
||||
cachestats = dns_db_getrrsetstats(view->cachedb);
|
||||
|
|
@ -402,26 +713,27 @@ generatexml(ns_server_t *server, int *buflen, xmlChar **buf) {
|
|||
&dumparg, 0);
|
||||
xmlTextWriterEndElement(writer); /* queries-in */
|
||||
|
||||
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "nsstats"));
|
||||
dumparg.desc = nsstats_xmldesc; /* auto-generated in bind9.xsl.h */
|
||||
dumparg.category = "nsstat";
|
||||
dumparg.desc = nsstats_xmldesc;
|
||||
dumparg.ncounters = dns_nsstatscounter_max;
|
||||
dns_generalstats_dump(server->nsstats, generalstat_dump, &dumparg,
|
||||
DNS_STATSDUMP_VERBOSE);
|
||||
xmlTextWriterEndElement(writer); /* nsstats */
|
||||
|
||||
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "zonestats"));
|
||||
dumparg.desc = zonestats_xmldesc; /* auto-generated in bind9.xsl.h */
|
||||
dumparg.category = "zonestat";
|
||||
dumparg.desc = zonestats_xmldesc;
|
||||
dumparg.ncounters = dns_zonestatscounter_max;
|
||||
dns_generalstats_dump(server->zonestats, generalstat_dump, &dumparg,
|
||||
DNS_STATSDUMP_VERBOSE);
|
||||
xmlTextWriterEndElement(writer); /* zonestats */
|
||||
|
||||
xmlTextWriterStartElement(writer, ISC_XMLCHAR "resstats");
|
||||
/*
|
||||
* Most of the common resolver statistics entries are 0, so we don't
|
||||
* use the verbose dump here.
|
||||
*/
|
||||
dumparg.category = "resstat";
|
||||
dumparg.ncounters = dns_resstatscounter_max;
|
||||
dumparg.desc = resstats_xmldesc;
|
||||
dns_generalstats_dump(server->resolverstats, generalstat_dump,
|
||||
&dumparg, DNS_STATSDUMP_VERBOSE);
|
||||
xmlTextWriterEndElement(writer); /* resstats */
|
||||
&dumparg, 0);
|
||||
|
||||
xmlTextWriterEndElement(writer); /* server */
|
||||
|
||||
|
|
@ -705,6 +1017,8 @@ ns_statschannels_configure(ns_server_t *server, const cfg_obj_t *config,
|
|||
const cfg_listelt_t *element, *element2;
|
||||
char socktext[ISC_SOCKADDR_FORMATSIZE];
|
||||
|
||||
RUNTIME_CHECK(isc_once_do(&once, init_desc) == ISC_R_SUCCESS);
|
||||
|
||||
ISC_LIST_INIT(new_listeners);
|
||||
|
||||
/*
|
||||
|
|
@ -827,191 +1141,6 @@ ns_statschannels_shutdown(ns_server_t *server) {
|
|||
}
|
||||
}
|
||||
|
||||
/*%
|
||||
* Statistics descriptions. These could be statistically initialized at
|
||||
* compile time, but we configure them run time in the init_desc() function
|
||||
* below so that they'll be less susceptible to counter name changes.
|
||||
* Note that bind9.xsl must still be updated consistently with the counter
|
||||
* numbering.
|
||||
*/
|
||||
static const char *nsstats_desc[dns_nsstatscounter_max];
|
||||
static const char *resstats_desc[dns_resstatscounter_max];
|
||||
static const char *zonestats_desc[dns_zonestatscounter_max];
|
||||
|
||||
static inline void
|
||||
set_desc(int counter, int maxcounter, const char *desc, const char **descs) {
|
||||
REQUIRE(counter < maxcounter);
|
||||
REQUIRE(descs[counter] == NULL);
|
||||
|
||||
descs[counter] = desc;
|
||||
}
|
||||
|
||||
static void
|
||||
init_desc() {
|
||||
int i;
|
||||
|
||||
/* Initialize name server statistics */
|
||||
memset(nsstats_desc, 0,
|
||||
dns_nsstatscounter_max * sizeof(nsstats_desc[0]));
|
||||
set_desc(dns_nsstatscounter_requestv4, dns_nsstatscounter_max,
|
||||
"IPv4 requests received", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_requestv6, dns_nsstatscounter_max,
|
||||
"IPv6 requests received", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_edns0in, dns_nsstatscounter_max,
|
||||
"requests with EDNS(0) received", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_badednsver, dns_nsstatscounter_max,
|
||||
"requests with unsupported EDNS version received",
|
||||
nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_tsigin, dns_nsstatscounter_max,
|
||||
"requests with TSIG received", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_sig0in, dns_nsstatscounter_max,
|
||||
"requests with SIG(0) received", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_invalidsig, dns_nsstatscounter_max,
|
||||
"requests with invalid signature", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_tcp, dns_nsstatscounter_max,
|
||||
"TCP requests received", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_authrej, dns_nsstatscounter_max,
|
||||
"auth queries rejected", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_recurserej, dns_nsstatscounter_max,
|
||||
"recursive queries rejected", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_xfrrej, dns_nsstatscounter_max,
|
||||
"transfer requests rejected", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_updaterej, dns_nsstatscounter_max,
|
||||
"update requests rejected", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_response, dns_nsstatscounter_max,
|
||||
"responses sent", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_truncatedresp, dns_nsstatscounter_max,
|
||||
"truncated responses sent", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_edns0out, dns_nsstatscounter_max,
|
||||
"responses with EDNS(0) sent", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_tsigout, dns_nsstatscounter_max,
|
||||
"responses with TSIG sent", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_sig0out, dns_nsstatscounter_max,
|
||||
"responses with SIG(0) sent", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_success, dns_nsstatscounter_max,
|
||||
"queries resulted in successful answer", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_authans, dns_nsstatscounter_max,
|
||||
"queries resulted in authoritative answer", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_nonauthans, dns_nsstatscounter_max,
|
||||
"queries resulted in non authoritative answer", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_referral, dns_nsstatscounter_max,
|
||||
"queries resulted in referral answer", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_nxrrset, dns_nsstatscounter_max,
|
||||
"queries resulted in nxrrset", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_servfail, dns_nsstatscounter_max,
|
||||
"queries resulted in SERVFAIL", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_formerr, dns_nsstatscounter_max,
|
||||
"queries resulted in FORMERR", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_nxdomain, dns_nsstatscounter_max,
|
||||
"queries resulted in NXDOMAIN", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_recursion, dns_nsstatscounter_max,
|
||||
"queries caused recursion", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_duplicate, dns_nsstatscounter_max,
|
||||
"duplicate queries received", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_dropped, dns_nsstatscounter_max,
|
||||
"queries dropped", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_failure, dns_nsstatscounter_max,
|
||||
"other query failures", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_xfrdone, dns_nsstatscounter_max,
|
||||
"requested transfers completed", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_updatereqfwd, dns_nsstatscounter_max,
|
||||
"update requests forwarded", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_updaterespfwd, dns_nsstatscounter_max,
|
||||
"update responses forwarded", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_updatefwdfail, dns_nsstatscounter_max,
|
||||
"update forward failed", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_updatedone, dns_nsstatscounter_max,
|
||||
"updates completed", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_updatefail, dns_nsstatscounter_max,
|
||||
"updates failed", nsstats_desc);
|
||||
set_desc(dns_nsstatscounter_updatebadprereq, dns_nsstatscounter_max,
|
||||
"updates rejected due to prerequisite failure", nsstats_desc);
|
||||
|
||||
/* Initialize resolver statistics */
|
||||
memset(resstats_desc, 0,
|
||||
dns_resstatscounter_max * sizeof(resstats_desc[0]));
|
||||
set_desc(dns_resstatscounter_queryv4, dns_resstatscounter_max,
|
||||
"IPv4 queries sent", resstats_desc);
|
||||
set_desc(dns_resstatscounter_queryv6, dns_resstatscounter_max,
|
||||
"IPv6 queries sent", resstats_desc);
|
||||
set_desc(dns_resstatscounter_responsev4, dns_resstatscounter_max,
|
||||
"IPv4 responses received", resstats_desc);
|
||||
set_desc(dns_resstatscounter_responsev6, dns_resstatscounter_max,
|
||||
"IPv6 responses received", resstats_desc);
|
||||
set_desc(dns_resstatscounter_nxdomain, dns_resstatscounter_max,
|
||||
"NXDOMAIN received", resstats_desc);
|
||||
set_desc(dns_resstatscounter_servfail, dns_resstatscounter_max,
|
||||
"SERVFAIL received", resstats_desc);
|
||||
set_desc(dns_resstatscounter_formerr, dns_resstatscounter_max,
|
||||
"FORMERR received", resstats_desc);
|
||||
set_desc(dns_resstatscounter_othererror, dns_resstatscounter_max,
|
||||
"other errors received", resstats_desc);
|
||||
set_desc(dns_resstatscounter_edns0fail, dns_resstatscounter_max,
|
||||
"EDNS(0) query failures", resstats_desc);
|
||||
set_desc(dns_resstatscounter_mismatch, dns_resstatscounter_max,
|
||||
"mismatch responses received", resstats_desc);
|
||||
set_desc(dns_resstatscounter_truncated, dns_resstatscounter_max,
|
||||
"truncated responses received", resstats_desc);
|
||||
set_desc(dns_resstatscounter_lame, dns_resstatscounter_max,
|
||||
"lame delegations received", resstats_desc);
|
||||
set_desc(dns_resstatscounter_retry, dns_resstatscounter_max,
|
||||
"query retries", resstats_desc);
|
||||
set_desc(dns_resstatscounter_gluefetchv4, dns_resstatscounter_max,
|
||||
"IPv4 NS address fetches", resstats_desc);
|
||||
set_desc(dns_resstatscounter_gluefetchv6, dns_resstatscounter_max,
|
||||
"IPv6 NS address fetches", resstats_desc);
|
||||
set_desc(dns_resstatscounter_gluefetchv4fail, dns_resstatscounter_max,
|
||||
"IPv4 NS address fetch failed", resstats_desc);
|
||||
set_desc(dns_resstatscounter_gluefetchv6fail, dns_resstatscounter_max,
|
||||
"IPv6 NS address fetch failed", resstats_desc);
|
||||
set_desc(dns_resstatscounter_val, dns_resstatscounter_max,
|
||||
"DNSSEC validation attempted", resstats_desc);
|
||||
set_desc(dns_resstatscounter_valsuccess, dns_resstatscounter_max,
|
||||
"DNSSEC validation succeeded", resstats_desc);
|
||||
set_desc(dns_resstatscounter_valnegsuccess, dns_resstatscounter_max,
|
||||
"DNSSEC NX validation succeeded", resstats_desc);
|
||||
set_desc(dns_resstatscounter_valfail, dns_resstatscounter_max,
|
||||
"DNSSEC validation failed", resstats_desc);
|
||||
|
||||
/* Initialize zone statistics */
|
||||
memset(zonestats_desc, 0,
|
||||
dns_zonestatscounter_max * sizeof(zonestats_desc[0]));
|
||||
set_desc(dns_zonestatscounter_notifyoutv4, dns_zonestatscounter_max,
|
||||
"IPv4 notifies sent", zonestats_desc);
|
||||
set_desc(dns_zonestatscounter_notifyoutv6, dns_zonestatscounter_max,
|
||||
"IPv6 notifies sent", zonestats_desc);
|
||||
set_desc(dns_zonestatscounter_notifyinv4, dns_zonestatscounter_max,
|
||||
"IPv4 notifies received", zonestats_desc);
|
||||
set_desc(dns_zonestatscounter_notifyinv6, dns_zonestatscounter_max,
|
||||
"IPv6 notifies received", zonestats_desc);
|
||||
set_desc(dns_zonestatscounter_notifyrej, dns_zonestatscounter_max,
|
||||
"notifies rejected", zonestats_desc);
|
||||
set_desc(dns_zonestatscounter_soaoutv4, dns_zonestatscounter_max,
|
||||
"IPv4 SOA queries sent", zonestats_desc);
|
||||
set_desc(dns_zonestatscounter_soaoutv6, dns_zonestatscounter_max,
|
||||
"IPv6 SOA queries sent", zonestats_desc);
|
||||
set_desc(dns_zonestatscounter_axfrreqv4, dns_zonestatscounter_max,
|
||||
"IPv4 AXFR requested", zonestats_desc);
|
||||
set_desc(dns_zonestatscounter_axfrreqv6, dns_zonestatscounter_max,
|
||||
"IPv6 AXFR requested", zonestats_desc);
|
||||
set_desc(dns_zonestatscounter_ixfrreqv4, dns_zonestatscounter_max,
|
||||
"IPv4 IXFR requested", zonestats_desc);
|
||||
set_desc(dns_zonestatscounter_ixfrreqv6, dns_zonestatscounter_max,
|
||||
"IPv6 IXFR requested", zonestats_desc);
|
||||
set_desc(dns_zonestatscounter_xfrsuccess, dns_zonestatscounter_max,
|
||||
"transfer requests succeeded", zonestats_desc);
|
||||
set_desc(dns_zonestatscounter_xfrfail, dns_zonestatscounter_max,
|
||||
"transfer requests failed", zonestats_desc);
|
||||
|
||||
/* Sanity check */
|
||||
for (i = 0; i < dns_nsstatscounter_max; i++)
|
||||
INSIST(nsstats_desc[i] != NULL);
|
||||
for (i = 0; i < dns_resstatscounter_max; i++)
|
||||
INSIST(resstats_desc[i] != NULL);
|
||||
for (i = 0; i < dns_zonestatscounter_max; i++)
|
||||
INSIST(zonestats_desc[i] != NULL);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
ns_stats_dump(ns_server_t *server, FILE *fp) {
|
||||
isc_stdtime_t now;
|
||||
|
|
@ -1025,6 +1154,7 @@ ns_stats_dump(ns_server_t *server, FILE *fp) {
|
|||
/* Set common fields */
|
||||
dumparg.type = statsformat_file;
|
||||
dumparg.arg = fp;
|
||||
dumparg.category = NULL; /* unused */
|
||||
|
||||
isc_stdtime_get(&now);
|
||||
fprintf(fp, "+++ Statistics Dump +++ (%lu)\n", (unsigned long)now);
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- File: $Id: Bv9ARM-book.xml,v 1.361 2008/06/23 22:20:05 jinmei Exp $ -->
|
||||
<!-- File: $Id: Bv9ARM-book.xml,v 1.362 2008/07/17 23:43:26 jinmei Exp $ -->
|
||||
<book xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>BIND 9 Administrator Reference Manual</title>
|
||||
|
||||
|
|
@ -12195,9 +12195,6 @@ $GENERATE 1-127 $ CNAME $.0</programlisting>
|
|||
<entry colname="3">
|
||||
<para>
|
||||
Mismatch responses received.
|
||||
When shown via an HTTP statistics channel,
|
||||
this counter is shown in the
|
||||
Name Server Statistics section for brevity.
|
||||
</para>
|
||||
</entry>
|
||||
</row>
|
||||
|
|
|
|||
Loading…
Reference in a new issue