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