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); }
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()); }