BIND 10 trac2157_2, updated. 5d108ef3a0b5b5d9fe322ceb478c36077deedfd4 [2157] fixed systest

BIND 10 source code commits bind10-changes at lists.isc.org
Wed Oct 10 05:17:12 UTC 2012


The branch, trac2157_2 has been updated
       via  5d108ef3a0b5b5d9fe322ceb478c36077deedfd4 (commit)
       via  bc6378d402e5977beac587dc87b73351609f01a5 (commit)
       via  2edfabb40d94f795923f8dbbd135e20c9c19f8ad (commit)
       via  05d4686ef8b343fc4ca4ea0bfd6c62fe4b73ef84 (commit)
      from  d597f938295cdfaf4670308558f692523d0857f0 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 5d108ef3a0b5b5d9fe322ceb478c36077deedfd4
Author: Yoshitaka Aharen <aharen at jprs.co.jp>
Date:   Wed Oct 10 14:14:46 2012 +0900

    [2157] fixed systest

commit bc6378d402e5977beac587dc87b73351609f01a5
Author: Yoshitaka Aharen <aharen at jprs.co.jp>
Date:   Tue Oct 9 21:17:03 2012 +0900

    [2157] update spec file

commit 2edfabb40d94f795923f8dbbd135e20c9c19f8ad
Author: Yoshitaka Aharen <aharen at jprs.co.jp>
Date:   Fri Oct 5 21:55:35 2012 +0900

    [2155] update for structured statistics items
    
    Conflicts:
    	src/bin/auth/statistics.cc
    	src/bin/auth/tests/auth_srv_unittest.cc
    	src/bin/auth/tests/statistics_unittest.cc

commit 05d4686ef8b343fc4ca4ea0bfd6c62fe4b73ef84
Author: Yoshitaka Aharen <aharen at jprs.co.jp>
Date:   Fri Oct 5 21:28:48 2012 +0900

    [2154] removed socket statistics items, restruct counter items
    
    Removed socket statistics items.
    Restruct counter items from flat counters to structured counters.

-----------------------------------------------------------------------

Summary of changes:
 src/bin/auth/auth.spec.pre.in             | 2197 ++++++++++++++++-------------
 src/bin/auth/statistics.cc                |   24 +-
 src/bin/auth/statistics.h                 |    2 -
 src/bin/auth/statistics_items.h           |  361 ++---
 src/bin/auth/tests/auth_srv_unittest.cc   |  149 +-
 src/bin/auth/tests/statistics_unittest.cc |   74 +-
 tests/system/bindctl/tests.sh             |    6 +-
 7 files changed, 1447 insertions(+), 1366 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/bin/auth/auth.spec.pre.in b/src/bin/auth/auth.spec.pre.in
index 45a154c..65652df 100644
--- a/src/bin/auth/auth.spec.pre.in
+++ b/src/bin/auth/auth.spec.pre.in
@@ -122,7 +122,7 @@
             "item_name": "class", "item_type": "string",
             "item_optional": true, "item_default": "IN"
           },
