From 63987c4e7ee3d45c97a53e66a3d55480a59d00e0 Mon Sep 17 00:00:00 2001 From: ensiouel <ensiouel@gmail.com> Date: Thu, 7 Dec 2023 12:15:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20middleware=20=D0=B4=D0=BB=D1=8F=20=D1=82=D1=80=D0=B5?= =?UTF-8?q?=D0=B9=D1=81=D0=B8=D0=BD=D0=B3=D0=B0=20=D1=81=D0=B5=D1=80=D0=B2?= =?UTF-8?q?=D0=B8=D1=81=D0=B0=20references?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../middleware/telemetry_middleware.go | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 pkg/references/middleware/telemetry_middleware.go diff --git a/pkg/references/middleware/telemetry_middleware.go b/pkg/references/middleware/telemetry_middleware.go new file mode 100644 index 00000000..16fe5d30 --- /dev/null +++ b/pkg/references/middleware/telemetry_middleware.go @@ -0,0 +1,89 @@ +// Code generated by gowrap. DO NOT EDIT. +// template: ../../../assets/templates/middleware/telemetry +// gowrap: http://github.com/hexdigest/gowrap + +package middleware + +//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/references -i References -t ../../../assets/templates/middleware/telemetry -o telemetry_middleware.go -l "" + +import ( + "context" + + "git.perx.ru/perxis/perxis-go/pkg/items" + "git.perx.ru/perxis/perxis-go/pkg/references" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/trace" +) + +// telemetryMiddleware implements references.References interface instrumented with opentracing spans +type telemetryMiddleware struct { + references.References + _instance string + _spanDecorator func(span trace.Span, params, results map[string]interface{}) +} + +// TelemetryMiddleware returns telemetryMiddleware +func TelemetryMiddleware(base references.References, instance string, spanDecorator ...func(span trace.Span, params, results map[string]interface{})) telemetryMiddleware { + d := telemetryMiddleware{ + References: base, + _instance: instance, + } + + if len(spanDecorator) > 0 && spanDecorator[0] != nil { + d._spanDecorator = spanDecorator[0] + } + + return d +} + +// Get implements references.References +func (_d telemetryMiddleware) Get(ctx context.Context, spaceId string, envId string, references []*references.Reference) (items []*items.Item, notfound []*references.Reference, err error) { + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "References.Get") + defer func() { + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ + "ctx": ctx, + "spaceId": spaceId, + "envId": envId, + "references": references}, map[string]interface{}{ + "items": items, + "notfound": notfound, + "err": err}) + } else if err != nil { + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) + } + + _span.End() + }() + return _d.References.Get(ctx, spaceId, envId, references) +} + +// Publish implements references.References +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) { + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "References.Publish") + defer func() { + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ + "ctx": ctx, + "spaceId": spaceId, + "envId": envId, + "references": references, + "recursive": recursive, + "force": force}, map[string]interface{}{ + "published": published, + "notfound": notfound, + "unpublished": unpublished, + "err": err}) + } else if err != nil { + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) + } + + _span.End() + }() + return _d.References.Publish(ctx, spaceId, envId, references, recursive, force) +} -- GitLab