/// <inheritdoc /> public IDisposable StartSpan(string name, StartSpanOptions options = null) { GaxPreconditions.CheckNotNull(name, nameof(name)); options = options ?? StartSpanOptions.Create(); TraceSpan span = new TraceSpan(); span.SpanId = _spanIdFactory.NextId(); span.Kind = options.SpanKind.Convert(); span.Name = name; span.StartTime = Timestamp.FromDateTime(DateTime.Now.ToUniversalTime()); lock (_stackLock) { if (_traceStack.Count != 0) { span.ParentSpanId = _traceStack.Peek().SpanId; } else if (_rootSpanParentId != null) { span.ParentSpanId = (ulong)_rootSpanParentId; } _traceStack.Push(span); AnnotateSpan(options.Labels); } return(new Span(this)); }
/// <inheritdoc /> public T RunInSpan <T>(Func <T> func, string name, StartSpanOptions options = null) { using (StartSpan(name, options)) { try { return(func()); } catch (Exception e) when(SetStackTraceAndReturnFalse(e)) { // This will never return as the condition above will always be false. return(default);
/// <inheritdoc /> public void RunInSpan(Action action, string name, StartSpanOptions options = null) { using (StartSpan(name, options)) { try { action(); } catch (Exception e) when(SetStackTraceAndReturnFalse(e)) { } } }
/// <inheritdoc /> public async Task <T> RunInSpanAsync <T>(Func <Task <T> > func, string name, StartSpanOptions options = null) { using (StartSpan(name, options)) { try { return(await func().ConfigureAwait(false)); } catch (Exception e) when(SetStackTraceAndReturnFalse(e)) { // This will never return as the condition above will always be false. return(await Task.FromResult(default(T))); } } }
/// <inheritdoc /> public IDisposable StartSpan(string name, StartSpanOptions options = null) { GaxPreconditions.CheckNotNull(name, nameof(name)); options = options ?? StartSpanOptions.Create(); var currentStack = TraceStack; var span = new TraceSpan { SpanId = _spanIdFactory.NextId(), Kind = options.SpanKind.Convert(), Name = name, StartTime = Timestamp.FromDateTime(DateTime.UtcNow), ParentSpanId = GetCurrentSpanId(currentStack).GetValueOrDefault() }; AnnotateSpan(span, options.Labels); TraceStack = currentStack.Push(span); Interlocked.Increment(ref _openSpanCount); return(new Span(this)); }
/// <inheritdoc /> public Task <T> RunInSpanAsync <T>(Func <Task <T> > func, string name, StartSpanOptions options = null) => _managedTracerGetter().RunInSpan(func, name, options);
/// <inheritdoc /> public void RunInSpan(Action action, string name, StartSpanOptions options = null) => _managedTracerGetter().RunInSpan(action, name, options);
/// <inheritdoc /> public ISpan StartSpan(string name, StartSpanOptions options = null) => _managedTracerGetter().StartSpan(name, options);
/// <summary> /// Calls <paramref name="func"/> and returns the result. /// </summary> public T RunInSpan <T>(Func <T> func, string name, StartSpanOptions options = null) => func();
/// <summary> /// Calls <paramref name="func"/> asynchronously and returns the result. /// </summary> public async Task <T> RunInSpanAsync <T>(Func <Task <T> > func, string name, StartSpanOptions options = null) => await func();
/// <summary> /// Calls <paramref name="action"/>. /// </summary> public void RunInSpan(Action action, string name, StartSpanOptions options = null) => action();
/// <summary> /// Does nothing. /// </summary> /// <returns>Returns an <see cref="IDisposable"/> that does nothing when disposed.</returns> public IDisposable StartSpan(string name, StartSpanOptions options = null) => new NullDisposable();
/// <summary> /// Calls <paramref name="func"/> asynchronously and returns the result. /// </summary> public Task <T> RunInSpanAsync <T>(Func <Task <T> > func, string name, StartSpanOptions options = null) => Task.Run(func);
/// <summary> /// Does nothing. /// </summary> /// <returns>Returns an <see cref="IDisposable"/> that does nothing when disposed.</returns> public ISpan StartSpan(string name, StartSpanOptions options = null) => new Span();
public void StartSpan(string name, StartSpanOptions options = null) { }