@@ -64,12 +64,14 @@ var Conf = struct {
6464
6565// Expv is a simple wrapper around the expvars package.
6666var Expv = struct {
67- RouterCacheHits * expvar.Int
6867 RouterCacheCall * expvar.Int
68+ RouterCacheHits * expvar.Int
6969 RouterCacheRate expvar.Func
70+ RouterIPNetCall * expvar.Int
71+ RouterIPNetTime * expvar.Float
7072}{
71- RouterCacheHits : expvar .NewInt ("RouterCache.Hits" ),
7273 RouterCacheCall : expvar .NewInt ("RouterCache.Call" ),
74+ RouterCacheHits : expvar .NewInt ("RouterCache.Hits" ),
7375 RouterCacheRate : func () expvar.Func {
7476 f := expvar .Func (func () any {
7577 hits := expvar .Get ("RouterCache.Hits" ).(* expvar.Int ).Value ()
@@ -80,6 +82,8 @@ var Expv = struct {
8082 expvar .Publish ("RouterCache.Rate" , f )
8183 return f
8284 }(),
85+ RouterIPNetCall : expvar .NewInt ("RouterIPNet.Call" ),
86+ RouterIPNetTime : expvar .NewFloat ("RouterIPNet.Time" ),
8387}
8488
8589// ResolverDns returns a DNS resolver.
@@ -763,7 +767,15 @@ func (r *RouterIPNet) FromFile(name string) {
763767
764768// Road implements daze.Router.
765769func (r * RouterIPNet ) Road (ctx * Context , host string ) Road {
766- l , err := net .DefaultResolver .LookupIPAddr (context .Background (), host )
770+ l , err := func () ([]net.IPAddr , error ) {
771+ Expv .RouterIPNetCall .Add (1 )
772+ t := time .Now ()
773+ l , err := net .DefaultResolver .LookupIPAddr (context .Background (), host )
774+ s := time .Since (t ).Seconds ()
775+ // This is not strictly concurrency-safe, but it won't have much impact on the data.
776+ Expv .RouterIPNetTime .Add ((s - Expv .RouterIPNetTime .Value ()) / 64 )
777+ return l , err
778+ }()
767779 if err != nil {
768780 log .Printf ("conn: %08x error %s" , ctx .Cid , err )
769781 return RoadPuzzle
0 commit comments