示例#1
0
 private bool StopSpanRecursive(DottySpan spanData, string spanIdentifier)
 {
     if (spanData.SpanIdentifier == spanIdentifier)
     {
         spanData.StoppedAtUtc = DateTime.UtcNow;
         return(true);
     }
     else
     {
         foreach (var span in spanData.ChildSpans)
         {
             if (StopSpanRecursive(span, spanIdentifier))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
示例#2
0
        public override async Task <Empty> StartSpan(StartSpanRequest request, ServerCallContext context)
        {
            await _uiUpdateHub.Clients.All.SendAsync("StartSpan", request);

            var trace = await _dbContext
                        .Traces
                        .SingleOrDefaultAsync(t => t.TraceIdentifier == request.TraceIdentifier);

            var span = new DottySpan
            {
                ApplicationName      = request.ApplicationName,
                HostName             = request.Hostname,
                ParentSpanIdentifier = request.ParentSpanIdentifier,
                RequestUrl           = request.RequestUrl,
                SpanIdentifier       = request.SpanIdentifier,
                StartedAtUtc         = DateTime.UtcNow,
                TraceIdentifier      = request.TraceIdentifier
            };

            if (trace == null)
            {
                _logger.LogInformation($"Creating new  trace for { request.TraceIdentifier}");

                trace                 = new DottyTrace();
                trace.RequestUrl      = request.RequestUrl;
                trace.StartedAtUtc    = DateTime.UtcNow;
                trace.TraceIdentifier = request.TraceIdentifier;

                trace.SpanData = span;

                _dbContext.Traces.Add(trace);
            }
            else
            {
                var parentSpan = await _dbContext.Spans.SingleOrDefaultAsync(s => s.SpanIdentifier == request.ParentSpanIdentifier);

                parentSpan.ChildSpans.Add(span);
            }

            await _dbContext.SaveChangesAsync();

            return(new Empty());
        }