public JaegerExporter(JaegerOptions options)
        {
            var protocolFactory = new TCompactProtocol.Factory();

            _options = options;
            _maxPayloadSizeInBytes = options.MaxPayloadSizeInBytes;
            _clientTransport       = new JaegerThriftClientTransport(options.Host, options.Port, new MemoryStream(), options.TransportClient);
            _thriftClient          = new JaegerThriftClient(protocolFactory.GetProtocol(_clientTransport));
            _memoryTransport       = new InMemoryTransport(16000);
            _memoryProtocol        = protocolFactory.GetProtocol(_memoryTransport);
            _serviceName           = options.ServiceName;

            Process = new Process(_serviceName);
        }
Ejemplo n.º 2
0
        public async void JaegerThriftIntegrationTest_TAbstractBaseGeneratesConsistentThriftPayload()
        {
            var validJaegerThriftPayload = Convert.FromBase64String("goEBCWVtaXRCYXRjaBwcGAx0ZXN0IHByb2Nlc3MZHBgQdGVzdF9wcm9jZXNzX3RhZxUAGAp0ZXN0X3ZhbHVlAAAZHBab5cuG2OehhdwBFuPakI2n2cCVLhbUpdv9yJDPo4EBFpjckNKFzqHOsgEYBE5hbWUZHBUAFpvly4bY56GF3AEW49qQjafZwJUuFpCmrOGWyrWcgwEAFQIWgICz3saWvwUWgJycORl8GAlzdHJpbmdLZXkVABgFdmFsdWUAGAdsb25nS2V5FQZGAgAYCGxvbmdLZXkyFQZGAgAYCWRvdWJsZUtleRUCJwAAAAAAAPA/ABgKZG91YmxlS2V5MhUCJwAAAAAAAPA/ABgHYm9vbEtleRUEMQAYCXNwYW4ua2luZBUAGAZjbGllbnQAGSwWgICz3saWvwUZLBgDa2V5FQAYBXZhbHVlABgHbWVzc2FnZRUAGAZFdmVudDEAABaAgLPexpa/BRksGANrZXkVABgFdmFsdWUAGAdtZXNzYWdlFQAYBkV2ZW50MgAAAAAA");

            using (var memoryTransport = new InMemoryTransport())
            {
                var protocolFactory = new TCompactProtocol.Factory();
                var thriftClient    = new JaegerThriftClient(protocolFactory.GetProtocol(memoryTransport));
                var spanData        = CreateTestSpan();
                var span            = spanData.ToJaegerSpan();
                var process         = new Process("test process", new Dictionary <string, object> {
                    { "test_process_tag", "test_value" }
                });
                var batch = new Batch(process, new List <JaegerSpan> {
                    span
                });

                await thriftClient.EmitBatchAsync(batch, CancellationToken.None);

                var buff = memoryTransport.GetBuffer();

                // all parts except spanId match (we can't control/mock span-id generation)
                Assert.Equal(validJaegerThriftPayload.AsSpan().Slice(0, 89).ToArray(), buff.AsSpan().Slice(0, 89).ToArray());
                Assert.Equal(validJaegerThriftPayload.AsSpan().Slice(98).ToArray(), buff.AsSpan().Slice(98).ToArray());

                byte [] spanIdBytes = new byte[8];
                spanData.Context.SpanId.CopyTo(spanIdBytes);

                Assert.Equal(span.SpanId, BitConverter.ToInt64(spanIdBytes, 0));

                // TODO: validate spanId in thrift payload
            }
        }
Ejemplo n.º 3
0
        private static int CalcSizeOfSerializedThrift(TBase thriftBase)
        {
            var thriftBuffer    = new TMemoryBuffer();
            var protocolFactory = new TCompactProtocol.Factory();
            var thriftProtocol  = protocolFactory.GetProtocol(thriftBuffer);

            try
            {
                thriftBase.WriteAsync(thriftProtocol, CancellationToken.None).ConfigureAwait(false).GetAwaiter().GetResult();
            }
            catch (Exception e)
            {
                throw new Exception("failed to calculate the size of a serialized thrift object", e);
            }
            return(thriftBuffer.GetBuffer().Length);
        }
        public async Task JaegerThriftIntegrationTest_TAbstractBaseGeneratesConsistentThriftPayload()
        {
            var validJaegerThriftPayload = Convert.FromBase64String(TestPayloadBase64);

            using var memoryTransport = new InMemoryTransport();
            var protocolFactory = new TCompactProtocol.Factory();
            var thriftClient    = new JaegerThriftClient(protocolFactory.GetProtocol(memoryTransport));
            var spanData        = CreateTestSpan();
            var span            = spanData.ToJaegerSpan();
            var process         = TestProcess;
            var batch           = new Batch(process, new List <JaegerSpan> {
                span
            });

            await thriftClient.EmitBatchAsync(batch, CancellationToken.None);

            Assert.Equal(validJaegerThriftPayload, memoryTransport.ToArray());
        }
