observer/pkg/attr/layer_attr/layer_attr.go

95 lines
2.9 KiB
Go
Raw Normal View History

package layer_attr
import (
"git.ma-al.com/gora_filip/pkg/attr"
"git.ma-al.com/gora_filip/pkg/level"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/trace"
)
type Handler struct {
// Extra attributes to be attached. Can be also added with [Handler.CustomAttrs] method.
Attributes []attribute.KeyValue
Level level.SeverityLevel
extraSkipInStack int
}
func (h Handler) IntoTraceAttributes() []attribute.KeyValue {
attrs := make([]attribute.KeyValue, 5+len(h.Attributes))
attrs = append(attrs, attr.SourceCodeLocation(1+h.extraSkipInStack)...) // 3 attrs added here
attrs = append(attrs, attr.ServiceLayer(attr.LayerHandler), attr.SeverityLevel(h.Level))
attrs = append(attrs, h.Attributes...)
return attrs
}
func (h Handler) CustomAttrs(attrs ...interface{}) Handler {
h.Attributes = append(h.Attributes, attr.CollectAttributes(attrs...)...)
return h
}
func (h *Handler) SkipMoreInCallStack(skip int) {
h.extraSkipInStack += skip
}
func (h Handler) AsOpts() trace.SpanStartEventOption {
h.extraSkipInStack += 1
return trace.WithAttributes(h.IntoTraceAttributes()...)
}
type Service struct {
// Extra attributes to be attached. Can be also added with [Service.CustomAttrs] method.
Attributes []attribute.KeyValue
Level level.SeverityLevel
extraSkipInStack int
}
func (s Service) IntoTraceAttributes() []attribute.KeyValue {
attrs := make([]attribute.KeyValue, 5+len(s.Attributes))
attrs = append(attrs, attr.SourceCodeLocation(1+s.extraSkipInStack)...)
attrs = append(attrs, attr.ServiceLayer(attr.LayerService), attr.SeverityLevel(s.Level))
attrs = append(attrs, s.Attributes...)
return attrs
}
func (s Service) CustomAttrs(attrs ...interface{}) Service {
s.Attributes = append(s.Attributes, attr.CollectAttributes(attrs...)...)
return s
}
func (s *Service) SkipMoreInCallStack(skip int) {
s.extraSkipInStack += skip
}
func (s Service) AsOpts() trace.SpanStartEventOption {
s.extraSkipInStack += 1
return trace.WithAttributes(s.IntoTraceAttributes()...)
}
type Repo struct {
// Extra attributes to be attached. Can be also added with [Repo.CustomAttrs] method
Attributes []attribute.KeyValue
Level level.SeverityLevel
extraSkipInStack int
}
func (r Repo) IntoTraceAttributes() []attribute.KeyValue {
attrs := make([]attribute.KeyValue, 5+len(r.Attributes))
attrs = append(attrs, attr.SourceCodeLocation(1+r.extraSkipInStack)...)
attrs = append(attrs, attr.ServiceLayer(attr.LayerRepository), attr.SeverityLevel(r.Level))
attrs = append(attrs, r.Attributes...)
return attrs
}
func (r Repo) CustomAttrs(attrs ...interface{}) Repo {
r.Attributes = append(r.Attributes, attr.CollectAttributes(attrs...)...)
return r
}
func (r *Repo) SkipMoreInCallStack(skip int) {
r.extraSkipInStack += skip
}
func (r Repo) AsOpts() trace.SpanStartEventOption {
r.extraSkipInStack += 1
return trace.WithAttributes(r.IntoTraceAttributes()...)
}