Select Git revision
telemetry_middleware.go
telemetry_middleware.go 3.08 KiB
// 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)
}