From 2acfd0aa8f1a24123be749d44fea33dc8a11d285 Mon Sep 17 00:00:00 2001 From: ensiouel <ensiouel@gmail.com> Date: Tue, 26 Dec 2023 15:29:19 +0300 Subject: [PATCH] Revert "fix type telemetry template" This reverts commit 4a4c3f1c3ae7400a86169e4192230a864d663acd. --- assets/templates/middleware/telemetry | 40 +- images/middleware/telemetry_middleware.go | 40 +- pkg/cache/telemetry_middleware.go | 2 +- .../middleware/telemetry_middleware.go | 184 +++---- .../middleware/telemetry_middleware.go | 136 +++--- .../middleware/telemetry_middleware.go | 184 +++---- .../middleware/telemetry_middleware.go | 208 ++++---- .../middleware/telemetry_middleware.go | 208 ++++---- pkg/files/middleware/telemetry_middleware.go | 184 +++---- .../middleware/telemetry_middleware.go | 136 +++--- pkg/items/middleware/telemetry_middleware.go | 448 +++++++++--------- .../middleware/telemetry_middleware.go | 88 ++-- .../middleware/telemetry_middleware.go | 160 +++---- .../middleware/telemetry_middleware.go | 136 +++--- .../middleware/telemetry_middleware.go | 64 +-- pkg/roles/middleware/telemetry_middleware.go | 136 +++--- pkg/spaces/middleware/telemetry_middleware.go | 256 +++++----- {telemetry => pkg/telemetry}/metrics/cache.go | 0 .../telemetry}/metrics/request.go | 0 pkg/users/middleware/telemetry_middleware.go | 160 +++---- 20 files changed, 1385 insertions(+), 1385 deletions(-) rename {telemetry => pkg/telemetry}/metrics/cache.go (100%) rename {telemetry => pkg/telemetry}/metrics/request.go (100%) diff --git a/assets/templates/middleware/telemetry b/assets/templates/middleware/telemetry index 57be255c..554dee3f 100644 --- a/assets/templates/middleware/telemetry +++ b/assets/templates/middleware/telemetry @@ -2,7 +2,7 @@ import ( "context" "time" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -15,61 +15,61 @@ import ( // {{$decorator}} implements {{.Interface.Type}} interface instrumented with opentracing spans type {{$decorator}} struct { {{.Interface.Type}} - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // {{$funcName}} returns {{$decorator}} -func {{$funcName}} (base {{.Interface.Type}}, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) {{$decorator}} { +func {{$funcName}} (base {{.Interface.Type}}, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) {{$decorator}} { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := {{$decorator}} { + d := {{$decorator}} { {{.Interface.Name}}: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } {{range $method := .Interface.Methods}} {{if $method.AcceptsContext}} // {{$method.Name}} implements {{$.Interface.Type}} -func (m {{$decorator}}) {{$method.Declaration}} { +func (_d {{$decorator}}) {{$method.Declaration}} { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "{{ $.Interface.Name }}"), attribute.String("method", "{{ $method.Name }}"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "{{$.Interface.Name}}.{{$method.Name}}") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "{{$.Interface.Name}}.{{$method.Name}}") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, {{$method.ParamsMap}}, {{$method.ResultsMap}}) + if _d._spanDecorator != nil { + _d._spanDecorator(_span, {{$method.ParamsMap}}, {{$method.ResultsMap}}) }{{- if $method.ReturnsError}} else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } {{end}} - span.End() + _span.End() }() - {{$method.Pass (printf "m.%s." $.Interface.Name) }} + {{$method.Pass (printf "_d.%s." $.Interface.Name) }} } {{end}} {{end}} \ No newline at end of file diff --git a/images/middleware/telemetry_middleware.go b/images/middleware/telemetry_middleware.go index 1a450dc8..bb5d217a 100644 --- a/images/middleware/telemetry_middleware.go +++ b/images/middleware/telemetry_middleware.go @@ -12,7 +12,7 @@ import ( "git.perx.ru/perxis/perxis-go/images" "git.perx.ru/perxis/perxis-go/pkg/files" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -22,62 +22,62 @@ import ( // telemetryMiddleware implements images.Images interface instrumented with opentracing spans type telemetryMiddleware struct { images.Images - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base images.Images, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base images.Images, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Images: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Get implements images.Images -func (m telemetryMiddleware) Get(ctx context.Context, source *files.File, opts *images.GetOptions) (result *files.File, err error) { +func (_d telemetryMiddleware) Get(ctx context.Context, source *files.File, opts *images.GetOptions) (result *files.File, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Images"), attribute.String("method", "Get"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Images.Get") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Images.Get") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "source": source, "opts": opts}, map[string]interface{}{ "result": result, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Images.Get(ctx, source, opts) + return _d.Images.Get(ctx, source, opts) } diff --git a/pkg/cache/telemetry_middleware.go b/pkg/cache/telemetry_middleware.go index cd6cbb99..5c22fcce 100644 --- a/pkg/cache/telemetry_middleware.go +++ b/pkg/cache/telemetry_middleware.go @@ -3,7 +3,7 @@ package cache import ( "context" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" ) diff --git a/pkg/clients/middleware/telemetry_middleware.go b/pkg/clients/middleware/telemetry_middleware.go index d5b3e54e..35782f7f 100644 --- a/pkg/clients/middleware/telemetry_middleware.go +++ b/pkg/clients/middleware/telemetry_middleware.go @@ -11,7 +11,7 @@ import ( "time" "git.perx.ru/perxis/perxis-go/pkg/clients" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -21,267 +21,267 @@ import ( // telemetryMiddleware implements clients.Clients interface instrumented with opentracing spans type telemetryMiddleware struct { clients.Clients - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base clients.Clients, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base clients.Clients, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Clients: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Create implements clients.Clients -func (m telemetryMiddleware) Create(ctx context.Context, client *clients.Client) (created *clients.Client, err error) { +func (_d telemetryMiddleware) Create(ctx context.Context, client *clients.Client) (created *clients.Client, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Clients"), attribute.String("method", "Create"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Clients.Create") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Clients.Create") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "client": client}, map[string]interface{}{ "created": created, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Clients.Create(ctx, client) + return _d.Clients.Create(ctx, client) } // Delete implements clients.Clients -func (m telemetryMiddleware) Delete(ctx context.Context, spaceId string, id string) (err error) { +func (_d telemetryMiddleware) Delete(ctx context.Context, spaceId string, id string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Clients"), attribute.String("method", "Delete"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Clients.Delete") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Clients.Delete") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "id": id}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Clients.Delete(ctx, spaceId, id) + return _d.Clients.Delete(ctx, spaceId, id) } // Enable implements clients.Clients -func (m telemetryMiddleware) Enable(ctx context.Context, spaceId string, id string, enable bool) (err error) { +func (_d telemetryMiddleware) Enable(ctx context.Context, spaceId string, id string, enable bool) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Clients"), attribute.String("method", "Enable"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Clients.Enable") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Clients.Enable") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "id": id, "enable": enable}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Clients.Enable(ctx, spaceId, id, enable) + return _d.Clients.Enable(ctx, spaceId, id, enable) } // Get implements clients.Clients -func (m telemetryMiddleware) Get(ctx context.Context, spaceId string, id string) (client *clients.Client, err error) { +func (_d telemetryMiddleware) Get(ctx context.Context, spaceId string, id string) (client *clients.Client, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Clients"), attribute.String("method", "Get"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Clients.Get") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Clients.Get") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "id": id}, map[string]interface{}{ "client": client, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Clients.Get(ctx, spaceId, id) + return _d.Clients.Get(ctx, spaceId, id) } // GetBy implements clients.Clients -func (m telemetryMiddleware) GetBy(ctx context.Context, spaceId string, params *clients.GetByParams) (client *clients.Client, err error) { +func (_d telemetryMiddleware) GetBy(ctx context.Context, spaceId string, params *clients.GetByParams) (client *clients.Client, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Clients"), attribute.String("method", "GetBy"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Clients.GetBy") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Clients.GetBy") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "params": params}, map[string]interface{}{ "client": client, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Clients.GetBy(ctx, spaceId, params) + return _d.Clients.GetBy(ctx, spaceId, params) } // List implements clients.Clients -func (m telemetryMiddleware) List(ctx context.Context, spaceId string) (clients []*clients.Client, err error) { +func (_d telemetryMiddleware) List(ctx context.Context, spaceId string) (clients []*clients.Client, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Clients"), attribute.String("method", "List"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Clients.List") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Clients.List") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId}, map[string]interface{}{ "clients": clients, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Clients.List(ctx, spaceId) + return _d.Clients.List(ctx, spaceId) } // Update implements clients.Clients -func (m telemetryMiddleware) Update(ctx context.Context, client *clients.Client) (err error) { +func (_d telemetryMiddleware) Update(ctx context.Context, client *clients.Client) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Clients"), attribute.String("method", "Update"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Clients.Update") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Clients.Update") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "client": client}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Clients.Update(ctx, client) + return _d.Clients.Update(ctx, client) } diff --git a/pkg/collaborators/middleware/telemetry_middleware.go b/pkg/collaborators/middleware/telemetry_middleware.go index 457f0995..6ad967e4 100644 --- a/pkg/collaborators/middleware/telemetry_middleware.go +++ b/pkg/collaborators/middleware/telemetry_middleware.go @@ -11,7 +11,7 @@ import ( "time" "git.perx.ru/perxis/perxis-go/pkg/collaborators" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -21,199 +21,199 @@ import ( // telemetryMiddleware implements collaborators.Collaborators interface instrumented with opentracing spans type telemetryMiddleware struct { collaborators.Collaborators - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base collaborators.Collaborators, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base collaborators.Collaborators, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Collaborators: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Get implements collaborators.Collaborators -func (m telemetryMiddleware) Get(ctx context.Context, spaceId string, subject string) (role string, err error) { +func (_d telemetryMiddleware) Get(ctx context.Context, spaceId string, subject string) (role string, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Collaborators"), attribute.String("method", "Get"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Collaborators.Get") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Collaborators.Get") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "subject": subject}, map[string]interface{}{ "role": role, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Collaborators.Get(ctx, spaceId, subject) + return _d.Collaborators.Get(ctx, spaceId, subject) } // ListCollaborators implements collaborators.Collaborators -func (m telemetryMiddleware) ListCollaborators(ctx context.Context, spaceId string) (collaborators []*collaborators.Collaborator, err error) { +func (_d telemetryMiddleware) ListCollaborators(ctx context.Context, spaceId string) (collaborators []*collaborators.Collaborator, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Collaborators"), attribute.String("method", "ListCollaborators"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Collaborators.ListCollaborators") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Collaborators.ListCollaborators") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId}, map[string]interface{}{ "collaborators": collaborators, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Collaborators.ListCollaborators(ctx, spaceId) + return _d.Collaborators.ListCollaborators(ctx, spaceId) } // ListSpaces implements collaborators.Collaborators -func (m telemetryMiddleware) ListSpaces(ctx context.Context, subject string) (spaces []*collaborators.Collaborator, err error) { +func (_d telemetryMiddleware) ListSpaces(ctx context.Context, subject string) (spaces []*collaborators.Collaborator, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Collaborators"), attribute.String("method", "ListSpaces"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Collaborators.ListSpaces") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Collaborators.ListSpaces") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "subject": subject}, map[string]interface{}{ "spaces": spaces, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Collaborators.ListSpaces(ctx, subject) + return _d.Collaborators.ListSpaces(ctx, subject) } // Remove implements collaborators.Collaborators -func (m telemetryMiddleware) Remove(ctx context.Context, spaceId string, subject string) (err error) { +func (_d telemetryMiddleware) Remove(ctx context.Context, spaceId string, subject string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Collaborators"), attribute.String("method", "Remove"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Collaborators.Remove") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Collaborators.Remove") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "subject": subject}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Collaborators.Remove(ctx, spaceId, subject) + return _d.Collaborators.Remove(ctx, spaceId, subject) } // Set implements collaborators.Collaborators -func (m telemetryMiddleware) Set(ctx context.Context, spaceId string, subject string, role string) (err error) { +func (_d telemetryMiddleware) Set(ctx context.Context, spaceId string, subject string, role string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Collaborators"), attribute.String("method", "Set"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Collaborators.Set") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Collaborators.Set") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "subject": subject, "role": role}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Collaborators.Set(ctx, spaceId, subject, role) + return _d.Collaborators.Set(ctx, spaceId, subject, role) } diff --git a/pkg/collections/middleware/telemetry_middleware.go b/pkg/collections/middleware/telemetry_middleware.go index cfaa9355..bd4f4c90 100644 --- a/pkg/collections/middleware/telemetry_middleware.go +++ b/pkg/collections/middleware/telemetry_middleware.go @@ -12,7 +12,7 @@ import ( "git.perx.ru/perxis/perxis-go/pkg/collections" "git.perx.ru/perxis/perxis-go/pkg/schema" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -22,117 +22,117 @@ import ( // telemetryMiddleware implements collections.Collections interface instrumented with opentracing spans type telemetryMiddleware struct { collections.Collections - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base collections.Collections, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base collections.Collections, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Collections: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Create implements collections.Collections -func (m telemetryMiddleware) Create(ctx context.Context, collection *collections.Collection) (created *collections.Collection, err error) { +func (_d telemetryMiddleware) Create(ctx context.Context, collection *collections.Collection) (created *collections.Collection, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Collections"), attribute.String("method", "Create"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Collections.Create") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Collections.Create") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "collection": collection}, map[string]interface{}{ "created": created, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Collections.Create(ctx, collection) + return _d.Collections.Create(ctx, collection) } // Delete implements collections.Collections -func (m telemetryMiddleware) Delete(ctx context.Context, spaceId string, envId string, collectionId string) (err error) { +func (_d telemetryMiddleware) Delete(ctx context.Context, spaceId string, envId string, collectionId string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Collections"), attribute.String("method", "Delete"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Collections.Delete") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Collections.Delete") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, "collectionId": collectionId}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Collections.Delete(ctx, spaceId, envId, collectionId) + return _d.Collections.Delete(ctx, spaceId, envId, collectionId) } // Get implements collections.Collections -func (m telemetryMiddleware) Get(ctx context.Context, spaceId string, envId string, collectionId string, options ...*collections.GetOptions) (collection *collections.Collection, err error) { +func (_d telemetryMiddleware) Get(ctx context.Context, spaceId string, envId string, collectionId string, options ...*collections.GetOptions) (collection *collections.Collection, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Collections"), attribute.String("method", "Get"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Collections.Get") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Collections.Get") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -141,35 +141,35 @@ func (m telemetryMiddleware) Get(ctx context.Context, spaceId string, envId stri "collection": collection, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Collections.Get(ctx, spaceId, envId, collectionId, options...) + return _d.Collections.Get(ctx, spaceId, envId, collectionId, options...) } // List implements collections.Collections -func (m telemetryMiddleware) List(ctx context.Context, spaceId string, envId string, filter *collections.Filter) (collections []*collections.Collection, err error) { +func (_d telemetryMiddleware) List(ctx context.Context, spaceId string, envId string, filter *collections.Filter) (collections []*collections.Collection, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Collections"), attribute.String("method", "List"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Collections.List") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Collections.List") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -177,35 +177,35 @@ func (m telemetryMiddleware) List(ctx context.Context, spaceId string, envId str "collections": collections, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Collections.List(ctx, spaceId, envId, filter) + return _d.Collections.List(ctx, spaceId, envId, filter) } // SetSchema implements collections.Collections -func (m telemetryMiddleware) SetSchema(ctx context.Context, spaceId string, envId string, collectionId string, schema *schema.Schema) (err error) { +func (_d telemetryMiddleware) SetSchema(ctx context.Context, spaceId string, envId string, collectionId string, schema *schema.Schema) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Collections"), attribute.String("method", "SetSchema"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Collections.SetSchema") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Collections.SetSchema") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -213,35 +213,35 @@ func (m telemetryMiddleware) SetSchema(ctx context.Context, spaceId string, envI "schema": schema}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Collections.SetSchema(ctx, spaceId, envId, collectionId, schema) + return _d.Collections.SetSchema(ctx, spaceId, envId, collectionId, schema) } // SetState implements collections.Collections -func (m telemetryMiddleware) SetState(ctx context.Context, spaceId string, envId string, collectionId string, state *collections.StateInfo) (err error) { +func (_d telemetryMiddleware) SetState(ctx context.Context, spaceId string, envId string, collectionId string, state *collections.StateInfo) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Collections"), attribute.String("method", "SetState"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Collections.SetState") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Collections.SetState") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -249,47 +249,47 @@ func (m telemetryMiddleware) SetState(ctx context.Context, spaceId string, envId "state": state}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Collections.SetState(ctx, spaceId, envId, collectionId, state) + return _d.Collections.SetState(ctx, spaceId, envId, collectionId, state) } // Update implements collections.Collections -func (m telemetryMiddleware) Update(ctx context.Context, coll *collections.Collection) (err error) { +func (_d telemetryMiddleware) Update(ctx context.Context, coll *collections.Collection) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Collections"), attribute.String("method", "Update"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Collections.Update") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Collections.Update") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "coll": coll}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Collections.Update(ctx, coll) + return _d.Collections.Update(ctx, coll) } diff --git a/pkg/delivery/middleware/telemetry_middleware.go b/pkg/delivery/middleware/telemetry_middleware.go index cd7f5211..8252c536 100644 --- a/pkg/delivery/middleware/telemetry_middleware.go +++ b/pkg/delivery/middleware/telemetry_middleware.go @@ -15,7 +15,7 @@ import ( "git.perx.ru/perxis/perxis-go/pkg/environments" "git.perx.ru/perxis/perxis-go/pkg/items" "git.perx.ru/perxis/perxis-go/pkg/locales" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -25,48 +25,48 @@ import ( // telemetryMiddleware implements delivery.Delivery interface instrumented with opentracing spans type telemetryMiddleware struct { delivery.Delivery - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base delivery.Delivery, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base delivery.Delivery, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Delivery: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Aggregate implements delivery.Delivery -func (m telemetryMiddleware) Aggregate(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregatePublishedOptions) (result map[string]interface{}, err error) { +func (_d telemetryMiddleware) Aggregate(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregatePublishedOptions) (result map[string]interface{}, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Delivery"), attribute.String("method", "Aggregate"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Delivery.Aggregate") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Delivery.Aggregate") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -76,35 +76,35 @@ func (m telemetryMiddleware) Aggregate(ctx context.Context, spaceId string, envI "result": result, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Delivery.Aggregate(ctx, spaceId, envId, collectionId, filter, options...) + return _d.Delivery.Aggregate(ctx, spaceId, envId, collectionId, filter, options...) } // FindItems implements delivery.Delivery -func (m telemetryMiddleware) FindItems(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindPublishedOptions) (items []*items.Item, total int, err error) { +func (_d telemetryMiddleware) FindItems(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindPublishedOptions) (items []*items.Item, total int, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Delivery"), attribute.String("method", "FindItems"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Delivery.FindItems") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Delivery.FindItems") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -115,35 +115,35 @@ func (m telemetryMiddleware) FindItems(ctx context.Context, spaceId string, envI "total": total, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Delivery.FindItems(ctx, spaceId, envId, collectionId, filter, options...) + return _d.Delivery.FindItems(ctx, spaceId, envId, collectionId, filter, options...) } // GetCollection implements delivery.Delivery -func (m telemetryMiddleware) GetCollection(ctx context.Context, spaceId string, envId string, collectionId string) (collection *collections.Collection, err error) { +func (_d telemetryMiddleware) GetCollection(ctx context.Context, spaceId string, envId string, collectionId string) (collection *collections.Collection, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Delivery"), attribute.String("method", "GetCollection"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Delivery.GetCollection") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Delivery.GetCollection") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -151,70 +151,70 @@ func (m telemetryMiddleware) GetCollection(ctx context.Context, spaceId string, "collection": collection, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Delivery.GetCollection(ctx, spaceId, envId, collectionId) + return _d.Delivery.GetCollection(ctx, spaceId, envId, collectionId) } // GetEnvironment implements delivery.Delivery -func (m telemetryMiddleware) GetEnvironment(ctx context.Context, spaceId string, envId string) (env *environments.Environment, err error) { +func (_d telemetryMiddleware) GetEnvironment(ctx context.Context, spaceId string, envId string) (env *environments.Environment, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Delivery"), attribute.String("method", "GetEnvironment"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Delivery.GetEnvironment") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Delivery.GetEnvironment") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId}, map[string]interface{}{ "env": env, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Delivery.GetEnvironment(ctx, spaceId, envId) + return _d.Delivery.GetEnvironment(ctx, spaceId, envId) } // GetItem implements delivery.Delivery -func (m telemetryMiddleware) GetItem(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetPublishedOptions) (item *items.Item, err error) { +func (_d telemetryMiddleware) GetItem(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetPublishedOptions) (item *items.Item, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Delivery"), attribute.String("method", "GetItem"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Delivery.GetItem") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Delivery.GetItem") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -224,117 +224,117 @@ func (m telemetryMiddleware) GetItem(ctx context.Context, spaceId string, envId "item": item, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Delivery.GetItem(ctx, spaceId, envId, collectionId, itemId, options...) + return _d.Delivery.GetItem(ctx, spaceId, envId, collectionId, itemId, options...) } // ListCollections implements delivery.Delivery -func (m telemetryMiddleware) ListCollections(ctx context.Context, spaceId string, envId string) (collections []*collections.Collection, err error) { +func (_d telemetryMiddleware) ListCollections(ctx context.Context, spaceId string, envId string) (collections []*collections.Collection, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Delivery"), attribute.String("method", "ListCollections"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Delivery.ListCollections") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Delivery.ListCollections") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId}, map[string]interface{}{ "collections": collections, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Delivery.ListCollections(ctx, spaceId, envId) + return _d.Delivery.ListCollections(ctx, spaceId, envId) } // ListEnvironments implements delivery.Delivery -func (m telemetryMiddleware) ListEnvironments(ctx context.Context, spaceId string) (envs []*environments.Environment, err error) { +func (_d telemetryMiddleware) ListEnvironments(ctx context.Context, spaceId string) (envs []*environments.Environment, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Delivery"), attribute.String("method", "ListEnvironments"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Delivery.ListEnvironments") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Delivery.ListEnvironments") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId}, map[string]interface{}{ "envs": envs, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Delivery.ListEnvironments(ctx, spaceId) + return _d.Delivery.ListEnvironments(ctx, spaceId) } // ListLocales implements delivery.Delivery -func (m telemetryMiddleware) ListLocales(ctx context.Context, spaceId string) (locales []*locales.Locale, err error) { +func (_d telemetryMiddleware) ListLocales(ctx context.Context, spaceId string) (locales []*locales.Locale, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Delivery"), attribute.String("method", "ListLocales"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Delivery.ListLocales") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Delivery.ListLocales") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId}, map[string]interface{}{ "locales": locales, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Delivery.ListLocales(ctx, spaceId) + return _d.Delivery.ListLocales(ctx, spaceId) } diff --git a/pkg/environments/middleware/telemetry_middleware.go b/pkg/environments/middleware/telemetry_middleware.go index 7d21b264..4a46b9aa 100644 --- a/pkg/environments/middleware/telemetry_middleware.go +++ b/pkg/environments/middleware/telemetry_middleware.go @@ -11,7 +11,7 @@ import ( "time" "git.perx.ru/perxis/perxis-go/pkg/environments" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -21,302 +21,302 @@ import ( // telemetryMiddleware implements environments.Environments interface instrumented with opentracing spans type telemetryMiddleware struct { environments.Environments - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base environments.Environments, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base environments.Environments, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Environments: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Create implements environments.Environments -func (m telemetryMiddleware) Create(ctx context.Context, env *environments.Environment) (created *environments.Environment, err error) { +func (_d telemetryMiddleware) Create(ctx context.Context, env *environments.Environment) (created *environments.Environment, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Environments"), attribute.String("method", "Create"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Environments.Create") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Environments.Create") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "env": env}, map[string]interface{}{ "created": created, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Environments.Create(ctx, env) + return _d.Environments.Create(ctx, env) } // Delete implements environments.Environments -func (m telemetryMiddleware) Delete(ctx context.Context, spaceId string, envId string) (err error) { +func (_d telemetryMiddleware) Delete(ctx context.Context, spaceId string, envId string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Environments"), attribute.String("method", "Delete"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Environments.Delete") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Environments.Delete") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Environments.Delete(ctx, spaceId, envId) + return _d.Environments.Delete(ctx, spaceId, envId) } // Get implements environments.Environments -func (m telemetryMiddleware) Get(ctx context.Context, spaceId string, envId string) (env *environments.Environment, err error) { +func (_d telemetryMiddleware) Get(ctx context.Context, spaceId string, envId string) (env *environments.Environment, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Environments"), attribute.String("method", "Get"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Environments.Get") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Environments.Get") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId}, map[string]interface{}{ "env": env, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Environments.Get(ctx, spaceId, envId) + return _d.Environments.Get(ctx, spaceId, envId) } // List implements environments.Environments -func (m telemetryMiddleware) List(ctx context.Context, spaceId string) (envs []*environments.Environment, err error) { +func (_d telemetryMiddleware) List(ctx context.Context, spaceId string) (envs []*environments.Environment, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Environments"), attribute.String("method", "List"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Environments.List") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Environments.List") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId}, map[string]interface{}{ "envs": envs, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Environments.List(ctx, spaceId) + return _d.Environments.List(ctx, spaceId) } // Migrate implements environments.Environments -func (m telemetryMiddleware) Migrate(ctx context.Context, spaceId string, envId string, options ...*environments.MigrateOptions) (err error) { +func (_d telemetryMiddleware) Migrate(ctx context.Context, spaceId string, envId string, options ...*environments.MigrateOptions) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Environments"), attribute.String("method", "Migrate"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Environments.Migrate") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Environments.Migrate") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, "options": options}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Environments.Migrate(ctx, spaceId, envId, options...) + return _d.Environments.Migrate(ctx, spaceId, envId, options...) } // RemoveAlias implements environments.Environments -func (m telemetryMiddleware) RemoveAlias(ctx context.Context, spaceId string, envId string, alias string) (err error) { +func (_d telemetryMiddleware) RemoveAlias(ctx context.Context, spaceId string, envId string, alias string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Environments"), attribute.String("method", "RemoveAlias"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Environments.RemoveAlias") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Environments.RemoveAlias") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, "alias": alias}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Environments.RemoveAlias(ctx, spaceId, envId, alias) + return _d.Environments.RemoveAlias(ctx, spaceId, envId, alias) } // SetAlias implements environments.Environments -func (m telemetryMiddleware) SetAlias(ctx context.Context, spaceId string, envId string, alias string) (err error) { +func (_d telemetryMiddleware) SetAlias(ctx context.Context, spaceId string, envId string, alias string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Environments"), attribute.String("method", "SetAlias"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Environments.SetAlias") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Environments.SetAlias") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, "alias": alias}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Environments.SetAlias(ctx, spaceId, envId, alias) + return _d.Environments.SetAlias(ctx, spaceId, envId, alias) } // Update implements environments.Environments -func (m telemetryMiddleware) Update(ctx context.Context, env *environments.Environment) (err error) { +func (_d telemetryMiddleware) Update(ctx context.Context, env *environments.Environment) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Environments"), attribute.String("method", "Update"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Environments.Update") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Environments.Update") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "env": env}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Environments.Update(ctx, env) + return _d.Environments.Update(ctx, env) } diff --git a/pkg/files/middleware/telemetry_middleware.go b/pkg/files/middleware/telemetry_middleware.go index a65a52a5..d282c065 100644 --- a/pkg/files/middleware/telemetry_middleware.go +++ b/pkg/files/middleware/telemetry_middleware.go @@ -11,7 +11,7 @@ import ( "time" "git.perx.ru/perxis/perxis-go/pkg/files" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -21,263 +21,263 @@ import ( // telemetryMiddleware implements files.Files interface instrumented with opentracing spans type telemetryMiddleware struct { files.Files - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base files.Files, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base files.Files, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Files: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // AbortUpload implements files.Files -func (m telemetryMiddleware) AbortUpload(ctx context.Context, upload *files.MultipartUpload) (err error) { +func (_d telemetryMiddleware) AbortUpload(ctx context.Context, upload *files.MultipartUpload) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Files"), attribute.String("method", "AbortUpload"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Files.AbortUpload") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Files.AbortUpload") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "upload": upload}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Files.AbortUpload(ctx, upload) + return _d.Files.AbortUpload(ctx, upload) } // CompleteUpload implements files.Files -func (m telemetryMiddleware) CompleteUpload(ctx context.Context, upload *files.MultipartUpload) (u *files.MultipartUpload, err error) { +func (_d telemetryMiddleware) CompleteUpload(ctx context.Context, upload *files.MultipartUpload) (u *files.MultipartUpload, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Files"), attribute.String("method", "CompleteUpload"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Files.CompleteUpload") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Files.CompleteUpload") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "upload": upload}, map[string]interface{}{ "u": u, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Files.CompleteUpload(ctx, upload) + return _d.Files.CompleteUpload(ctx, upload) } // DeleteFile implements files.Files -func (m telemetryMiddleware) DeleteFile(ctx context.Context, file *files.File) (err error) { +func (_d telemetryMiddleware) DeleteFile(ctx context.Context, file *files.File) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Files"), attribute.String("method", "DeleteFile"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Files.DeleteFile") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Files.DeleteFile") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "file": file}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Files.DeleteFile(ctx, file) + return _d.Files.DeleteFile(ctx, file) } // GetFile implements files.Files -func (m telemetryMiddleware) GetFile(ctx context.Context, file *files.File) (f *files.File, err error) { +func (_d telemetryMiddleware) GetFile(ctx context.Context, file *files.File) (f *files.File, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Files"), attribute.String("method", "GetFile"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Files.GetFile") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Files.GetFile") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "file": file}, map[string]interface{}{ "f": f, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Files.GetFile(ctx, file) + return _d.Files.GetFile(ctx, file) } // MoveUpload implements files.Files -func (m telemetryMiddleware) MoveUpload(ctx context.Context, upload *files.MultipartUpload) (file *files.File, err error) { +func (_d telemetryMiddleware) MoveUpload(ctx context.Context, upload *files.MultipartUpload) (file *files.File, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Files"), attribute.String("method", "MoveUpload"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Files.MoveUpload") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Files.MoveUpload") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "upload": upload}, map[string]interface{}{ "file": file, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Files.MoveUpload(ctx, upload) + return _d.Files.MoveUpload(ctx, upload) } // StartUpload implements files.Files -func (m telemetryMiddleware) StartUpload(ctx context.Context, upload *files.MultipartUpload) (u *files.MultipartUpload, err error) { +func (_d telemetryMiddleware) StartUpload(ctx context.Context, upload *files.MultipartUpload) (u *files.MultipartUpload, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Files"), attribute.String("method", "StartUpload"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Files.StartUpload") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Files.StartUpload") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "upload": upload}, map[string]interface{}{ "u": u, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Files.StartUpload(ctx, upload) + return _d.Files.StartUpload(ctx, upload) } // Upload implements files.Files -func (m telemetryMiddleware) Upload(ctx context.Context, file *files.File) (u *files.Upload, err error) { +func (_d telemetryMiddleware) Upload(ctx context.Context, file *files.File) (u *files.Upload, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Files"), attribute.String("method", "Upload"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Files.Upload") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Files.Upload") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "file": file}, map[string]interface{}{ "u": u, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Files.Upload(ctx, file) + return _d.Files.Upload(ctx, file) } diff --git a/pkg/invitations/middleware/telemetry_middleware.go b/pkg/invitations/middleware/telemetry_middleware.go index 78bc0857..01f91983 100644 --- a/pkg/invitations/middleware/telemetry_middleware.go +++ b/pkg/invitations/middleware/telemetry_middleware.go @@ -12,7 +12,7 @@ import ( "git.perx.ru/perxis/perxis-go/pkg/invitations" "git.perx.ru/perxis/perxis-go/pkg/options" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -22,149 +22,149 @@ import ( // telemetryMiddleware implements invitations.Invitations interface instrumented with opentracing spans type telemetryMiddleware struct { invitations.Invitations - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base invitations.Invitations, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base invitations.Invitations, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Invitations: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Accept implements invitations.Invitations -func (m telemetryMiddleware) Accept(ctx context.Context, invitationId string, userId string) (err error) { +func (_d telemetryMiddleware) Accept(ctx context.Context, invitationId string, userId string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Invitations"), attribute.String("method", "Accept"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Invitations.Accept") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Invitations.Accept") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "invitationId": invitationId, "userId": userId}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Invitations.Accept(ctx, invitationId, userId) + return _d.Invitations.Accept(ctx, invitationId, userId) } // Create implements invitations.Invitations -func (m telemetryMiddleware) Create(ctx context.Context, invitation *invitations.Invitation) (created *invitations.Invitation, err error) { +func (_d telemetryMiddleware) Create(ctx context.Context, invitation *invitations.Invitation) (created *invitations.Invitation, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Invitations"), attribute.String("method", "Create"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Invitations.Create") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Invitations.Create") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "invitation": invitation}, map[string]interface{}{ "created": created, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Invitations.Create(ctx, invitation) + return _d.Invitations.Create(ctx, invitation) } // Delete implements invitations.Invitations -func (m telemetryMiddleware) Delete(ctx context.Context, invitationId string) (err error) { +func (_d telemetryMiddleware) Delete(ctx context.Context, invitationId string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Invitations"), attribute.String("method", "Delete"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Invitations.Delete") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Invitations.Delete") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "invitationId": invitationId}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Invitations.Delete(ctx, invitationId) + return _d.Invitations.Delete(ctx, invitationId) } // Find implements invitations.Invitations -func (m telemetryMiddleware) Find(ctx context.Context, filter *invitations.Filter, opts *options.FindOptions) (invitations []*invitations.Invitation, total int, err error) { +func (_d telemetryMiddleware) Find(ctx context.Context, filter *invitations.Filter, opts *options.FindOptions) (invitations []*invitations.Invitation, total int, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Invitations"), attribute.String("method", "Find"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Invitations.Find") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Invitations.Find") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "filter": filter, "opts": opts}, map[string]interface{}{ @@ -172,48 +172,48 @@ func (m telemetryMiddleware) Find(ctx context.Context, filter *invitations.Filte "total": total, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Invitations.Find(ctx, filter, opts) + return _d.Invitations.Find(ctx, filter, opts) } // Get implements invitations.Invitations -func (m telemetryMiddleware) Get(ctx context.Context, invitationId string) (invitation *invitations.Invitation, err error) { +func (_d telemetryMiddleware) Get(ctx context.Context, invitationId string) (invitation *invitations.Invitation, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Invitations"), attribute.String("method", "Get"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Invitations.Get") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Invitations.Get") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "invitationId": invitationId}, map[string]interface{}{ "invitation": invitation, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Invitations.Get(ctx, invitationId) + return _d.Invitations.Get(ctx, invitationId) } diff --git a/pkg/items/middleware/telemetry_middleware.go b/pkg/items/middleware/telemetry_middleware.go index a3a79499..71d79354 100644 --- a/pkg/items/middleware/telemetry_middleware.go +++ b/pkg/items/middleware/telemetry_middleware.go @@ -12,7 +12,7 @@ import ( "git.perx.ru/perxis/perxis-go/pkg/items" "git.perx.ru/perxis/perxis-go/pkg/schema" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -22,48 +22,48 @@ import ( // telemetryMiddleware implements items.Items interface instrumented with opentracing spans type telemetryMiddleware struct { items.Items - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base items.Items, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base items.Items, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Items: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Aggregate implements items.Items -func (m telemetryMiddleware) Aggregate(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregateOptions) (result map[string]interface{}, err error) { +func (_d telemetryMiddleware) Aggregate(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregateOptions) (result map[string]interface{}, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "Aggregate"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.Aggregate") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Aggregate") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -73,35 +73,35 @@ func (m telemetryMiddleware) Aggregate(ctx context.Context, spaceId string, envI "result": result, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.Aggregate(ctx, spaceId, envId, collectionId, filter, options...) + return _d.Items.Aggregate(ctx, spaceId, envId, collectionId, filter, options...) } // AggregatePublished implements items.Items -func (m telemetryMiddleware) AggregatePublished(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregatePublishedOptions) (result map[string]interface{}, err error) { +func (_d telemetryMiddleware) AggregatePublished(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregatePublishedOptions) (result map[string]interface{}, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "AggregatePublished"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.AggregatePublished") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.AggregatePublished") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -111,138 +111,138 @@ func (m telemetryMiddleware) AggregatePublished(ctx context.Context, spaceId str "result": result, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.AggregatePublished(ctx, spaceId, envId, collectionId, filter, options...) + return _d.Items.AggregatePublished(ctx, spaceId, envId, collectionId, filter, options...) } // Archive implements items.Items -func (m telemetryMiddleware) Archive(ctx context.Context, item *items.Item, options ...*items.ArchiveOptions) (err error) { +func (_d telemetryMiddleware) Archive(ctx context.Context, item *items.Item, options ...*items.ArchiveOptions) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "Archive"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.Archive") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Archive") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "item": item, "options": options}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.Archive(ctx, item, options...) + return _d.Items.Archive(ctx, item, options...) } // Create implements items.Items -func (m telemetryMiddleware) Create(ctx context.Context, item *items.Item, opts ...*items.CreateOptions) (created *items.Item, err error) { +func (_d telemetryMiddleware) Create(ctx context.Context, item *items.Item, opts ...*items.CreateOptions) (created *items.Item, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "Create"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.Create") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Create") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "item": item, "opts": opts}, map[string]interface{}{ "created": created, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.Create(ctx, item, opts...) + return _d.Items.Create(ctx, item, opts...) } // Delete implements items.Items -func (m telemetryMiddleware) Delete(ctx context.Context, item *items.Item, options ...*items.DeleteOptions) (err error) { +func (_d telemetryMiddleware) Delete(ctx context.Context, item *items.Item, options ...*items.DeleteOptions) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "Delete"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.Delete") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Delete") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "item": item, "options": options}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.Delete(ctx, item, options...) + return _d.Items.Delete(ctx, item, options...) } // Find implements items.Items -func (m telemetryMiddleware) Find(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindOptions) (items []*items.Item, total int, err error) { +func (_d telemetryMiddleware) Find(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindOptions) (items []*items.Item, total int, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "Find"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.Find") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Find") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -253,35 +253,35 @@ func (m telemetryMiddleware) Find(ctx context.Context, spaceId string, envId str "total": total, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.Find(ctx, spaceId, envId, collectionId, filter, options...) + return _d.Items.Find(ctx, spaceId, envId, collectionId, filter, options...) } // FindArchived implements items.Items -func (m telemetryMiddleware) FindArchived(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindArchivedOptions) (items []*items.Item, total int, err error) { +func (_d telemetryMiddleware) FindArchived(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindArchivedOptions) (items []*items.Item, total int, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "FindArchived"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.FindArchived") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.FindArchived") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -292,35 +292,35 @@ func (m telemetryMiddleware) FindArchived(ctx context.Context, spaceId string, e "total": total, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.FindArchived(ctx, spaceId, envId, collectionId, filter, options...) + return _d.Items.FindArchived(ctx, spaceId, envId, collectionId, filter, options...) } // FindPublished implements items.Items -func (m telemetryMiddleware) FindPublished(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindPublishedOptions) (items []*items.Item, total int, err error) { +func (_d telemetryMiddleware) FindPublished(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindPublishedOptions) (items []*items.Item, total int, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "FindPublished"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.FindPublished") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.FindPublished") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -331,35 +331,35 @@ func (m telemetryMiddleware) FindPublished(ctx context.Context, spaceId string, "total": total, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.FindPublished(ctx, spaceId, envId, collectionId, filter, options...) + return _d.Items.FindPublished(ctx, spaceId, envId, collectionId, filter, options...) } // Get implements items.Items -func (m telemetryMiddleware) Get(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetOptions) (item *items.Item, err error) { +func (_d telemetryMiddleware) Get(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetOptions) (item *items.Item, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "Get"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.Get") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Get") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -369,35 +369,35 @@ func (m telemetryMiddleware) Get(ctx context.Context, spaceId string, envId stri "item": item, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.Get(ctx, spaceId, envId, collectionId, itemId, options...) + return _d.Items.Get(ctx, spaceId, envId, collectionId, itemId, options...) } // GetPublished implements items.Items -func (m telemetryMiddleware) GetPublished(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetPublishedOptions) (item *items.Item, err error) { +func (_d telemetryMiddleware) GetPublished(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetPublishedOptions) (item *items.Item, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "GetPublished"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.GetPublished") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.GetPublished") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -407,35 +407,35 @@ func (m telemetryMiddleware) GetPublished(ctx context.Context, spaceId string, e "item": item, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.GetPublished(ctx, spaceId, envId, collectionId, itemId, options...) + return _d.Items.GetPublished(ctx, spaceId, envId, collectionId, itemId, options...) } // GetRevision implements items.Items -func (m telemetryMiddleware) GetRevision(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, revisionId string, options ...*items.GetRevisionOptions) (item *items.Item, err error) { +func (_d telemetryMiddleware) GetRevision(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, revisionId string, options ...*items.GetRevisionOptions) (item *items.Item, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "GetRevision"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.GetRevision") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.GetRevision") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -446,35 +446,35 @@ func (m telemetryMiddleware) GetRevision(ctx context.Context, spaceId string, en "item": item, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.GetRevision(ctx, spaceId, envId, collectionId, itemId, revisionId, options...) + return _d.Items.GetRevision(ctx, spaceId, envId, collectionId, itemId, revisionId, options...) } // Introspect implements items.Items -func (m telemetryMiddleware) Introspect(ctx context.Context, item *items.Item, opts ...*items.IntrospectOptions) (itm *items.Item, sch *schema.Schema, err error) { +func (_d telemetryMiddleware) Introspect(ctx context.Context, item *items.Item, opts ...*items.IntrospectOptions) (itm *items.Item, sch *schema.Schema, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "Introspect"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.Introspect") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Introspect") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "item": item, "opts": opts}, map[string]interface{}{ @@ -482,35 +482,35 @@ func (m telemetryMiddleware) Introspect(ctx context.Context, item *items.Item, o "sch": sch, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.Introspect(ctx, item, opts...) + return _d.Items.Introspect(ctx, item, opts...) } // ListRevisions implements items.Items -func (m telemetryMiddleware) ListRevisions(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.ListRevisionsOptions) (items []*items.Item, err error) { +func (_d telemetryMiddleware) ListRevisions(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.ListRevisionsOptions) (items []*items.Item, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "ListRevisions"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.ListRevisions") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.ListRevisions") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -520,184 +520,184 @@ func (m telemetryMiddleware) ListRevisions(ctx context.Context, spaceId string, "items": items, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.ListRevisions(ctx, spaceId, envId, collectionId, itemId, options...) + return _d.Items.ListRevisions(ctx, spaceId, envId, collectionId, itemId, options...) } // Publish implements items.Items -func (m telemetryMiddleware) Publish(ctx context.Context, item *items.Item, options ...*items.PublishOptions) (err error) { +func (_d telemetryMiddleware) Publish(ctx context.Context, item *items.Item, options ...*items.PublishOptions) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "Publish"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.Publish") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Publish") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "item": item, "options": options}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.Publish(ctx, item, options...) + return _d.Items.Publish(ctx, item, options...) } // Unarchive implements items.Items -func (m telemetryMiddleware) Unarchive(ctx context.Context, item *items.Item, options ...*items.UnarchiveOptions) (err error) { +func (_d telemetryMiddleware) Unarchive(ctx context.Context, item *items.Item, options ...*items.UnarchiveOptions) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "Unarchive"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.Unarchive") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Unarchive") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "item": item, "options": options}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.Unarchive(ctx, item, options...) + return _d.Items.Unarchive(ctx, item, options...) } // Undelete implements items.Items -func (m telemetryMiddleware) Undelete(ctx context.Context, item *items.Item, options ...*items.UndeleteOptions) (err error) { +func (_d telemetryMiddleware) Undelete(ctx context.Context, item *items.Item, options ...*items.UndeleteOptions) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "Undelete"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.Undelete") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Undelete") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "item": item, "options": options}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.Undelete(ctx, item, options...) + return _d.Items.Undelete(ctx, item, options...) } // Unpublish implements items.Items -func (m telemetryMiddleware) Unpublish(ctx context.Context, item *items.Item, options ...*items.UnpublishOptions) (err error) { +func (_d telemetryMiddleware) Unpublish(ctx context.Context, item *items.Item, options ...*items.UnpublishOptions) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "Unpublish"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.Unpublish") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Unpublish") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "item": item, "options": options}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.Unpublish(ctx, item, options...) + return _d.Items.Unpublish(ctx, item, options...) } // Update implements items.Items -func (m telemetryMiddleware) Update(ctx context.Context, item *items.Item, options ...*items.UpdateOptions) (err error) { +func (_d telemetryMiddleware) Update(ctx context.Context, item *items.Item, options ...*items.UpdateOptions) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Items"), attribute.String("method", "Update"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Items.Update") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Update") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "item": item, "options": options}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Items.Update(ctx, item, options...) + return _d.Items.Update(ctx, item, options...) } diff --git a/pkg/locales/middleware/telemetry_middleware.go b/pkg/locales/middleware/telemetry_middleware.go index ae10d4aa..90565366 100644 --- a/pkg/locales/middleware/telemetry_middleware.go +++ b/pkg/locales/middleware/telemetry_middleware.go @@ -11,7 +11,7 @@ import ( "time" "git.perx.ru/perxis/perxis-go/pkg/locales" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -21,129 +21,129 @@ import ( // telemetryMiddleware implements locales.Locales interface instrumented with opentracing spans type telemetryMiddleware struct { locales.Locales - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base locales.Locales, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base locales.Locales, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Locales: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Create implements locales.Locales -func (m telemetryMiddleware) Create(ctx context.Context, locale *locales.Locale) (created *locales.Locale, err error) { +func (_d telemetryMiddleware) Create(ctx context.Context, locale *locales.Locale) (created *locales.Locale, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Locales"), attribute.String("method", "Create"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Locales.Create") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Locales.Create") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "locale": locale}, map[string]interface{}{ "created": created, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Locales.Create(ctx, locale) + return _d.Locales.Create(ctx, locale) } // Delete implements locales.Locales -func (m telemetryMiddleware) Delete(ctx context.Context, spaceId string, localeId string) (err error) { +func (_d telemetryMiddleware) Delete(ctx context.Context, spaceId string, localeId string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Locales"), attribute.String("method", "Delete"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Locales.Delete") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Locales.Delete") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "localeId": localeId}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Locales.Delete(ctx, spaceId, localeId) + return _d.Locales.Delete(ctx, spaceId, localeId) } // List implements locales.Locales -func (m telemetryMiddleware) List(ctx context.Context, spaceId string) (locales []*locales.Locale, err error) { +func (_d telemetryMiddleware) List(ctx context.Context, spaceId string) (locales []*locales.Locale, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Locales"), attribute.String("method", "List"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Locales.List") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Locales.List") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId}, map[string]interface{}{ "locales": locales, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Locales.List(ctx, spaceId) + return _d.Locales.List(ctx, spaceId) } diff --git a/pkg/members/middleware/telemetry_middleware.go b/pkg/members/middleware/telemetry_middleware.go index d8d53d43..493d9fe2 100644 --- a/pkg/members/middleware/telemetry_middleware.go +++ b/pkg/members/middleware/telemetry_middleware.go @@ -11,7 +11,7 @@ import ( "time" "git.perx.ru/perxis/perxis-go/pkg/members" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -21,232 +21,232 @@ import ( // telemetryMiddleware implements members.Members interface instrumented with opentracing spans type telemetryMiddleware struct { members.Members - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base members.Members, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base members.Members, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Members: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Get implements members.Members -func (m telemetryMiddleware) Get(ctx context.Context, orgId string, userId string) (role members.Role, err error) { +func (_d telemetryMiddleware) Get(ctx context.Context, orgId string, userId string) (role members.Role, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Members"), attribute.String("method", "Get"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Members.Get") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Members.Get") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "orgId": orgId, "userId": userId}, map[string]interface{}{ "role": role, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Members.Get(ctx, orgId, userId) + return _d.Members.Get(ctx, orgId, userId) } // ListMembers implements members.Members -func (m telemetryMiddleware) ListMembers(ctx context.Context, orgId string) (members []*members.Member, err error) { +func (_d telemetryMiddleware) ListMembers(ctx context.Context, orgId string) (members []*members.Member, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Members"), attribute.String("method", "ListMembers"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Members.ListMembers") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Members.ListMembers") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "orgId": orgId}, map[string]interface{}{ "members": members, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Members.ListMembers(ctx, orgId) + return _d.Members.ListMembers(ctx, orgId) } // ListOrganizations implements members.Members -func (m telemetryMiddleware) ListOrganizations(ctx context.Context, userId string) (organizations []*members.Member, err error) { +func (_d telemetryMiddleware) ListOrganizations(ctx context.Context, userId string) (organizations []*members.Member, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Members"), attribute.String("method", "ListOrganizations"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Members.ListOrganizations") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Members.ListOrganizations") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "userId": userId}, map[string]interface{}{ "organizations": organizations, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Members.ListOrganizations(ctx, userId) + return _d.Members.ListOrganizations(ctx, userId) } // Remove implements members.Members -func (m telemetryMiddleware) Remove(ctx context.Context, orgId string, userId string) (err error) { +func (_d telemetryMiddleware) Remove(ctx context.Context, orgId string, userId string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Members"), attribute.String("method", "Remove"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Members.Remove") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Members.Remove") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "orgId": orgId, "userId": userId}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Members.Remove(ctx, orgId, userId) + return _d.Members.Remove(ctx, orgId, userId) } // RemoveAll implements members.Members -func (m telemetryMiddleware) RemoveAll(ctx context.Context, orgId string) (err error) { +func (_d telemetryMiddleware) RemoveAll(ctx context.Context, orgId string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Members"), attribute.String("method", "RemoveAll"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Members.RemoveAll") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Members.RemoveAll") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "orgId": orgId}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Members.RemoveAll(ctx, orgId) + return _d.Members.RemoveAll(ctx, orgId) } // Set implements members.Members -func (m telemetryMiddleware) Set(ctx context.Context, orgId string, userId string, role members.Role) (err error) { +func (_d telemetryMiddleware) Set(ctx context.Context, orgId string, userId string, role members.Role) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Members"), attribute.String("method", "Set"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Members.Set") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Members.Set") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "orgId": orgId, "userId": userId, "role": role}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Members.Set(ctx, orgId, userId, role) + return _d.Members.Set(ctx, orgId, userId, role) } diff --git a/pkg/organizations/middleware/telemetry_middleware.go b/pkg/organizations/middleware/telemetry_middleware.go index ac2e9d35..9b83541a 100644 --- a/pkg/organizations/middleware/telemetry_middleware.go +++ b/pkg/organizations/middleware/telemetry_middleware.go @@ -12,7 +12,7 @@ import ( "git.perx.ru/perxis/perxis-go/pkg/options" "git.perx.ru/perxis/perxis-go/pkg/organizations" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -22,115 +22,115 @@ import ( // telemetryMiddleware implements organizations.Organizations interface instrumented with opentracing spans type telemetryMiddleware struct { organizations.Organizations - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base organizations.Organizations, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base organizations.Organizations, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Organizations: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Create implements organizations.Organizations -func (m telemetryMiddleware) Create(ctx context.Context, org *organizations.Organization) (created *organizations.Organization, err error) { +func (_d telemetryMiddleware) Create(ctx context.Context, org *organizations.Organization) (created *organizations.Organization, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Organizations"), attribute.String("method", "Create"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Organizations.Create") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Organizations.Create") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "org": org}, map[string]interface{}{ "created": created, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Organizations.Create(ctx, org) + return _d.Organizations.Create(ctx, org) } // Delete implements organizations.Organizations -func (m telemetryMiddleware) Delete(ctx context.Context, orgId string) (err error) { +func (_d telemetryMiddleware) Delete(ctx context.Context, orgId string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Organizations"), attribute.String("method", "Delete"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Organizations.Delete") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Organizations.Delete") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "orgId": orgId}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Organizations.Delete(ctx, orgId) + return _d.Organizations.Delete(ctx, orgId) } // Find implements organizations.Organizations -func (m telemetryMiddleware) Find(ctx context.Context, filter *organizations.Filter, opts *options.FindOptions) (orgs []*organizations.Organization, total int, err error) { +func (_d telemetryMiddleware) Find(ctx context.Context, filter *organizations.Filter, opts *options.FindOptions) (orgs []*organizations.Organization, total int, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Organizations"), attribute.String("method", "Find"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Organizations.Find") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Organizations.Find") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "filter": filter, "opts": opts}, map[string]interface{}{ @@ -138,81 +138,81 @@ func (m telemetryMiddleware) Find(ctx context.Context, filter *organizations.Fil "total": total, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Organizations.Find(ctx, filter, opts) + return _d.Organizations.Find(ctx, filter, opts) } // Get implements organizations.Organizations -func (m telemetryMiddleware) Get(ctx context.Context, orgId string) (org *organizations.Organization, err error) { +func (_d telemetryMiddleware) Get(ctx context.Context, orgId string) (org *organizations.Organization, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Organizations"), attribute.String("method", "Get"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Organizations.Get") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Organizations.Get") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "orgId": orgId}, map[string]interface{}{ "org": org, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Organizations.Get(ctx, orgId) + return _d.Organizations.Get(ctx, orgId) } // Update implements organizations.Organizations -func (m telemetryMiddleware) Update(ctx context.Context, org *organizations.Organization) (err error) { +func (_d telemetryMiddleware) Update(ctx context.Context, org *organizations.Organization) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Organizations"), attribute.String("method", "Update"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Organizations.Update") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Organizations.Update") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "org": org}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Organizations.Update(ctx, org) + return _d.Organizations.Update(ctx, org) } diff --git a/pkg/references/middleware/telemetry_middleware.go b/pkg/references/middleware/telemetry_middleware.go index 58f24355..de4533ba 100644 --- a/pkg/references/middleware/telemetry_middleware.go +++ b/pkg/references/middleware/telemetry_middleware.go @@ -12,7 +12,7 @@ import ( "git.perx.ru/perxis/perxis-go/pkg/items" "git.perx.ru/perxis/perxis-go/pkg/references" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -22,48 +22,48 @@ import ( // telemetryMiddleware implements references.References interface instrumented with opentracing spans type telemetryMiddleware struct { references.References - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base references.References, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base references.References, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ References: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Get implements references.References -func (m telemetryMiddleware) Get(ctx context.Context, spaceId string, envId string, references []*references.Reference) (items []*items.Item, notfound []*references.Reference, err error) { +func (_d telemetryMiddleware) Get(ctx context.Context, spaceId string, envId string, references []*references.Reference) (items []*items.Item, notfound []*references.Reference, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "References"), attribute.String("method", "Get"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "References.Get") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "References.Get") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -72,35 +72,35 @@ func (m telemetryMiddleware) Get(ctx context.Context, spaceId string, envId stri "notfound": notfound, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.References.Get(ctx, spaceId, envId, references) + return _d.References.Get(ctx, spaceId, envId, references) } // Publish implements references.References -func (m telemetryMiddleware) Publish(ctx context.Context, spaceId string, envId string, references []*references.Reference, recursive bool, force bool) (published []*references.Reference, notfound []*references.Reference, unpublished []*references.Reference, err error) { +func (_d telemetryMiddleware) Publish(ctx context.Context, spaceId string, envId string, references []*references.Reference, recursive bool, force bool) (published []*references.Reference, notfound []*references.Reference, unpublished []*references.Reference, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "References"), attribute.String("method", "Publish"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "References.Publish") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "References.Publish") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "envId": envId, @@ -112,14 +112,14 @@ func (m telemetryMiddleware) Publish(ctx context.Context, spaceId string, envId "unpublished": unpublished, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.References.Publish(ctx, spaceId, envId, references, recursive, force) + return _d.References.Publish(ctx, spaceId, envId, references, recursive, force) } diff --git a/pkg/roles/middleware/telemetry_middleware.go b/pkg/roles/middleware/telemetry_middleware.go index a44b876e..72666a14 100644 --- a/pkg/roles/middleware/telemetry_middleware.go +++ b/pkg/roles/middleware/telemetry_middleware.go @@ -11,7 +11,7 @@ import ( "time" "git.perx.ru/perxis/perxis-go/pkg/roles" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -21,197 +21,197 @@ import ( // telemetryMiddleware implements roles.Roles interface instrumented with opentracing spans type telemetryMiddleware struct { roles.Roles - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base roles.Roles, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base roles.Roles, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Roles: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Create implements roles.Roles -func (m telemetryMiddleware) Create(ctx context.Context, role *roles.Role) (created *roles.Role, err error) { +func (_d telemetryMiddleware) Create(ctx context.Context, role *roles.Role) (created *roles.Role, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Roles"), attribute.String("method", "Create"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Roles.Create") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Roles.Create") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "role": role}, map[string]interface{}{ "created": created, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Roles.Create(ctx, role) + return _d.Roles.Create(ctx, role) } // Delete implements roles.Roles -func (m telemetryMiddleware) Delete(ctx context.Context, spaceId string, roleId string) (err error) { +func (_d telemetryMiddleware) Delete(ctx context.Context, spaceId string, roleId string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Roles"), attribute.String("method", "Delete"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Roles.Delete") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Roles.Delete") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "roleId": roleId}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Roles.Delete(ctx, spaceId, roleId) + return _d.Roles.Delete(ctx, spaceId, roleId) } // Get implements roles.Roles -func (m telemetryMiddleware) Get(ctx context.Context, spaceId string, roleId string) (role *roles.Role, err error) { +func (_d telemetryMiddleware) Get(ctx context.Context, spaceId string, roleId string) (role *roles.Role, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Roles"), attribute.String("method", "Get"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Roles.Get") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Roles.Get") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "roleId": roleId}, map[string]interface{}{ "role": role, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Roles.Get(ctx, spaceId, roleId) + return _d.Roles.Get(ctx, spaceId, roleId) } // List implements roles.Roles -func (m telemetryMiddleware) List(ctx context.Context, spaceId string) (roles []*roles.Role, err error) { +func (_d telemetryMiddleware) List(ctx context.Context, spaceId string) (roles []*roles.Role, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Roles"), attribute.String("method", "List"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Roles.List") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Roles.List") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId}, map[string]interface{}{ "roles": roles, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Roles.List(ctx, spaceId) + return _d.Roles.List(ctx, spaceId) } // Update implements roles.Roles -func (m telemetryMiddleware) Update(ctx context.Context, role *roles.Role) (err error) { +func (_d telemetryMiddleware) Update(ctx context.Context, role *roles.Role) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Roles"), attribute.String("method", "Update"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Roles.Update") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Roles.Update") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "role": role}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Roles.Update(ctx, role) + return _d.Roles.Update(ctx, role) } diff --git a/pkg/spaces/middleware/telemetry_middleware.go b/pkg/spaces/middleware/telemetry_middleware.go index a6df52b3..42caaf89 100644 --- a/pkg/spaces/middleware/telemetry_middleware.go +++ b/pkg/spaces/middleware/telemetry_middleware.go @@ -11,7 +11,7 @@ import ( "time" "git.perx.ru/perxis/perxis-go/pkg/spaces" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -21,364 +21,364 @@ import ( // telemetryMiddleware implements spaces.Spaces interface instrumented with opentracing spans type telemetryMiddleware struct { spaces.Spaces - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base spaces.Spaces, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base spaces.Spaces, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Spaces: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // AbortTransfer implements spaces.Spaces -func (m telemetryMiddleware) AbortTransfer(ctx context.Context, spaceID string) (err error) { +func (_d telemetryMiddleware) AbortTransfer(ctx context.Context, spaceID string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Spaces"), attribute.String("method", "AbortTransfer"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Spaces.AbortTransfer") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Spaces.AbortTransfer") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceID": spaceID}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Spaces.AbortTransfer(ctx, spaceID) + return _d.Spaces.AbortTransfer(ctx, spaceID) } // Create implements spaces.Spaces -func (m telemetryMiddleware) Create(ctx context.Context, space *spaces.Space) (created *spaces.Space, err error) { +func (_d telemetryMiddleware) Create(ctx context.Context, space *spaces.Space) (created *spaces.Space, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Spaces"), attribute.String("method", "Create"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Spaces.Create") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Spaces.Create") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "space": space}, map[string]interface{}{ "created": created, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Spaces.Create(ctx, space) + return _d.Spaces.Create(ctx, space) } // Delete implements spaces.Spaces -func (m telemetryMiddleware) Delete(ctx context.Context, spaceId string) (err error) { +func (_d telemetryMiddleware) Delete(ctx context.Context, spaceId string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Spaces"), attribute.String("method", "Delete"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Spaces.Delete") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Spaces.Delete") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Spaces.Delete(ctx, spaceId) + return _d.Spaces.Delete(ctx, spaceId) } // Get implements spaces.Spaces -func (m telemetryMiddleware) Get(ctx context.Context, spaceId string) (space *spaces.Space, err error) { +func (_d telemetryMiddleware) Get(ctx context.Context, spaceId string) (space *spaces.Space, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Spaces"), attribute.String("method", "Get"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Spaces.Get") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Spaces.Get") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId}, map[string]interface{}{ "space": space, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Spaces.Get(ctx, spaceId) + return _d.Spaces.Get(ctx, spaceId) } // List implements spaces.Spaces -func (m telemetryMiddleware) List(ctx context.Context, orgId string) (spaces []*spaces.Space, err error) { +func (_d telemetryMiddleware) List(ctx context.Context, orgId string) (spaces []*spaces.Space, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Spaces"), attribute.String("method", "List"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Spaces.List") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Spaces.List") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "orgId": orgId}, map[string]interface{}{ "spaces": spaces, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Spaces.List(ctx, orgId) + return _d.Spaces.List(ctx, orgId) } // ListTransfers implements spaces.Spaces -func (m telemetryMiddleware) ListTransfers(ctx context.Context, orgID string) (spaces []*spaces.Space, err error) { +func (_d telemetryMiddleware) ListTransfers(ctx context.Context, orgID string) (spaces []*spaces.Space, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Spaces"), attribute.String("method", "ListTransfers"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Spaces.ListTransfers") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Spaces.ListTransfers") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "orgID": orgID}, map[string]interface{}{ "spaces": spaces, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Spaces.ListTransfers(ctx, orgID) + return _d.Spaces.ListTransfers(ctx, orgID) } // Move implements spaces.Spaces -func (m telemetryMiddleware) Move(ctx context.Context, spaceID string, orgID string) (err error) { +func (_d telemetryMiddleware) Move(ctx context.Context, spaceID string, orgID string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Spaces"), attribute.String("method", "Move"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Spaces.Move") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Spaces.Move") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceID": spaceID, "orgID": orgID}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Spaces.Move(ctx, spaceID, orgID) + return _d.Spaces.Move(ctx, spaceID, orgID) } // Transfer implements spaces.Spaces -func (m telemetryMiddleware) Transfer(ctx context.Context, spaceID string, transferToOrg string) (err error) { +func (_d telemetryMiddleware) Transfer(ctx context.Context, spaceID string, transferToOrg string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Spaces"), attribute.String("method", "Transfer"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Spaces.Transfer") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Spaces.Transfer") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceID": spaceID, "transferToOrg": transferToOrg}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Spaces.Transfer(ctx, spaceID, transferToOrg) + return _d.Spaces.Transfer(ctx, spaceID, transferToOrg) } // Update implements spaces.Spaces -func (m telemetryMiddleware) Update(ctx context.Context, space *spaces.Space) (err error) { +func (_d telemetryMiddleware) Update(ctx context.Context, space *spaces.Space) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Spaces"), attribute.String("method", "Update"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Spaces.Update") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Spaces.Update") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "space": space}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Spaces.Update(ctx, space) + return _d.Spaces.Update(ctx, space) } // UpdateConfig implements spaces.Spaces -func (m telemetryMiddleware) UpdateConfig(ctx context.Context, spaceId string, config *spaces.Config) (err error) { +func (_d telemetryMiddleware) UpdateConfig(ctx context.Context, spaceId string, config *spaces.Config) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Spaces"), attribute.String("method", "UpdateConfig"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Spaces.UpdateConfig") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Spaces.UpdateConfig") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "spaceId": spaceId, "config": config}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Spaces.UpdateConfig(ctx, spaceId, config) + return _d.Spaces.UpdateConfig(ctx, spaceId, config) } diff --git a/telemetry/metrics/cache.go b/pkg/telemetry/metrics/cache.go similarity index 100% rename from telemetry/metrics/cache.go rename to pkg/telemetry/metrics/cache.go diff --git a/telemetry/metrics/request.go b/pkg/telemetry/metrics/request.go similarity index 100% rename from telemetry/metrics/request.go rename to pkg/telemetry/metrics/request.go diff --git a/pkg/users/middleware/telemetry_middleware.go b/pkg/users/middleware/telemetry_middleware.go index 14dbc441..730fab46 100644 --- a/pkg/users/middleware/telemetry_middleware.go +++ b/pkg/users/middleware/telemetry_middleware.go @@ -11,8 +11,8 @@ import ( "time" "git.perx.ru/perxis/perxis-go/pkg/options" + "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "git.perx.ru/perxis/perxis-go/pkg/users" - "git.perx.ru/perxis/perxis-go/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -22,115 +22,115 @@ import ( // telemetryMiddleware implements users.Users interface instrumented with opentracing spans type telemetryMiddleware struct { users.Users - scope string + _instance string requestMetrics *metrics.RequestMetrics - spanDecorator func(span trace.Span, params, results map[string]interface{}) + _spanDecorator func(span trace.Span, params, results map[string]interface{}) } // TelemetryMiddleware returns telemetryMiddleware -func TelemetryMiddleware(base users.Users, scope string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { +func TelemetryMiddleware(base users.Users, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { requestMetrics, err := metrics.GetRequestMetrics() if err != nil { panic(err) } - m := telemetryMiddleware{ + d := telemetryMiddleware{ Users: base, - scope: scope, + _instance: instance, requestMetrics: requestMetrics, } if len(spanDecorator) > 0 && spanDecorator[0] != nil { - m.spanDecorator = spanDecorator[0] + d._spanDecorator = spanDecorator[0] } - return m + return d } // Create implements users.Users -func (m telemetryMiddleware) Create(ctx context.Context, create *users.User) (user *users.User, err error) { +func (_d telemetryMiddleware) Create(ctx context.Context, create *users.User) (user *users.User, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Users"), attribute.String("method", "Create"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Users.Create") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Users.Create") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "create": create}, map[string]interface{}{ "user": user, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Users.Create(ctx, create) + return _d.Users.Create(ctx, create) } // Delete implements users.Users -func (m telemetryMiddleware) Delete(ctx context.Context, userId string) (err error) { +func (_d telemetryMiddleware) Delete(ctx context.Context, userId string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Users"), attribute.String("method", "Delete"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Users.Delete") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Users.Delete") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "userId": userId}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Users.Delete(ctx, userId) + return _d.Users.Delete(ctx, userId) } // Find implements users.Users -func (m telemetryMiddleware) Find(ctx context.Context, filter *users.Filter, options *options.FindOptions) (users []*users.User, total int, err error) { +func (_d telemetryMiddleware) Find(ctx context.Context, filter *users.Filter, options *options.FindOptions) (users []*users.User, total int, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Users"), attribute.String("method", "Find"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Users.Find") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Users.Find") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "filter": filter, "options": options}, map[string]interface{}{ @@ -138,115 +138,115 @@ func (m telemetryMiddleware) Find(ctx context.Context, filter *users.Filter, opt "total": total, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Users.Find(ctx, filter, options) + return _d.Users.Find(ctx, filter, options) } // Get implements users.Users -func (m telemetryMiddleware) Get(ctx context.Context, userId string) (user *users.User, err error) { +func (_d telemetryMiddleware) Get(ctx context.Context, userId string) (user *users.User, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Users"), attribute.String("method", "Get"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Users.Get") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Users.Get") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "userId": userId}, map[string]interface{}{ "user": user, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Users.Get(ctx, userId) + return _d.Users.Get(ctx, userId) } // GetByIdentity implements users.Users -func (m telemetryMiddleware) GetByIdentity(ctx context.Context, identity string) (user *users.User, err error) { +func (_d telemetryMiddleware) GetByIdentity(ctx context.Context, identity string) (user *users.User, err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Users"), attribute.String("method", "GetByIdentity"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Users.GetByIdentity") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Users.GetByIdentity") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "identity": identity}, map[string]interface{}{ "user": user, "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Users.GetByIdentity(ctx, identity) + return _d.Users.GetByIdentity(ctx, identity) } // Update implements users.Users -func (m telemetryMiddleware) Update(ctx context.Context, update *users.User) (err error) { +func (_d telemetryMiddleware) Update(ctx context.Context, update *users.User) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( attribute.String("service", "Users"), attribute.String("method", "Update"), )) - m.requestMetrics.Total.Add(ctx, 1, attributes) + _d.requestMetrics.Total.Add(ctx, 1, attributes) start := time.Now() - ctx, span := otel.Tracer(m.scope).Start(ctx, "Users.Update") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Users.Update") defer func() { - m.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) - if m.spanDecorator != nil { - m.spanDecorator(span, map[string]interface{}{ + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "update": update}, map[string]interface{}{ "err": err}) } else if err != nil { - m.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) - span.RecordError(err) - span.SetAttributes(attribute.String("event", "error")) - span.SetAttributes(attribute.String("message", err.Error())) + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) } - span.End() + _span.End() }() - return m.Users.Update(ctx, update) + return _d.Users.Update(ctx, update) } -- GitLab