/// <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)));
         }
     }
 }
Exemplo n.º 5
0
        /// <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));
        }
Exemplo n.º 6
0
 /// <inheritdoc />
 public Task <T> RunInSpanAsync <T>(Func <Task <T> > func, string name, StartSpanOptions options = null) =>
 _managedTracerGetter().RunInSpan(func, name, options);
Exemplo n.º 7
0
 /// <inheritdoc />
 public void RunInSpan(Action action, string name, StartSpanOptions options = null) =>
 _managedTracerGetter().RunInSpan(action, name, options);
Exemplo n.º 8
0
 /// <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();
Exemplo n.º 13
0
 /// <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);
Exemplo n.º 14
0
 /// <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();
Exemplo n.º 15
0
 public void StartSpan(string name, StartSpanOptions options = null)
 {
 }