* `answers1-10`: counts the number of queries answered within 10 milliseconds
* `answers10-100`: counts the number of queries answered within 100 milliseconds
* `answers100-1000`: counts the number of queries answered within 1 second
+* `auth-answers-slow`: counts the number of queries answered by auths after 1 second (4.0)
+* `auth-answers0-1`: counts the number of queries answered by auths within 1 millisecond (4.0)
+* `auth-answers1-10`: counts the number of queries answered by auths within 10 milliseconds (4.0)
+* `auth-answers10-100`: counts the number of queries answered by auths within 100 milliseconds (4.0)
+* `auth-answers100-1000`: counts the number of queries answered by auths within 1 second (4.0)
* `cache-bytes`: size of the cache in bytes (since 3.3.1)
* `cache-entries`: shows the number of entries in the cache
* `cache-hits`: counts the number of cache hits since starting, this does **not** include hits that got answered from the packet-cache
addGetStat("answers100-1000", &g_stats.answers100_1000);
addGetStat("answers-slow", &g_stats.answersSlow);
+ addGetStat("auth-answers0-1", &g_stats.authAnswers0_1);
+ addGetStat("auth-answers1-10", &g_stats.authAnswers1_10);
+ addGetStat("auth-answers10-100", &g_stats.authAnswers10_100);
+ addGetStat("auth-answers100-1000", &g_stats.authAnswers100_1000);
+ addGetStat("auth-answers-slow", &g_stats.authAnswersSlow);
+
addGetStat("qa-latency", doGetAvgLatencyUsec);
addGetStat("unexpected-packets", &g_stats.unexpectedCount);
addGetStat("case-mismatches", &g_stats.caseMismatchCount);
/*
PowerDNS Versatile Database Driven Nameserver
- Copyright (C) 2003 - 2014 PowerDNS.COM BV
+ Copyright (C) 2003 - 2015 PowerDNS.COM BV
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as published
bool SyncRes::s_noEDNSPing;
bool SyncRes::s_noEDNS;
+void accountAuthLatency(int usec)
+{
+ if(usec < 1000)
+ g_stats.authAnswers0_1++;
+ else if(usec < 10000)
+ g_stats.authAnswers1_10++;
+ else if(usec < 100000)
+ g_stats.authAnswers10_100++;
+ else if(usec < 1000000)
+ g_stats.authAnswers100_1000++;
+ else
+ g_stats.authAnswersSlow++;
+}
+
SyncRes::SyncRes(const struct timeval& now) : d_outqueries(0), d_tcpoutqueries(0), d_throttledqueries(0), d_timeouts(0), d_unreachables(0),
d_totUsec(0), d_now(now),
d_cacheonly(false), d_nocache(false), d_doEDNS0(false), d_lm(s_lm)
throw ImmediateServFailException("Query killed by policy");
d_totUsec += lwr.d_usec;
+ accountAuthLatency(lwr.d_usec);
if(resolveret != 1) {
if(resolveret==0) {
LOG(prefix<<qname.toString()<<": timeout resolving after "<<lwr.d_usec/1000.0<<"msec "<< (doTCP ? "over TCP" : "")<<endl);
uint64_t nxDomains;
uint64_t noErrors;
uint64_t answers0_1, answers1_10, answers10_100, answers100_1000, answersSlow;
+ uint64_t authAnswers0_1, authAnswers1_10, authAnswers10_100, authAnswers100_1000, authAnswersSlow;
double avgLatencyUsec;
uint64_t qcounter; // not increased for unauth packets
uint64_t ipv6qcounter;