-	  {
+          {
             "item_name": "origin", "item_type": "string",
             "item_optional": false, "item_default": ""
           }
@@ -148,123 +148,133 @@
         "item_description": "Zone statistics items. Items for all zones are stored in '_SERVER_'.",
         "item_default": {
           "_SERVER_": {
-            "request.v4": 0,
-            "request.v6": 0,
-            "request.edns0": 0,
-            "request.badednsver": 0,
-            "request.tsig": 0,
-            "request.sig0": 0,
-            "request.badsig": 0,
-            "request.udp": 0,
-            "request.tcp": 0,
-            "request.dnssec_ok": 0,
-            "opcode.query": 0,
-            "opcode.iquery": 0,
-            "opcode.status": 0,
-            "opcode.notify": 0,
-            "opcode.update": 0,
-            "opcode.other": 0,
-            "qtype.a": 0,
-            "qtype.ns": 0,
-            "qtype.md": 0,
-            "qtype.mf": 0,
-            "qtype.cname": 0,
-            "qtype.soa": 0,
-            "qtype.mb": 0,
-            "qtype.mg": 0,
-            "qtype.mr": 0,
-            "qtype.null": 0,
-            "qtype.wks": 0,
-            "qtype.ptr": 0,
-            "qtype.hinfo": 0,
-            "qtype.minfo": 0,
-            "qtype.mx": 0,
-            "qtype.txt": 0,
-            "qtype.rp": 0,
-            "qtype.afsdb": 0,
-            "qtype.x25": 0,
-            "qtype.isdn": 0,
-            "qtype.rt": 0,
-            "qtype.nsap": 0,
-            "qtype.nsap-ptr": 0,
-            "qtype.sig": 0,
-            "qtype.key": 0,
-            "qtype.px": 0,
-            "qtype.gpos": 0,
-            "qtype.aaaa": 0,
-            "qtype.loc": 0,
-            "qtype.nxt": 0,
-            "qtype.eid": 0,
-            "qtype.nimloc": 0,
-            "qtype.srv": 0,
-            "qtype.atma": 0,
-            "qtype.naptr": 0,
-            "qtype.kx": 0,
-            "qtype.cert": 0,
-            "qtype.a6": 0,
-            "qtype.dname": 0,
-            "qtype.sink": 0,
-            "qtype.opt": 0,
-            "qtype.apl": 0,
-            "qtype.ds": 0,
-            "qtype.sshfp": 0,
-            "qtype.ipseckey": 0,
-            "qtype.rrsig": 0,
-            "qtype.nsec": 0,
-            "qtype.dnskey": 0,
-            "qtype.dhcid": 0,
-            "qtype.nsec3": 0,
-            "qtype.nsec3param": 0,
-            "qtype.hip": 0,
-            "qtype.ninfo": 0,
-            "qtype.rkey": 0,
-            "qtype.talink": 0,
-            "qtype.spf": 0,
-            "qtype.uinfo": 0,
-            "qtype.uid": 0,
-            "qtype.gid": 0,
-            "qtype.unspec": 0,
-            "qtype.tkey": 0,
-            "qtype.tsig": 0,
-            "qtype.ixfr": 0,
-            "qtype.axfr": 0,
-            "qtype.mailb": 0,
-            "qtype.maila": 0,
-            "qtype.uri": 0,
-            "qtype.caa": 0,
-            "qtype.ta": 0,
-            "qtype.dlv": 0,
-            "qtype.other": 0,
-            "response": 0,
-            "response.truncated": 0,
-            "response.edns0": 0,
-            "response.tsig": 0,
-            "response.sig0": 0,
-            "qrysuccess": 0,
+            "request": {
+                "v4": 0,
+                "v6": 0,
+                "edns0": 0,
+                "badednsver": 0,
+                "tsig": 0,
+                "sig0": 0,
+                "badsig": 0,
+                "udp": 0,
+                "tcp": 0,
+                "dnssec_ok": 0
+            },
+            "opcode": {
+                "query": 0,
+                "iquery": 0,
+                "status": 0,
+                "notify": 0,
+                "update": 0,
+                "other": 0
+            },
+            "qtype": {
+                "a": 0,
+                "ns": 0,
+                "md": 0,
+                "mf": 0,
+                "cname": 0,
+                "soa": 0,
+                "mb": 0,
+                "mg": 0,
+                "mr": 0,
+                "null": 0,
+                "wks": 0,
+                "ptr": 0,
+                "hinfo": 0,
+                "minfo": 0,
+                "mx": 0,
+                "txt": 0,
+                "rp": 0,
+                "afsdb": 0,
+                "x25": 0,
+                "isdn": 0,
+                "rt": 0,
+                "nsap": 0,
+                "nsap-ptr": 0,
+                "sig": 0,
+                "key": 0,
+                "px": 0,
+                "gpos": 0,
+                "aaaa": 0,
+                "loc": 0,
+                "nxt": 0,
+                "eid": 0,
+                "nimloc": 0,
+                "srv": 0,
+                "atma": 0,
+                "naptr": 0,
+                "kx": 0,
+                "cert": 0,
+                "a6": 0,
+                "dname": 0,
+                "sink": 0,
+                "opt": 0,
+                "apl": 0,
+                "ds": 0,
+                "sshfp": 0,
+                "ipseckey": 0,
+                "rrsig": 0,
+                "nsec": 0,
+                "dnskey": 0,
+                "dhcid": 0,
+                "nsec3": 0,
+                "nsec3param": 0,
+                "hip": 0,
+                "ninfo": 0,
+                "rkey": 0,
+                "talink": 0,
+                "spf": 0,
+                "uinfo": 0,
+                "uid": 0,
+                "gid": 0,
+                "unspec": 0,
+                "tkey": 0,
+                "tsig": 0,
+                "ixfr": 0,
+                "axfr": 0,
+                "mailb": 0,
+                "maila": 0,
+                "uri": 0,
+                "caa": 0,
+                "ta": 0,
+                "dlv": 0,
+                "other": 0
+            },
+            "rcode": {
+                "noerror": 0,
+                "formerr": 0,
+                "servfail": 0,
+                "nxdomain": 0,
+                "notimp": 0,
+                "refused": 0,
+                "yxdomain": 0,
+                "yxrrset": 0,
+                "nxrrset": 0,
+                "notauth": 0,
+                "notzone": 0,
+                "badsigvers": 0,
+                "badkey": 0,
+                "badtime": 0,
+                "badmode": 0,
+                "badname": 0,
+                "badalg": 0,
+                "badtrunc": 0,
+                "other": 0
+            },
+            "authqryrej": 0,
             "qryauthans": 0,
             "qrynoauthans": 0,
-            "qryreferral": 0,
             "qrynxrrset": 0,
-            "authqryrej": 0,
-            "rcode.noerror": 0,
-            "rcode.formerr": 0,
-            "rcode.servfail": 0,
-            "rcode.nxdomain": 0,
-            "rcode.notimp": 0,
-            "rcode.refused": 0,
-            "rcode.yxdomain": 0,
-            "rcode.yxrrset": 0,
-            "rcode.nxrrset": 0,
-            "rcode.notauth": 0,
-            "rcode.notzone": 0,
-            "rcode.badsigvers": 0,
-            "rcode.badkey": 0,
-            "rcode.badtime": 0,
-            "rcode.badmode": 0,
-            "rcode.badname": 0,
-            "rcode.badalg": 0,
-            "rcode.badtrunc": 0,
-            "rcode.other": 0
+            "qryreferral": 0,
+            "qrysuccess": 0,
+            "response": {
+                "edns0": 0,
+                "sig0": 0,
+                "truncated": 0,
+                "tsig": 0
+            },
+            "responses": 0
           }
         },
         "named_set_item_spec": {
@@ -274,943 +284,1108 @@
           "item_default": { },
           "map_item_spec": [
             {
-              "item_name": "request.v4",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "request.v4",
-              "item_description": "Number of IPv4 requests received"
-            },
-            {
-              "item_name": "request.v6",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "request.v6",
-              "item_description": "Number of IPv6 requests received"
-            },
-            {
-              "item_name": "request.edns0",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "request.edns0",
-              "item_description": "Number of requests with EDNS(0) received"
-            },
-            {
-              "item_name": "request.badednsver",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "request.badednsver",
-              "item_description": "Number of requests with unsupported EDNS version received"
-            },
-            {
-              "item_name": "request.tsig",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "request.tsig",
-              "item_description": "Number of requests with TSIG received"
-            },
-            {
-              "item_name": "request.sig0",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "request.sig0",
-              "item_description": "Number of requests with SIG(0) received; currently not implemented in BIND 10"
-            },
-            {
-              "item_name": "request.badsig",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "request.badsig",
-              "item_description": "Number of requests with invalid TSIG or SIG(0) signature received"
-            },
-            {
-              "item_name": "request.udp",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "request.udp",
-              "item_description": "Number of UDP requests received"
-            },
-            {
-              "item_name": "request.tcp",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "request.tcp",
-              "item_description": "Number of TCP requests received"
-            },
-            {
-              "item_name": "request.dnssec_ok",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "request.dnssec_ok",
-              "item_description": "Number of requests with DO bit"
-            },
-            {
-              "item_name": "opcode.query",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "opcode.query",
-              "item_description": "Number of Opcode=QUERY requests received"
-            },
-            {
-              "item_name": "opcode.iquery",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "opcode.iquery",
-              "item_description": "Number of Opcode=IQUERY requests received"
-            },
-            {
-              "item_name": "opcode.status",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "opcode.status",
-              "item_description": "Number of Opcode=STATUS requests received"
-            },
-            {
-              "item_name": "opcode.notify",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "opcode.notify",
-              "item_description": "Number of Opcode=NOTIFY requests received"
-            },
-            {
-              "item_name": "opcode.update",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "opcode.update",
-              "item_description": "Number of Opcode=UPDATE requests received"
-            },
-            {
-              "item_name": "opcode.other",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "opcode.other",
-              "item_description": "Number of requests in other OpCode received"
-            },
-            {
-              "item_name": "qtype.a",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.a",
-              "item_description": "Number of QTYPE = A queries received"
-            },
-            {
-              "item_name": "qtype.ns",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.ns",
-              "item_description": "Number of QTYPE = NS queries received"
-            },
-            {
-              "item_name": "qtype.md",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.md",
-              "item_description": "Number of QTYPE = MD queries received"
-            },
-            {
-              "item_name": "qtype.mf",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.mf",
-              "item_description": "Number of QTYPE = MF queries received"
-            },
-            {
-              "item_name": "qtype.cname",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.cname",
-              "item_description": "Number of QTYPE = CNAME queries received"
-            },
-            {
-              "item_name": "qtype.soa",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.soa",
-              "item_description": "Number of QTYPE = SOA queries received"
-            },
-            {
-              "item_name": "qtype.mb",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.mb",
-              "item_description": "Number of QTYPE = MB queries received"
-            },
-            {
-              "item_name": "qtype.mg",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.mg",
-              "item_description": "Number of QTYPE = MG queries received"
-            },
-            {
-              "item_name": "qtype.mr",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.mr",
-              "item_description": "Number of QTYPE = MR queries received"
-            },
-            {
-              "item_name": "qtype.null",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.null",
-              "item_description": "Number of QTYPE = NULL queries received"
-            },
-            {
-              "item_name": "qtype.wks",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.wks",
-              "item_description": "Number of QTYPE = WKS queries received"
-            },
-            {
-              "item_name": "qtype.ptr",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.ptr",
-              "item_description": "Number of QTYPE = PTR queries received"
-            },
-            {
-              "item_name": "qtype.hinfo",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.hinfo",
-              "item_description": "Number of QTYPE = HINFO queries received"
-            },
-            {
-              "item_name": "qtype.minfo",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.minfo",
-              "item_description": "Number of QTYPE = MINFO queries received"
-            },
-            {
-              "item_name": "qtype.mx",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.mx",
-              "item_description": "Number of QTYPE = MX queries received"
-            },
-            {
-              "item_name": "qtype.txt",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.txt",
-              "item_description": "Number of QTYPE = TXT queries received"
-            },
-            {
-              "item_name": "qtype.rp",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.rp",
-              "item_description": "Number of QTYPE = RP queries received"
-            },
-            {
-              "item_name": "qtype.afsdb",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.afsdb",
-              "item_description": "Number of QTYPE = AFSDB queries received"
-            },
-            {
-              "item_name": "qtype.x25",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.x25",
-              "item_description": "Number of QTYPE = X25 queries received"
-            },
-            {
-              "item_name": "qtype.isdn",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.isdn",
-              "item_description": "Number of QTYPE = ISDN queries received"
-            },
-            {
-              "item_name": "qtype.rt",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.rt",
-              "item_description": "Number of QTYPE = RT queries received"
-            },
-            {
-              "item_name": "qtype.nsap",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.nsap",
-              "item_description": "Number of QTYPE = NSAP queries received"
-            },
-            {
-              "item_name": "qtype.nsap-ptr",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.nsap-ptr",
-              "item_description": "Number of QTYPE = NSAP-PTR queries received"
-            },
-            {
-              "item_name": "qtype.sig",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.sig",
-              "item_description": "Number of QTYPE = SIG queries received"
-            },
-            {
-              "item_name": "qtype.key",
-              "item_type": "integer",
+              "item_name": "request",
+              "item_type": "map",
               "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.key",
-              "item_description": "Number of QTYPE = KEY queries received"
-            },
-            {
-              "item_name": "qtype.px",
-              "item_type": "integer",
+              "item_title": "request",
+              "item_description": "Request statistics",
+              "item_default": {
+                "v4": 0,
+                "v6": 0,
+                "edns0": 0,
+                "badednsver": 0,
+                "tsig": 0,
+                "sig0": 0,
+                "badsig": 0,
+                "udp": 0,
+                "tcp": 0,
+                "dnssec_ok": 0
+              },
+              "map_item_spec": [
+                {
+                  "item_name": "v4",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "v4",
+                  "item_description": "Number of IPv4 requests received"
+                },
+                {
+                  "item_name": "v6",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "v6",
+                  "item_description": "Number of IPv6 requests received"
+                },
+                {
+                  "item_name": "edns0",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "edns0",
+                  "item_description": "Number of requests with EDNS(0) received"
+                },
+                {
+                  "item_name": "badednsver",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "badednsver",
+                  "item_description": "Number of requests with unsupported EDNS version received"
+                },
+                {
+                  "item_name": "tsig",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "tsig",
+                  "item_description": "Number of requests with TSIG received"
+                },
+                {
+                  "item_name": "sig0",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "sig0",
+                  "item_description": "Number of requests with SIG(0) received; currently not implemented in BIND 10"
+                },
+                {
+                  "item_name": "badsig",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "badsig",
+                  "item_description": "Number of requests with invalid TSIG or SIG(0) signature received"
+                },
+                {
+                  "item_name": "udp",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "udp",
+                  "item_description": "Number of UDP requests received"
+                },
+                {
+                  "item_name": "tcp",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "tcp",
+                  "item_description": "Number of TCP requests received"
+                },
+                {
+                  "item_name": "dnssec_ok",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "dnssec_ok",
+                  "item_description": "Number of requests with DO bit"
+                }
+              ]
+            },
+            {
+              "item_name": "opcode",
+              "item_type": "map",
               "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.px",
-              "item_description": "Number of QTYPE = PX queries received"
-            },
-            {
-              "item_name": "qtype.gpos",
-              "item_type": "integer",
+              "item_title": "opcode",
+              "item_description": "Opcode statistics",
+              "item_default": {
+                "query": 0,
+                "iquery": 0,
+                "status": 0,
+                "notify": 0,
+                "update": 0,
+                "other": 0
+              },
+              "map_item_spec": [
+                {
+                  "item_name": "query",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "query",
+                  "item_description": "Number of Opcode=QUERY requests received"
+                },
+                {
+                  "item_name": "iquery",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "iquery",
+                  "item_description": "Number of Opcode=IQUERY requests received"
+                },
+                {
+                  "item_name": "status",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "status",
+                  "item_description": "Number of Opcode=STATUS requests received"
+                },
+                {
+                  "item_name": "notify",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "notify",
+                  "item_description": "Number of Opcode=NOTIFY requests received"
+                },
+                {
+                  "item_name": "update",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "update",
+                  "item_description": "Number of Opcode=UPDATE requests received"
+                },
+                {
+                  "item_name": "other",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "other",
+                  "item_description": "Number of requests in other OpCode received"
+                }
+              ]
+            },
+            {
+              "item_name": "qtype",
+              "item_type": "map",
               "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.gpos",
-              "item_description": "Number of QTYPE = GPOS queries received"
+              "item_title": "qtype",
+              "item_description": "Query RRtype statistics",
+              "item_default": {
+                "a": 0,
+                "ns": 0,
+                "md": 0,
+                "mf": 0,
+                "cname": 0,
+                "soa": 0,
+                "mb": 0,
+                "mg": 0,
+                "mr": 0,
+                "null": 0,
+                "wks": 0,
+                "ptr": 0,
+                "hinfo": 0,
+                "minfo": 0,
+                "mx": 0,
+                "txt": 0,
+                "rp": 0,
+                "afsdb": 0,
+                "x25": 0,
+                "isdn": 0,
+                "rt": 0,
+                "nsap": 0,
+                "nsap-ptr": 0,
+                "sig": 0,
+                "key": 0,
+                "px": 0,
+                "gpos": 0,
+                "aaaa": 0,
+                "loc": 0,
+                "nxt": 0,
+                "eid": 0,
+                "nimloc": 0,
+                "srv": 0,
+                "atma": 0,
+                "naptr": 0,
+                "kx": 0,
+                "cert": 0,
+                "a6": 0,
+                "dname": 0,
+                "sink": 0,
+                "opt": 0,
+                "apl": 0,
+                "ds": 0,
+                "sshfp": 0,
+                "ipseckey": 0,
+                "rrsig": 0,
+                "nsec": 0,
+                "dnskey": 0,
+                "dhcid": 0,
+                "nsec3": 0,
+                "nsec3param": 0,
+                "hip": 0,
+                "ninfo": 0,
+                "rkey": 0,
+                "talink": 0,
+                "spf": 0,
+                "uinfo": 0,
+                "uid": 0,
+                "gid": 0,
+                "unspec": 0,
+                "tkey": 0,
+                "tsig": 0,
+                "ixfr": 0,
+                "axfr": 0,
+                "mailb": 0,
+                "maila": 0,
+                "uri": 0,
+                "caa": 0,
+                "ta": 0,
+                "dlv": 0,
+                "other": 0
+              },
+              "map_item_spec": [
+                {
+                  "item_name": "a",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "a",
+                  "item_description": "Number of QTYPE = A queries received"
+                },
+                {
+                  "item_name": "ns",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "ns",
+                  "item_description": "Number of QTYPE = NS queries received"
+                },
+                {
+                  "item_name": "md",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "md",
+                  "item_description": "Number of QTYPE = MD queries received"
+                },
+                {
+                  "item_name": "mf",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "mf",
+                  "item_description": "Number of QTYPE = MF queries received"
+                },
+                {
+                  "item_name": "cname",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "cname",
+                  "item_description": "Number of QTYPE = CNAME queries received"
+                },
+                {
+                  "item_name": "soa",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "soa",
+                  "item_description": "Number of QTYPE = SOA queries received"
+                },
+                {
+                  "item_name": "mb",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "mb",
+                  "item_description": "Number of QTYPE = MB queries received"
+                },
+                {
+                  "item_name": "mg",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "mg",
+                  "item_description": "Number of QTYPE = MG queries received"
+                },
+                {
+                  "item_name": "mr",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "mr",
+                  "item_description": "Number of QTYPE = MR queries received"
+                },
+                {
+                  "item_name": "null",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "null",
+                  "item_description": "Number of QTYPE = NULL queries received"
+                },
+                {
+                  "item_name": "wks",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "wks",
+                  "item_description": "Number of QTYPE = WKS queries received"
+                },
+                {
+                  "item_name": "ptr",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "ptr",
+                  "item_description": "Number of QTYPE = PTR queries received"
+                },
+                {
+                  "item_name": "hinfo",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "hinfo",
+                  "item_description": "Number of QTYPE = HINFO queries received"
+                },
+                {
+                  "item_name": "minfo",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "minfo",
+                  "item_description": "Number of QTYPE = MINFO queries received"
+                },
+                {
+                  "item_name": "mx",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "mx",
+                  "item_description": "Number of QTYPE = MX queries received"
+                },
+                {
+                  "item_name": "txt",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "txt",
+                  "item_description": "Number of QTYPE = TXT queries received"
+                },
+                {
+                  "item_name": "rp",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "rp",
+                  "item_description": "Number of QTYPE = RP queries received"
+                },
+                {
+                  "item_name": "afsdb",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "afsdb",
+                  "item_description": "Number of QTYPE = AFSDB queries received"
+                },
+                {
+                  "item_name": "x25",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "x25",
+                  "item_description": "Number of QTYPE = X25 queries received"
+                },
+                {
+                  "item_name": "isdn",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "isdn",
+                  "item_description": "Number of QTYPE = ISDN queries received"
+                },
+                {
+                  "item_name": "rt",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "rt",
+                  "item_description": "Number of QTYPE = RT queries received"
+                },
+                {
+                  "item_name": "nsap",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "nsap",
+                  "item_description": "Number of QTYPE = NSAP queries received"
+                },
+                {
+                  "item_name": "nsap-ptr",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "nsap-ptr",
+                  "item_description": "Number of QTYPE = NSAP-PTR queries received"
+                },
+                {
+                  "item_name": "sig",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "sig",
+                  "item_description": "Number of QTYPE = SIG queries received"
+                },
+                {
+                  "item_name": "key",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "key",
+                  "item_description": "Number of QTYPE = KEY queries received"
+                },
+                {
+                  "item_name": "px",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "px",
+                  "item_description": "Number of QTYPE = PX queries received"
+                },
+                {
+                  "item_name": "gpos",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "gpos",
+                  "item_description": "Number of QTYPE = GPOS queries received"
+                },
+                {
+                  "item_name": "aaaa",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "aaaa",
+                  "item_description": "Number of QTYPE = AAAA queries received"
+                },
+                {
+                  "item_name": "loc",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "loc",
+                  "item_description": "Number of QTYPE = LOC queries received"
+                },
+                {
+                  "item_name": "nxt",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "nxt",
+                  "item_description": "Number of QTYPE = NXT queries received"
+                },
+                {
+                  "item_name": "eid",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "eid",
+                  "item_description": "Number of QTYPE = EID queries received"
+                },
+                {
+                  "item_name": "nimloc",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "nimloc",
+                  "item_description": "Number of QTYPE = NIMLOC queries received"
+                },
+                {
+                  "item_name": "srv",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "srv",
+                  "item_description": "Number of QTYPE = SRV queries received"
+                },
+                {
+                  "item_name": "atma",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "atma",
+                  "item_description": "Number of QTYPE = ATMA queries received"
+                },
+                {
+                  "item_name": "naptr",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "naptr",
+                  "item_description": "Number of QTYPE = NAPTR queries received"
+                },
+                {
+                  "item_name": "kx",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "kx",
+                  "item_description": "Number of QTYPE = KX queries received"
+                },
+                {
+                  "item_name": "cert",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "cert",
+                  "item_description": "Number of QTYPE = CERT queries received"
+                },
+                {
+                  "item_name": "a6",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "a6",
+                  "item_description": "Number of QTYPE = A6 queries received"
+                },
+                {
+                  "item_name": "dname",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "dname",
+                  "item_description": "Number of QTYPE = DNAME queries received"
+                },
+                {
+                  "item_name": "sink",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "sink",
+                  "item_description": "Number of QTYPE = SINK queries received"
+                },
+                {
+                  "item_name": "opt",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "opt",
+                  "item_description": "Number of QTYPE = OPT queries received"
+                },
+                {
+                  "item_name": "apl",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "apl",
+                  "item_description": "Number of QTYPE = APL queries received"
+                },
+                {
+                  "item_name": "ds",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "ds",
+                  "item_description": "Number of QTYPE = DS queries received"
+                },
+                {
+                  "item_name": "sshfp",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "sshfp",
+                  "item_description": "Number of QTYPE = SSHFP queries received"
+                },
+                {
+                  "item_name": "ipseckey",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "ipseckey",
+                  "item_description": "Number of QTYPE = IPSECKEY queries received"
+                },
+                {
+                  "item_name": "rrsig",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "rrsig",
+                  "item_description": "Number of QTYPE = RRSIG queries received"
+                },
+                {
+                  "item_name": "nsec",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "nsec",
+                  "item_description": "Number of QTYPE = NSEC queries received"
+                },
+                {
+                  "item_name": "dnskey",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "dnskey",
+                  "item_description": "Number of QTYPE = DNSKEY queries received"
+                },
+                {
+                  "item_name": "dhcid",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "dhcid",
+                  "item_description": "Number of QTYPE = DHCID queries received"
+                },
+                {
+                  "item_name": "nsec3",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "nsec3",
+                  "item_description": "Number of QTYPE = NSEC3 queries received"
+                },
+                {
+                  "item_name": "nsec3param",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "nsec3param",
+                  "item_description": "Number of QTYPE = NSEC3PARAM queries received"
+                },
+                {
+                  "item_name": "hip",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "hip",
+                  "item_description": "Number of QTYPE = HIP queries received"
+                },
+                {
+                  "item_name": "ninfo",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "ninfo",
+                  "item_description": "Number of QTYPE = NINFO queries received"
+                },
+                {
+                  "item_name": "rkey",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "rkey",
+                  "item_description": "Number of QTYPE = RKEY queries received"
+                },
+                {
+                  "item_name": "talink",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "talink",
+                  "item_description": "Number of QTYPE = TALINK queries received"
+                },
+                {
+                  "item_name": "spf",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "spf",
+                  "item_description": "Number of QTYPE = SPF queries received"
+                },
+                {
+                  "item_name": "uinfo",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "uinfo",
+                  "item_description": "Number of QTYPE = UINFO queries received"
+                },
+                {
+                  "item_name": "uid",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "uid",
+                  "item_description": "Number of QTYPE = UID queries received"
+                },
+                {
+                  "item_name": "gid",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "gid",
+                  "item_description": "Number of QTYPE = GID queries received"
+                },
+                {
+                  "item_name": "unspec",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "unspec",
+                  "item_description": "Number of QTYPE = UNSPEC queries received"
+                },
+                {
+                  "item_name": "tkey",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "tkey",
+                  "item_description": "Number of QTYPE = TKEY queries received"
+                },
+                {
+                  "item_name": "tsig",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "tsig",
+                  "item_description": "Number of QTYPE = TSIG queries received"
+                },
+                {
+                  "item_name": "ixfr",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "ixfr",
+                  "item_description": "Number of QTYPE = IXFR queries received"
+                },
+                {
+                  "item_name": "axfr",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "axfr",
+                  "item_description": "Number of QTYPE = AXFR queries received"
+                },
+                {
+                  "item_name": "mailb",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "mailb",
+                  "item_description": "Number of QTYPE = MAILB queries received"
+                },
+                {
+                  "item_name": "maila",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "maila",
+                  "item_description": "Number of QTYPE = MAILA queries received"
+                },
+                {
+                  "item_name": "uri",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "uri",
+                  "item_description": "Number of QTYPE = URI queries received"
+                },
+                {
+                  "item_name": "caa",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "caa",
+                  "item_description": "Number of QTYPE = CAA queries received"
+                },
+                {
+                  "item_name": "ta",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "ta",
+                  "item_description": "Number of QTYPE = TA queries received"
+                },
+                {
+                  "item_name": "dlv",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "dlv",
+                  "item_description": "Number of QTYPE = DLV queries received"
+                },
+                {
+                  "item_name": "other",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "other",
+                  "item_description": "Number of queries in other QTYPE received"
+                }
+              ]
+            },
+            {
+              "item_name": "responses",
+              "item_type": "integer",
+              "item_optional": false,
+              "item_default": 0,
+              "item_title": "responses",
+              "item_description": "Number of responses sent"
             },
             {
-              "item_name": "qtype.aaaa",
-              "item_type": "integer",
+              "item_name": "response",
+              "item_type": "map",
               "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.aaaa",
-              "item_description": "Number of QTYPE = AAAA queries received"
+              "item_title": "response",
+              "item_description": "Request statistics",
+              "item_default": {
+                "truncated": 0,
+                "edns0": 0,
+                "tsig": 0,
+                "sig0": 0
+              },
+              "map_item_spec": [
+                {
+                  "item_name": "truncated",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "truncated",
+                  "item_description": "Number of truncated responses sent"
+                },
+                {
+                  "item_name": "edns0",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "edns0",
+                  "item_description": "Number of responses with EDNS0"
+                },
+                {
+                  "item_name": "tsig",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "tsig",
+                  "item_description": "Number of responses with TSIG"
+                },
+                {
+                  "item_name": "sig0",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "sig0",
+                  "item_description": "Number of responses with SIG(0); currently not implemented in BIND 10"
+                }
+              ]
             },
             {
-              "item_name": "qtype.loc",
+              "item_name": "qrysuccess",
               "item_type": "integer",
               "item_optional": false,
               "item_default": 0,
-              "item_title": "qtype.loc",
-              "item_description": "Number of QTYPE = LOC queries received"
+              "item_title": "qrysuccess",
+              "item_description": "Number of queries resulted in rcode = NOERROR and answer RR >= 1"
             },
             {
-              "item_name": "qtype.nxt",
+              "item_name": "qryauthans",
               "item_type": "integer",
               "item_optional": false,
               "item_default": 0,
-              "item_title": "qtype.nxt",
-              "item_description": "Number of QTYPE = NXT queries received"
+              "item_title": "qryauthans",
+              "item_description": "Number of queries resulted in authoritative answer"
             },
             {
-              "item_name": "qtype.eid",
+              "item_name": "qrynoauthans",
               "item_type": "integer",
               "item_optional": false,
               "item_default": 0,
-              "item_title": "qtype.eid",
-              "item_description": "Number of QTYPE = EID queries received"
+              "item_title": "qrynoauthans",
+              "item_description": "Number of queries resulted in non-authoritative answer"
             },
             {
-              "item_name": "qtype.nimloc",
+              "item_name": "qryreferral",
               "item_type": "integer",
               "item_optional": false,
               "item_default": 0,
-              "item_title": "qtype.nimloc",
-              "item_description": "Number of QTYPE = NIMLOC queries received"
+              "item_title": "qryreferral",
+              "item_description": "Number of queries resulted in referral answer"
             },
             {
-              "item_name": "qtype.srv",
+              "item_name": "qrynxrrset",
               "item_type": "integer",
               "item_optional": false,
               "item_default": 0,
-              "item_title": "qtype.srv",
-              "item_description": "Number of QTYPE = SRV queries received"
+              "item_title": "qrynxrrset",
+              "item_description": "Number of queries resulted in NOERROR but answer RR == 0"
             },
             {
-              "item_name": "qtype.atma",
+              "item_name": "authqryrej",
               "item_type": "integer",
               "item_optional": false,
               "item_default": 0,
-              "item_title": "qtype.atma",
-              "item_description": "Number of QTYPE = ATMA queries received"
+              "item_title": "authqryrej",
+              "item_description": "Number of authoritative queries rejected"
             },
             {
-              "item_name": "qtype.naptr",
-              "item_type": "integer",
+              "item_name": "rcode",
+              "item_type": "map",
               "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.naptr",
-              "item_description": "Number of QTYPE = NAPTR queries received"
-            },
-            {
-              "item_name": "qtype.kx",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.kx",
-              "item_description": "Number of QTYPE = KX queries received"
-            },
-            {
-              "item_name": "qtype.cert",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.cert",
-              "item_description": "Number of QTYPE = CERT queries received"
-            },
-            {
-              "item_name": "qtype.a6",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.a6",
-              "item_description": "Number of QTYPE = A6 queries received"
-            },
-            {
-              "item_name": "qtype.dname",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.dname",
-              "item_description": "Number of QTYPE = DNAME queries received"
-            },
-            {
-              "item_name": "qtype.sink",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.sink",
-              "item_description": "Number of QTYPE = SINK queries received"
-            },
-            {
-              "item_name": "qtype.opt",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.opt",
-              "item_description": "Number of QTYPE = OPT queries received"
-            },
-            {
-              "item_name": "qtype.apl",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.apl",
-              "item_description": "Number of QTYPE = APL queries received"
-            },
-            {
-              "item_name": "qtype.ds",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.ds",
-              "item_description": "Number of QTYPE = DS queries received"
-            },
-            {
-              "item_name": "qtype.sshfp",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.sshfp",
-              "item_description": "Number of QTYPE = SSHFP queries received"
-            },
-            {
-              "item_name": "qtype.ipseckey",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.ipseckey",
-              "item_description": "Number of QTYPE = IPSECKEY queries received"
-            },
-            {
-              "item_name": "qtype.rrsig",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.rrsig",
-              "item_description": "Number of QTYPE = RRSIG queries received"
-            },
-            {
-              "item_name": "qtype.nsec",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.nsec",
-              "item_description": "Number of QTYPE = NSEC queries received"
-            },
-            {
-              "item_name": "qtype.dnskey",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.dnskey",
-              "item_description": "Number of QTYPE = DNSKEY queries received"
-            },
-            {
-              "item_name": "qtype.dhcid",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.dhcid",
-              "item_description": "Number of QTYPE = DHCID queries received"
-            },
-            {
-              "item_name": "qtype.nsec3",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.nsec3",
-              "item_description": "Number of QTYPE = NSEC3 queries received"
-            },
-            {
-              "item_name": "qtype.nsec3param",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.nsec3param",
-              "item_description": "Number of QTYPE = NSEC3PARAM queries received"
-            },
-            {
-              "item_name": "qtype.hip",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.hip",
-              "item_description": "Number of QTYPE = HIP queries received"
-            },
-            {
-              "item_name": "qtype.ninfo",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.ninfo",
-              "item_description": "Number of QTYPE = NINFO queries received"
-            },
-            {
-              "item_name": "qtype.rkey",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.rkey",
-              "item_description": "Number of QTYPE = RKEY queries received"
-            },
-            {
-              "item_name": "qtype.talink",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.talink",
-              "item_description": "Number of QTYPE = TALINK queries received"
-            },
-            {
-              "item_name": "qtype.spf",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.spf",
-              "item_description": "Number of QTYPE = SPF queries received"
-            },
-            {
-              "item_name": "qtype.uinfo",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.uinfo",
-              "item_description": "Number of QTYPE = UINFO queries received"
-            },
-            {
-              "item_name": "qtype.uid",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.uid",
-              "item_description": "Number of QTYPE = UID queries received"
-            },
-            {
-              "item_name": "qtype.gid",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.gid",
-              "item_description": "Number of QTYPE = GID queries received"
-            },
-            {
-              "item_name": "qtype.unspec",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.unspec",
-              "item_description": "Number of QTYPE = UNSPEC queries received"
-            },
-            {
-              "item_name": "qtype.tkey",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.tkey",
-              "item_description": "Number of QTYPE = TKEY queries received"
-            },
-            {
-              "item_name": "qtype.tsig",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.tsig",
-              "item_description": "Number of QTYPE = TSIG queries received"
-            },
-            {
-              "item_name": "qtype.ixfr",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.ixfr",
-              "item_description": "Number of QTYPE = IXFR queries received"
-            },
-            {
-              "item_name": "qtype.axfr",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.axfr",
-              "item_description": "Number of QTYPE = AXFR queries received"
-            },
-            {
-              "item_name": "qtype.mailb",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.mailb",
-              "item_description": "Number of QTYPE = MAILB queries received"
-            },
-            {
-              "item_name": "qtype.maila",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.maila",
-              "item_description": "Number of QTYPE = MAILA queries received"
-            },
-            {
-              "item_name": "qtype.uri",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.uri",
-              "item_description": "Number of QTYPE = URI queries received"
-            },
-            {
-              "item_name": "qtype.caa",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.caa",
-              "item_description": "Number of QTYPE = CAA queries received"
-            },
-            {
-              "item_name": "qtype.ta",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.ta",
-              "item_description": "Number of QTYPE = TA queries received"
-            },
-            {
-              "item_name": "qtype.dlv",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.dlv",
-              "item_description": "Number of QTYPE = DLV queries received"
-            },
-            {
-              "item_name": "qtype.other",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qtype.other",
-              "item_description": "Number of queries in other QTYPE received"
-            },
-            {
-              "item_name": "response",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "response",
-              "item_description": "Number of responses sent"
-            },
-            {
-              "item_name": "response.truncated",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "response.truncated",
-              "item_description": "Number of truncated responses sent"
-            },
-            {
-              "item_name": "response.edns0",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "response.edns0",
-              "item_description": "Number of responses with EDNS0"
-            },
-            {
-              "item_name": "response.tsig",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "response.tsig",
-              "item_description": "Number of responses with TSIG"
-            },
-            {
-              "item_name": "response.sig0",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "response.sig0",
-              "item_description": "Number of responses with SIG(0); currently not implemented in BIND 10"
-            },
-            {
-              "item_name": "qrysuccess",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qrysuccess",
-              "item_description": "Number of queries resulted in rcode = NOERROR and answer RR >= 1"
-            },
-            {
-              "item_name": "qryauthans",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qryauthans",
-              "item_description": "Number of queries resulted in authoritative answer"
-            },
-            {
-              "item_name": "qrynoauthans",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qrynoauthans",
-              "item_description": "Number of queries resulted in non-authoritative answer"
-            },
-            {
-              "item_name": "qryreferral",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qryreferral",
-              "item_description": "Number of queries resulted in referral answer"
-            },
-            {
-              "item_name": "qrynxrrset",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "qrynxrrset",
-              "item_description": "Number of queries resulted in NOERROR but answer RR == 0"
-            },
-            {
-              "item_name": "authqryrej",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "authqryrej",
-              "item_description": "Number of authoritative queries rejected"
-            },
-            {
-              "item_name": "rcode.noerror",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.noerror",
-              "item_description": "Number of queries resulted in RCODE = 0 (NoError)"
-            },
-            {
-              "item_name": "rcode.formerr",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.formerr",
-              "item_description": "Number of queries resulted in RCODE = 1 (FormErr)"
-            },
-            {
-              "item_name": "rcode.servfail",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.servfail",
-              "item_description": "Number of queries resulted in RCODE = 2 (ServFail)"
-            },
-            {
-              "item_name": "rcode.nxdomain",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.nxdomain",
-              "item_description": "Number of queries resulted in RCODE = 3 (NXDomain)"
-            },
-            {
-              "item_name": "rcode.notimp",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.notimp",
-              "item_description": "Number of queries resulted in RCODE = 4 (NotImp)"
-            },
-            {
-              "item_name": "rcode.refused",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.refused",
-              "item_description": "Number of queries resulted in RCODE = 5 (Refused)"
-            },
-            {
-              "item_name": "rcode.yxdomain",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.yxdomain",
-              "item_description": "Number of queries resulted in RCODE = 6 (YXDomain)"
-            },
-            {
-              "item_name": "rcode.yxrrset",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.yxrrset",
-              "item_description": "Number of queries resulted in RCODE = 7 (YXRRSet)"
-            },
-            {
-              "item_name": "rcode.nxrrset",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.nxrrset",
-              "item_description": "Number of queries resulted in RCODE = 8 (NXRRSet)"
-            },
-            {
-              "item_name": "rcode.notauth",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.notauth",
-              "item_description": "Number of queries resulted in RCODE = 9 (NotAuth)"
-            },
-            {
-              "item_name": "rcode.notzone",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.notzone",
-              "item_description": "Number of queries resulted in RCODE = 10 (NotZone)"
-            },
-            {
-              "item_name": "rcode.badsigvers",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.badsigvers",
-              "item_description": "Number of queries resulted in RCODE = 16 (BADVERS, BADSIG)"
-            },
-            {
-              "item_name": "rcode.badkey",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.badkey",
-              "item_description": "Number of queries resulted in RCODE = 17 (BADKEY)"
-            },
-            {
-              "item_name": "rcode.badtime",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.badtime",
-              "item_description": "Number of queries resulted in RCODE = 18 (BADTIME)"
-            },
-            {
-              "item_name": "rcode.badmode",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.badmode",
-              "item_description": "Number of queries resulted in RCODE = 19 (BADMODE)"
-            },
-            {
-              "item_name": "rcode.badname",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.badname",
-              "item_description": "Number of queries resulted in RCODE = 20 (BADNAME)"
-            },
-            {
-              "item_name": "rcode.badalg",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.badalg",
-              "item_description": "Number of queries resulted in RCODE = 21 (BADALG)"
-            },
-            {
-              "item_name": "rcode.badtrunc",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.badtrunc",
-              "item_description": "Number of queries resulted in RCODE = 22 (BADTRUNC)"
-            },
-            {
-              "item_name": "rcode.other",
-              "item_type": "integer",
-              "item_optional": false,
-              "item_default": 0,
-              "item_title": "rcode.other",
-              "item_description": "Number of queries resulted in other RCODEs"
+              "item_title": "rcode",
+              "item_description": "Rcode statistics",
+              "item_default": {
+                "noerror": 0,
+                "formerr": 0,
+                "servfail": 0,
+                "nxdomain": 0,
+                "notimp": 0,
+                "refused": 0,
+                "yxdomain": 0,
+                "yxrrset": 0,
+                "nxrrset": 0,
+                "notauth": 0,
+                "notzone": 0,
+                "badsigvers": 0,
+                "badkey": 0,
+                "badtime": 0,
+                "badmode": 0,
+                "badname": 0,
+                "badalg": 0,
+                "badtrunc": 0,
+                "other": 0
+              },
+              "map_item_spec": [
+                {
+                  "item_name": "noerror",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "noerror",
+                  "item_description": "Number of queries resulted in RCODE = 0 (NoError)"
+                },
+                {
+                  "item_name": "formerr",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "formerr",
+                  "item_description": "Number of queries resulted in RCODE = 1 (FormErr)"
+                },
+                {
+                  "item_name": "servfail",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "servfail",
+                  "item_description": "Number of queries resulted in RCODE = 2 (ServFail)"
+                },
+                {
+                  "item_name": "nxdomain",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "nxdomain",
+                  "item_description": "Number of queries resulted in RCODE = 3 (NXDomain)"
+                },
+                {
+                  "item_name": "notimp",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "notimp",
+                  "item_description": "Number of queries resulted in RCODE = 4 (NotImp)"
+                },
+                {
+                  "item_name": "refused",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "refused",
+                  "item_description": "Number of queries resulted in RCODE = 5 (Refused)"
+                },
+                {
+                  "item_name": "yxdomain",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "yxdomain",
+                  "item_description": "Number of queries resulted in RCODE = 6 (YXDomain)"
+                },
+                {
+                  "item_name": "yxrrset",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "yxrrset",
+                  "item_description": "Number of queries resulted in RCODE = 7 (YXRRSet)"
+                },
+                {
+                  "item_name": "nxrrset",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "nxrrset",
+                  "item_description": "Number of queries resulted in RCODE = 8 (NXRRSet)"
+                },
+                {
+                  "item_name": "notauth",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "notauth",
+                  "item_description": "Number of queries resulted in RCODE = 9 (NotAuth)"
+                },
+                {
+                  "item_name": "notzone",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "notzone",
+                  "item_description": "Number of queries resulted in RCODE = 10 (NotZone)"
+                },
+                {
+                  "item_name": "badsigvers",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "badsigvers",
+                  "item_description": "Number of queries resulted in RCODE = 16 (BADVERS, BADSIG)"
+                },
+                {
+                  "item_name": "badkey",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "badkey",
+                  "item_description": "Number of queries resulted in RCODE = 17 (BADKEY)"
+                },
+                {
+                  "item_name": "badtime",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "badtime",
+                  "item_description": "Number of queries resulted in RCODE = 18 (BADTIME)"
+                },
+                {
+                  "item_name": "badmode",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "badmode",
+                  "item_description": "Number of queries resulted in RCODE = 19 (BADMODE)"
+                },
+                {
+                  "item_name": "badname",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "badname",
+                  "item_description": "Number of queries resulted in RCODE = 20 (BADNAME)"
+                },
+                {
+                  "item_name": "badalg",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "badalg",
+                  "item_description": "Number of queries resulted in RCODE = 21 (BADALG)"
+                },
+                {
+                  "item_name": "badtrunc",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "badtrunc",
+                  "item_description": "Number of queries resulted in RCODE = 22 (BADTRUNC)"
+                },
+                {
+                  "item_name": "other",
+                  "item_type": "integer",
+                  "item_optional": false,
+                  "item_default": 0,
+                  "item_title": "other",
+                  "item_description": "Number of queries resulted in other RCODEs"
+                }
+              ]
             }
           ]
-	}
+        }
       }
     ]
   }