Ejemplo n.º 5
0
        public async void EmitBatchOverhead_ShouldNotGoOverOverheadConstant()
        {
            var transport       = new TMemoryBuffer();
            var protocolFactory = new TCompactProtocol.Factory();
            var client          = new Agent.Client(protocolFactory.GetProtocol(transport));

            var jSpan     = new JaegerSpan(10, 11, 12, 13, "opName", 0, 1234, 1235);
            var jSpanSize = CalcSizeOfSerializedThrift(jSpan);

            var tests = new[] { 1, 2, 14, 15, 377, 500, 65000, 0xFFFF };

            foreach (var test in tests)
            {
                transport.Reset();
                var batch       = new List <JaegerSpan>();
                var processTags = new List <JaegerTag>();
                for (var j = 0; j < test; j++)
                {
                    batch.Add(jSpan);
                    processTags.Add(new JaegerTag("testingTag", TagType.BINARY)
                    {
                        VBinary = new byte[] { 0x20 }
                    });
                }

                var jProcess = new JaegerProcess("testing")
                {
                    Tags = processTags
                };
                await client.emitBatchAsync(new JaegerBatch(jProcess, batch), CancellationToken.None);

                var jProcessSize = CalcSizeOfSerializedThrift(jProcess);

                var overhead = transport.GetBuffer().Length - test * jSpanSize - jProcessSize;
                Assert.True(overhead <= TransportConstants.UdpEmitBatchOverhead);
            }
        }
        public async void JaegerThriftIntegrationTest_TAbstractBaseGeneratesConsistentThriftPayload()
        {
            var validJaegerThriftPayload = Convert.FromBase64String("goEBCWVtaXRCYXRjaBwcGAx0ZXN0IHByb2Nlc3MZHBgQdGVzdF9wcm9jZXNzX3RhZxUAGAp0ZXN0X3ZhbHVlAAAZHBab5cuG2OehhdwBFuPakI2n2cCVLhbUpdv9yJDPo4EBFpjckNKFzqHOsgEYBE5hbWUZHBUAFpvly4bY56GF3AEW49qQjafZwJUuFpCmrOGWyrWcgwEAFQIWgICz3saWvwUWgJycORl8GAlzdHJpbmdLZXkVABgFdmFsdWUAGAdsb25nS2V5FQZGAgAYCGxvbmdLZXkyFQZGAgAYCWRvdWJsZUtleRUCJwAAAAAAAPA/ABgKZG91YmxlS2V5MhUCJwAAAAAAAPA/ABgHYm9vbEtleRUEMQAYCXNwYW4ua2luZBUAGAZjbGllbnQAGSwWgICz3saWvwUZLBgDa2V5FQAYBXZhbHVlABgLZGVzY3JpcHRpb24VABgGRXZlbnQxAAAWgICz3saWvwUZLBgDa2V5FQAYBXZhbHVlABgLZGVzY3JpcHRpb24VABgGRXZlbnQyAAAAAAA=");

            using (var memoryTransport = new InMemoryTransport())
            {
                var protocolFactory = new TCompactProtocol.Factory();
                var thriftClient    = new JaegerThriftClient(protocolFactory.GetProtocol(memoryTransport));
                var spanData        = CreateTestSpan();
                var span            = spanData.ToJaegerSpan();
                var process         = new Process("test process", new Dictionary <string, object> {
                    { "test_process_tag", "test_value" }
                });
                var batch = new Batch(process, new List <JaegerSpan> {
                    span
                });

                await thriftClient.EmitBatchAsync(batch, CancellationToken.None);

                var buff = memoryTransport.GetBuffer();

                Assert.Equal(validJaegerThriftPayload, buff);
            }
        }
        public async void JaegerThriftIntegrationTest_TAbstractBaseGeneratesConsistentThriftPayload()
        {
            var validJaegerThriftPayload = Convert.FromBase64String("goEBCWVtaXRCYXRjaBwcGAx0ZXN0IHByb2Nlc3MZHBgQdGVzdF9wcm9jZXNzX3RhZxUAGAp0ZXN0X3ZhbHVlAAAZHBbdlZjkk/C0+ZoBFtCr96fz8ZbpnQEW1KXb/ciQz6OBARaY3JDShc6hzrIBGAROYW1lGRwVABbdlZjkk/C0+ZoBFtCr96fz8ZbpnQEWkKas4ZbKtZyDAQAVAhaAgLPexpa/BRaAnJw5GWwYCXN0cmluZ0tleRUAGAV2YWx1ZQAYB2xvbmdLZXkVBkYCABgIbG9uZ0tleTIVBkYCABgJZG91YmxlS2V5FQInAAAAAAAA8D8AGApkb3VibGVLZXkyFQInAAAAAAAA8D8AGAdib29sS2V5FQQxABksFoCAs97Glr8FGSwYA2tleRUAGAV2YWx1ZQAYC2Rlc2NyaXB0aW9uFQAYBkV2ZW50MQAAFoCAs97Glr8FGSwYA2tleRUAGAV2YWx1ZQAYC2Rlc2NyaXB0aW9uFQAYBkV2ZW50MgAAAAAA");

            using (var memoryTransport = new InMemoryTransport())
            {
                var protocolFactory = new TCompactProtocol.Factory();
                var thriftClient    = new JaegerThriftClient(protocolFactory.GetProtocol(memoryTransport));
                var spanData        = CreateTestSpan();
                var span            = spanData.ToJaegerSpan();
                var process         = new Process("test process", new Dictionary <string, object> {
                    { "test_process_tag", "test_value" }
                });
                var batch = new Batch(process, new List <JaegerSpan> {
                    span
                });

                await thriftClient.EmitBatchAsync(batch, CancellationToken.None);

                var buff = memoryTransport.GetBuffer();

                Assert.Equal(validJaegerThriftPayload, buff);
            }
        }
        public async void JaegerThriftIntegrationTest_TAbstractBaseGeneratesConsistentThriftPayload()
        {
            var validJaegerThriftPayload = Convert.FromBase64String("goEBCWVtaXRCYXRjaBwcGAx0ZXN0IHByb2Nlc3MZHBgQdGVzdF9wcm9jZXNzX3RhZxUAGAp0ZXN0X3ZhbHVlAAAZHBab5cuG2OehhdwBFuPakI2n2cCVLhaAjfWp6NHt6dQBFrK5moSni5GXGBgETmFtZRkcFQAWm+XLhtjnoYXcARbj2pCNp9nAlS4W/Y6j+bqS9fbuAQAVAhaAgLPexpa/BRaAnJw5GXwYCXN0cmluZ0tleRUAGAV2YWx1ZQAYB2xvbmdLZXkVBkYCABgIbG9uZ0tleTIVBkYCABgJZG91YmxlS2V5FQInAAAAAAAA8D8AGApkb3VibGVLZXkyFQInAAAAAAAA8D8AGAdib29sS2V5FQQxABgJc3Bhbi5raW5kFQAYBmNsaWVudAAZLBaAgLPexpa/BRksGANrZXkVABgFdmFsdWUAGAdtZXNzYWdlFQAYBkV2ZW50MQAAFoCAs97Glr8FGSwYA2tleRUAGAV2YWx1ZQAYB21lc3NhZ2UVABgGRXZlbnQyAAAAAAA=");

            using (var memoryTransport = new InMemoryTransport())
            {
                var protocolFactory = new TCompactProtocol.Factory();
                var thriftClient    = new JaegerThriftClient(protocolFactory.GetProtocol(memoryTransport));
                var spanData        = CreateTestSpan();
                var span            = spanData.ToJaegerSpan();
                var process         = new Process("test process", new Dictionary <string, object> {
                    { "test_process_tag", "test_value" }
                });
                var batch = new Batch(process, new List <JaegerSpan> {
                    span
                });

                await thriftClient.EmitBatchAsync(batch, CancellationToken.None);

                var buff = memoryTransport.GetBuffer();

                Assert.Equal(validJaegerThriftPayload, buff);
            }
        }