From b866158d9b48df9ccacc087c3c5155676407ac8b Mon Sep 17 00:00:00 2001 From: andrey Date: Thu, 25 Jan 2024 20:33:10 +0300 Subject: [PATCH] udate watcher --- key.go | 15 --------------- provider/arg/provider.go | 2 -- provider/watcher/provider.go | 37 +++++++++++++++++++----------------- variable.go | 11 ----------- 4 files changed, 20 insertions(+), 45 deletions(-) delete mode 100644 key.go delete mode 100644 variable.go diff --git a/key.go b/key.go deleted file mode 100644 index 76da1d4..0000000 --- a/key.go +++ /dev/null @@ -1,15 +0,0 @@ -package config - -import "context" - -type Key struct { - Name string - AppName string - Namespace string -} - -type KeyFactory func(ctx context.Context, key Key) string - -func (k Key) String() string { - return k.Namespace + "_" + k.AppName + "_" + k.Name -} diff --git a/provider/arg/provider.go b/provider/arg/provider.go index 3503a26..e9b2228 100644 --- a/provider/arg/provider.go +++ b/provider/arg/provider.go @@ -4,7 +4,6 @@ import ( "context" "encoding/json" "fmt" - "log" "os" "strings" @@ -124,7 +123,6 @@ func (p *Provider) Value(ctx context.Context, path ...string) (config.Value, err } return value.Decode(func(v interface{}) error { - log.Println(string(data)) return json.Unmarshal(data, v) }), nil } diff --git a/provider/watcher/provider.go b/provider/watcher/provider.go index b821c3d..37e538b 100644 --- a/provider/watcher/provider.go +++ b/provider/watcher/provider.go @@ -3,7 +3,7 @@ package watcher import ( "context" "fmt" - "log" + "log/slog" "time" "gitoa.ru/go-4devs/config" @@ -14,13 +14,11 @@ var ( _ config.WatchProvider = (*Provider)(nil) ) -func New(duration time.Duration, provider config.NamedProvider, opts ...Option) *Provider { +func New(duration time.Duration, provider config.Provider, opts ...Option) *Provider { prov := &Provider{ - NamedProvider: provider, - ticker: time.NewTicker(duration), - logger: func(_ context.Context, msg string) { - log.Print(msg) - }, + Provider: provider, + duration: duration, + logger: slog.ErrorContext, } for _, opt := range opts { @@ -30,7 +28,7 @@ func New(duration time.Duration, provider config.NamedProvider, opts ...Option) return prov } -func WithLogger(l func(context.Context, string)) Option { +func WithLogger(l func(context.Context, string, ...any)) Option { return func(p *Provider) { p.logger = l } @@ -39,24 +37,29 @@ func WithLogger(l func(context.Context, string)) Option { type Option func(*Provider) type Provider struct { - config.NamedProvider - ticker *time.Ticker - logger func(context.Context, string) + config.Provider + duration time.Duration + logger func(context.Context, string, ...any) } func (p *Provider) Watch(ctx context.Context, callback config.WatchCallback, key ...string) error { - oldVar, err := p.NamedProvider.Value(ctx, key...) + old, err := p.Provider.Value(ctx, key...) if err != nil { return fmt.Errorf("failed watch variable: %w", err) } - go func() { + go func(oldVar config.Value) { + ticker := time.NewTicker(p.duration) + defer func() { + ticker.Stop() + }() + for { select { - case <-p.ticker.C: - newVar, err := p.NamedProvider.Value(ctx, key...) + case <-ticker.C: + newVar, err := p.Provider.Value(ctx, key...) if err != nil { - p.logger(ctx, err.Error()) + p.logger(ctx, "get value%v:%v", key, err.Error()) } else if !newVar.IsEquals(oldVar) { callback(ctx, oldVar, newVar) oldVar = newVar @@ -65,7 +68,7 @@ func (p *Provider) Watch(ctx context.Context, callback config.WatchCallback, key return } } - }() + }(old) return nil } diff --git a/variable.go b/variable.go deleted file mode 100644 index ae31d3d..0000000 --- a/variable.go +++ /dev/null @@ -1,11 +0,0 @@ -package config - -type Variable struct { - Name string - Provider string - Value Value -} - -func (v Variable) IsEquals(n Variable) bool { - return n.Name == v.Name && n.Provider == v.Provider && n.Value.String() == v.Value.String() -}