diff --git a/src/bin/auth/statistics.cc b/src/bin/auth/statistics.cc
index 89c9d08..069be74 100644
--- a/src/bin/auth/statistics.cc
+++ b/src/bin/auth/statistics.cc
@@ -42,16 +42,23 @@ using namespace isc::statistics;
 namespace {
 
 void
-fillNodes(const Counter& counter, const char* const nodename[],
-          const size_t size,
+fillNodes(const Counter& counter, const struct CounterTypeTree type_tree[],
           isc::auth::statistics::Counters::ItemTreeType& trees)
 {
     using namespace isc::data;
 
-    for (size_t i = 0; i < size; ++i) {
-        trees->set (nodename[i],
-                    Element::create(static_cast<long int>(counter.get(i)))
-                    );
+    for (int i = 0; type_tree[i].name != NULL; ++i) {
+        if (type_tree[i].sub_tree != NULL) {
+            isc::auth::statistics::Counters::ItemTreeType sub_tree =
+                Element::createMap();
+            trees->set(type_tree[i].name, sub_tree);
+            fillNodes(counter, type_tree[i].sub_tree, sub_tree);
+        } else {
+            trees->set(type_tree[i].name,
+                       Element::create(static_cast<long int>(
+                           counter.get(type_tree[i].counter_id)))
+                       );
+        }
     }
 }
 
@@ -63,9 +70,7 @@ namespace statistics {
 
 Counters::Counters() :
     // size of server_qr_counter_, zone_qr_counters_: QR_COUNTER_TYPES
-    // size of server_socket_counter_: SOCKET_COUNTER_TYPES
     server_qr_counter_(QR_COUNTER_TYPES),
-    socket_counter_(SOCKET_COUNTER_TYPES),
     zone_qr_counters_(QR_COUNTER_TYPES)
 {}
 
@@ -231,8 +236,7 @@ Counters::get() const {
     item_tree->set("zones", zones);
 
     Counters::ItemTreeType server = Element::createMap();
-    fillNodes(server_qr_counter_, QRCounterItemName, QR_COUNTER_TYPES,
-              server);
+    fillNodes(server_qr_counter_, QRCounterTree, server);
     zones->set("_SERVER_", server);
 
     return (item_tree);
diff --git a/src/bin/auth/statistics.h b/src/bin/auth/statistics.h
index 7de4813..59fb932 100644
--- a/src/bin/auth/statistics.h
+++ b/src/bin/auth/statistics.h
@@ -206,8 +206,6 @@ class Counters : boost::noncopyable {
 private:
     // counter for query/response
     isc::statistics::Counter server_qr_counter_;
-    // counter for socket
-    isc::statistics::Counter socket_counter_;
     // set of counters for zones
     isc::statistics::CounterDictionary zone_qr_counters_;
     void incRequest(const QRAttributes& qrattrs,
diff --git a/src/bin/auth/statistics_items.h b/src/bin/auth/statistics_items.h
index 9404576..eb5d249 100644
--- a/src/bin/auth/statistics_items.h
+++ b/src/bin/auth/statistics_items.h
@@ -20,105 +20,10 @@
 
 namespace {
 
-// enum for socket statistics
-enum SocketCounterType {
-    // Socket statistics
-    SOCKET_IPV4_UDP_BINDFAIL,        ///< IPv4 UDP sockets bind failures
-    SOCKET_IPV4_UDP_CLOSE,           ///< IPv4 UDP sockets closed
-    SOCKET_IPV4_UDP_CONN,            ///< IPv4 UDP connections established successfully
-    SOCKET_IPV4_UDP_CONNFAIL,        ///< IPv4 UDP sockets connection failures
-    SOCKET_IPV4_UDP_OPEN,            ///< IPv4 UDP sockets opened successfully
-    SOCKET_IPV4_UDP_OPENFAIL,        ///< IPv4 UDP sockets open failures
-    SOCKET_IPV4_UDP_RECVERR,         ///< IPv4 UDP sockets receive errors
-    SOCKET_IPV4_UDP_SENDERR,         ///< IPv4 UDP sockets send errors
-    SOCKET_IPV4_TCP_ACCEPT,          ///< IPv4 TCP incoming connections successfully accepted
-    SOCKET_IPV4_TCP_ACCEPTFAIL,      ///< IPv4 TCP incoming accept failures
-    SOCKET_IPV4_TCP_BINDFAIL,        ///< IPv4 TCP sockets bind failures
-    SOCKET_IPV4_TCP_CLOSE,           ///< IPv4 TCP sockets closed
-    SOCKET_IPV4_TCP_CONN,            ///< IPv4 TCP connections established successfully
-    SOCKET_IPV4_TCP_CONNFAIL,        ///< IPv4 TCP sockets connection failures
-    SOCKET_IPV4_TCP_OPEN,            ///< IPv4 TCP sockets opened successfully
-    SOCKET_IPV4_TCP_OPENFAIL,        ///< IPv4 TCP sockets open failures
-    SOCKET_IPV4_TCP_RECVERR,         ///< IPv4 TCP sockets receive errors
-    SOCKET_IPV4_TCP_SENDERR,         ///< IPv4 TCP sockets send errors
-    SOCKET_IPV6_UDP_BINDFAIL,        ///< IPv6 UDP sockets bind failures
-    SOCKET_IPV6_UDP_CLOSE,           ///< IPv6 UDP sockets closed
-    SOCKET_IPV6_UDP_CONN,            ///< IPv6 UDP connections established successfully
-    SOCKET_IPV6_UDP_CONNFAIL,        ///< IPv6 UDP sockets connection failures
-    SOCKET_IPV6_UDP_OPEN,            ///< IPv6 UDP sockets opened successfully
-    SOCKET_IPV6_UDP_OPENFAIL,        ///< IPv6 UDP sockets open failures
-    SOCKET_IPV6_UDP_RECVERR,         ///< IPv6 UDP sockets receive errors
-    SOCKET_IPV6_UDP_SENDERR,         ///< IPv6 UDP sockets send errors
-    SOCKET_IPV6_TCP_ACCEPT,          ///< IPv6 TCP incoming connections successfully accepted
-    SOCKET_IPV6_TCP_ACCEPTFAIL,      ///< IPv6 TCP incoming accept failures
-    SOCKET_IPV6_TCP_BINDFAIL,        ///< IPv6 TCP sockets bind failures
-    SOCKET_IPV6_TCP_CLOSE,           ///< IPv6 TCP sockets closed
-    SOCKET_IPV6_TCP_CONN,            ///< IPv6 TCP connections established successfully
-    SOCKET_IPV6_TCP_CONNFAIL,        ///< IPv6 TCP sockets connection failures
-    SOCKET_IPV6_TCP_OPEN,            ///< IPv6 TCP sockets opened successfully
-    SOCKET_IPV6_TCP_OPENFAIL,        ///< IPv6 TCP sockets open failures
-    SOCKET_IPV6_TCP_RECVERR,         ///< IPv6 TCP sockets receive errors
-    SOCKET_IPV6_TCP_SENDERR,         ///< IPv6 TCP sockets send errors
-    SOCKET_UNIXDOMAIN_ACCEPT,        ///< Unix Domain sockets incoming connections successfully accepted
-    SOCKET_UNIXDOMAIN_ACCEPTFAIL,    ///< Unix Domain sockets incoming accept failures
-    SOCKET_UNIXDOMAIN_BINDFAIL,      ///< Unix Domain sockets bind failures
-    SOCKET_UNIXDOMAIN_CLOSE,         ///< Unix Domain sockets closed
-    SOCKET_UNIXDOMAIN_CONN,          ///< Unix Domain connections established successfully
-    SOCKET_UNIXDOMAIN_CONNFAIL,      ///< Unix Domain sockets connection failures
-    SOCKET_UNIXDOMAIN_OPEN,          ///< Unix Domain sockets opened successfully
-    SOCKET_UNIXDOMAIN_OPENFAIL,      ///< Unix Domain sockets open failures
-    SOCKET_UNIXDOMAIN_RECVERR,       ///< Unix Domain sockets receive errors
-    SOCKET_UNIXDOMAIN_SENDERR,       ///< Unix Domain sockets send errors
-    SOCKET_COUNTER_TYPES             ///< The number of defined counters
-};
-// item names for socket statistics
-const char* const SocketCounterItemName[SOCKET_COUNTER_TYPES] = {
-    "ipv4.udp.bindfail",
-    "ipv4.udp.close",
-    "ipv4.udp.conn",
-    "ipv4.udp.connfail",
-    "ipv4.udp.open",
-    "ipv4.udp.openfail",
-    "ipv4.udp.recverr",
-    "ipv4.udp.senderr",
-    "ipv4.tcp.accept",
-    "ipv4.tcp.acceptfail",
-    "ipv4.tcp.bindfail",
-    "ipv4.tcp.close",
-    "ipv4.tcp.conn",
-    "ipv4.tcp.connfail",
-    "ipv4.tcp.open",
-    "ipv4.tcp.openfail",
-    "ipv4.tcp.recverr",
-    "ipv4.tcp.senderr",
-    "ipv6.udp.bindfail",
-    "ipv6.udp.close",
-    "ipv6.udp.conn",
-    "ipv6.udp.connfail",
-    "ipv6.udp.open",
-    "ipv6.udp.openfail",
-    "ipv6.udp.recverr",
-    "ipv6.udp.senderr",
-    "ipv6.tcp.accept",
-    "ipv6.tcp.acceptfail",
-    "ipv6.tcp.bindfail",
-    "ipv6.tcp.close",
-    "ipv6.tcp.conn",
-    "ipv6.tcp.connfail",
-    "ipv6.tcp.open",
-    "ipv6.tcp.openfail",
-    "ipv6.tcp.recverr",
-    "ipv6.tcp.senderr",
-    "unixdomain.accept",
-    "unixdomain.acceptfail",
-    "unixdomain.bindfail",
-    "unixdomain.close",
-    "unixdomain.conn",
-    "unixdomain.connfail",
-    "unixdomain.open",
-    "unixdomain.openfail",
-    "unixdomain.recverr",
-    "unixdomain.senderr"
+struct CounterTypeTree {
+    const char* const name;
+    const struct CounterTypeTree* const sub_tree;
+    const int counter_id;
 };
 
 // enum for query/response counters
@@ -248,125 +153,147 @@ enum QRCounterType {
     // End of counter types
     QR_COUNTER_TYPES  ///< The number of defined counters
 };
+
 // item names for query/response counters
-const char* const QRCounterItemName[QR_COUNTER_TYPES] = {
-    "request.v4",
-    "request.v6",
-    "request.edns0",
-    "request.badednsver",
-    "request.tsig",
-    "request.sig0",
-    "request.badsig",
-    "request.udp",
-    "request.tcp",
-    "request.dnssec_ok",
-    "opcode.query",
-    "opcode.iquery",
-    "opcode.status",
-    "opcode.notify",
-    "opcode.update",
-    "opcode.other",
-    "qtype.a",
-    "qtype.ns",
-    "qtype.md",
-    "qtype.mf",
-    "qtype.cname",
-    "qtype.soa",
-    "qtype.mb",
-    "qtype.mg",
-    "qtype.mr",
-    "qtype.null",
-    "qtype.wks",
-    "qtype.ptr",
-    "qtype.hinfo",
-    "qtype.minfo",
-    "qtype.mx",
-    "qtype.txt",
-    "qtype.rp",
-    "qtype.afsdb",
-    "qtype.x25",
-    "qtype.isdn",
-    "qtype.rt",
-    "qtype.nsap",
-    "qtype.nsap-ptr",
-    "qtype.sig",
-    "qtype.key",
-    "qtype.px",
-    "qtype.gpos",
-    "qtype.aaaa",
-    "qtype.loc",
-    "qtype.nxt",
-    "qtype.eid",
-    "qtype.nimloc",
-    "qtype.srv",
-    "qtype.atma",
-    "qtype.naptr",
-    "qtype.kx",
-    "qtype.cert",
-    "qtype.a6",
-    "qtype.dname",
-    "qtype.sink",
-    "qtype.opt",
-    "qtype.apl",
-    "qtype.ds",
-    "qtype.sshfp",
-    "qtype.ipseckey",
-    "qtype.rrsig",
-    "qtype.nsec",
-    "qtype.dnskey",
-    "qtype.dhcid",
-    "qtype.nsec3",
-    "qtype.nsec3param",
-    "qtype.hip",
-    "qtype.ninfo",
-    "qtype.rkey",
-    "qtype.talink",
-    "qtype.spf",
-    "qtype.uinfo",
-    "qtype.uid",
-    "qtype.gid",
-    "qtype.unspec",
-    "qtype.tkey",
-    "qtype.tsig",
-    "qtype.ixfr",
-    "qtype.axfr",
-    "qtype.mailb",
-    "qtype.maila",
-    "qtype.uri",
-    "qtype.caa",
-    "qtype.ta",
-    "qtype.dlv",
-    "qtype.other",
-    "response",
-    "response.truncated",
-    "response.edns0",
-    "response.tsig",
-    "response.sig0",
-    "qrysuccess",
-    "qryauthans",
-    "qrynoauthans",
-    "qryreferral",
-    "qrynxrrset",
-    "authqryrej",
-    "rcode.noerror",
-    "rcode.formerr",
-    "rcode.servfail",
-    "rcode.nxdomain",
-    "rcode.notimp",
-    "rcode.refused",
-    "rcode.yxdomain",
-    "rcode.yxrrset",
-    "rcode.nxrrset",
-    "rcode.notauth",
-    "rcode.notzone",
-    "rcode.badsigvers",
-    "rcode.badkey",
-    "rcode.badtime",
-    "rcode.badmode",
-    "rcode.badname",
-    "rcode.badalg",
-    "rcode.badtrunc",
-    "rcode.other"
+const struct CounterTypeTree QRCounterRequest[] = {
+    { "v4",         NULL,   QR_REQUEST_IPV4       },
+    { "v6",         NULL,   QR_REQUEST_IPV6       },
+    { "edns0",      NULL,   QR_REQUEST_EDNS0      },
+    { "badednsver", NULL,   QR_REQUEST_BADEDNSVER },
+    { "tsig",       NULL,   QR_REQUEST_TSIG       },
+    { "sig0",       NULL,   QR_REQUEST_SIG0       },
+    { "badsig",     NULL,   QR_REQUEST_BADSIG     },
+    { "udp",        NULL,   QR_REQUEST_UDP        },
+    { "tcp",        NULL,   QR_REQUEST_TCP        },
+    { "dnssec_ok",  NULL,   QR_REQUEST_DNSSEC_OK  },
+    { NULL,         NULL,   -1                    }
+};
+const struct CounterTypeTree QRCounterOpcode[] = {
+    { "query",  NULL,   QR_OPCODE_QUERY  },
+    { "iquery", NULL,   QR_OPCODE_IQUERY },
+    { "status", NULL,   QR_OPCODE_STATUS },
+    { "notify", NULL,   QR_OPCODE_NOTIFY },
+    { "update", NULL,   QR_OPCODE_UPDATE },
+    { "other",  NULL,   QR_OPCODE_OTHER  },
+    { NULL,     NULL,   -1               }
+};
+const struct CounterTypeTree QRCounterQtype[] = {
+    { "a",          NULL,   QR_QTYPE_A,         },
+    { "ns",         NULL,   QR_QTYPE_NS         },
+    { "md",         NULL,   QR_QTYPE_MD         },
+    { "mf",         NULL,   QR_QTYPE_MF         },
+    { "cname",      NULL,   QR_QTYPE_CNAME      },
+    { "soa",        NULL,   QR_QTYPE_SOA        },
+    { "mb",         NULL,   QR_QTYPE_MB         },
+    { "mg",         NULL,   QR_QTYPE_MG         },
+    { "mr",         NULL,   QR_QTYPE_MR         },
+    { "null",       NULL,   QR_QTYPE_NULL       },
+    { "wks",        NULL,   QR_QTYPE_WKS        },
+    { "ptr",        NULL,   QR_QTYPE_PTR        },
+    { "hinfo",      NULL,   QR_QTYPE_HINFO      },
+    { "minfo",      NULL,   QR_QTYPE_MINFO      },
+    { "mx",         NULL,   QR_QTYPE_MX         },
+    { "txt",        NULL,   QR_QTYPE_TXT        },
+    { "rp",         NULL,   QR_QTYPE_RP         },
+    { "afsdb",      NULL,   QR_QTYPE_AFSDB      },
+    { "x25",        NULL,   QR_QTYPE_X25        },
+    { "isdn",       NULL,   QR_QTYPE_ISDN       },
+    { "rt",         NULL,   QR_QTYPE_RT         },
+    { "nsap",       NULL,   QR_QTYPE_NSAP       },
+    { "nsap-ptr",   NULL,   QR_QTYPE_NSAP_PTR   },
+    { "sig",        NULL,   QR_QTYPE_SIG        },
+    { "key",        NULL,   QR_QTYPE_KEY        },
+    { "px",         NULL,   QR_QTYPE_PX         },
+    { "gpos",       NULL,   QR_QTYPE_GPOS       },
+    { "aaaa",       NULL,   QR_QTYPE_AAAA       },
+    { "loc",        NULL,   QR_QTYPE_LOC        },
+    { "nxt",        NULL,   QR_QTYPE_NXT        },
+    { "eid",        NULL,   QR_QTYPE_EID        },
+    { "nimloc",     NULL,   QR_QTYPE_NIMLOC     },
+    { "srv",        NULL,   QR_QTYPE_SRV        },
+    { "atma",       NULL,   QR_QTYPE_ATMA       },
+    { "naptr",      NULL,   QR_QTYPE_NAPTR      },
+    { "kx",         NULL,   QR_QTYPE_KX         },
+    { "cert",       NULL,   QR_QTYPE_CERT       },
+    { "a6",         NULL,   QR_QTYPE_A6         },
+    { "dname",      NULL,   QR_QTYPE_DNAME      },
+    { "sink",       NULL,   QR_QTYPE_SINK       },
+    { "opt",        NULL,   QR_QTYPE_OPT        },
+    { "apl",        NULL,   QR_QTYPE_APL        },
+    { "ds",         NULL,   QR_QTYPE_DS         },
+    { "sshfp",      NULL,   QR_QTYPE_SSHFP      },
+    { "ipseckey",   NULL,   QR_QTYPE_IPSECKEY   },
+    { "rrsig",      NULL,   QR_QTYPE_RRSIG      },
+    { "nsec",       NULL,   QR_QTYPE_NSEC       },
+    { "dnskey",     NULL,   QR_QTYPE_DNSKEY     },
+    { "dhcid",      NULL,   QR_QTYPE_DHCID      },
+    { "nsec3",      NULL,   QR_QTYPE_NSEC3      },
+    { "nsec3param", NULL,   QR_QTYPE_NSEC3PARAM },
+    { "hip",        NULL,   QR_QTYPE_HIP        },
+    { "ninfo",      NULL,   QR_QTYPE_NINFO      },
+    { "rkey",       NULL,   QR_QTYPE_RKEY       },
+    { "talink",     NULL,   QR_QTYPE_TALINK     },
+    { "spf",        NULL,   QR_QTYPE_SPF        },
+    { "uinfo",      NULL,   QR_QTYPE_UINFO      },
+    { "uid",        NULL,   QR_QTYPE_UID        },
+    { "gid",        NULL,   QR_QTYPE_GID        },
+    { "unspec",     NULL,   QR_QTYPE_UNSPEC     },
+    { "tkey",       NULL,   QR_QTYPE_TKEY       },
+    { "tsig",       NULL,   QR_QTYPE_TSIG       },
+    { "ixfr",       NULL,   QR_QTYPE_IXFR       },
+    { "axfr",       NULL,   QR_QTYPE_AXFR       },
+    { "mailb",      NULL,   QR_QTYPE_MAILB      },
+    { "maila",      NULL,   QR_QTYPE_MAILA      },
+    { "uri",        NULL,   QR_QTYPE_URI        },
+    { "caa",        NULL,   QR_QTYPE_CAA        },
+    { "ta",         NULL,   QR_QTYPE_TA         },
+    { "dlv",        NULL,   QR_QTYPE_DLV        },
+    { "other",      NULL,   QR_QTYPE_OTHER      },
+    { NULL,         NULL,   -1                  }
+};
+const struct CounterTypeTree QRCounterResponse[] = {
+    { "truncated",  NULL,   QR_RESPONSE_TRUNCATED },
+    { "edns0",      NULL,   QR_RESPONSE_EDNS0     },
+    { "tsig",       NULL,   QR_RESPONSE_TSIG      },
+    { "sig0",       NULL,   QR_RESPONSE_SIG0      },
+    { NULL,         NULL,   -1                    }
+};
+const struct CounterTypeTree QRCounterRcode[] = {
+    { "noerror",    NULL,   QR_RCODE_NOERROR    },
+    { "formerr",    NULL,   QR_RCODE_FORMERR    },
+    { "servfail",   NULL,   QR_RCODE_SERVFAIL   },
+    { "nxdomain",   NULL,   QR_RCODE_NXDOMAIN   },
+    { "notimp",     NULL,   QR_RCODE_NOTIMP     },
+    { "refused",    NULL,   QR_RCODE_REFUSED    },
+    { "yxdomain",   NULL,   QR_RCODE_YXDOMAIN   },
+    { "yxrrset",    NULL,   QR_RCODE_YXRRSET    },
+    { "nxrrset",    NULL,   QR_RCODE_NXRRSET    },
+    { "notauth",    NULL,   QR_RCODE_NOTAUTH    },
+    { "notzone",    NULL,   QR_RCODE_NOTZONE    },
+    { "badsigvers", NULL,   QR_RCODE_BADSIGVERS },
+    { "badkey",     NULL,   QR_RCODE_BADKEY     },
+    { "badtime",    NULL,   QR_RCODE_BADTIME    },
+    { "badmode",    NULL,   QR_RCODE_BADMODE    },
+    { "badname",    NULL,   QR_RCODE_BADNAME    },
+    { "badalg",     NULL,   QR_RCODE_BADALG     },
+    { "badtrunc",   NULL,   QR_RCODE_BADTRUNC   },
+    { "other",      NULL,   QR_RCODE_OTHER      },
+    { NULL,         NULL,   -1 }
+};
+const struct CounterTypeTree QRCounterTree[] = {
+    { "request",        QRCounterRequest,   -1              },
+    { "opcode",         QRCounterOpcode,    -1              },
+    { "qtype",          QRCounterQtype,     -1              },
+    { "responses",      NULL,               QR_RESPONSE     },
+    { "response",       QRCounterResponse,  -1              },
+    { "qrysuccess",     NULL,               QR_QRYSUCCESS   },
+    { "qryauthans",     NULL,               QR_QRYAUTHANS   },
+    { "qrynoauthans",   NULL,               QR_QRYNOAUTHANS },
+    { "qryreferral",    NULL,               QR_QRYREFERRAL  },
+    { "qrynxrrset",     NULL,               QR_QRYNXRRSET   },
+    { "authqryrej",     NULL,               QR_QRYREJECT    },
+    { "rcode",          QRCounterRcode,     -1              },
+    { NULL,             NULL,               -1              }
 };
 
 const int QROpCodeToQRCounterType[16] = {
diff --git a/src/bin/auth/tests/auth_srv_unittest.cc b/src/bin/auth/tests/auth_srv_unittest.cc
index fe2f012..98e1743 100644
--- a/src/bin/auth/tests/auth_srv_unittest.cc
+++ b/src/bin/auth/tests/auth_srv_unittest.cc
@@ -132,46 +132,40 @@ protected:
     // Checks whether all Rcode counters are set to zero
     void checkAllRcodeCountersZero() const {
         const std::map<std::string, ConstElementPtr>
-            stats_map(server.getStatistics()->mapValue());
+            stats_map(server.getStatistics()->get("zones")->get("_SERVER_")->
+                      get("rcode")->mapValue());
 
-        const std::string rcode_prefix("rcode.");
         for (std::map<std::string, ConstElementPtr>::const_iterator
                  i = stats_map.begin(), e = stats_map.end();
              i != e;
              ++i)
         {
-            if (i->first.compare(0, rcode_prefix.size(), rcode_prefix) == 0) {
-                checkRcodeCounter(i->first, i->second->intValue(), 0);
-            }
+            checkRcodeCounter(i->first, i->second->intValue(), 0);
         }
     }
 
     // Checks whether all Rcode counters are set to zero except the given
     // rcode (it is checked to be set to 'value')
     void checkAllRcodeCountersZeroExcept(const Rcode& rcode, int value) const {
-        std::string target_rcode_name = rcode.toText();
+        // rcode 16 is registered as both BADVERS and BADSIG
+        std::string target_rcode_name =
+            rcode.toText() == "BADVERS" ? "BADSIGVERS" : rcode.toText();
         std::transform(target_rcode_name.begin(), target_rcode_name.end(),
                        target_rcode_name.begin(), ::tolower);
-        // rcode 16 is registered as both BADVERS and BADSIG
-        if (target_rcode_name == "badvers") {
-            target_rcode_name = "badsigvers";
-        }
 
         const std::map<std::string, ConstElementPtr>
-            stats_map(server.getStatistics()->mapValue());
+            stats_map(server.getStatistics()->get("zones")->get("_SERVER_")->
+                      get("rcode")->mapValue());
 
-        const std::string rcode_prefix("rcode.");
         for (std::map<std::string, ConstElementPtr>::const_iterator
                  i = stats_map.begin(), e = stats_map.end();
              i != e;
              ++i)
         {
-            if (i->first.compare(0, rcode_prefix.size(), rcode_prefix) == 0) {
-                if (i->first.compare(rcode_prefix + target_rcode_name) == 0) {
-                    checkRcodeCounter(i->first, i->second->intValue(), value);
-                } else {
-                    checkRcodeCounter(i->first, i->second->intValue(), 0);
-                }
+            if (i->first.compare(target_rcode_name) == 0) {
+                checkRcodeCounter(i->first, i->second->intValue(), value);
+            } else {
+                checkRcodeCounter(i->first, i->second->intValue(), 0);
             }
         }
     }
@@ -441,7 +435,7 @@ TEST_F(AuthSrvTest, TSIGCheckFirst) {
     // TSIG should have failed, and so the per opcode counter shouldn't be
     // incremented.
     ConstElementPtr stats = server.getStatistics();
-    expectCounterItem(stats->get("zones")->get("_SERVER_"), "opcode.other", 0);
+    expectCounterItem(stats->get("zones")->get("_SERVER_")->get("opcode"), "other", 0);
 
     checkAllRcodeCountersZeroExcept(Rcode::NOTAUTH(), 1);
 }
@@ -1072,10 +1066,10 @@ TEST_F(AuthSrvTest, queryCounterUDPNormal) {
     // The counters should be initialized to 0.
     ConstElementPtr stats_init = server.getStatistics()->
         get("zones")->get("_SERVER_");
-    expectCounterItem(stats_init, "request.udp", 0);
-    expectCounterItem(stats_init, "request.tcp", 0);
-    expectCounterItem(stats_init, "opcode.query", 0);
-    expectCounterItem(stats_init, "rcode.refused", 0);
+    expectCounterItem(stats_init->get("request"), "udp", 0);
+    expectCounterItem(stats_init->get("request"), "tcp", 0);
+    expectCounterItem(stats_init->get("opcode"), "query", 0);
+    expectCounterItem(stats_init->get("rcode"), "refused", 0);
     // Create UDP message and process.
     UnitTestUtil::createRequestMessage(request_message, Opcode::QUERY(),
                                        default_qid, Name("example.com"),
@@ -1089,10 +1083,10 @@ TEST_F(AuthSrvTest, queryCounterUDPNormal) {
     //   request.tcp
     ConstElementPtr stats_after = server.getStatistics()->
         get("zones")->get("_SERVER_");
-    expectCounterItem(stats_after, "request.udp", 1);
-    expectCounterItem(stats_after, "request.tcp", 0);
-    expectCounterItem(stats_after, "opcode.query", 1);
-    expectCounterItem(stats_after, "rcode.refused", 1);
+    expectCounterItem(stats_after->get("request"), "udp", 1);
+    expectCounterItem(stats_after->get("request"), "tcp", 0);
+    expectCounterItem(stats_after->get("opcode"), "query", 1);
+    expectCounterItem(stats_after->get("rcode"), "refused", 1);
 }
 
 // Submit TCP normal query and check query counter
@@ -1100,10 +1094,10 @@ TEST_F(AuthSrvTest, queryCounterTCPNormal) {
     // The counters should be initialized to 0.
     ConstElementPtr stats_init = server.getStatistics()->
         get("zones")->get("_SERVER_");
-    expectCounterItem(stats_init, "request.udp", 0);
-    expectCounterItem(stats_init, "request.tcp", 0);
-    expectCounterItem(stats_init, "opcode.query", 0);
-    expectCounterItem(stats_init, "rcode.refused", 0);
+    expectCounterItem(stats_init->get("request"), "udp", 0);
+    expectCounterItem(stats_init->get("request"), "tcp", 0);
+    expectCounterItem(stats_init->get("opcode"), "query", 0);
+    expectCounterItem(stats_init->get("rcode"), "refused", 0);
     // Create TCP message and process.
     UnitTestUtil::createRequestMessage(request_message, Opcode::QUERY(),
                                        default_qid, Name("example.com"),
@@ -1117,10 +1111,10 @@ TEST_F(AuthSrvTest, queryCounterTCPNormal) {
     //   request.udp
     ConstElementPtr stats_after = server.getStatistics()->
         get("zones")->get("_SERVER_");
-    expectCounterItem(stats_after, "request.udp", 0);
-    expectCounterItem(stats_after, "request.tcp", 1);
-    expectCounterItem(stats_after, "opcode.query", 1);
-    expectCounterItem(stats_after, "rcode.refused", 1);
+    expectCounterItem(stats_after->get("request"), "udp", 0);
+    expectCounterItem(stats_after->get("request"), "tcp", 1);
+    expectCounterItem(stats_after->get("opcode"), "query", 1);
+    expectCounterItem(stats_after->get("rcode"), "refused", 1);
 }
 
 // Submit TCP AXFR query and check query counter
@@ -1128,9 +1122,9 @@ TEST_F(AuthSrvTest, queryCounterTCPAXFR) {
     // The counters should be initialized to 0.
     ConstElementPtr stats_init = server.getStatistics()->
         get("zones")->get("_SERVER_");
-    expectCounterItem(stats_init, "request.udp", 0);
-    expectCounterItem(stats_init, "request.tcp", 0);
-    expectCounterItem(stats_init, "opcode.query", 0);
+    expectCounterItem(stats_init->get("request"), "udp", 0);
+    expectCounterItem(stats_init->get("request"), "tcp", 0);
+    expectCounterItem(stats_init->get("opcode"), "query", 0);
     UnitTestUtil::createRequestMessage(request_message, opcode, default_qid,
                          Name("example.com"), RRClass::IN(), RRType::AXFR());
     createRequestPacket(request_message, IPPROTO_TCP);
@@ -1146,9 +1140,9 @@ TEST_F(AuthSrvTest, queryCounterTCPAXFR) {
     //   request.udp, response
     ConstElementPtr stats_after = server.getStatistics()->
         get("zones")->get("_SERVER_");
-    expectCounterItem(stats_after, "request.udp", 0);
-    expectCounterItem(stats_after, "request.tcp", 1);
-    expectCounterItem(stats_after, "opcode.query", 1);
+    expectCounterItem(stats_after->get("request"), "udp", 0);
+    expectCounterItem(stats_after->get("request"), "tcp", 1);
+    expectCounterItem(stats_after->get("opcode"), "query", 1);
 }
 
 // Submit TCP IXFR query and check query counter
@@ -1156,9 +1150,9 @@ TEST_F(AuthSrvTest, queryCounterTCPIXFR) {
     // The counters should be initialized to 0.
     ConstElementPtr stats_init = server.getStatistics()->
         get("zones")->get("_SERVER_");
-    expectCounterItem(stats_init, "request.udp", 0);
-    expectCounterItem(stats_init, "request.tcp", 0);
-    expectCounterItem(stats_init, "opcode.query", 0);
+    expectCounterItem(stats_init->get("request"), "udp", 0);
+    expectCounterItem(stats_init->get("request"), "tcp", 0);
+    expectCounterItem(stats_init->get("opcode"), "query", 0);
     UnitTestUtil::createRequestMessage(request_message, opcode, default_qid,
                          Name("example.com"), RRClass::IN(), RRType::IXFR());
     createRequestPacket(request_message, IPPROTO_TCP);
@@ -1174,19 +1168,31 @@ TEST_F(AuthSrvTest, queryCounterTCPIXFR) {
     //   request.udp, response
     ConstElementPtr stats_after = server.getStatistics()->
         get("zones")->get("_SERVER_");
-    expectCounterItem(stats_after, "request.udp", 0);
-    expectCounterItem(stats_after, "request.tcp", 1);
-    expectCounterItem(stats_after, "opcode.query", 1);
+    expectCounterItem(stats_after->get("request"), "udp", 0);
+    expectCounterItem(stats_after->get("request"), "tcp", 1);
+    expectCounterItem(stats_after->get("opcode"), "query", 1);
 }
 
 TEST_F(AuthSrvTest, queryCounterOpcodes) {
-    // Check for 0..2, 3(=other), 4..5
-    // The counter should be initialized to 0.
-    for (int i = 0; i < 6; ++i) {
-        // The counter should be initialized to 0.
+    int other_expected = 0;
+    for (int i = 0; i < 16; ++i) {
+        std::string item_name;
+        int expected;
+        if (QROpCodeToQRCounterType[i] == QR_OPCODE_OTHER) {
+            item_name = "OTHER";
+            other_expected += i + 1;
+            expected = other_expected;
+        } else {
+            item_name = Opcode(i).toText();
+            expected = i + 1;
+        }
+        std::transform(item_name.begin(), item_name.end(), item_name.begin(),
+                       ::tolower);
+
+        // The counter should be initialized to expected value.
         expectCounterItem(server.getStatistics()->
-                              get("zones")->get("_SERVER_"),
-                          QRCounterItemName[QROpCodeToQRCounterType[i]], 0);
+                              get("zones")->get("_SERVER_")->get("opcode"),
+                          item_name, expected - (i + 1));
 
         // For each possible opcode, create a request message and send it
         UnitTestUtil::createRequestMessage(request_message, Opcode(i),
@@ -1205,41 +1211,8 @@ TEST_F(AuthSrvTest, queryCounterOpcodes) {
 
         // Confirm the counter.
         expectCounterItem(server.getStatistics()->
-                              get("zones")->get("_SERVER_"),
-                          QRCounterItemName[QROpCodeToQRCounterType[i]],
-                          i + 1);
-    }
-    // Check for 6..15
-    // they are treated as the 'other' opcode
-    // the 'other' opcode counter is 4 at this point
-    int expected = 4;
-    for (int i = 6; i < 16; ++i) {
-        // The counter should be initialized to 0.
-        expectCounterItem(server.getStatistics()->
-                              get("zones")->get("_SERVER_"),
-                          QRCounterItemName[QROpCodeToQRCounterType[i]],
-                          expected);
-
-        // For each possible opcode, create a request message and send it
-        UnitTestUtil::createRequestMessage(request_message, Opcode(i),
-                                           default_qid, Name("example.com"),
-                                           RRClass::IN(), RRType::NS());
-        createRequestPacket(request_message, IPPROTO_UDP);
-
-        // "send" the request once
-        parse_message->clear(Message::PARSE);
-        server.processMessage(*io_message, *parse_message,
-                              *response_obuffer,
-                              &dnsserv);
-
-        // the 'other' opcode counter should be incremented
-        ++expected;
-
-        // Confirm the counter.
-        expectCounterItem(server.getStatistics()->
-                              get("zones")->get("_SERVER_"),
-                          QRCounterItemName[QROpCodeToQRCounterType[i]],
-                          expected);
+                              get("zones")->get("_SERVER_")->get("opcode"),
+                          item_name, expected);
     }
 }
 
diff --git a/src/bin/auth/tests/statistics_unittest.cc b/src/bin/auth/tests/statistics_unittest.cc
index 907e02d..ab84307 100644
--- a/src/bin/auth/tests/statistics_unittest.cc
+++ b/src/bin/auth/tests/statistics_unittest.cc
@@ -53,12 +53,35 @@ protected:
     Counters counters;
 };
 
+void
+flatten(std::map<std::string, int> &flat_map, const std::string &prefix,
+        const isc::data::ConstElementPtr map_element) {
+    std::map<std::string, ConstElementPtr> map = map_element->mapValue();
+    for (std::map<std::string, ConstElementPtr>::const_iterator
+            i = map.begin(), e = map.end();
+            i != e;
+            ++i)
+    {
+        switch (i->second->getType()) {
+            case isc::data::Element::map:
+                flatten(flat_map, i->first + ".", i->second);
+                break;
+            case isc::data::Element::integer:
+                flat_map[prefix + i->first] = i->second->intValue();
+                break;
+            default:
+                EXPECT_FALSE("Element Parse Error");
+        }
+    }
+}
+
 bool
 checkCountersAllZeroExcept(const isc::data::ConstElementPtr counters,
                            const std::set<std::string>& except_for) {
-    std::map<std::string, ConstElementPtr> stats_map = counters->mapValue();
+    std::map<std::string, int> stats_map;
+    flatten(stats_map, "", counters);
 
-    for (std::map<std::string, ConstElementPtr>::const_iterator
+    for (std::map<std::string, int>::const_iterator
             i = stats_map.begin(), e = stats_map.end();
             i != e;
             ++i)
@@ -67,9 +90,9 @@ checkCountersAllZeroExcept(const isc::data::ConstElementPtr counters,
         if (except_for.count(i->first) != 0) {
             expect = 1;
         }
-        EXPECT_EQ(expect, i->second->intValue()) << "Expected counter "
+        EXPECT_EQ(expect, i->second) << "Expected counter "
             << i->first << " = " << expect << ", actual: "
-            << i->second->intValue();
+            << i->second;
     }
 
     return false;
@@ -104,7 +127,7 @@ TEST_F(CountersTest, incrementNormalQuery) {
     expect_nonzero.insert("request.udp");
     expect_nonzero.insert("request.edns0");
     expect_nonzero.insert("request.dnssec_ok");
-    expect_nonzero.insert("response");
+    expect_nonzero.insert("responses");
     expect_nonzero.insert("qrynoauthans");
     expect_nonzero.insert("rcode.refused");
     expect_nonzero.insert("authqryrej");
@@ -112,40 +135,21 @@ TEST_F(CountersTest, incrementNormalQuery) {
                                expect_nonzero);
 }
 
-TEST_F(CountersTest, getStatistics) {
-    std::map<std::string, ConstElementPtr> stats_map =
-        counters.get()->get("zones")->get("_SERVER_")->mapValue();
-    for (std::map<std::string, ConstElementPtr>::const_iterator
-            i = stats_map.begin(), e = stats_map.end();
-            i != e;
-            ++i)
-    {
-        // item type check
-        EXPECT_NO_THROW(i->second->intValue())
-            << "Item " << i->first << " is not IntElement";
+int
+countTreeElements(const struct CounterTypeTree* tree) {
+    int count = 0;
+    for (int i = 0; tree[i].name != NULL; ++i) {
+        if (tree[i].sub_tree == NULL) {
+            ++count;
+        } else {
+            count += countTreeElements(tree[i].sub_tree);
+        }
     }
+    return count;
 }
 
 TEST(StatisticsItemsTest, QRItemNamesCheck) {
-    // check the number of elements in the array
-    EXPECT_EQ(sizeof(QRCounterItemName) / sizeof(QRCounterItemName[0]),
-              QR_COUNTER_TYPES);
-    // check the name of the first enum element
-    EXPECT_EQ(QRCounterItemName[QR_REQUEST_IPV4], "request.v4");
-    // check the name of the last enum element
-    EXPECT_EQ(QRCounterItemName[QR_RCODE_OTHER], "rcode.other");
-}
-
-TEST(StatisticsItemsTest, SocketItemNamesCheck) {
-    // check the number of elements in the array
-    EXPECT_EQ(sizeof(SocketCounterItemName) / sizeof(SocketCounterItemName[0]),
-              SOCKET_COUNTER_TYPES);
-    // check the name of the first enum element
-    EXPECT_EQ(SocketCounterItemName[SOCKET_IPV4_UDP_BINDFAIL],
-              "ipv4.udp.bindfail");
-    // check the name of the last enum element
-    EXPECT_EQ(SocketCounterItemName[SOCKET_UNIXDOMAIN_SENDERR],
-              "unixdomain.senderr");
+    EXPECT_EQ(QR_COUNTER_TYPES, countTreeElements(QRCounterTree));
 }
 
 }
diff --git a/tests/system/bindctl/tests.sh b/tests/system/bindctl/tests.sh
index edb83c2..848c09a 100755
--- a/tests/system/bindctl/tests.sh
+++ b/tests/system/bindctl/tests.sh
@@ -25,9 +25,9 @@ status=0
 n=0
 
 # TODO: consider consistency with statistics definition in auth.spec
-cnt_name1="\<request\.tcp\>"
-cnt_name2="\<request\.udp\>"
-cnt_name3="\<opcode\.query\>"
+cnt_name1="\<tcp\>"
+cnt_name2="\<udp\>"
+cnt_name3="\<query\>"
 cnt_value1=0
 cnt_value2=0
 cnt_value3=0



More information about the bind10-changes mailing list