github.com/lingyao2333/mo-zero@v1.4.1/core/stores/mon/trace.go (about)

     1  package mon
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/lingyao2333/mo-zero/core/trace"
     7  	"go.mongodb.org/mongo-driver/mongo"
     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 mongoCmdAttributeKey = attribute.Key("mongo.cmd")
    15  
    16  func startSpan(ctx context.Context, cmd string) (context.Context, oteltrace.Span) {
    17  	tracer := otel.GetTracerProvider().Tracer(trace.TraceName)
    18  	ctx, span := tracer.Start(ctx,
    19  		spanName,
    20  		oteltrace.WithSpanKind(oteltrace.SpanKindClient),
    21  	)
    22  	span.SetAttributes(mongoCmdAttributeKey.String(cmd))
    23  	return ctx, span
    24  }
    25  
    26  func endSpan(span oteltrace.Span, err error) {
    27  	defer span.End()
    28  
    29  	if err == nil || err == mongo.ErrNoDocuments ||
    30  		err == mongo.ErrNilValue || err == mongo.ErrNilDocument {
    31  		span.SetStatus(codes.Ok, "")
    32  		return
    33  	}
    34  
    35  	span.SetStatus(codes.Error, err.Error())
    36  	span.RecordError(err)
    37  }