From 4d7c1a063e76512cf8ca7cc6095170da2034912b Mon Sep 17 00:00:00 2001 From: Semyon Krestyaninov <ensiouel@gmail.com> Date: Mon, 12 Feb 2024 15:32:53 +0300 Subject: [PATCH] =?UTF-8?q?refactor:=20=D1=83=D0=B1=D1=80=D0=B0=D0=BD=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=20=D0=B8=20=D0=BE=D0=BF=D1=86=D0=B8=D0=B8=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20BufferedWriteSyncer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/log/zap/buffered_write_syncer.go | 30 +++++++---- pkg/log/zap/buffered_write_syncer_test.go | 10 ++-- pkg/log/zap/config.go | 61 ----------------------- pkg/log/zap/zap_test.go | 2 +- 4 files changed, 27 insertions(+), 76 deletions(-) delete mode 100644 pkg/log/zap/config.go diff --git a/pkg/log/zap/buffered_write_syncer.go b/pkg/log/zap/buffered_write_syncer.go index 09e6051f..7ded0afa 100644 --- a/pkg/log/zap/buffered_write_syncer.go +++ b/pkg/log/zap/buffered_write_syncer.go @@ -9,6 +9,12 @@ import ( "git.perx.ru/perxis/perxis-go/pkg/log" ) +const ( + defaultMaxBufferSize = 1000 + defaultMaxSyncQueueSize = 16 + defaultFlushInterval = 5 * time.Second +) + var SyncQueueOverflow = errors.New("sync queue overflow") // BufferedWriteSyncer это WriteSyncer, который отправляет записи в log.Service. @@ -44,17 +50,23 @@ type BufferedWriteSyncer struct { stopped bool // stopped указывает, был ли выполнен Stop } -func NewBufferedWriteSyncer(service log.Service, options ...Option) *BufferedWriteSyncer { - cfg := newConfig(options) - return &BufferedWriteSyncer{ - FlushInterval: cfg.flushInterval, - MaxBufferSize: cfg.maxBufferSize, - MaxSyncQueueSize: cfg.maxSyncQueueSize, - Service: service, +func (ws *BufferedWriteSyncer) start() { + if ws.Service == nil { + panic("service is required") + } + + if ws.FlushInterval == 0 { + ws.FlushInterval = defaultFlushInterval + } + + if ws.MaxBufferSize == 0 { + ws.MaxBufferSize = defaultMaxBufferSize + } + + if ws.MaxSyncQueueSize == 0 { + ws.MaxSyncQueueSize = defaultMaxSyncQueueSize } -} -func (ws *BufferedWriteSyncer) start() { ws.buffer = make([]*log.Entry, 0, ws.MaxBufferSize) ws.syncQueue = make(chan []*log.Entry, ws.MaxSyncQueueSize) ws.flushStop = make(chan struct{}) diff --git a/pkg/log/zap/buffered_write_syncer_test.go b/pkg/log/zap/buffered_write_syncer_test.go index bbb27b6c..8ed6e583 100644 --- a/pkg/log/zap/buffered_write_syncer_test.go +++ b/pkg/log/zap/buffered_write_syncer_test.go @@ -22,7 +22,7 @@ func TestBufferedWriteSyncer_Write(t *testing.T) { }). Once() - ws := NewBufferedWriteSyncer(service) + ws := &BufferedWriteSyncer{Service: service} err := ws.Write(&log.Entry{Message: "first log message"}) require.NoError(t, err) @@ -46,7 +46,7 @@ func TestBufferedWriteSyncer_Write_Concurrent(t *testing.T) { }). Once() - ws := NewBufferedWriteSyncer(service) + ws := &BufferedWriteSyncer{Service: service} var wg sync.WaitGroup for i := 0; i < 100; i++ { @@ -77,7 +77,7 @@ func TestBufferedWriteSyncer_Flush(t *testing.T) { }). Times(10) - ws := NewBufferedWriteSyncer(service) + ws := &BufferedWriteSyncer{Service: service} for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { @@ -104,7 +104,7 @@ func TestBufferedWriteSyncer_MaxBufferSize(t *testing.T) { }). Times(10) - ws := NewBufferedWriteSyncer(service, WithMaxBufferSize(10)) + ws := &BufferedWriteSyncer{Service: service, MaxBufferSize: 10} for i := 0; i < 100; i++ { err := ws.Write(&log.Entry{Message: "log message"}) @@ -127,7 +127,7 @@ func TestBufferedWriteSyncer_FlushInterval(t *testing.T) { }). Once() - ws := NewBufferedWriteSyncer(service, WithFlushInterval(time.Second)) + ws := &BufferedWriteSyncer{Service: service, FlushInterval: time.Second} for j := 0; j < 10; j++ { err := ws.Write(&log.Entry{Message: "log message"}) diff --git a/pkg/log/zap/config.go b/pkg/log/zap/config.go deleted file mode 100644 index d586d120..00000000 --- a/pkg/log/zap/config.go +++ /dev/null @@ -1,61 +0,0 @@ -package zap - -import ( - "time" -) - -const ( - defaultMaxBufferSize = 1000 - defaultMaxSyncQueueSize = 16 - defaultFlushInterval = 5 * time.Second -) - -type config struct { - flushInterval time.Duration - maxBufferSize int - maxSyncQueueSize int -} - -func newConfig(options []Option) *config { - cfg := new(config) - for _, option := range options { - option(cfg) - } - - if cfg.flushInterval == 0 { - cfg.flushInterval = defaultFlushInterval - } - - if cfg.maxBufferSize == 0 { - cfg.maxBufferSize = defaultMaxBufferSize - } - - if cfg.maxSyncQueueSize == 0 { - cfg.maxSyncQueueSize = defaultMaxSyncQueueSize - } - - return cfg -} - -type Option func(config *config) - -// WithFlushInterval устанавливает значение для BufferedWriteSyncer.FlushInterval -func WithFlushInterval(interval time.Duration) Option { - return func(config *config) { - config.flushInterval = interval - } -} - -// WithMaxBufferSize устанавливает значение для BufferedWriteSyncer.MaxBufferSize -func WithMaxBufferSize(size int) Option { - return func(config *config) { - config.maxBufferSize = size - } -} - -// WithMaxSyncQueueSize устанавливает значение для BufferedWriteSyncer.MaxSyncQueueSize -func WithMaxSyncQueueSize(size int) Option { - return func(config *config) { - config.maxSyncQueueSize = size - } -} diff --git a/pkg/log/zap/zap_test.go b/pkg/log/zap/zap_test.go index c8a4dff9..d3ba8fbc 100644 --- a/pkg/log/zap/zap_test.go +++ b/pkg/log/zap/zap_test.go @@ -52,7 +52,7 @@ func TestExample(t *testing.T) { }). Once() - ws := NewBufferedWriteSyncer(service) + ws := &BufferedWriteSyncer{Service: service} logger := zap.New(NewCore(ws)) logger.Info("создан элемент коллекции", -- GitLab