public void SqlTraceIsSentToAggregator() { var commandText = "Select * from Table1"; var duration = TimeSpan.FromMilliseconds(500); var datastoreSegment = TestTransactions.BuildSegment(null, DatastoreVendor.MSSQL, "Table1", commandText, new TimeSpan(), duration, null, null, null, "myhost", "myport", "mydatabase"); var segments = Enumerable.Empty <Segment>(); segments = segments.Concat(new[] { datastoreSegment }); var transaction = TestTransactions.CreateTestTransactionWithSegments(segments); var transactionName = _transactionMetricNameMaker.GetTransactionMetricName(transaction.TransactionName); Mock.Arrange(() => _configuration.SlowSqlEnabled).Returns(true); Mock.Arrange(() => _configuration.SqlExplainPlanThreshold).Returns(TimeSpan.FromMilliseconds(100)); var privateTransactionTransformer = new PrivateAccessor(_transactionTransformer); var args = new object[] { transaction, transactionName }; privateTransactionTransformer.CallMethod("Transform", args); var privateSqlTraceStatsInAggregator = new PrivateAccessor(_sqlTraceAggregator).GetField("_sqlTraceStats"); var privateSqlTraceStatsCollection = (SqlTraceStatsCollection)privateSqlTraceStatsInAggregator; var tracesCount = ((IDictionary <long, SqlTraceWireModel>)privateSqlTraceStatsCollection.Collection).Count; Assert.AreEqual(tracesCount, 1); }
public static void GetTransactionApdex_ReturnsExpectedMetricName() { var transaction = TestTransactions.CreateDefaultTransaction(true, null, null, null, null, null, "foo", "bar"); var immutableTransaction = transaction.ConvertToImmutableTransaction(); var transactionNameMaker = new TransactionMetricNameMaker(new MetricNameService()); var transactionApdex = MetricNames.GetTransactionApdex(transactionNameMaker.GetTransactionMetricName(immutableTransaction.TransactionName)); var expectedName = "Apdex/foo/bar"; Assert.AreEqual(expectedName, transactionApdex); }
static void Main(string[] args) { try { Console.Title = "Redis Features Showcase"; Redis = Common.Redis.InitializeConnection(ConfigurationManager.AppSettings["Redis.Password"]); Console.WriteLine("Pick one:"); Console.WriteLine(" 1 - Numbers"); Console.WriteLine(" 2 - Floats, Ints"); Console.WriteLine(" 3 - Bitmaps"); Console.WriteLine(" 4 - Sets"); Console.WriteLine(" 5 - Sorted Sets (simple)"); Console.WriteLine(" 6 - Sorted Sets (airports)"); Console.WriteLine(" 7 - Transactions"); Console.WriteLine(" 8 - Hashes"); Console.WriteLine(); Console.Write("> "); while (true) { switch (Console.ReadKey(true).KeyChar) { case '1': TestNumbers.Execute(Redis); return; case '2': TestFloatsInts.Execute(Redis); return; case '3': TestBitmaps.Execute(Redis); return; case '4': TestSets.Execute(Redis); return; case '5': TestSortedSimple.Execute(Redis); return; case '6': TestSortedSets.Execute(Redis); return; case '7': TestTransactions.Execute(Redis); return; case '8': TestHash.Execute(Redis); return; default: break; } } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); Console.Write("<ENTER> "); Console.ReadLine(); } }
public void SqlTracesCollectedMetricIsAccurate() { var generatedMetrics = new MetricStatsDictionary <string, MetricDataWireModel>(); Mock.Arrange(() => _metricAggregator.Collect(Arg.IsAny <TransactionMetricStatsCollection>())).DoInstead <TransactionMetricStatsCollection>(txStats => generatedMetrics = txStats.GetUnscopedForTesting()); Mock.Arrange(() => _configuration.SlowSqlEnabled).Returns(true); Mock.Arrange(() => _configuration.SqlExplainPlanThreshold).Returns(TimeSpan.FromMilliseconds(100)); var segments = new List <Segment>(); int nextId = 0; var txSegmentState = Mock.Create <ITransactionSegmentState>(); Mock.Arrange(() => txSegmentState.AttribDefs).Returns(() => new AttributeDefinitions(new AttributeFilter(new AttributeFilter.Settings()))); Mock.Arrange(() => txSegmentState.ParentSegmentId()).Returns(() => nextId == 0 ? (int?)null : nextId); Mock.Arrange(() => txSegmentState.CallStackPush(Arg.IsAny <Segment>())).Returns(() => ++ nextId); var commandText = "Select * from Table1"; var duration = TimeSpan.FromMilliseconds(500); var datastoreSegment1 = TestTransactions.BuildSegment(txSegmentState, DatastoreVendor.MSSQL, "Table1", commandText, new TimeSpan(), duration, null, null, null, "myhost", "myport", "mydatabase"); segments.Add(datastoreSegment1); commandText = "Select * from Table2"; duration = TimeSpan.FromMilliseconds(1000); var datastoreSegment2 = TestTransactions.BuildSegment(txSegmentState, DatastoreVendor.MSSQL, "Table1", commandText, new TimeSpan(), duration, null, null, null, "myhost", "myport", "mydatabase"); segments.Add(datastoreSegment2); commandText = "Select * from Table2"; duration = TimeSpan.FromMilliseconds(900); var datastoreSegment3 = TestTransactions.BuildSegment(txSegmentState, DatastoreVendor.MSSQL, "Table1", commandText, new TimeSpan(), duration, null, null, null, "myhost", "myport", "mydatabase"); segments.Add(datastoreSegment3); var transaction = TestTransactions.CreateTestTransactionWithSegments(segments); var transactionName = _transactionMetricNameMaker.GetTransactionMetricName(transaction.TransactionName); var privateTransactionTransformer = new PrivateAccessor(_transactionTransformer); var args = new object[] { transaction, transactionName }; privateTransactionTransformer.CallMethod("Transform", args); string sqlTracesCollectedMetricName = "Supportability/SqlTraces/TotalSqlTracesCollected"; Assert.IsTrue(generatedMetrics.TryGetValue(sqlTracesCollectedMetricName, out MetricDataWireModel data)); Assert.AreEqual(3, data.Value0); }
public void Test(TestCase testCase) { // ARRANGE var errorEvent = Mock.Create <ErrorEventWireModel>(); var errorTrace = Mock.Create <ErrorTraceWireModel>(); var transactionEvent = Mock.Create <TransactionEventWireModel>(); var transactionTrace = Mock.Create <TransactionTraceWireModel>(); var spanEvents = new List <ISpanEventWireModel>() { new SpanAttributeValueCollection() }; var customEvent = Mock.Create <CustomEventWireModel>(); var transaction = TestTransactions.CreateDefaultTransaction(uri: "http://www.newrelic.com/test?param=value", statusCode: 404); Mock.Arrange(() => _errorEventMaker.GetErrorEvent(Arg.IsAny <ImmutableTransaction>(), Arg.IsAny <IAttributeValueCollection>())).Returns(errorEvent); Mock.Arrange(() => _errorTraceMaker.GetErrorTrace(Arg.IsAny <ImmutableTransaction>(), Arg.IsAny <IAttributeValueCollection>(), Arg.IsAny <TransactionMetricName>())).Returns(errorTrace); Mock.Arrange(() => _transactionEventMaker.GetTransactionEvent(Arg.IsAny <ImmutableTransaction>(), Arg.IsAny <IAttributeValueCollection>())).Returns(transactionEvent); Mock.Arrange(() => _transactionTraceMaker.GetTransactionTrace(Arg.IsAny <ImmutableTransaction>(), Arg.IsAny <IEnumerable <ImmutableSegmentTreeNode> >(), Arg.IsAny <TransactionMetricName>(), Arg.IsAny <IAttributeValueCollection>())).Returns(transactionTrace); Mock.Arrange(() => _spanEventMaker.GetSpanEvents(Arg.IsAny <ImmutableTransaction>(), Arg.IsAny <string>(), Arg.IsAny <IAttributeValueCollection>())).Returns(spanEvents); Action assertAction = null; var num = int.Parse(testCase.ExpectedDataSeen.FirstOrDefault()["count"].ToString()); if (testCase.TestName.Contains("collect_error_events_")) { _serverConfig.ErrorEventCollectionEnabled = testCase.ConnectResponse["collect_error_events"]; assertAction = new Action(() => Mock.Assert(() => _errorEventAggregator.Collect(errorEvent), Occurs.Exactly(num))); } else if (testCase.TestName.Contains("collect_analytics_events_")) { _serverConfig.AnalyticsEventCollectionEnabled = testCase.ConnectResponse["collect_analytics_events"]; assertAction = new Action(() => Mock.Assert(() => _transactionEventAggregator.Collect(transactionEvent), Occurs.Exactly(num))); } else if (testCase.TestName.Contains("collect_errors_")) { _serverConfig.ErrorCollectionEnabled = testCase.ConnectResponse["collect_errors"]; assertAction = new Action(() => Mock.Assert(() => _errorTraceAggregator.Collect(errorTrace), Occurs.Exactly(num))); } else if (testCase.TestName.Contains("collect_traces_")) { _serverConfig.TraceCollectionEnabled = testCase.ConnectResponse["collect_traces"]; assertAction = new Action(() => Mock.Assert(() => _transactionTraceAggregator.Collect(Arg.IsAny <TransactionTraceWireModelComponents>()), Occurs.Exactly(num))); } else if (testCase.TestName.Contains("collect_custom_events_")) { _serverConfig.CustomEventCollectionEnabled = testCase.ConnectResponse["collect_custom_events"]; assertAction = new Action(() => Mock.Assert(() => _customEventAggregator.Collect(Arg.IsAny <CustomEventWireModel>()), Occurs.Exactly(num))); } else if (testCase.TestName.Contains("collect_span_events_")) { _serverConfig.SpanEventCollectionEnabled = testCase.ConnectResponse["collect_span_events"]; //if transaction.Sampled is null or false, span events aren't generated. transaction = TestTransactions.CreateDefaultTransaction(uri: "http://www.newrelic.com/test?param=value", statusCode: 404, sampled: true); assertAction = new Action(() => Mock.Assert(() => _spanEventAggregator.Collect(spanEvents), Occurs.Exactly(num))); } // ACTION _transactionTransformer.Transform(transaction); _customEventTransformer.Transform("myEvent", new Dictionary <string, object>(), 1); // ASSERT assertAction(); }