From 7bf815af34492506f911c856f31af43971368be4 Mon Sep 17 00:00:00 2001 From: banst Date: Tue, 3 Sep 2024 11:51:56 +0200 Subject: [PATCH] fix: stop iqr filtering on empty list --- cmd/icmperf/main.go | 3 ++- pkg/cli/cli.go | 3 ++- pkg/recorder/stats.go | 5 +++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/cmd/icmperf/main.go b/cmd/icmperf/main.go index 003f63b..2c633a5 100644 --- a/cmd/icmperf/main.go +++ b/cmd/icmperf/main.go @@ -30,7 +30,8 @@ func main() { return nil }) - m := model.NewModel(pinger, record, (*net.UDPAddr)(&cli.Target), cli.MTU, cli.Duration) + peer := net.UDPAddr(cli.Target) + m := model.NewModel(pinger, record, &peer, cli.MTU, cli.Duration) if err := pinger.Start(ctx); err != nil { ktx.FatalIfErrorf(err) } diff --git a/pkg/cli/cli.go b/pkg/cli/cli.go index ff168b5..50ed2c6 100644 --- a/pkg/cli/cli.go +++ b/pkg/cli/cli.go @@ -1,6 +1,7 @@ package cli import ( + "fmt" "net" "time" ) @@ -10,7 +11,7 @@ type Target net.UDPAddr func (t *Target) UnmarshalText(text []byte) error { ip, err := net.LookupIP(string(text)) if err != nil { - return err + return fmt.Errorf("failed to lookup target: %w", err) } t.IP = ip[0] return nil diff --git a/pkg/recorder/stats.go b/pkg/recorder/stats.go index d3c98d6..8058968 100644 --- a/pkg/recorder/stats.go +++ b/pkg/recorder/stats.go @@ -20,6 +20,11 @@ type Stats struct { // iqrFilter filters the data using the Interquartile Range method. func iqrFilter(data []float64) []float64 { sort.Float64s(data) + if len(data) < 4 { + // Not enough data to filter + return data + } + q1 := data[len(data)/4] q3 := data[3*len(data)/4] iqr := q3 - q1