public void SqlTrace_WithtUriExcluded()
        {
            //Arrange
            var attribDefs    = Mock.Create <IAttributeDefinitions>();
            var attribDefSvc  = new AttributeDefinitionService((f) => attribDefs);
            var sqlTraceMaker = new SqlTraceMaker(_configurationService, attribDefSvc, _databaseService);
            var attribFilter  = Mock.Create <IAttributeFilter>();

            Mock.Arrange(() => attribDefs.RequestUri)
            .Returns(AttributeDefinitionBuilder.CreateString("request.uri", AttributeClassification.AgentAttributes)
                     .AppliesTo(AttributeDestinations.TransactionEvent)
                     .AppliesTo(AttributeDestinations.ErrorEvent)
                     .AppliesTo(AttributeDestinations.ErrorTrace)
                     .AppliesTo(AttributeDestinations.TransactionTrace)
                     .AppliesTo(AttributeDestinations.SqlTrace, false)
                     .WithDefaultOutputValue("/unknown")
                     .Build(attribFilter));

            var uri                   = "sqlTrace/Uri";
            var commandText           = "Select * from Table1";
            var duration              = TimeSpan.FromMilliseconds(500);
            var transaction           = BuildTestTransaction(uri: uri, attribDefs: attribDefs);
            var transactionMetricName = new TransactionMetricName("WebTransaction", "Name");
            var datastoreSegment      = BuildSegment(DatastoreVendor.MSSQL, "Table1", commandText, new TimeSpan(), duration, null, null, null, "myhost", "myport", "mydatabase");

            //Act
            var sqlTrace = sqlTraceMaker.TryGetSqlTrace(transaction, transactionMetricName, datastoreSegment);

            //Assert
            Assert.IsNotNull(sqlTrace);
            Assert.AreEqual("<unknown>", sqlTrace.Uri);
        }
        public void TryGetSqlTrace_ReturnsTrace()
        {
            var uri                   = "sqlTrace/Uri";
            var commandText           = "Select * from Table1";
            var duration              = TimeSpan.FromMilliseconds(500);
            var transaction           = BuildTestTransaction(uri);
            var transactionMetricName = new TransactionMetricName("WebTransaction", "Name");
            var datastoreSegment      = BuildSegment(DatastoreVendor.MSSQL, "Table1", commandText, new TimeSpan(), duration, null, null, null, "myhost", "myport", "mydatabase");

            var sqlTrace = _sqlTraceMaker.TryGetSqlTrace(transaction, transactionMetricName, datastoreSegment);

            Assert.IsNotNull(sqlTrace);
            Assert.AreEqual(commandText, sqlTrace.Sql);
            Assert.AreEqual(uri, sqlTrace.Uri);
            Assert.AreEqual(duration, sqlTrace.TotalCallTime);
            Assert.AreEqual(3, sqlTrace.ParameterData.Count); // Explain plans will go here
            Assert.AreEqual("myhost", sqlTrace.ParameterData["host"]);
            Assert.AreEqual("myport", sqlTrace.ParameterData["port_path_or_id"]);
            Assert.AreEqual("mydatabase", sqlTrace.ParameterData["database_name"]);
            Assert.AreEqual("WebTransaction/Name", sqlTrace.TransactionName);
        }
Ejemplo n.º 3
0
        public void multiple_sqlId_does_not_has_9_digits_number()
        {
            var transactionMetadata = new TransactionMetadata();
            var name     = TransactionName.ForWebTransaction("foo", "bar");
            var metadata = transactionMetadata.ConvertToImmutableMetadata();
            var duration = TimeSpan.FromSeconds(1);
            var guid     = Guid.NewGuid().ToString();
            var transactionMetricName = new TransactionMetricName("WebTransaction", "Name");
            var databaseService       = new DatabaseService(Mock.Create <ICacheStatsReporter>());
            var configurationService  = Mock.Create <IConfigurationService>();
            var attribDefSvc          = new AttributeDefinitionService((f) => new AttributeDefinitions(f));

            string[] queries = { Sql,                                                                                               "Select * from someTable", "Insert x into anotherTable",             "another random string",
                                 "1234567890!@#$%^&*()",                                                                            "fjdksalfjdkla;fjdla;",    "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
                                 "NNNNNNNNNNNUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIINNNNNNNNNNNNNNNNNNNN",
                                 double.MaxValue.ToString() };
            var      sqlTraceMaker = new SqlTraceMaker(configurationService, attribDefSvc, databaseService);
            var      traceDatas    = new List <SqlTraceWireModel>();

            foreach (string query in queries)
            {
                var data    = new DatastoreSegmentData(databaseService, new ParsedSqlStatement(DatastoreVendor.MSSQL, null, null), query);
                var segment = new Segment(TransactionSegmentStateHelpers.GetItransactionSegmentState(), new MethodCallData("typeName", "methodName", 1));
                segment.SetSegmentData(data);

                var segments = new List <Segment>()
                {
                    new Segment(new TimeSpan(), TotalCallTime, segment, null)
                };
                var immutableTransaction = new ImmutableTransaction(name, segments, metadata, DateTime.Now, duration, duration, guid, false, false, false, 1.2f, false, string.Empty, null, _attribDefs);

                var sqlTraceData = sqlTraceMaker.TryGetSqlTrace(immutableTransaction, transactionMetricName, immutableTransaction.Segments.FirstOrDefault());
                traceDatas.Add(sqlTraceData);
            }

            foreach (SqlTraceWireModel traceData in traceDatas)
            {
                var numberOfDigits = Math.Floor(Math.Log10(traceData.SqlId) + 1);
                Assert.IsTrue(numberOfDigits != 9);
            }
        }