@@ -28,6 +28,7 @@ import (
2828 "time"
2929
3030 "github.com/libraries/daze/lib/doa"
31+ "github.com/libraries/daze/lib/expvpp"
3132 "github.com/libraries/daze/lib/lru"
3233 "github.com/libraries/daze/lib/pretty"
3334 "github.com/libraries/daze/lib/rate"
@@ -66,15 +67,15 @@ var Conf = struct {
6667var Expv = struct {
6768 RouterCacheCall * expvar.Int
6869 RouterCacheHits * expvar.Int
69- RouterCacheRate expvar.Func
70+ RouterCacheRate * expvar.Func
7071 RouterIPNetCall * expvar.Int
71- RouterIPNetTime * ExpvarAverage
72+ RouterIPNetTime * expvpp. ExpvarAverage
7273}{
7374 RouterCacheCall : expvar .NewInt ("RouterCache.Call" ),
7475 RouterCacheHits : expvar .NewInt ("RouterCache.Hits" ),
75- RouterCacheRate : NewExpvarPercent ("RouterCache.Rate" , "RouterCache.Hits" , "RouterCache.Call" ),
76+ RouterCacheRate : expvpp . NewExpvarPercent ("RouterCache.Rate" , "RouterCache.Hits" , "RouterCache.Call" ),
7677 RouterIPNetCall : expvar .NewInt ("RouterIPNet.Call" ),
77- RouterIPNetTime : NewExpvarAverage ("RouterIPNet.Time" , 64 ),
78+ RouterIPNetTime : expvpp . NewExpvarAverage ("RouterIPNet.Time" , 64 ),
7879}
7980
8081// ResolverDns returns a DNS resolver.
@@ -1059,37 +1060,6 @@ func Dial(network string, address string) (net.Conn, error) {
10591060 return d .Dial (network , address )
10601061}
10611062
1062- // ExpvarAverage is a structure to maintain a running average using expvar.Float.
1063- type ExpvarAverage struct {
1064- F * expvar.Float
1065- L float64
1066- }
1067-
1068- // Adds a new value to the running average. This is not strictly concurrency-safe, but it won't have much impact on the
1069- // data.
1070- func (e * ExpvarAverage ) Add (value float64 ) {
1071- e .F .Add ((value - e .F .Value ()) / e .L )
1072- }
1073-
1074- // NewExpvarAverage creates and initializes a new ExpvarAverage instance.
1075- func NewExpvarAverage (name string , length int ) * ExpvarAverage {
1076- return & ExpvarAverage {
1077- F : expvar .NewFloat (name ),
1078- L : float64 (length ),
1079- }
1080- }
1081-
1082- // NewExpvarPercent creates a new expvar.Func that calculates the ratio of two expvar.Int or expvar.Float metrics.
1083- func NewExpvarPercent (name string , n string , d string ) expvar.Func {
1084- f := expvar .Func (func () any {
1085- v := doa .Try (strconv .ParseFloat (expvar .Get (n ).String (), 64 ))
1086- w := doa .Try (strconv .ParseFloat (expvar .Get (d ).String (), 64 ))
1087- return float64 (v ) / float64 (max (1 , w ))
1088- })
1089- expvar .Publish (name , f )
1090- return f
1091- }
1092-
10931063// GravityReader wraps an io.Reader with RC4 crypto.
10941064func GravityReader (r io.Reader , k []byte ) io.Reader {
10951065 cr := doa .Try (rc4 .NewCipher (k ))
0 commit comments