From 9c0dcf33ab2ab8729609cca2441d43fb7615b88b Mon Sep 17 00:00:00 2001 From: Christian Herdtweck Date: Tue, 26 May 2015 10:16:39 +0200 Subject: [PATCH] moved time duration measurement of ping from scheduler to pingers --- src/host/pinger.h | 2 +- src/host/pingscheduler.cpp | 9 ++++----- src/host/pingscheduler.h | 3 ++- src/icmp/icmppinger.cpp | 6 ++++-- src/icmp/icmppinger.h | 4 ++-- src/tcp/tcppinger.cpp | 5 +++-- src/tcp/tcppinger.h | 4 ++-- 7 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/host/pinger.h b/src/host/pinger.h index fa3a28e..beb733c 100644 --- a/src/host/pinger.h +++ b/src/host/pinger.h @@ -59,7 +59,7 @@ public: virtual void ping( const boost::asio::ip::address &ip, const uint16_t destination_port, - boost::function ping_done_callback + boost::function ping_done_callback ) = 0; virtual void stop_pinging() = 0; diff --git a/src/host/pingscheduler.cpp b/src/host/pingscheduler.cpp index 706583b..010b8d5 100644 --- a/src/host/pingscheduler.cpp +++ b/src/host/pingscheduler.cpp @@ -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) diff --git a/src/host/pingscheduler.h b/src/host/pingscheduler.h index ad9f63a..34ee755 100644 --- a/src/host/pingscheduler.h +++ b/src/host/pingscheduler.h @@ -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(); diff --git a/src/icmp/icmppinger.cpp b/src/icmp/icmppinger.cpp index 12832d6..b14e1e2 100644 --- a/src/icmp/icmppinger.cpp +++ b/src/icmp/icmppinger.cpp @@ -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 ping_done_callback + function 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() ); } diff --git a/src/icmp/icmppinger.h b/src/icmp/icmppinger.h index e9fb98a..d45c0a9 100644 --- a/src/icmp/icmppinger.h +++ b/src/icmp/icmppinger.h @@ -127,7 +127,7 @@ public: virtual void ping( const boost::asio::ip::address &destination_ip, const uint16_t destination_port, - boost::function ping_done_callback + boost::function 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; }; diff --git a/src/tcp/tcppinger.cpp b/src/tcp/tcppinger.cpp index 8bf6a7a..d583867 100644 --- a/src/tcp/tcppinger.cpp +++ b/src/tcp/tcppinger.cpp @@ -115,7 +115,7 @@ TcpPinger::~TcpPinger() void TcpPinger::ping( const address &destination_ip, const uint16_t destination_port, - function ping_done_callback + function ping_done_callback ) { BOOST_ASSERT( ( 0 < destination_port ) && ( destination_port < numeric_limits::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() diff --git a/src/tcp/tcppinger.h b/src/tcp/tcppinger.h index 05e9586..de9b866 100644 --- a/src/tcp/tcppinger.h +++ b/src/tcp/tcppinger.h @@ -49,7 +49,7 @@ public: virtual void ping( const boost::asio::ip::address &destination_ip, const uint16_t destination_port, - boost::function ping_done_callback + boost::function 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 -- 1.7.1