nadzoring.dns_lookup.benchmark module

DNS server benchmarking for performance testing and comparison.

nadzoring.dns_lookup.benchmark._benchmark_parallel(servers: list[str], domain: str, record_type: RecordType, queries: int, max_workers: int, progress_callback: Callable[[str, int], None] | None) list[BenchmarkResult][source]

Run server benchmarks concurrently using a thread pool.

Parameters:
  • servers – Server IP addresses to benchmark.

  • domain – Domain to query.

  • record_type – DNS record type.

  • queries – Queries per server.

  • max_workers – Maximum concurrent threads.

  • progress_callback – Optional progress callback.

Returns:

List of benchmark results (unsorted).

nadzoring.dns_lookup.benchmark._benchmark_sequential(servers: list[str], domain: str, record_type: RecordType, queries: int, progress_callback: Callable[[str, int], None] | None) list[BenchmarkResult][source]

Run server benchmarks one at a time.

Parameters:
  • servers – Server IP addresses to benchmark.

  • domain – Domain to query.

  • record_type – DNS record type.

  • queries – Queries per server.

  • progress_callback – Optional progress callback.

Returns:

List of benchmark results (unsorted).

nadzoring.dns_lookup.benchmark.benchmark_dns_servers(domain: str = 'google.com', servers: list[str] | None = None, record_type: RecordType = 'A', queries: int = 10, max_workers: int = 5, progress_callback: Callable[[str, int], None] | None = None, *, parallel: bool = True) list[BenchmarkResult][source]

Benchmark multiple DNS servers and compare their performance.

Tests each server either in parallel (via ThreadPoolExecutor) or sequentially, then sorts results by average response time.

Parameters:
  • domain – Domain to query. Defaults to "google.com".

  • servers – Server IPs to benchmark. None uses get_public_dns_servers().

  • record_type – DNS record type to query. Defaults to "A".

  • queries – Queries per server. Defaults to 10.

  • max_workers – Thread pool size when parallel is True. Defaults to 5.

  • progress_callback – Called after each server completes with (server_ip, 1-based_index).

  • parallel – Run benchmarks concurrently when True (default).

Returns:

List of BenchmarkResult dicts sorted by avg_response_time ascending (fastest first).

Examples

>>> results = benchmark_dns_servers(servers=["8.8.8.8", "1.1.1.1"])
>>> fastest = results[0]
>>> print(f"{fastest['server']}: {fastest['avg_response_time']:.2f}ms")
nadzoring.dns_lookup.benchmark.benchmark_single_server(server: str, domain: str = 'google.com', record_type: RecordType = 'A', queries: int = 10, delay: float = 0.1) BenchmarkResult[source]

Benchmark the performance of a single DNS server.

Performs queries DNS lookups against server, measuring response time and calculating average, minimum, maximum, and success rate statistics.

Parameters:
  • server – IP address of the DNS server to benchmark.

  • domain – Domain to query. Defaults to "google.com".

  • record_type – DNS record type to query. Defaults to "A".

  • queries – Number of queries to perform. Defaults to 10.

  • delay – Seconds to wait between queries to avoid rate limiting. Defaults to 0.1. Set to 0 to disable.

Returns:

BenchmarkResult dict with server, avg_response_time, min_response_time, max_response_time, success_rate, total_queries, failed_queries, and responses keys.

Examples

>>> result = benchmark_single_server("8.8.8.8")
>>> print(f"{result['avg_response_time']:.2f}ms avg")