aboutsummaryrefslogtreecommitdiff
path: root/internal/qna
diff options
context:
space:
mode:
Diffstat (limited to 'internal/qna')
-rw-r--r--internal/qna/qna.go31
1 files changed, 21 insertions, 10 deletions
diff --git a/internal/qna/qna.go b/internal/qna/qna.go
index 809df15..aa27d07 100644
--- a/internal/qna/qna.go
+++ b/internal/qna/qna.go
@@ -1,6 +1,8 @@
package qna
import (
+ "context"
+ "errors"
"fmt"
"net"
"net/url"
@@ -38,6 +40,9 @@ type Progress struct {
NumOK int // got response
NumOnion int // found onion in response
+ // More details about deadline errors while sending request
+ NumDeadline int
+
// More details about DNS errors while sending request
NumDNSNotFound int
NumDNSTimeout int
@@ -48,6 +53,7 @@ func (p Progress) String() string {
str := fmt.Sprintf(" Processed: %d\n", p.NumAnswer())
str += fmt.Sprintf(" Success: %d (Onion-Location:%d)\n", p.NumOK, p.NumOnion)
str += fmt.Sprintf(" Failure: %d (Req:%d Do:%d)\n", p.NumError(), p.NumReqErr, p.NumDoErr)
+ str += fmt.Sprintf(" CTX: %d (Deadline exceeded)\n", p.NumDeadline)
str += fmt.Sprintf(" DNS: %d (NotFound:%d Timeout:%d Other:%d)",
p.NumDNSErr(), p.NumDNSNotFound, p.NumDNSTimeout, p.NumDNSOther)
return str
@@ -72,17 +78,17 @@ func (p *Progress) AddAnswer(a Answer) {
}
if a.DoErr != nil {
p.NumDoErr += 1
- err := dnsError(a.DoErr)
- if err == nil {
- return
+ if isDeadlineError(a.DoErr) {
+ p.NumDeadline += 1
}
-
- if err.IsTimeout {
- p.NumDNSTimeout += 1
- } else if err.IsNotFound {
- p.NumDNSNotFound += 1
- } else {
- p.NumDNSOther += 1
+ if err := dnsError(a.DoErr); err != nil {
+ if err.IsTimeout {
+ p.NumDNSTimeout += 1
+ } else if err.IsNotFound {
+ p.NumDNSNotFound += 1
+ } else {
+ p.NumDNSOther += 1
+ }
}
return
}
@@ -117,3 +123,8 @@ func dnsError(err error) *net.DNSError {
return dnsErr
}
+
+func isDeadlineError(err error) bool {
+ urlErr, ok := err.(*url.Error)
+ return ok && errors.Is(urlErr.Err, context.DeadlineExceeded)
+}