moved time duration measurement of ping from scheduler to pingers
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Tue, 26 May 2015 08:16:39 +0000 (10:16 +0200)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Tue, 26 May 2015 08:16:39 +0000 (10:16 +0200)
src/host/pinger.h
src/host/pingscheduler.cpp
src/host/pingscheduler.h
src/icmp/icmppinger.cpp
src/icmp/icmppinger.h
src/tcp/tcppinger.cpp
src/tcp/tcppinger.h

index fa3a28e..beb733c 100644 (file)
@@ -59,7 +59,7 @@ public:
     virtual void ping(
             const boost::asio::ip::address &ip,
             const uint16_t destination_port,
-            boost::function<void(PingStatus)> ping_done_callback
+            boost::function<void(PingStatus,long)> ping_done_callback
     ) = 0;
 
     virtual void stop_pinging() = 0;
index 706583b..010b8d5 100644 (file)
@@ -230,7 +230,7 @@ void PingScheduler::ping_when_ready()
         // skip the ping and directly call ping_done_handler
         HostAnalyzer.set_resolved_ip_count(1);   // must have been 0 --> failed
              // ping would create failed assumption (nPings > nIPs)
-        ping_done_handler(PingStatus_FailureNoIP);
+        ping_done_handler(PingStatus_FailureNoIP, 0);
         HostAnalyzer.set_resolved_ip_count(0);   // set back
     }
     else
@@ -271,7 +271,8 @@ void delayed_ping( const PingerItem &pinger )
  *   statistics, ping interval and elapsed time;
  *   schedules a call to ping, thereby closing the loop
  */
-void PingScheduler::ping_done_handler( const PingStatus &result )
+void PingScheduler::ping_done_handler( const PingStatus &result,
+                                       const long ping_duration_us )
 {
     PingStatus edited_result = result;
     if (result == PingStatus_SuccessReply && ContinueOnOutdatedIps)
@@ -289,9 +290,7 @@ void PingScheduler::ping_done_handler( const PingStatus &result )
 
     // post-processing
     // can call update_ping_interval only after update_ping_statistics!
-    ptime now = microsec_clock::universal_time();
-    HostAnalyzer.update_ping_statistics( edited_result,
-                                 (now - TimeSentLastPing).total_microseconds());
+    HostAnalyzer.update_ping_statistics( edited_result, ping_duration_us );
 
     // prepare next ping only after all pingers are done
     if (NPingersDone == NPingers)
index ad9f63a..34ee755 100644 (file)
@@ -75,7 +75,8 @@ private:
     //
 
     void ping(const boost::system::error_code &error);
-    void ping_done_handler(const PingStatus &result);
+    void ping_done_handler(const PingStatus &result,
+                           const long ping_duration_us);
     void update_ping_interval();
 
     void init_ping_protocol();
index 12832d6..b14e1e2 100644 (file)
@@ -127,7 +127,7 @@ IcmpPinger::~IcmpPinger()
 void IcmpPinger::ping(
         const address &destination_ip,
         const uint16_t /*destination_port*/, // the ICMP protocol does not use ports
-        function<void(PingStatus)> ping_done_callback
+        function<void(PingStatus,long)> ping_done_callback
 )
 {
     PingDoneCallback = ping_done_callback;
@@ -274,7 +274,9 @@ void IcmpPinger::handle_timeout(const boost::system::error_code& error)
     }
 
     // Call ping-done handler
-    PingDoneCallback( PingerStatus );
+    PingDoneCallback( PingerStatus,
+                     (microsec_clock::universal_time()
+                                             - TimeSent).total_microseconds() );
 }
 
 
index e9fb98a..d45c0a9 100644 (file)
@@ -127,7 +127,7 @@ public:
     virtual void ping(
             const boost::asio::ip::address &destination_ip,
             const uint16_t destination_port,
-            boost::function<void(PingStatus)> ping_done_callback
+            boost::function<void(PingStatus,long)> ping_done_callback
     );
 
     virtual void stop_pinging();
@@ -176,7 +176,7 @@ private:
     /// The status of the pinger
     PingStatus PingerStatus;
     /// Callback to notify when the ping is done (got reply/timeout)
-    boost::function< void(PingStatus) > PingDoneCallback;
+    boost::function< void(PingStatus,long) > PingDoneCallback;
     /// prefix to logging output lines
     std::string LogPrefix;
 };
index 8bf6a7a..d583867 100644 (file)
@@ -115,7 +115,7 @@ TcpPinger::~TcpPinger()
 void TcpPinger::ping(
         const address &destination_ip,
         const uint16_t destination_port,
-        function<void(PingStatus)> ping_done_callback
+        function<void(PingStatus,long)> ping_done_callback
 )
 {
     BOOST_ASSERT( ( 0 < destination_port ) && ( destination_port < numeric_limits<uint16_t>::max() ) );
@@ -252,7 +252,8 @@ void TcpPinger::handle_ping_done()
     }
 
     // Call ping-done handler
-    PingDoneCallback( PingerStatus );
+    PingDoneCallback( PingerStatus,
+           (microsec_clock::universal_time() - TimeSent).total_microseconds() );
 }
 
 void TcpPinger::start_receive()
index 05e9586..de9b866 100644 (file)
@@ -49,7 +49,7 @@ public:
     virtual void ping(
             const boost::asio::ip::address &destination_ip,
             const uint16_t destination_port,
-            boost::function<void(PingStatus)> ping_done_callback
+            boost::function<void(PingStatus,long)> ping_done_callback
     );
 
     virtual void stop_pinging();
@@ -117,7 +117,7 @@ private:
     /// The status of the pinger
     PingStatus PingerStatus;
     /// Callback to notify when the ping is done (got reply/timeout)
-    boost::function< void(PingStatus) > PingDoneCallback;
+    boost::function< void(PingStatus,long) > PingDoneCallback;
 };
 
 #endif // TCP_PINGER_H