コード例 #1
0
 public void Report(ILetsTraceSpan span)
 {
     foreach (var reporter in _reporters)
     {
         reporter.Report(span);
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
0
 public void ReportSpan(ILetsTraceSpan span)
 {
     if (span.Context.IsSampled)
     {
         Reporter.Report(span);
         Metrics.SpansFinished.Inc(1);
     }
 }
コード例 #4
0
        // 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);
        }
コード例 #5
0
 // 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);
     }
 }
コード例 #6
0
        public async Task <int> Append(ILetsTraceSpan span)
        {
            var convertedSpan = ConvertSpan(span);

            _buffer.Add(convertedSpan);

            if (_buffer.Count > _bufferSize)
            {
                return(await Flush());
            }

            return(0);
        }
コード例 #7
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);
        }
コード例 #8
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);
        }
コード例 #9
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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
 public void Report(ILetsTraceSpan span) => Logger.LogInformation($"Reporting span:\n {JsonConvert.SerializeObject(span, Formatting.Indented)}");
コード例 #12
0
ファイル: NullReporter.cs プロジェクト: cwe1ss/LetsTrace
 public void Report(ILetsTraceSpan span)
 {
 }