From: bert hubert Date: Sat, 27 Feb 2016 18:35:26 +0000 (+0100) Subject: close #3467: dnsdist cache hits not accounted properly in latency stats. Now count... X-Git-Tag: rec-4.0.0-alpha2~49 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=daacd47737ead5de60c6419e0a16af990cca967e;p=pdns close #3467: dnsdist cache hits not accounted properly in latency stats. Now count as '0'. --- diff --git a/pdns/dnsdist.cc b/pdns/dnsdist.cc index 1b1ebb3ad..ae636aa69 100644 --- a/pdns/dnsdist.cc +++ b/pdns/dnsdist.cc @@ -146,6 +146,17 @@ struct DelayedPacket DelayPipe * g_delay = 0; +static void doLatencyAverages(double udiff) +{ + auto doAvg = [](double& var, double n, double weight) { + var = (weight -1) * var/weight + n/weight; + }; + + doAvg(g_stats.latencyAvg100, udiff, 100); + doAvg(g_stats.latencyAvg1000, udiff, 1000); + doAvg(g_stats.latencyAvg10000, udiff, 10000); + doAvg(g_stats.latencyAvg1000000, udiff, 1000000); +} // listens on a dedicated socket, lobs answers from downstream servers to original requestors void* responderThread(std::shared_ptr state) @@ -302,14 +313,7 @@ void* responderThread(std::shared_ptr state) else if(udiff < 1000000) g_stats.latency100_1000++; else g_stats.latencySlow++; - auto doAvg = [](double& var, double n, double weight) { - var = (weight -1) * var/weight + n/weight; - }; - - doAvg(g_stats.latencyAvg100, udiff, 100); - doAvg(g_stats.latencyAvg1000, udiff, 1000); - doAvg(g_stats.latencyAvg10000, udiff, 10000); - doAvg(g_stats.latencyAvg1000000, udiff, 1000000); + doLatencyAverages(udiff); if (ids->origFD == origFD) { #ifdef HAVE_DNSCRYPT @@ -835,6 +839,8 @@ try else sendto(cs->udpFD, cachedResponse, cachedResponseSize, 0, (struct sockaddr*)&remote, remote.getSocklen()); g_stats.cacheHits++; + g_stats.latency0_1++; // we're not going to measure this + doLatencyAverages(0); // same continue; } g_stats.cacheMisses++;