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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: Jens-G/Redis-Samples
        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);
        }
コード例 #5
0
        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();
        }