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