|
24 | 24 | # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
25 | 25 | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | 26 |
|
27 | | -import datetime |
28 | 27 | import errno |
29 | 28 | import socket |
| 29 | +import time |
30 | 30 | from statistics import stdev |
31 | 31 | from typing import Optional, List, Any |
32 | 32 |
|
@@ -131,6 +131,7 @@ def ping(qname: str, server: str, dst_port: int, rdtype: str, timeout: float, co |
131 | 131 | query = dns.message.make_query(fqdn, rdtype, dns.rdataclass.IN, use_edns=False, want_dnssec=False) |
132 | 132 |
|
133 | 133 | try: |
| 134 | + stime = time.perf_counter() |
134 | 135 | if proto == PROTO_UDP: |
135 | 136 | response = dns.query.udp(query, server, timeout=timeout, port=dst_port, source=src_ip, |
136 | 137 | ignore_unexpected=True) |
@@ -181,13 +182,9 @@ def ping(qname: str, server: str, dst_port: int, rdtype: str, timeout: float, co |
181 | 182 | err(f"ERROR: {e}") |
182 | 183 | break |
183 | 184 | else: |
184 | | - # convert time to milliseconds, considering that |
185 | | - # time property is retruned differently by query.https |
186 | | - # dns library returns float for most protocols but timedelta for HTTPS |
187 | | - if isinstance(response.time, datetime.timedelta): |
188 | | - elapsed = response.time.total_seconds() * 1000 |
189 | | - else: |
190 | | - elapsed = response.time * 1000 |
| 185 | + etime = time.perf_counter() |
| 186 | + # Use perf_counter() measurements for accurate wall-clock time |
| 187 | + elapsed = (etime - stime) * 1000 # Convert seconds to milliseconds |
191 | 188 | response_times.append(elapsed) |
192 | 189 | if response: |
193 | 190 | retval.response = response |
|
0 commit comments