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  }