From 90c95329fa373e97a1cb3113ff479d2bd8fd9d22 Mon Sep 17 00:00:00 2001 From: ensiouel <ensiouel@gmail.com> Date: Fri, 22 Dec 2023 13:57:09 +0300 Subject: [PATCH] =?UTF-8?q?cache.MetricsMiddleware=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=B2?= =?UTF-8?q?=20cache.TelemetryMiddleware=20=D0=B8=20=D0=B1=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D1=88=D0=B5=20=D0=BD=D0=B5=20=D0=BF=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D0=B8=D0=BC=D0=B0=D0=B5=D1=82=20*metrics.CacheMetrics,=20?= =?UTF-8?q?=D0=B0=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B8=D1=80=D1=83=D0=B5?= =?UTF-8?q?=D1=82=20=D0=B5=D0=B3=D0=BE=20=D0=B2=D0=BD=D1=83=D1=82=D1=80?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/cache/metrics_middleware.go | 19 ++++++++++++------- pkg/metrics/cache.go | 27 ++++++++++++--------------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/pkg/cache/metrics_middleware.go b/pkg/cache/metrics_middleware.go index a9104490..2f3f6fe5 100644 --- a/pkg/cache/metrics_middleware.go +++ b/pkg/cache/metrics_middleware.go @@ -8,26 +8,31 @@ import ( otelmetric "go.opentelemetry.io/otel/metric" ) -type metricsMiddleware struct { +type telemetryMiddleware struct { next Cache cacheMetrics *metrics.CacheMetrics attributes otelmetric.MeasurementOption } -// MetricsMiddleware возвращает обертку над кэшем, которая используется для отслеживания количества хитов и промахов в кэше. -func MetricsMiddleware(next Cache, cacheMetrics *metrics.CacheMetrics, keyValues ...attribute.KeyValue) Cache { - return &metricsMiddleware{ +// TelemetryMiddleware возвращает обертку над кэшем, которая используется для отслеживания количества хитов и промахов в кэше. +func TelemetryMiddleware(next Cache, scope string, keyValues ...attribute.KeyValue) Cache { + cacheMetrics, err := metrics.NewCacheMetrics(scope) + if err != nil { + panic(err) + } + + return &telemetryMiddleware{ next: next, cacheMetrics: cacheMetrics, attributes: otelmetric.WithAttributes(keyValues...), } } -func (c *metricsMiddleware) Set(key, value any) error { +func (c *telemetryMiddleware) Set(key, value any) error { return c.next.Set(key, value) } -func (c *metricsMiddleware) Get(key any) (any, error) { +func (c *telemetryMiddleware) Get(key any) (any, error) { value, err := c.next.Get(key) if err != nil { c.cacheMetrics.MissesTotal.Add(context.TODO(), 1, c.attributes) @@ -37,7 +42,7 @@ func (c *metricsMiddleware) Get(key any) (any, error) { return value, nil } -func (c *metricsMiddleware) Remove(key any) error { +func (c *telemetryMiddleware) Remove(key any) error { c.cacheMetrics.InvalidatesTotal.Add(context.TODO(), 1, c.attributes) return c.next.Remove(key) } diff --git a/pkg/metrics/cache.go b/pkg/metrics/cache.go index 11cec0bd..b7e92382 100644 --- a/pkg/metrics/cache.go +++ b/pkg/metrics/cache.go @@ -12,32 +12,29 @@ type CacheMetrics struct { } func NewCacheMetrics(scope string) (*CacheMetrics, error) { - meter := otel.Meter(scope) + var ( + meter = otel.Meter(scope) + cacheMetrics *CacheMetrics + err error + ) - hitsTotal, err := meter.Int64Counter("cache_hits", + if cacheMetrics.HitsTotal, err = meter.Int64Counter("cache_hits", otelmetric.WithDescription("Количество найденных в кэше значений"), - ) - if err != nil { + ); err != nil { return nil, err } - missesTotal, err := meter.Int64Counter("cache_misses", + if cacheMetrics.MissesTotal, err = meter.Int64Counter("cache_misses", otelmetric.WithDescription("Количество не найденных в кэше значений"), - ) - if err != nil { + ); err != nil { return nil, err } - invalidatesTotal, err := meter.Int64Counter("cache_invalidates", + if cacheMetrics.InvalidatesTotal, err = meter.Int64Counter("cache_invalidates", otelmetric.WithDescription("Количество инвалидаций кэша"), - ) - if err != nil { + ); err != nil { return nil, err } - return &CacheMetrics{ - HitsTotal: hitsTotal, - MissesTotal: missesTotal, - InvalidatesTotal: invalidatesTotal, - }, nil + return cacheMetrics, nil } -- GitLab