@@ -11,14 +11,24 @@ use std::{
1111} ;
1212use tokio:: task:: JoinSet ;
1313
14- static GLOBAL_DNS_RESOLVER : LazyLock < TokioResolver > = LazyLock :: new ( || {
15- let ( resolver_config, mut resolver_opts) =
16- read_system_conf ( ) . expect ( "failed to read system resolv config" ) ;
14+ static GLOBAL_DNS_RESOLVER : LazyLock < Option < TokioResolver > > = LazyLock :: new ( || {
15+ let ( resolver_config, mut resolver_opts) = match read_system_conf ( ) {
16+ Ok ( conf) => conf,
17+ Err ( err) => {
18+ tracing:: error!(
19+ error = & err as & dyn std:: error:: Error ,
20+ "failed to read system DNS config, DNS lookups will be skipped"
21+ ) ;
22+ return None ;
23+ }
24+ } ;
1725 resolver_opts. timeout = Duration :: from_secs ( 5 ) ;
1826
19- TokioResolver :: builder_with_config ( resolver_config, TokioConnectionProvider :: default ( ) )
20- . with_options ( resolver_opts)
21- . build ( )
27+ Some (
28+ TokioResolver :: builder_with_config ( resolver_config, TokioConnectionProvider :: default ( ) )
29+ . with_options ( resolver_opts)
30+ . build ( ) ,
31+ )
2232} ) ;
2333
2434/// Captures all system network information, including network interfaces,
@@ -64,12 +74,19 @@ impl SystemNetworkInfo {
6474 let ips: BTreeSet < IpAddr > = interfaces. values ( ) . flatten ( ) . copied ( ) . collect ( ) ;
6575 tracing:: info!( network. addresses. ip = ?ips, "ip addresses" ) ;
6676
67- let mut reverse_lookups = JoinSet :: new ( ) ;
77+ let Some ( resolver) = GLOBAL_DNS_RESOLVER . as_ref ( ) else {
78+ return SystemNetworkInfo {
79+ interfaces,
80+ reverse_lookups : HashMap :: new ( ) ,
81+ forward_lookups : HashMap :: new ( ) ,
82+ } ;
83+ } ;
84+
85+ let mut reverse_lookup_tasks = JoinSet :: new ( ) ;
6886 for ip in ips {
69- reverse_lookups
70- . spawn ( async move { ( ip, GLOBAL_DNS_RESOLVER . reverse_lookup ( ip) . await ) } ) ;
87+ reverse_lookup_tasks. spawn ( async move { ( ip, resolver. reverse_lookup ( ip) . await ) } ) ;
7188 }
72- let reverse_lookups: HashMap < IpAddr , Vec < String > > = reverse_lookups
89+ let reverse_lookups: HashMap < IpAddr , Vec < String > > = reverse_lookup_tasks
7390 . join_all ( )
7491 . await
7592 . into_iter ( )
@@ -96,16 +113,12 @@ impl SystemNetworkInfo {
96113 let hostname_set: BTreeSet < String > = reverse_lookups. values ( ) . flatten ( ) . cloned ( ) . collect ( ) ;
97114 tracing:: info!( network. addresses. hostname = ?hostname_set, "hostnames" ) ;
98115
99- let mut forward_lookups = JoinSet :: new ( ) ;
116+ let mut forward_lookup_tasks = JoinSet :: new ( ) ;
100117 for hostname in hostname_set {
101- forward_lookups. spawn ( async move {
102- (
103- hostname. clone ( ) ,
104- GLOBAL_DNS_RESOLVER . lookup_ip ( hostname) . await ,
105- )
106- } ) ;
118+ forward_lookup_tasks
119+ . spawn ( async move { ( hostname. clone ( ) , resolver. lookup_ip ( hostname) . await ) } ) ;
107120 }
108- let forward_lookups: HashMap < String , Vec < IpAddr > > = forward_lookups
121+ let forward_lookups: HashMap < String , Vec < IpAddr > > = forward_lookup_tasks
109122 . join_all ( )
110123 . await
111124 . into_iter ( )
0 commit comments