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