Skip to content

Commit

Permalink
all: imp code
Browse files Browse the repository at this point in the history
  • Loading branch information
schzhn committed Jan 23, 2025
1 parent 4795a2c commit 496cbba
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 49 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ go 1.23.5

require (
// TODO!!
github.com/AdguardTeam/dnsproxy v0.74.2-0.20250116174805-966cabfa8953
github.com/AdguardTeam/dnsproxy v0.74.2-0.20250123124619-13a82417e9e2
github.com/AdguardTeam/golibs v0.31.0
github.com/AdguardTeam/urlfilter v0.20.0
github.com/NYTimes/gziphandler v1.1.1
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
github.com/AdguardTeam/dnsproxy v0.74.2-0.20250116174805-966cabfa8953 h1:oWKRUtLrKqUO0g3Vh/uEvuxH4wpqh5mV2r7fwqmABF8=
github.com/AdguardTeam/dnsproxy v0.74.2-0.20250116174805-966cabfa8953/go.mod h1:Oqw+k7LyjDObfYzXYCkpgtirbzbUrmotr92jrb3N09I=
github.com/AdguardTeam/dnsproxy v0.74.2-0.20250123124619-13a82417e9e2 h1:YhG4TGJYPFZbio1Pwo3uxONNUqRJL2dfzVIqtbBl6MQ=
github.com/AdguardTeam/dnsproxy v0.74.2-0.20250123124619-13a82417e9e2/go.mod h1:Oqw+k7LyjDObfYzXYCkpgtirbzbUrmotr92jrb3N09I=
github.com/AdguardTeam/golibs v0.31.0 h1:Z0oPfLTLw6iZmpE58dePy2Bel0MaX+lnDwtFEE5EmIo=
github.com/AdguardTeam/golibs v0.31.0/go.mod h1:wIkZ9o2UnppeW6/YD7yJB71dYbMhiuC1Fh/I2ElW7GQ=
github.com/AdguardTeam/urlfilter v0.20.0 h1:X32qiuVCVd8WDYCEsbdZKfXMzwdVqrdulamtUi4rmzs=
Expand Down
41 changes: 8 additions & 33 deletions internal/dnsforward/stats.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,16 +139,20 @@ func (s *Server) logQuery(dctx *dnsContext, ip net.IP, processingTime time.Durat
func (s *Server) updateStats(dctx *dnsContext, clientIP string, processingTime time.Duration) {
pctx := dctx.proxyCtx

var upstreamStats []*proxy.UpstreamStatistics
qs := pctx.QueryStatistics()
if qs != nil {
upstreamStats = append(upstreamStats, qs.Main()...)
upstreamStats = append(upstreamStats, qs.Fallback()...)
}

e := &stats.Entry{
UpstreamStats: upstreamStats,
Domain: aghnet.NormalizeDomain(pctx.Req.Question[0].Name),
Result: stats.RNotFiltered,
ProcessingTime: processingTime,
}

if pctx.Upstream != nil {
e.Upstream, e.UpstreamTime = upstreamDur(pctx)
}

if clientID := dctx.clientID; clientID != "" {
e.Client = clientID
} else {
Expand All @@ -171,32 +175,3 @@ func (s *Server) updateStats(dctx *dnsContext, clientIP string, processingTime t

s.stats.Update(e)
}

// upstreamDur returns the upstream DNS server address and the DNS lookup
// duration. If the upstream address is empty, it means the request was served
// from the cache.
func upstreamDur(pctx *proxy.DNSContext) (upstream string, dur time.Duration) {
if pctx.Upstream == nil {
return "", 0
}

qs := pctx.QueryStatistics()
if qs == nil {
return "", 0
}

addr := pctx.Upstream.Address()
for _, u := range qs.Main() {
if u.Address == addr {
return u.Address, u.QueryDuration
}
}

for _, u := range qs.Fallback() {
if u.Address == addr {
return u.Address, u.QueryDuration
}
}

return "", 0
}
13 changes: 9 additions & 4 deletions internal/stats/stats_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (

"github.com/AdguardTeam/AdGuardHome/internal/aghnet"
"github.com/AdguardTeam/AdGuardHome/internal/stats"
"github.com/AdguardTeam/dnsproxy/proxy"
"github.com/AdguardTeam/golibs/logutil/slogutil"
"github.com/AdguardTeam/golibs/netutil"
"github.com/AdguardTeam/golibs/testutil"
Expand Down Expand Up @@ -78,15 +79,19 @@ func TestStats(t *testing.T) {
Client: cliIPStr,
Result: stats.RFiltered,
ProcessingTime: time.Microsecond * 123456,
Upstream: respUpstream,
UpstreamTime: time.Microsecond * 222222,
UpstreamStats: []*proxy.UpstreamStatistics{{
Address: respUpstream,
QueryDuration: time.Microsecond * 222222,
}},
}, {
Domain: reqDomain,
Client: cliIPStr,
Result: stats.RNotFiltered,
ProcessingTime: time.Microsecond * 123456,
Upstream: respUpstream,
UpstreamTime: time.Microsecond * 222222,
UpstreamStats: []*proxy.UpstreamStatistics{{
Address: respUpstream,
QueryDuration: time.Microsecond * 222222,
}},
}}

wantData := &stats.StatsResp{
Expand Down
21 changes: 12 additions & 9 deletions internal/stats/unit.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"time"

"github.com/AdguardTeam/AdGuardHome/internal/aghnet"
"github.com/AdguardTeam/dnsproxy/proxy"
"github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/logutil/slogutil"
"go.etcd.io/bbolt"
Expand Down Expand Up @@ -62,18 +63,16 @@ type Entry struct {
// Domain is the domain name requested.
Domain string

// Upstream is the upstream DNS server.
Upstream string
// UpstreamStats contains the DNS query statistics for both the upstream and
// fallback DNS servers.
UpstreamStats []*proxy.UpstreamStatistics

// Result is the result of processing the request.
Result Result

// ProcessingTime is the duration of the request processing from the start
// of the request including timeouts.
ProcessingTime time.Duration

// UpstreamTime is the duration of the successful request to the upstream.
UpstreamTime time.Duration
}

// validate returns an error if entry is not valid.
Expand Down Expand Up @@ -329,10 +328,14 @@ func (u *unit) add(e *Entry) {
u.timeSum += pt
u.nTotal++

if e.Upstream != "" {
u.upstreamsResponses[e.Upstream]++
ut := uint64(e.UpstreamTime.Microseconds())
u.upstreamsTimeSum[e.Upstream] += ut
for _, s := range e.UpstreamStats {
if s.IsCached || s.Error != nil {
continue
}

addr := s.Address
u.upstreamsResponses[addr]++
u.upstreamsTimeSum[addr] += uint64(s.QueryDuration.Microseconds())
}
}

Expand Down

0 comments on commit 496cbba

Please sign in to comment.