github.com/lingyao2333/mo-zero@v1.4.1/core/stores/sqlx/trace.go (about) 1 package sqlx 2 3 import ( 4 "context" 5 "database/sql" 6 7 "github.com/lingyao2333/mo-zero/core/trace" 8 "go.opentelemetry.io/otel" 9 "go.opentelemetry.io/otel/attribute" 10 "go.opentelemetry.io/otel/codes" 11 oteltrace "go.opentelemetry.io/otel/trace" 12 ) 13 14 var sqlAttributeKey = attribute.Key("sql.method") 15 16 func startSpan(ctx context.Context, method string) (context.Context, oteltrace.Span) { 17 tracer := otel.GetTracerProvider().Tracer(trace.TraceName) 18 start, span := tracer.Start(ctx, 19 spanName, 20 oteltrace.WithSpanKind(oteltrace.SpanKindClient), 21 ) 22 span.SetAttributes(sqlAttributeKey.String(method)) 23 24 return start, span 25 } 26 27 func endSpan(span oteltrace.Span, err error) { 28 defer span.End() 29 30 if err == nil || err == sql.ErrNoRows { 31 span.SetStatus(codes.Ok, "") 32 return 33 } 34 35 span.SetStatus(codes.Error, err.Error()) 36 span.RecordError(err) 37 }