read_test.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package jsonfilelog
  2. import (
  3. "bytes"
  4. "testing"
  5. "time"
  6. "github.com/docker/docker/daemon/logger"
  7. "github.com/gotestyourself/gotestyourself/fs"
  8. "github.com/stretchr/testify/require"
  9. )
  10. func BenchmarkJSONFileLoggerReadLogs(b *testing.B) {
  11. tmp := fs.NewDir(b, "bench-jsonfilelog")
  12. defer tmp.Remove()
  13. jsonlogger, err := New(logger.Info{
  14. ContainerID: "a7317399f3f857173c6179d44823594f8294678dea9999662e5c625b5a1c7657",
  15. LogPath: tmp.Join("container.log"),
  16. Config: map[string]string{
  17. "labels": "first,second",
  18. },
  19. ContainerLabels: map[string]string{
  20. "first": "label_value",
  21. "second": "label_foo",
  22. },
  23. })
  24. require.NoError(b, err)
  25. defer jsonlogger.Close()
  26. msg := &logger.Message{
  27. Line: []byte("Line that thinks that it is log line from docker\n"),
  28. Source: "stderr",
  29. Timestamp: time.Now().UTC(),
  30. }
  31. buf := bytes.NewBuffer(nil)
  32. require.NoError(b, marshalMessage(msg, nil, buf))
  33. b.SetBytes(int64(buf.Len()))
  34. b.ResetTimer()
  35. chError := make(chan error, b.N+1)
  36. go func() {
  37. for i := 0; i < b.N; i++ {
  38. chError <- jsonlogger.Log(msg)
  39. }
  40. chError <- jsonlogger.Close()
  41. }()
  42. lw := jsonlogger.(*JSONFileLogger).ReadLogs(logger.ReadConfig{Follow: true})
  43. watchClose := lw.WatchClose()
  44. for {
  45. select {
  46. case <-lw.Msg:
  47. case <-watchClose:
  48. return
  49. case err := <-chError:
  50. if err != nil {
  51. b.Fatal(err)
  52. }
  53. }
  54. }
  55. }