Esempio n. 1
0
        public async void AppendAsync_ShouldFlushWhenOverTheBufferSize()
        {
            var span   = Substitute.For <ILetsTraceSpan>();
            var tracer = Substitute.For <ILetsTraceTracer>();

            span.Tracer.Returns(tracer);
            var cts = new CancellationTokenSource();

            var jProcess = Substitute.For <JaegerProcess>();

            _mockJaegerThriftSerialization.BuildJaegerProcessThrift(Arg.Is(tracer)).Returns(jProcess);

            var jSpan = Substitute.For <JaegerSpan>();

            _mockJaegerThriftSerialization.BuildJaegerThriftSpan(Arg.Is(span)).Returns(jSpan);

            _mockSender.BufferItem(Arg.Is(jSpan)).Returns(5);
            _mockSender.FlushAsync(Arg.Any <JaegerProcess>(), Arg.Any <CancellationToken>()).Returns(5);

            var sent = await _testingTransport.AppendAsync(span, cts.Token);

            Assert.Equal(5, sent);
            _mockJaegerThriftSerialization.Received(1).BuildJaegerProcessThrift(Arg.Is(tracer));
            _mockJaegerThriftSerialization.Received(1).BuildJaegerThriftSpan(Arg.Is(span));
            _mockSender.Received(1).BufferItem(Arg.Is(jSpan));
            await _mockSender.Received(1).FlushAsync(Arg.Any <JaegerProcess>(), Arg.Any <CancellationToken>());
        }
Esempio n. 2
0
        public async void FlushAsync_ShouldCallSenderAndReturnSentCount()
        {
            var cts = new CancellationTokenSource();

            _mockSender.FlushAsync(Arg.Any <JaegerProcess>(), Arg.Any <CancellationToken>()).Returns(3);

            var sent = await _testingTransport.FlushAsync(cts.Token);

            Assert.Equal(3, sent);
            await _mockSender.Received(1).FlushAsync(Arg.Any <JaegerProcess>(), Arg.Any <CancellationToken>());
        }
Esempio n. 3
0
        public async void AppendAsync_ShouldAddSpanToSenderAndFlushWhenItFitsJustRight()
        {
            var maxPacketSize    = _jSpanSize + _jProcessSize + TransportConstants.UdpEmitBatchOverhead;
            var testingTransport = NewUdpTransportWithMaxPacketSize(maxPacketSize);

            _mockSender.FlushAsync(Arg.Any <JaegerProcess>(), Arg.Any <CancellationToken>()).Returns(1);

            var sent = await testingTransport.AppendAsync(Substitute.For <IJaegerCoreSpan>(), CancellationToken.None);

            Assert.Equal(1, sent);
            _mockSender.Received(1).BufferItem(Arg.Any <JaegerSpan>());
            await _mockSender.Received(1).FlushAsync(Arg.Any <JaegerProcess>(), Arg.Any <CancellationToken>());
        }
Esempio n. 4
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);
        }
Esempio n. 5
0
        /// <summary>
        /// FlushAsync flushes the sender buffer without checking to see if the sender has
        /// reached the point at which we would normally flush.
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <int> FlushAsync(CancellationToken cancellationToken)
        {
            var sentCount = 0;

            try
            {
                sentCount = await _sender.FlushAsync(_process, cancellationToken);
            }
            catch (Exception e)
            {
                throw new SenderException("Failed to flush spans.", e, sentCount);
            }

            return(sentCount);
        }
Esempio n. 6
0
        async Task FlushAsync(CancellationToken cancellation)
        {
            try
            {
                var flushed = await sender.FlushAsync(cancellation);

                Interlocked.Exchange(ref flush, 0);
                metrics.ReporterSuccess(delta: flushed);
            }
            catch (SenderException ex)
            {
                metrics.ReporterFailure(delta: ex.DroppedSpanCount);
            }
            catch (Exception)
            {
                //log this and continue
            }
        }