66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
![]() |
package jsonfilelog
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"bytes"
|
||
|
"time"
|
||
|
|
||
|
"github.com/docker/docker/daemon/logger"
|
||
|
"github.com/gotestyourself/gotestyourself/fs"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func BenchmarkJSONFileLoggerReadLogs(b *testing.B) {
|
||
|
tmp := fs.NewDir(b, "bench-jsonfilelog")
|
||
|
defer tmp.Remove()
|
||
|
|
||
|
jsonlogger, err := New(logger.Info{
|
||
|
ContainerID: "a7317399f3f857173c6179d44823594f8294678dea9999662e5c625b5a1c7657",
|
||
|
LogPath: tmp.Join("container.log"),
|
||
|
Config: map[string]string{
|
||
|
"labels": "first,second",
|
||
|
},
|
||
|
ContainerLabels: map[string]string{
|
||
|
"first": "label_value",
|
||
|
"second": "label_foo",
|
||
|
},
|
||
|
})
|
||
|
require.NoError(b, err)
|
||
|
defer jsonlogger.Close()
|
||
|
|
||
|
msg := &logger.Message{
|
||
|
Line: []byte("Line that thinks that it is log line from docker\n"),
|
||
|
Source: "stderr",
|
||
|
Timestamp: time.Now().UTC(),
|
||
|
}
|
||
|
|
||
|
buf := bytes.NewBuffer(nil)
|
||
|
require.NoError(b, marshalMessage(msg, jsonlogger.(*JSONFileLogger).extra, buf))
|
||
|
b.SetBytes(int64(buf.Len()))
|
||
|
|
||
|
b.ResetTimer()
|
||
|
|
||
|
chError := make(chan error, b.N+1)
|
||
|
go func() {
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
chError <- jsonlogger.Log(msg)
|
||
|
}
|
||
|
chError <- jsonlogger.Close()
|
||
|
}()
|
||
|
|
||
|
lw := jsonlogger.(*JSONFileLogger).ReadLogs(logger.ReadConfig{Follow: true})
|
||
|
watchClose := lw.WatchClose()
|
||
|
for {
|
||
|
select {
|
||
|
case <-lw.Msg:
|
||
|
case <-watchClose:
|
||
|
return
|
||
|
case err := <-chError:
|
||
|
if err != nil {
|
||
|
b.Fatal(err)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|