fix: dns resolution taking long and add caching options (#8)

This commit is contained in:
Karol Broda
2025-12-24 11:12:39 +01:00
committed by Karol Broda
parent 933da8bad2
commit 49948de0ed
13 changed files with 1302 additions and 67 deletions

View File

@@ -3,6 +3,7 @@ package tui
import (
"fmt"
"github.com/karol-broda/snitch/internal/collector"
"github.com/karol-broda/snitch/internal/resolver"
"syscall"
"time"
@@ -35,11 +36,20 @@ func (m model) tick() tea.Cmd {
}
func (m model) fetchData() tea.Cmd {
resolveAddrs := m.resolveAddrs
return func() tea.Msg {
conns, err := collector.GetConnections()
if err != nil {
return errMsg{err}
}
// pre-warm dns cache in parallel if resolution is enabled
if resolveAddrs {
addrs := make([]string, 0, len(conns)*2)
for _, c := range conns {
addrs = append(addrs, c.Laddr, c.Raddr)
}
resolver.ResolveAddrsParallel(addrs)
}
return dataMsg{connections: conns}
}
}

View File

@@ -64,6 +64,7 @@ type Options struct {
FilterSet bool // true if user specified any filter flags
ResolveAddrs bool // when true, resolve IP addresses to hostnames
ResolvePorts bool // when true, resolve port numbers to service names
NoCache bool // when true, disable DNS caching
}
func New(opts Options) model {