| package jsonfilelog // import "github.com/docker/docker/daemon/logger/jsonfilelog" |
| |
| import ( |
| "bytes" |
| "testing" |
| "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, nil, 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) |
| } |
| } |
| } |
| } |