Пример #1
0
        public void TryDecodeAndDeserializeDistributedTracePayload_ThrowsException_IfEncodedAsInvalidType()
        {
            // The following base64 string isn't an encoding of a DistributedTracePayload but it is valid base64.
            var encodedString = "eyJ2IjpbMCwxXSwiZCI6eyJEaWZmZXJlbnQiOiJUeXBlIiwidHkiOiJBcHAiLCJhYyI6IjkxMjMiLCJhcCI6IjUxNDI0IiwiaWQiOiI1ZjQ3NGQ2NGI5Y2M5YjJhIiwidHIiOiIzMjIxYmYwOWFhMGJjZjBkIiwidGsiOiIxMjM0NSIsInByIjowLjEyMzQsInNhIjpmYWxzZSwidGkiOjE1Mjk0MjQxMzA2MDMsInR4IjoiMjc4NTZmNzBkM2QzMTRiNyJ9fQ==";

            Assert.Throws <DistributedTraceAcceptPayloadParseException>(() => DistributedTracePayload.TryDecodeAndDeserializeDistributedTracePayload(encodedString));
        }
Пример #2
0
        public void TryDecodeAndDeserializeDistributedTracePayload_ThrowsException_IfInvalidVersion()
        {
            var payload = BuildSampleDistributedTracePayload();

            payload.Version = new int[] { 9999, 1 };
            var encodedString = DistributedTracePayload.SerializeAndEncodeDistributedTracePayload(payload);

            Assert.Throws <DistributedTraceAcceptPayloadVersionException>(() => DistributedTracePayload.TryDecodeAndDeserializeDistributedTracePayload(encodedString));
        }
Пример #3
0
        public ISpanContext Extract <TCarrier>(IFormat <TCarrier> format, TCarrier carrier)
        {
            var payload = GetPayloadString(format, carrier);

            if (string.IsNullOrEmpty(payload))
            {
                return(null);
            }

            var distributedTracePayload = DistributedTracePayload.TryDecodeAndDeserializeDistributedTracePayload(payload);

            if (distributedTracePayload == null)
            {
                var message = $"{NEWRELIC_TRACE_HEADER} header value was not accepted.";
                _logger.Log(message, false, "ERROR");
                throw new ArgumentNullException(message);
            }

            var transportDurationInMillis = (DateTimeOffset.UtcNow - distributedTracePayload.Timestamp).TotalMilliseconds;

            return(new LambdaPayloadContext(distributedTracePayload, transportDurationInMillis));
        }
Пример #4
0
        public DistributedTracePayload TryDecodeInboundSerializedDistributedTracePayload(string serializedPayload)
        {
            DistributedTracePayload payload = null;

            try
            {
                payload = DistributedTracePayload.TryDecodeAndDeserializeDistributedTracePayload(serializedPayload);
            }
            catch (DistributedTraceAcceptPayloadVersionException)
            {
                _agentHealthReporter.ReportSupportabilityDistributedTraceAcceptPayloadIgnoredMajorVersion();
            }
            catch (DistributedTraceAcceptPayloadNullException)
            {
                _agentHealthReporter.ReportSupportabilityDistributedTraceAcceptPayloadIgnoredNull();
            }
            catch (DistributedTraceAcceptPayloadParseException)
            {
                _agentHealthReporter.ReportSupportabilityDistributedTraceAcceptPayloadParseException();
            }
            catch (Exception)
            {
                _agentHealthReporter.ReportSupportabilityDistributedTraceAcceptPayloadException();
            }

            if (!IsValidPayload(payload))
            {
                return(null);
            }

            if (_configurationService.Configuration.PayloadSuccessMetricsEnabled)
            {
                _agentHealthReporter.ReportSupportabilityDistributedTraceAcceptPayloadSuccess();
            }

            return(payload);
        }