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