]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth: fix rounding inaccuracy in latency statistics 9786/head
authorKees Monshouwer <mind04@monshouwer.org>
Tue, 24 Nov 2020 19:50:34 +0000 (20:50 +0100)
committermind04 <mind04@monshouwer.org>
Sun, 29 Nov 2020 19:34:12 +0000 (20:34 +0100)
pdns/common_startup.cc
pdns/common_startup.hh

index da3c8e337153e386f30219efe87c24e6bdd674d0..47128e6d3a77d6591a872d75cc4b2a9d9db1000a 100644 (file)
@@ -56,7 +56,7 @@ std::unique_ptr<DNSProxy> DP{nullptr};
 std::unique_ptr<DynListener> dl{nullptr};
 CommunicatorClass Communicator;
 shared_ptr<UDPNameserver> N;
-int avg_latency;
+double avg_latency{0.0};
 unique_ptr<TCPNameserver> TN;
 static vector<DNSDistributor*> g_distributors;
 vector<std::shared_ptr<UDPNameserver> > g_udpReceivers;
@@ -287,7 +287,7 @@ catch(PDNSException& e)
 
 static uint64_t getLatency(const std::string& str) 
 {
-  return avg_latency;
+  return round(avg_latency);
 }
 
 void declareStats(void)
@@ -387,7 +387,7 @@ static void sendout(std::unique_ptr<DNSPacket>& a)
   N->send(*a);
 
   int diff=a->d_dt.udiff();
-  avg_latency=(int)(0.999*avg_latency+0.001*diff);
+  avg_latency=0.999*avg_latency+0.001*diff;
 }
 
 //! The qthread receives questions over the internet via the Nameserver class, and hands them to the Distributor for further processing
@@ -472,7 +472,7 @@ try
         cached.commitD(); // commit d to the packet                        inlined
         NS->send(cached); // answer it then                              inlined
         diff=question.d_dt.udiff();
-        avg_latency=(int)(0.999*avg_latency+0.001*diff); // 'EWMA'
+        avg_latency=0.999*avg_latency+0.001*diff; // 'EWMA'
         continue;
       }
     }
index 45c8045c0c817bcc267bfc483ec131ac0509331f..0515dd31d8d19a61f018d5270d84b7fbe733f288 100644 (file)
@@ -43,7 +43,7 @@ extern std::unique_ptr<DynListener> dl;
 extern CommunicatorClass Communicator;
 extern std::shared_ptr<UDPNameserver> N;
 extern vector<std::shared_ptr<UDPNameserver> > g_udpReceivers;
-extern int avg_latency;
+extern double avg_latency;
 extern std::unique_ptr<TCPNameserver> TN;
 extern ArgvMap & arg( void );
 extern void declareArguments();