From 6b1b7099b105eacd7be65e03ca6bd3b5fdc1aa99 Mon Sep 17 00:00:00 2001 From: Amir Raminfar Date: Tue, 18 Jul 2023 10:58:59 -0700 Subject: [PATCH] go cleanup (#2313) * chore: cleans waitgroups * chore: adds benchmark --- docker/event_generator.go | 12 ++++++------ docker/event_generator_test.go | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/docker/event_generator.go b/docker/event_generator.go index 9b189175..e8da73dc 100644 --- a/docker/event_generator.go +++ b/docker/event_generator.go @@ -42,12 +42,12 @@ func NewEventGenerator(reader io.Reader, tty bool) *EventGenerator { tty: tty, } generator.wg.Add(2) - go generator.consumeReader(&generator.wg) - go generator.processBuffer(&generator.wg) + go generator.consumeReader() + go generator.processBuffer() return generator } -func (g *EventGenerator) processBuffer(wg *sync.WaitGroup) { +func (g *EventGenerator) processBuffer() { var current, next *LogEvent for { @@ -70,10 +70,10 @@ func (g *EventGenerator) processBuffer(wg *sync.WaitGroup) { g.Events <- current } - wg.Done() + g.wg.Done() } -func (g *EventGenerator) consumeReader(wg *sync.WaitGroup) { +func (g *EventGenerator) consumeReader() { for { message, streamType, readerError := readEvent(g.reader, g.tty) if message != "" { @@ -90,7 +90,7 @@ func (g *EventGenerator) consumeReader(wg *sync.WaitGroup) { break } } - wg.Done() + g.wg.Done() } func (g *EventGenerator) peek() *LogEvent { diff --git a/docker/event_generator_test.go b/docker/event_generator_test.go index 8896757c..34cd32de 100644 --- a/docker/event_generator_test.go +++ b/docker/event_generator_test.go @@ -126,3 +126,24 @@ func Test_createEvent(t *testing.T) { }) } } + +type mockReadCloser struct { + bytes []byte +} + +func (m mockReadCloser) Read(p []byte) (int, error) { + return copy(p, m.bytes), nil +} + +func Benchmark_readEvent(b *testing.B) { + b.ReportAllocs() + + data := makeMessage("2020-05-13T18:55:37.772853839Z {\"key\": \"value\"}\n", STDOUT) + + reader := bufio.NewReader(mockReadCloser{bytes: data}) + + for i := 0; i < b.N; i++ { + readEvent(reader, true) + // println(message, stream) + } +}