- gofmt main.go to fix tab indentation in main() body - stats.go ComputeSummary: return nil when Answers and ByType are empty - dns/types.go: remove duplicate ParseQueryType (dead code) - formatter.go: log hook errors to stderr when Debug > 0; add Debug to Config - text.go referralID: remove redundant depth==0 branch - text.go writeServers: remove version lookup placeholder string Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
co-authored by
Copilot
multica-agent
parent
5a54834c5f
commit
8e7beacc22
@@ -203,6 +203,7 @@ ShowSummaryResults: cfg.ShowSummaryResults,
|
|||||||
Verbose: cfg.Verbose,
|
Verbose: cfg.Verbose,
|
||||||
Quiet: cfg.Quiet,
|
Quiet: cfg.Quiet,
|
||||||
Color: os.Getenv("NO_COLOR") == "",
|
Color: os.Getenv("NO_COLOR") == "",
|
||||||
|
Debug: cfg.Debug,
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|||||||
@@ -328,4 +328,3 @@ func TestQueryNoTCPFallbackWhenDisabled(t *testing.T) {
|
|||||||
t.Error("expected truncated response to be returned as-is")
|
t.Error("expected truncated response to be returned as-is")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
package dns
|
package dns
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -40,32 +37,6 @@ func QNameType(qtype uint16) string {
|
|||||||
return dns.TypeToString[qtype]
|
return dns.TypeToString[qtype]
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseQueryType(s string) (uint16, error) {
|
|
||||||
s = strings.ToUpper(strings.TrimSpace(s))
|
|
||||||
switch s {
|
|
||||||
case "A":
|
|
||||||
return TypeA, nil
|
|
||||||
case "AAAA":
|
|
||||||
return TypeAAAA, nil
|
|
||||||
case "NS":
|
|
||||||
return TypeNS, nil
|
|
||||||
case "CNAME":
|
|
||||||
return TypeCNAME, nil
|
|
||||||
case "MX":
|
|
||||||
return TypeMX, nil
|
|
||||||
case "TXT":
|
|
||||||
return TypeTXT, nil
|
|
||||||
case "SOA":
|
|
||||||
return TypeSOA, nil
|
|
||||||
case "PTR":
|
|
||||||
return TypePTR, nil
|
|
||||||
case "ANY":
|
|
||||||
return TypeANY, nil
|
|
||||||
default:
|
|
||||||
return 0, fmt.Errorf("invalid query type: %s", s)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func DefaultEDNS0UDPSize() int {
|
func DefaultEDNS0UDPSize() int {
|
||||||
return 2048
|
return 2048
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package output
|
package output
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
@@ -28,6 +29,7 @@ type Config struct {
|
|||||||
Verbose bool
|
Verbose bool
|
||||||
Quiet bool
|
Quiet bool
|
||||||
Color bool
|
Color bool
|
||||||
|
Debug int
|
||||||
}
|
}
|
||||||
|
|
||||||
func DefaultConfig() *Config {
|
func DefaultConfig() *Config {
|
||||||
@@ -69,16 +71,21 @@ func AttachHooks(cfg *Config, formatter Formatter) *traverse.TraverserHooks {
|
|||||||
if cfg == nil || formatter == nil {
|
if cfg == nil || formatter == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
logErr := func(context string, err error) {
|
||||||
|
if err != nil && cfg.Debug > 0 {
|
||||||
|
fmt.Fprintf(os.Stderr, "Debug: formatter %s: %v\n", context, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
return &traverse.TraverserHooks{
|
return &traverse.TraverserHooks{
|
||||||
OnEvent: func(event traverse.TraversalEvent) {
|
OnEvent: func(event traverse.TraversalEvent) {
|
||||||
switch {
|
switch {
|
||||||
case event.IsResolve && cfg.ShowResolves:
|
case event.IsResolve && cfg.ShowResolves:
|
||||||
_ = formatter.WriteResolve(event)
|
logErr("WriteResolve", formatter.WriteResolve(event))
|
||||||
case !event.IsResolve && cfg.ShowProgress:
|
case !event.IsResolve && cfg.ShowProgress:
|
||||||
_ = formatter.WriteProgress(event)
|
logErr("WriteProgress", formatter.WriteProgress(event))
|
||||||
}
|
}
|
||||||
if event.Stage == traverse.EventComplete && cfg.ShowAllStats {
|
if event.Stage == traverse.EventComplete && cfg.ShowAllStats {
|
||||||
_ = formatter.WriteResult(event.Result)
|
logErr("WriteResult", formatter.WriteResult(event.Result))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,9 @@ func ComputeSummary(results []traverse.TraversalResult) *SummaryStats {
|
|||||||
return stats.Answers[i].RData < stats.Answers[j].RData
|
return stats.Answers[i].RData < stats.Answers[j].RData
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if len(stats.Answers) == 0 && len(stats.ByType) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
return stats
|
return stats
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -99,11 +99,7 @@ func (f *textFormatter) writeServers(results []traverse.TraversalResult) error {
|
|||||||
|
|
||||||
for _, name := range names {
|
for _, name := range names {
|
||||||
for _, ip := range servers[name] {
|
for _, ip := range servers[name] {
|
||||||
version := ""
|
if _, err := fmt.Fprintf(f.w, "%*s: %-15s\n", width, name, ip); err != nil {
|
||||||
if f.cfg.ShowVersions {
|
|
||||||
version = " (version lookup pending)"
|
|
||||||
}
|
|
||||||
if _, err := fmt.Fprintf(f.w, "%*s: %-15s%s\n", width, name, ip, version); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -234,9 +230,6 @@ func referralID(ref *traverse.Referral) string {
|
|||||||
if ref == nil {
|
if ref == nil {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
if ref.Depth == 0 {
|
|
||||||
return "1"
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%d", ref.Depth+1)
|
return fmt.Sprintf("%d", ref.Depth+1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user