private static Segment GetSegment(string uri, string method, CrossApplicationResponseData catResponseData = null)
        {
            var data    = new ExternalSegmentData(new Uri(uri), method, catResponseData);
            var builder = new Segment(TransactionSegmentStateHelpers.GetItransactionSegmentState(), new MethodCallData("foo", "bar", 1));

            builder.SetSegmentData(data);
            builder.End();
            return(builder);
        }
        public void GetTransactionTraceName_ReturnsCorrectName_IfCatResponse()
        {
            const string host            = "www.foo.com";
            var          uri             = $"http://{host}/bar";
            const string method          = "GET";
            var          catResponseData = new CrossApplicationResponseData("cpId", "trxName", 1.1f, 2.2f, 3, "guid", false);
            var          segment         = GetSegment(uri, method, catResponseData);

            var transactionTraceName = segment.GetTransactionTraceName();

            Assert.AreEqual("ExternalTransaction/www.foo.com/cpId/trxName", transactionTraceName);
        }
        public void TransformSegment_CreatesWebWithCat()
        {
            const string host   = "www.bar.com";
            var          uri    = $"http://{host}/foo";
            const string method = "GET";
            var          externalCrossProcessId  = "cpId";
            var          externalTransactionName = "otherTxName";
            var          catResponseData         = new CrossApplicationResponseData(externalCrossProcessId, externalTransactionName, 1.1f, 2.2f, 3, "guid", false);

            var segment = GetSegment(uri, method, catResponseData);


            var txName  = new TransactionMetricName("WebTransaction", "Test", false);
            var txStats = new TransactionMetricStatsCollection(txName);

            segment.AddMetricStats(txStats, _configurationService);

            var scoped   = txStats.GetScopedForTesting();
            var unscoped = txStats.GetUnscopedForTesting();

            Assert.AreEqual(1, scoped.Count);
            Assert.AreEqual(6, unscoped.Count);

            const string segmentMetric = "External/www.bar.com/Stream/GET";
            const string txMetric      = "ExternalTransaction/www.bar.com/cpId/otherTxName";

            Assert.IsTrue(unscoped.ContainsKey("External/all"));
            Assert.IsTrue(unscoped.ContainsKey("External/allWeb"));
            Assert.IsTrue(unscoped.ContainsKey("External/www.bar.com/all"));
            Assert.IsTrue(unscoped.ContainsKey(segmentMetric));
            Assert.IsTrue(unscoped.ContainsKey(txMetric));
            Assert.IsTrue(unscoped.ContainsKey("ExternalApp/www.bar.com/cpId/all"));

            Assert.IsFalse(scoped.ContainsKey(segmentMetric));
            Assert.IsTrue(scoped.ContainsKey(txMetric));

            var nameScoped   = scoped[txMetric];
            var nameUnscoped = unscoped[txMetric];

            Assert.AreEqual(1, nameScoped.Value0);
            Assert.AreEqual(1, nameUnscoped.Value0);
        }
Esempio n. 4
0
        private Segment GetSegment(DatastoreVendor vendor, string operation, string model, double duration, CrossApplicationResponseData catResponseData = null, string host = null, string portPathOrId = null)
        {
            var methodCallData = new MethodCallData("foo", "bar", 1);
            var data           = new DatastoreSegmentData(_databaseService, new ParsedSqlStatement(vendor, model, operation), null, new ConnectionInfo(host, portPathOrId, null));
            var segment        = new Segment(TransactionSegmentStateHelpers.GetItransactionSegmentState(), methodCallData);

            segment.SetSegmentData(data);

            return(segment.CreateSimilar(new TimeSpan(), TimeSpan.FromSeconds(duration), null));
        }
        private static Segment GetSegment(string uri, string method, double duration, CrossApplicationResponseData catResponseData = null)
        {
            var methodCallData = new MethodCallData("foo", "bar", 1);

            var data    = new ExternalSegmentData(new Uri(uri), method, catResponseData);
            var segment = new Segment(TransactionSegmentStateHelpers.GetItransactionSegmentState(), methodCallData);

            segment.SetSegmentData(data);

            return(new Segment(new TimeSpan(), TimeSpan.FromSeconds(duration), segment, null));
        }
        public void TransformSegment_CreatesOtherWithCat()
        {
            const string host   = "www.bar.com";
            var          uri    = $"http://{host}/foo";
            const string method = "GET";
            var          externalCrossProcessId  = "cpId";
            var          externalTransactionName = "name";
            var          catResponseData         = new CrossApplicationResponseData(externalCrossProcessId, externalTransactionName, 1.1f, 2.2f, 3, "guid", false);

            var segment = GetSegment(uri, method, 5, catResponseData);


            var txName  = new TransactionMetricName("OtherTransaction", "Test", false);
            var txStats = new TransactionMetricStatsCollection(txName);

            segment.AddMetricStats(txStats, _configurationService);

            var scoped   = txStats.GetScopedForTesting();
            var unscoped = txStats.GetUnscopedForTesting();

            Assert.AreEqual(1, scoped.Count);
            Assert.AreEqual(6, unscoped.Count);

            const string segmentMetric = "External/www.bar.com/Stream/GET";
            const string txMetric      = "ExternalTransaction/www.bar.com/cpId/name";

            Assert.IsTrue(unscoped.ContainsKey("External/all"));
            Assert.IsTrue(unscoped.ContainsKey("External/allOther"));
            Assert.IsTrue(unscoped.ContainsKey("External/www.bar.com/all"));
            Assert.IsTrue(unscoped.ContainsKey(segmentMetric));
            Assert.IsTrue(unscoped.ContainsKey(txMetric));
            Assert.IsTrue(unscoped.ContainsKey("ExternalApp/www.bar.com/cpId/all"));

            Assert.IsFalse(scoped.ContainsKey(segmentMetric));
            Assert.IsTrue(scoped.ContainsKey(txMetric));

            var data = scoped[txMetric];

            Assert.AreEqual(1, data.Value0);
            Assert.AreEqual(5, data.Value1);
            Assert.AreEqual(5, data.Value2);
            Assert.AreEqual(5, data.Value3);
            Assert.AreEqual(5, data.Value4);

            var unscopedMetricsUsingDurationOnly = new string[] { "External/all", "External/allOther", "External/www.bar.com/all" };

            foreach (var current in unscopedMetricsUsingDurationOnly)
            {
                data = unscoped[current];
                Assert.AreEqual(1, data.Value0);
                Assert.AreEqual(5, data.Value1);
                Assert.AreEqual(5, data.Value2);
                Assert.AreEqual(5, data.Value3);
                Assert.AreEqual(5, data.Value4);
            }

            var unscopedMetricsUsingExclusive = new string[] { segmentMetric, txMetric };

            foreach (var current in unscopedMetricsUsingExclusive)
            {
                data = unscoped[current];
                Assert.AreEqual(1, data.Value0);
                Assert.AreEqual(5, data.Value1);
                Assert.AreEqual(5, data.Value2);
                Assert.AreEqual(5, data.Value3);
                Assert.AreEqual(5, data.Value4);
            }

            data = unscoped["ExternalApp/www.bar.com/cpId/all"];
            Assert.AreEqual(1, data.Value0);
            Assert.AreEqual(5, data.Value1);
            Assert.AreEqual(5, data.Value2);
            Assert.AreEqual(5, data.Value3);
            Assert.AreEqual(5, data.Value4);
        }
