public IDisposable SetContextSource(Func <TContext> access, Func <TContext, TContext> exchange) { var prior = _source; _source = new ContextSource(access, exchange); return(new Disposable(this, prior)); }
/// <inheritdoc /> public ISpanBuilder SetCreateChild(bool createChild) { if (!createChild) { var currentActivity = Activity.Current; if (currentActivity == null) { throw new ArgumentException("Current Activity cannot be null"); } if (currentActivity.IdFormat != ActivityIdFormat.W3C) { throw new ArgumentException("Current Activity is not in W3C format"); } if (currentActivity.StartTimeUtc == default || currentActivity.Duration != default) { throw new ArgumentException( "Current Activity is not running: it has not been started or has been stopped"); } this.fromActivity = currentActivity; this.contextSource = ContextSource.Activity; } else { this.contextSource = ContextSource.CurrentActivityParent; } this.parentSpanContext = null; this.parentSpanContext = null; this.parentActivity = null; return(this); }
public void Execute(ContextSource src, out Token ret) { var ipt = _interpreterPool.GetObject(); try { var current = CompileState.Body; for (int i = 0; i != src.count; i++) { ipt.Execute(src.body[i + src.offset], ref current); if (current == CompileState.Finish) { ipt.Commit(); current = CompileState.Body; } } } catch (NotImplementedException e) { } catch (InvalidOperationException e) { } catch (Exception e) { } finally { ret = ipt.Result; _interpreterPool.PutObject(ipt); } }
/// <inheritdoc/> public ISpanBuilder SetNoParent() { this.contextSource = ContextSource.NoParent; this.parentSpanContext = null; this.parentSpanContext = null; this.parentActivity = null; return(this); }
/// <inheritdoc/> public ISpanBuilder SetParent(SpanContext remoteParent) { this.parentSpanContext = remoteParent ?? throw new ArgumentNullException(nameof(remoteParent)); this.parentSpan = null; this.parentActivity = null; this.contextSource = ContextSource.ExplicitRemoteParent; return(this); }
/// <inheritdoc/> public ISpanBuilder SetParent(Activity parentActivity) { this.parentActivity = parentActivity ?? throw new ArgumentNullException(nameof(parentActivity)); this.contextSource = ContextSource.ExplicitActivityParent; this.parentSpanContext = null; this.parentSpan = null; return(this); }
public MigContext(ContextSource source, object data) { Source = source; Data = data; }
public Disposable(ContextAccessor <TContext> contextAccessor, ContextSource source) { _contextAccessor = contextAccessor; _source = source; }
public ContextAccessor() { _source = new ContextSource(); }
public MigContext(ContextSource source, object data) { Source = source; Data = data; }
/// <summary> /// Initializes new member context by providing all required properties. /// </summary> /// <param name="member">Inforation about member selected by builder.</param> /// <param name="context">Builder-specific context associated with selected member.</param> /// <param name="source">Indicates what has triggered context creation.</param> /// <exception cref="ArgumentNullException"><paramref name="member"/> or <paramref name="context"/> is null.</exception> public MemberContext(SelectedMember member, TContext context, ContextSource source) { Member = member ?? throw new ArgumentNullException(nameof(member)); Context = context; Source = source; }
private Activity CreateActivityForSpan(ContextSource contextSource, ISpan explicitParent, SpanContext remoteParent, Activity explicitParentActivity, Activity fromActivity) { Activity spanActivity = null; Activity originalActivity = Activity.Current; bool needRestoreOriginal = true; switch (contextSource) { case ContextSource.CurrentActivityParent: { // Activity will figure out its parent spanActivity = new Activity(this.name) .SetIdFormat(ActivityIdFormat.W3C) .Start(); // chances are, Activity.Current has span attached if (CurrentSpanUtils.CurrentSpan is Span currentSpan) { this.parentSpanContext = currentSpan.Context; } else { this.parentSpanContext = ParentContextFromActivity(spanActivity); } break; } case ContextSource.ExplicitActivityParent: { spanActivity = new Activity(this.name) .SetParentId(this.parentActivity.TraceId, this.parentActivity.SpanId, this.parentActivity.ActivityTraceFlags) .Start(); spanActivity.TraceStateString = this.parentActivity.TraceStateString; this.parentSpanContext = ParentContextFromActivity(spanActivity); break; } case ContextSource.NoParent: { spanActivity = new Activity(this.name) .SetIdFormat(ActivityIdFormat.W3C) .SetParentId(" ") .Start(); this.parentSpanContext = null; break; } case ContextSource.Activity: { this.parentSpanContext = ParentContextFromActivity(this.fromActivity); spanActivity = this.fromActivity; needRestoreOriginal = false; break; } case ContextSource.ExplicitRemoteParent: { spanActivity = new Activity(this.name); if (this.parentSpanContext.IsValid) { spanActivity.SetParentId(this.parentSpanContext.TraceId, this.parentSpanContext.SpanId, this.parentSpanContext.TraceOptions); } spanActivity.SetIdFormat(ActivityIdFormat.W3C); spanActivity.TraceStateString = this.parentSpanContext.Tracestate.ToString(); spanActivity.Start(); break; } case ContextSource.ExplicitSpanParent: { spanActivity = new Activity(this.name); if (this.parentSpan.Context.IsValid) { spanActivity.SetParentId(this.parentSpan.Context.TraceId, this.parentSpan.Context.SpanId, this.parentSpan.Context.TraceOptions); } spanActivity.SetIdFormat(ActivityIdFormat.W3C); spanActivity.TraceStateString = this.parentSpan.Context.Tracestate.ToString(); spanActivity.Start(); this.parentSpanContext = this.parentSpan.Context; break; } default: throw new ArgumentException($"Unknown parentType {contextSource}"); } if (needRestoreOriginal) { // Activity Start always puts Activity on top of Current stack // in OpenTelemetry we ask users to enable implicit propagation by calling WithSpan // it will set Current Activity and attach span to it. // we need to work with .NET team to allow starting Activities without updating Current // As a workaround here we are undoing updating Current Activity.Current = originalActivity; } return(spanActivity); }