public void Report(ILetsTraceSpan span) { foreach (var reporter in _reporters) { reporter.Report(span); } }
internal static JaegerSpan BuildJaegerThriftSpan(ILetsTraceSpan span) { var context = (ILetsTraceSpanContext)span.Context; var startTime = span.StartTimestamp.ToUnixTimeMicroseconds(); var duration = span.FinishTimestamp == null ? 0 : span.FinishTimestamp.GetValueOrDefault().ToUnixTimeMicroseconds() - span.StartTimestamp.ToUnixTimeMicroseconds(); var jaegerSpan = new JaegerSpan( (long)context.TraceId.Low, (long)context.TraceId.High, context.SpanId, context.ParentId, span.OperationName, 0, startTime, duration ); span.References.Select(r => r); foreach (var tag in span.Tags) { tag.Value.Key = tag.Key; tag.Value.Marshal(jaegerSpan.Tags); } jaegerSpan.Logs = span.Logs.Select(BuildJaegerLog).ToList(); jaegerSpan.References = span.References.Select(BuildJaegerReference).Where(r => r != null).ToList(); return(jaegerSpan); }
public void ReportSpan(ILetsTraceSpan span) { if (span.Context.IsSampled) { Reporter.Report(span); Metrics.SpansFinished.Inc(1); } }
// TODO: setup baggage restriction public ILetsTraceSpan SetBaggageItem(ILetsTraceSpan span, string key, string value) { var context = (SpanContext)span.Context; var baggage = context.GetBaggageItems().ToDictionary(b => b.Key, b => b.Value); baggage[key] = value; context.SetBaggageItems(baggage); return(span); }
// TODO: Make async! public async void Report(ILetsTraceSpan span) { try { // TODO: This Task should be queued and be processed in a separate thread await _transport.AppendAsync(span, CancellationToken.None).ConfigureAwait(false); } catch (Exception e) { _logger.LogError(e, "Unable to report span in RemoteReporter"); _metrics.ReporterDropped.Inc(1); } }
public async Task <int> Append(ILetsTraceSpan span) { var convertedSpan = ConvertSpan(span); _buffer.Add(convertedSpan); if (_buffer.Count > _bufferSize) { return(await Flush()); } return(0); }
public async Task <int> Append(ILetsTraceSpan span) { if (_process == null) { _process = BuildJaegerProcessThrift(span.Tracer); } var jaegerSpan = BuildJaegerThriftSpan(span); _buffer.Add(jaegerSpan); if (_buffer.Count > _bufferSize) { return(await Flush()); } return(0); }
public async Task <int> AppendAsync(ILetsTraceSpan span, CancellationToken canellationToken) { if (_process == null) { _process = _jaegerThriftSerialization.BuildJaegerProcessThrift(span.Tracer); } var jaegerSpan = _jaegerThriftSerialization.BuildJaegerThriftSpan(span); var curBuffCount = _sender.BufferItem(jaegerSpan); if (curBuffCount > BufferSize) { return(await _sender.FlushAsync(_process, canellationToken)); } return(0); }
internal static Span ConvertSpan(ILetsTraceSpan span) { var context = (ILetsTraceSpanContext)span.Context; var endpoint = new Endpoint { ServiceName = span.Tracer.ServiceName, Ipv4 = span.Tracer.HostIPv4 }; var annotations = new List <Annotation>(); span.Logs.ForEach(log => { log.Fields.ForEach(field => { var annotation = new Annotation { Timestamp = log.Timestamp.ToUnixTimeMicroseconds(), Value = $"{field.Key}: {field.StringValue}" }; annotations.Add(annotation); }); }); var tags = span.Tags.Where(t => t.Key != OpenTracing.Tags.SpanKind).ToDictionary(t => t.Key, t => t.Value.StringValue); var spanKind = span.Tags.Where(t => t.Key == OpenTracing.Tags.SpanKind).FirstOrDefault().Value.StringValue; var convertedSpan = new Span { TraceId = context.TraceId.ToString(), Name = span.OperationName.ToLower(), ParentId = context.ParentId.ToString(), Id = context.SpanId.ToString(), Timestamp = span.StartTimestamp.ToUnixTimeMicroseconds(), Duration = span.FinishTimestamp?.ToUnixTimeMicroseconds() - span.StartTimestamp.ToUnixTimeMicroseconds(), LocalEndpoint = endpoint, Annotations = annotations, Tags = tags, Kind = GetSpanKindEnumValue(spanKind) }; // TODO: support debug // TODO: support shared // TODO: support remote endpoint return(convertedSpan); }
public JaegerSpan BuildJaegerThriftSpan(ILetsTraceSpan span) { var context = span.Context; var startTime = span.StartTimestamp.ToUnixTimeMicroseconds(); var duration = (span.FinishTimestamp?.ToUnixTimeMicroseconds() - startTime) ?? 0; var jaegerSpan = new JaegerSpan( (long)context.TraceId.Low, (long)context.TraceId.High, context.SpanId, context.ParentId, span.OperationName, 0, startTime, duration ) { Tags = BuildJaegerTags(span.Tags), Logs = span.Logs.Select(BuildJaegerLog).ToList(), References = span.References.Select(BuildJaegerReference).Where(r => r != null).ToList() }; return(jaegerSpan); }
public void Report(ILetsTraceSpan span) => Logger.LogInformation($"Reporting span:\n {JsonConvert.SerializeObject(span, Formatting.Indented)}");
public void Report(ILetsTraceSpan span) { }