Esempio n. 7
0
        public void ExternalSegment_HasCorrectTraceNameAndMetrics_IfCatResponseReceived()
        {
            const string encodingKey = "foo";

            _compositeTestAgent.ServerConfiguration.EncodingKey = encodingKey;
            _compositeTestAgent.PushConfiguration();

            var tx = _agent.CreateTransaction(
                isWeb: true,
                category: EnumNameCache <WebTransactionType> .GetName(WebTransactionType.Action),
                transactionDisplayName: "name",
                doNotTrackAsUnitOfWork: true);
            var segment = _agent.StartExternalRequestSegmentOrThrow(new Uri("http://www.newrelic.com/test"), "POST");

            var catResponseData = new CrossApplicationResponseData("123#456", "transactionName", 1.1f, 2.2f, 3, "guid");
            var responseHeaders = new Dictionary <string, string>
            {
                { "X-NewRelic-App-Data", HeaderEncoder.EncodeSerializedData(JsonConvert.SerializeObject(catResponseData), encodingKey) }
            };

            tx.ProcessInboundResponse(responseHeaders, segment);
            segment.End();
            tx.End();

            _compositeTestAgent.Harvest();

            var expectedMetrics = new[]
            {
                new ExpectedMetric {
                    Name = "External/all"
                },
                new ExpectedMetric {
                    Name = "External/allWeb"
                },
                new ExpectedMetric {
                    Name = "External/www.newrelic.com/all"
                },
                new ExpectedMetric {
                    Name = "External/www.newrelic.com/Stream/POST"
                },
                new ExpectedMetric {
                    Name = "ExternalApp/www.newrelic.com/123#456/all"
                },
                new ExpectedMetric {
                    Name = "ExternalTransaction/www.newrelic.com/123#456/transactionName"
                },
                new ExpectedMetric {
                    Name = "ExternalTransaction/www.newrelic.com/123#456/transactionName", Scope = "WebTransaction/Action/name"
                }
            };
            var unexpectedMetrics = new[]
            {
                new ExpectedMetric {
                    Name = "External/allOther"
                },
                new ExpectedMetric {
                    Name = "External/www.newrelic.com/Stream/POST", Scope = "WebTransaction/Action/name"
                }
            };
            var unexpectedSegments = new[]
            {
                "External/www.newrelic.com/Stream/POST"
            };
            var expectedSegments = new[]
            {
                "ExternalTransaction/www.newrelic.com/123#456/transactionName"
            };
            var actualMetrics    = _compositeTestAgent.Metrics.ToList();
            var transactionTrace = _compositeTestAgent.TransactionTraces.First();

            NrAssert.Multiple(
                () => TransactionTraceAssertions.SegmentsExist(expectedSegments, transactionTrace),
                () => TransactionTraceAssertions.SegmentsDoNotExist(unexpectedSegments, transactionTrace),
                () => MetricAssertions.MetricsExist(expectedMetrics, actualMetrics),
                () => MetricAssertions.MetricsDoNotExist(unexpectedMetrics, actualMetrics)
                );
        }
Esempio n. 8
0
        public static Segment createExternalSegmentBuilder(TimeSpan relativeStart, TimeSpan duration, int uniqueId, int?parentId, MethodCallData methodCallData, IEnumerable <KeyValuePair <string, object> > parameters, Uri uri, string method, CrossApplicationResponseData crossApplicationResponseData, bool combinable)
        {
            var data    = new ExternalSegmentData(uri, method, crossApplicationResponseData);
            var segment = new Segment(SimpleSegmentDataTests.createTransactionSegmentState(uniqueId, parentId), methodCallData);

            segment.SetSegmentData(data);
            segment.Combinable = combinable;

            return(segment);
        }
 public ExternalSegmentData(Uri uri, string method, CrossApplicationResponseData crossApplicationResponseData = null)
 {
     Uri    = uri;
     Method = method;
     CrossApplicationResponseData = crossApplicationResponseData;
 }