]> granicus.if.org Git - pdns/commitdiff
add delivery time statistics to inflighter
authorBert Hubert <bert.hubert@netherlabs.nl>
Thu, 16 Sep 2010 20:02:02 +0000 (20:02 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Thu, 16 Sep 2010 20:02:02 +0000 (20:02 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1717 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/inflighter.cc
pdns/slavecommunicator.cc

index e5379798838f01cbbf30497c3d7c9fb18acf7cc9..4862107920e69c0f87bebbcb3e2b351b157fd8ec 100644 (file)
@@ -52,7 +52,7 @@ private:
   {
     typename Container::iterator iter;
     typename SenderReceiver::Identifier id;
-    struct timeval ttd;
+    struct timeval sentTime, ttd;
   };
 
   typedef multi_index_container<
@@ -91,7 +91,8 @@ template<typename Container, typename SendReceive> bool Inflighter<Container, Se
       TTDItem ttdi;
       ttdi.iter = d_iter++;
       ttdi.id = d_sr.send(*ttdi.iter);
-      gettimeofday(&ttdi.ttd, 0);
+      gettimeofday(&ttdi.sentTime, 0);
+      ttdi.ttd = ttdi.sentTime;
       ttdi.ttd.tv_sec += d_timeoutSeconds;
       if(d_ttdWatch.count(ttdi.id)) {
 //        cerr<<"DUPLICATE INSERT!"<<endl;
@@ -116,7 +117,10 @@ template<typename Container, typename SendReceive> bool Inflighter<Container, Se
 
         if(ival != d_ttdWatch.end()) { // found something!
           ++processed;
-          d_sr.deliverAnswer(*ival->iter, answer);    // deliver to sender/receiver
+         struct timeval now;
+         gettimeofday(&now, 0);
+         unsigned int usec = 1000000*(now.tv_sec - ival->sentTime.tv_sec) + (now.tv_usec - ival->sentTime.tv_usec);
+          d_sr.deliverAnswer(*ival->iter, answer, usec);    // deliver to sender/receiver
           d_ttdWatch.erase(ival);
           break; // we can send new questions!
         }
index 60b100ef0451213721d3650c938f2b91fe0d171f..b095f887e635395ff90436005289bd2b2aa7b556 100644 (file)
@@ -150,7 +150,7 @@ struct SlaveSenderReceiver
     return 0;
   }
   
-  void deliverAnswer(DomainInfo& i, uint32_t serial)
+  void deliverAnswer(DomainInfo& i, uint32_t serial, uint32_t usec)
   {
     d_serials[i.id]=serial;
   }