package tracer import ( "context" "fmt" "github.com/gofiber/fiber/v2" fiberOpentelemetry "github.com/psmarcin/fiber-opentelemetry/pkg/fiber-otel" "go.opentelemetry.io/otel/attribute" trace "go.opentelemetry.io/otel/trace" "runtime" ) func Handler(fc *fiber.Ctx) (context.Context, trace.Span) { spanName := fmt.Sprint(fc.OriginalURL()) simpleCtx, span := fiberOpentelemetry.Tracer.Start(fc.UserContext(), spanName) fc.SetUserContext(simpleCtx) _, file, line, _ := runtime.Caller(1) span.SetAttributes( attribute.String("service.layer", "handler"), attribute.String("file", file), attribute.String("line", fmt.Sprintf("%d", line)), ) return simpleCtx, span } func Service(c context.Context, spanName string) (context.Context, trace.Span) { simpleCtx, span := fiberOpentelemetry.Tracer.Start(c, spanName) var attribs []attribute.KeyValue _, file, line, _ := runtime.Caller(1) attribs = append( attribs, attribute.String("service.layer", "service"), attribute.String("file", file), attribute.String("line", fmt.Sprintf("%d", line)), ) span.SetAttributes(attribs...) return simpleCtx, span } func Repository(c context.Context, spanName string) (context.Context, trace.Span) { ctx2, span := fiberOpentelemetry.Tracer.Start(c, spanName) var attribs []attribute.KeyValue _, file, line, _ := runtime.Caller(1) attribs = append(attribs, attribute.String("file", file), attribute.String("line", fmt.Sprintf("%d", line)), ) span.SetAttributes(attribs...) return ctx2, span }