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 }