public void Close(Scope scope) { var current = Active; var isRootSpan = scope.Parent == null; if (current == null || current != scope) { // This is not the current scope for this context, bail out SpanClosed?.Invoke(this, new SpanEventArgs(scope.Span)); return; } // if the scope that was just closed was the active scope, // set its parent as the new active scope Active = scope.Parent; SpanDeactivated?.Invoke(this, new SpanEventArgs(scope.Span)); if (!isRootSpan) { SpanActivated?.Invoke(this, new SpanEventArgs(scope.Parent.Span)); } SpanClosed?.Invoke(this, new SpanEventArgs(scope.Span)); if (isRootSpan) { TraceEnded?.Invoke(this, new SpanEventArgs(scope.Span)); } }
public Scope Activate(Span span, bool finishOnClose) { var newParent = Active; var scope = new Scope(newParent, span, this, finishOnClose); var scopeOpenedArgs = new SpanEventArgs(span); SpanOpened?.Invoke(this, scopeOpenedArgs); Active = scope; if (newParent != null) { SpanDeactivated?.Invoke(this, new SpanEventArgs(newParent.Span)); } SpanActivated?.Invoke(this, scopeOpenedArgs); return(scope); }