From 47de343d18e43604b9b03118e17d6a2b2a577eb2 Mon Sep 17 00:00:00 2001 From: Pieter Lexis Date: Fri, 16 Nov 2018 14:10:29 +0100 Subject: [PATCH] ixfrdist: Ensure a domain is registered for stats --- pdns/ixfrdist-stats.hh | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/pdns/ixfrdist-stats.hh b/pdns/ixfrdist-stats.hh index 5201435bc1..4c8b25b846 100644 --- a/pdns/ixfrdist-stats.hh +++ b/pdns/ixfrdist-stats.hh @@ -25,6 +25,7 @@ #include #include "dnsname.hh" +#include "pdnsexception.hh" class ixfrdistStats { public: @@ -35,29 +36,30 @@ class ixfrdistStats { std::string getStats(); void setSOASerial(const DNSName& d, const uint32_t serial) { - domainStats[d].currentSOA = serial; - domainStats[d].haveZone = true; + auto stat = getRegisteredDomain(d); + stat->second.currentSOA = serial; + stat->second.haveZone = true; } void incrementSOAChecks(const DNSName& d, const uint64_t amount = 1) { - domainStats[d].numSOAChecks += amount; + getRegisteredDomain(d)->second.numSOAChecks += amount; } void incrementSOAChecksFailed(const DNSName& d, const uint64_t amount = 1) { - domainStats[d].numSOAChecksFailed += amount; + getRegisteredDomain(d)->second.numSOAChecksFailed += amount; } void incrementSOAinQueries(const DNSName& d, const uint64_t amount = 1) { - domainStats[d].numSOAinQueries += amount; + getRegisteredDomain(d)->second.numSOAinQueries += amount; } void incrementAXFRinQueries(const DNSName& d, const uint64_t amount = 1) { - domainStats[d].numAXFRinQueries += amount; + getRegisteredDomain(d)->second.numAXFRinQueries += amount; } void incrementIXFRinQueries(const DNSName& d, const uint64_t amount = 1) { - domainStats[d].numIXFRinQueries += amount; + getRegisteredDomain(d)->second.numIXFRinQueries += amount; } void incrementAXFRFailures(const DNSName& d, const uint64_t amount = 1) { - domainStats[d].numAXFRFailures += amount; + getRegisteredDomain(d)->second.numAXFRFailures += amount; } void incrementIXFRFailures(const DNSName& d, const uint64_t amount = 1) { - domainStats[d].numIXFRFailures += amount; + getRegisteredDomain(d)->second.numIXFRFailures += amount; } void registerDomain(const DNSName& d) { domainStats[d].haveZone = false; @@ -85,4 +87,12 @@ class ixfrdistStats { std::map domainStats; programStats progStats; + + std::map::iterator getRegisteredDomain(const DNSName& d) { + auto ret = domainStats.find(d); + if (ret == domainStats.end()) { + throw PDNSException("Domain '" + d.toLogString() + "' not defined in the statistics map"); + } + return ret; + }; }; -- 2.47.2