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