xmlTextWriterPtr writer;
int xmlrc;
#endif
-#ifdef HAVE_JSON
+#ifdef HAVE_JSON_C
json_object *zoneobj, *obj;
#endif
#endif
break;
case isc_statsformat_json:
-#ifdef HAVE_JSON
+#ifdef HAVE_JSON_C
zoneobj = (json_object *) dumparg->arg;
obj = json_object_new_int64(val);
if (obj == NULL) {
isc_stats_t *gluecachestats;
dns_stats_t *rcvquerystats;
dns_stats_t *dnssecsignstats;
+ dns_stats_t *dnssecrefreshstats;
uint64_t nsstat_values[ns_statscounter_max];
uint64_t gluecachestats_values[dns_gluecachestatscounter_max];
TRY0(xmlTextWriterStartElement(writer,
ISC_XMLCHAR "counters"));
TRY0(xmlTextWriterWriteAttribute(writer,
- ISC_XMLCHAR "type",
- ISC_XMLCHAR "gluecache"));
+ ISC_XMLCHAR "type",
+ ISC_XMLCHAR "gluecache"));
result = dump_counters(gluecachestats,
isc_statsformat_xml,
TRY0(xmlTextWriterStartElement(writer,
ISC_XMLCHAR "counters"));
TRY0(xmlTextWriterWriteAttribute(writer,
- ISC_XMLCHAR "type",
- ISC_XMLCHAR "dnssec"));
+ ISC_XMLCHAR "type",
+ ISC_XMLCHAR "dnssec-sign"));
dumparg.result = ISC_R_SUCCESS;
dns_dnssecsignstats_dump(dnssecsignstats,
goto error;
}
- /* counters type="dnssec"*/
+ /* counters type="dnssec-sign"*/
+ TRY0(xmlTextWriterEndElement(writer));
+ }
+
+ dnssecrefreshstats = dns_zone_getdnssecrefreshstats(zone);
+ if (dnssecrefreshstats != NULL) {
+ TRY0(xmlTextWriterStartElement(writer,
+ ISC_XMLCHAR "counters"));
+ TRY0(xmlTextWriterWriteAttribute(writer,
+ ISC_XMLCHAR "type",
+ ISC_XMLCHAR "dnssec-refresh"));
+
+ dumparg.result = ISC_R_SUCCESS;
+ dns_dnssecsignstats_dump(dnssecrefreshstats,
+ dnssecsignstat_dump,
+ &dumparg, 0);
+ if(dumparg.result != ISC_R_SUCCESS) {
+ goto error;
+ }
+
+ /* counters type="dnssec-refresh"*/
TRY0(xmlTextWriterEndElement(writer));
}
}
isc_stats_t *gluecachestats;
dns_stats_t *rcvquerystats;
dns_stats_t *dnssecsignstats;
+ dns_stats_t *dnssecrefreshstats;
uint64_t nsstat_values[ns_statscounter_max];
uint64_t gluecachestats_values[dns_gluecachestatscounter_max];
goto error;
}
- if (json_object_get_object(counters)->count != 0)
+ if (json_object_get_object(counters)->count != 0) {
json_object_object_add(zoneobj,
- "dnssec", counters);
- else
+ "dnssec-sign",
+ counters);
+ } else {
json_object_put(counters);
+ }
+ }
+
+ dnssecrefreshstats = dns_zone_getdnssecrefreshstats(zone);
+ if (dnssecrefreshstats != NULL) {
+ stats_dumparg_t dumparg;
+ json_object *counters = json_object_new_object();
+ CHECKMEM(counters);
+
+ dumparg.type = isc_statsformat_json;
+ dumparg.arg = counters;
+ dumparg.result = ISC_R_SUCCESS;
+ dns_dnssecsignstats_dump(dnssecrefreshstats,
+ dnssecsignstat_dump,
+ &dumparg, 0);
+ if (dumparg.result != ISC_R_SUCCESS) {
+ json_object_put(counters);
+ goto error;
+ }
+
+ if (json_object_get_object(counters)->count != 0) {
+ json_object_object_add(zoneobj,
+ "dnssec-refresh",
+ counters);
+ } else {
+ json_object_put(counters);
+ }
}
}
isc_stats_t *zoneqrystats;
dns_stats_t *rcvquerystats;
dns_stats_t *dnssecsignstats;
+ dns_stats_t *dnssecrefreshstats;
dns_zonestat_level_t statlevel = dns_zonestat_none;
int seconds;
dns_zone_t *mayberaw = (raw != NULL) ? raw : zone;
zoneqrystats = NULL;
rcvquerystats = NULL;
dnssecsignstats = NULL;
+ dnssecrefreshstats = NULL;
if (statlevel == dns_zonestat_full) {
RETERR(isc_stats_create(mctx, &zoneqrystats,
ns_statscounter_max));
RETERR(dns_rdatatypestats_create(mctx, &rcvquerystats));
RETERR(dns_dnssecsignstats_create(mctx, &dnssecsignstats));
+ RETERR(dns_dnssecsignstats_create(mctx, &dnssecrefreshstats));
}
dns_zone_setrequeststats(zone, zoneqrystats);
dns_zone_setrcvquerystats(zone, rcvquerystats);
dns_zone_setdnssecsignstats(zone, dnssecsignstats);
+ dns_zone_setdnssecrefreshstats(zone, dnssecrefreshstats);
if (zoneqrystats != NULL)
isc_stats_detach(&zoneqrystats);
dns_stats_detach(&dnssecsignstats);
}
+ if(dnssecrefreshstats != NULL) {
+ dns_stats_detach(&dnssecrefreshstats);
+ }
+
/*
* Configure master functionality. This applies
* to primary masters (type "master") and slaves
# Test dnssec sign statistics.
zone="dnssec"
-stat_prefix="dnskey sign operations"
+sign_prefix="dnssec-sign operations"
+refresh_prefix="dnssec-refresh operations"
ksk_id=`cat ns2/$zone.ksk.id`
zsk_id=`cat ns2/$zone.zsk.id`
# the SOA RRset before a competing RRset. This happens here and so the
# SOA RRset is updated and resigned twice at startup, that explains the
# additional zsk sign operation (11 instead of 10).
-echo "${stat_prefix} ${zsk_id}: 11" > zones.expect
-echo "${stat_prefix} ${ksk_id}: 1" >> zones.expect
+echo "${refresh_prefix} ${zsk_id}: 11" > zones.expect
+echo "${refresh_prefix} ${ksk_id}: 1" >> zones.expect
+echo "${sign_prefix} ${zsk_id}: 11" >> zones.expect
+echo "${sign_prefix} ${ksk_id}: 1" >> zones.expect
cat zones.expect | sort > zones.expect.$n
rm -f zones.expect
# Fetch and check the dnssec sign statistics.
echo send
) | $NSUPDATE
# This should trigger the resign of SOA, TXT and NSEC (+3 zsk).
-echo "${stat_prefix} ${zsk_id}: 14" > zones.expect
-echo "${stat_prefix} ${ksk_id}: 1" >> zones.expect
+echo "${refresh_prefix} ${zsk_id}: 11" > zones.expect
+echo "${refresh_prefix} ${ksk_id}: 1" >> zones.expect
+echo "${sign_prefix} ${zsk_id}: 14" >> zones.expect
+echo "${sign_prefix} ${ksk_id}: 1" >> zones.expect
cat zones.expect | sort > zones.expect.$n
rm -f zones.expect
# Fetch and check the dnssec sign statistics.
# 3. Test sign operations of KSK.
ret=0
+echo_i "fetch zone stats data after updating DNSKEY RRset ($n)"
# Add a standby DNSKEY, this triggers resigning the DNSKEY RRset.
zsk=$("$KEYGEN" -K ns2 -q -a "$DEFAULT_ALGORITHM" -b "$DEFAULT_BITS" "$zone")
$SETTIME -K ns2 -P now -A never $zsk.key > /dev/null
loadkeys_on 2 $zone || ret=1
# This should trigger the resign of SOA (+1 zsk) and DNSKEY (+1 ksk).
-echo "${stat_prefix} ${zsk_id}: 15" > zones.expect
-echo "${stat_prefix} ${ksk_id}: 2" >> zones.expect
+echo "${refresh_prefix} ${zsk_id}: 12" > zones.expect
+echo "${refresh_prefix} ${ksk_id}: 2" >> zones.expect
+echo "${sign_prefix} ${zsk_id}: 15" >> zones.expect
+echo "${sign_prefix} ${ksk_id}: 2" >> zones.expect
cat zones.expect | sort > zones.expect.$n
rm -f zones.expect
# Fetch and check the dnssec sign statistics.
my $ref = decode_json($text);
-my $dnssecsign = $ref->{views}->{_default}->{zones}[0]->{"dnssec"};
-my $type = "dnskey sign operations ";
+my $dnssecsign = $ref->{views}->{_default}->{zones}[0]->{"dnssec-sign"};
+my $type = "dnssec-sign operations ";
foreach $key (keys %{$dnssecsign}) {
print $type . $key . ": ". $dnssecsign->{$key} ."\n";
}
+my $dnssecrefresh = $ref->{views}->{_default}->{zones}[0]->{"dnssec-refresh"};
+my $type = "dnssec-refresh operations ";
+foreach $key (keys %{$dnssecrefresh}) {
+ print $type . $key . ": ". $dnssecrefresh->{$key} ."\n";
+}
my $type = $group->{type};
- if ($type eq "dnssec") {
- my $prefix = "dnskey sign operations ";
+ if ($type eq "dnssec-sign" || $type eq "dnssec-refresh") {
if (exists $group->{counter}->{name}) {
- print $prefix . $group->{counter}->{name} . ": " . $group->{counter}->{content} . "\n";
+ print $type . " operations " . $group->{counter}->{name} . ": " . $group->{counter}->{content} . "\n";
} else {
foreach $key (keys %{$group->{counter}}) {
- print $prefix . $key . ": ". $group->{counter}->{$key}->{content} ."\n";
+ print $type . " operations " . $key . ": ". $group->{counter}->{$key}->{content} ."\n";
}
}
}
void
dns_zone_setdnssecsignstats(dns_zone_t *zone, dns_stats_t *stats);
+
+void
+dns_zone_setdnssecrefreshstats(dns_zone_t *zone, dns_stats_t *stats);
/*%<
* Set additional statistics sets to zone. These are attached to the zone
* but are not counted in the zone module; only the caller updates the
dns_stats_t *
dns_zone_getdnssecsignstats(dns_zone_t *zone);
+
+dns_stats_t *
+dns_zone_getdnssecrefreshstats(dns_zone_t *zone);
/*%<
* Get the additional statistics for zone, if one is installed.
*
dns_zone_getclass
dns_zone_getdb
dns_zone_getdbtype
+dns_zone_getdnssecrefreshstats
dns_zone_getdnssecsignstats
dns_zone_getexpiretime
dns_zone_getfile
dns_zone_setdb
dns_zone_setdbtype
dns_zone_setdialup
+dns_zone_setdnssecrefreshstats
dns_zone_setdnssecsignstats
dns_zone_setfile
dns_zone_setflag
isc_stats_t *requeststats;
dns_stats_t *rcvquerystats;
dns_stats_t *dnssecsignstats;
+ dns_stats_t *dnssecrefreshstats;
uint32_t notifydelay;
dns_isselffunc_t isself;
void *isselfarg;
zone->requeststats = NULL;
zone->rcvquerystats = NULL;
zone->dnssecsignstats = NULL;
+ zone->dnssecrefreshstats = NULL;
zone->notifydelay = 5;
zone->isself = NULL;
zone->isselfarg = NULL;
if (zone->dnssecsignstats != NULL){
dns_stats_detach(&zone->dnssecsignstats);
}
+ if (zone->dnssecrefreshstats != NULL){
+ dns_stats_detach(&zone->dnssecrefreshstats);
+ }
if (zone->db != NULL) {
zone_detachdb(zone);
}
{
isc_result_t result;
dns_dbnode_t *node = NULL;
- dns_stats_t* dnssecsignstats = dns_zone_getdnssecsignstats(zone);
+ dns_stats_t* dnssecsignstats;
+ dns_stats_t* dnssecrefreshstats;
dns_rdataset_t rdataset;
dns_rdata_t sig_rdata = DNS_RDATA_INIT;
unsigned char data[1024]; /* XXX */
isc_buffer_init(&buffer, data, sizeof(data));
/* Update DNSSEC sign statistics. */
+ dnssecsignstats = dns_zone_getdnssecsignstats(zone);
+ dnssecrefreshstats = dns_zone_getdnssecrefreshstats(zone);
if (dnssecsignstats != NULL) {
- dns_dnssecsignstats_increment(dnssecsignstats,
- dst_key_id(keys[i]));
+ dns_dnssecsignstats_increment(
+ dns_zone_getdnssecsignstats(zone),
+ dst_key_id(keys[i]));
+ }
+ if (dnssecrefreshstats != NULL) {
+ dns_dnssecsignstats_increment(
+ dns_zone_getdnssecrefreshstats(zone),
+ dst_key_id(keys[i]));
}
}
dns_rdatasetiter_t *iterator = NULL;
dns_rdataset_t rdataset;
dns_rdata_t rdata = DNS_RDATA_INIT;
- dns_stats_t* dnssecsignstats = dns_zone_getdnssecsignstats(zone);
+ dns_stats_t* dnssecsignstats;
+ dns_stats_t* dnssecrefreshstats;
isc_buffer_t buffer;
unsigned char data[1024];
dns_rdata_reset(&rdata);
/* Update DNSSEC sign statistics. */
+ dnssecsignstats = dns_zone_getdnssecsignstats(zone);
+ dnssecrefreshstats = dns_zone_getdnssecrefreshstats(zone);
if (dnssecsignstats != NULL) {
- dns_dnssecsignstats_increment(dnssecsignstats,
- dst_key_id(key));
+ dns_dnssecsignstats_increment(
+ dns_zone_getdnssecsignstats(zone),
+ dst_key_id(key));
+ }
+ if (dnssecrefreshstats != NULL) {
+ dns_dnssecsignstats_increment(
+ dns_zone_getdnssecrefreshstats(zone),
+ dst_key_id(key));
}
(*signatures)--;
void
dns_zone_setdnssecsignstats(dns_zone_t *zone, dns_stats_t *stats) {
-
REQUIRE(DNS_ZONE_VALID(zone));
LOCK_ZONE(zone);
UNLOCK_ZONE(zone);
}
+void
+dns_zone_setdnssecrefreshstats(dns_zone_t *zone, dns_stats_t *stats) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ LOCK_ZONE(zone);
+ if (stats != NULL && zone->dnssecrefreshstats == NULL) {
+ dns_stats_attach(stats, &zone->dnssecrefreshstats);
+ }
+ UNLOCK_ZONE(zone);
+}
+
dns_stats_t*
dns_zone_getdnssecsignstats(dns_zone_t *zone) {
REQUIRE(DNS_ZONE_VALID(zone));
+
return (zone->dnssecsignstats);
}
+dns_stats_t*
+dns_zone_getdnssecrefreshstats(dns_zone_t *zone) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ return (zone->dnssecrefreshstats);
+}
+
isc_stats_t *
dns_zone_getrequeststats(dns_zone_t *zone) {
/*