Ejemplo n.º 1
0
        public ImmutableTransaction Build()
        {
            var metadata = new TestImmutableTransactionMetadata(
                uri: "uri",
                originalUri: "originalUri",
                referrerUri: "referrerUri",
                queueTime: new TimeSpan(1),
                requestParameters: new ConcurrentDictionary <string, string>(),
                userAttributes: new ConcurrentDictionary <string, object>(),
                transactionErrorState: _transactionErrorState,
                httpResponseStatusCode: 200,
                httpResponseSubStatusCode: 201,
                crossApplicationReferrerPathHash: _crossApplicationReferrerPathHash,
                crossApplicationPathHash: _crossApplicationPathHash,
                crossApplicationPathHashes: new List <string>(),
                crossApplicationReferrerTransactionGuid: _crossApplicationReferrerTransactionGuid,
                crossApplicationReferrerProcessId: _crossApplicationReferrerProcessId,
                crossApplicationReferrerTripId: _crossApplicationReferrerTripId,
                crossApplicationResponseTimeInSeconds: _crossApplicationResponseTimeInSeconds,
                hasOutgoingTraceHeaders: false,
                syntheticsResourceId: "syntheticsResourceId",
                syntheticsJobId: "syntheticsJobId",
                syntheticsMonitorId: "syntheticsMonitorId",
                isSynthetics: false,
                hasCatResponseHeaders: false,
                priority: _priority);

            var attribDefSvc = new AttributeDefinitionService((f) => new AttributeDefinitions(f));

            return(new ImmutableTransaction(_transactionName, _segments, metadata, _startTime, _duration, _responseTime, _transactionGuid, true, true, false, 0.5f, _distributedTraceSampled, _distributedTraceTraceId, _tracingState, attribDefSvc.AttributeDefs));
        }
Ejemplo n.º 2
0
        private ImmutableTransaction BuildTestTransaction(string uri = null, string guid = null, int?statusCode = null, int?subStatusCode = null, IEnumerable <ErrorData> transactionExceptionDatas = null)
        {
            var transactionMetadata = new TransactionMetadata();

            if (uri != null)
            {
                transactionMetadata.SetUri(uri);
            }
            if (statusCode != null)
            {
                transactionMetadata.SetHttpResponseStatusCode(statusCode.Value, subStatusCode, _errorService);
            }
            if (transactionExceptionDatas != null)
            {
                transactionExceptionDatas.ForEach(data => transactionMetadata.TransactionErrorState.AddExceptionData(data));
            }

            var name     = TransactionName.ForWebTransaction("foo", "bar");
            var segments = Enumerable.Empty <Segment>();
            var metadata = transactionMetadata.ConvertToImmutableMetadata();

            guid = guid ?? Guid.NewGuid().ToString();

            var attribDefSvc = new AttributeDefinitionService((f) => new AttributeDefinitions(f));

            return(new ImmutableTransaction(name, segments, metadata, DateTime.UtcNow, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1), guid, false, false, false, 0.5f, false, string.Empty, null, attribDefSvc.AttributeDefs));
        }
        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);
        }
        private IInternalTransaction BuildTestTransaction(string pathHash = null, IEnumerable <string> alternatePathHashes = null, string referrerGuid = null, string referrerTripId = null, string referrerPathHash = null, string referrerCrossProcessId = null, string syntheticsResourceId = null, string syntheticsJobId = null, string syntheticsMonitorId = null, bool isSynthetics = false, bool hasCatResponseHeaders = false)
        {
            var name      = TransactionName.ForWebTransaction("foo", "bar");
            var startTime = DateTime.Now;
            var duration  = TimeSpan.FromSeconds(1);

            pathHash            = pathHash ?? "pathHash";
            referrerPathHash    = referrerPathHash ?? "referrerPathHash";
            alternatePathHashes = alternatePathHashes ?? Enumerable.Empty <string>();
            referrerGuid        = referrerGuid ?? Guid.NewGuid().ToString();
            ITimer timer = Mock.Create <ITimer>();

            Mock.Arrange(() => timer.Duration).Returns(duration);

            IAttributeDefinitionService attribDefSvc = new AttributeDefinitionService((f) => new AttributeDefinitions(f));

            var priority = 0.5f;
            var tx       = new Transaction(_configuration, name, timer, startTime, Mock.Create <ICallStackManager>(), Mock.Create <IDatabaseService>(), priority, Mock.Create <IDatabaseStatementParser>(), Mock.Create <IDistributedTracePayloadHandler>(), Mock.Create <IErrorService>(), attribDefSvc.AttributeDefs);

            tx.TransactionMetadata.SetCrossApplicationPathHash(pathHash);
            tx.TransactionMetadata.SetCrossApplicationReferrerTransactionGuid(referrerGuid);
            tx.TransactionMetadata.SetCrossApplicationReferrerTripId(referrerTripId);
            tx.TransactionMetadata.SetCrossApplicationReferrerPathHash(referrerPathHash);
            tx.TransactionMetadata.SetSyntheticsResourceId(syntheticsResourceId);
            tx.TransactionMetadata.SetSyntheticsJobId(syntheticsJobId);
            tx.TransactionMetadata.SetSyntheticsMonitorId(syntheticsMonitorId);
            tx.TransactionMetadata.SetCrossApplicationReferrerProcessId(referrerCrossProcessId);
            tx.TransactionMetadata.SetCrossApplicationResponseTimeInSeconds(ExpectedResponseTimeInSeconds);

            return(tx);
        }
Ejemplo n.º 5
0
        private static ISpanEventWireModel[] CreateSpanEventModels()
        {
            var result = new List <ISpanEventWireModel>();

            var attribSvc  = new AttributeDefinitionService((f) => new AttributeDefinitions(f));
            var attribDefs = attribSvc.AttributeDefs;

            {
                var spanAttribs = new SpanAttributeValueCollection();
                spanAttribs.Priority = 0.654321f;
                attribDefs.Timestamp.TrySetValue(spanAttribs, TestTime);
                attribDefs.Priority.TrySetValue(spanAttribs, spanAttribs.Priority);
                result.Add(spanAttribs);
            }

            {
                var spanAttribs = new SpanAttributeValueCollection();
                spanAttribs.Priority = 0.654321f;
                attribDefs.Timestamp.TrySetValue(spanAttribs, TestTime.AddMilliseconds(1));
                attribDefs.Priority.TrySetValue(spanAttribs, spanAttribs.Priority);
                result.Add(spanAttribs);
            }

            {
                var spanAttribs = new SpanAttributeValueCollection();
                spanAttribs.Priority = 0.1f;
                attribDefs.Timestamp.TrySetValue(spanAttribs, TestTime);
                attribDefs.Priority.TrySetValue(spanAttribs, spanAttribs.Priority);
                result.Add(spanAttribs);
            }


            return(result.ToArray());
        }
Ejemplo n.º 6
0
        public void SetUp()
        {
            _configurationService = Mock.Create <IConfigurationService>();

            _attribDefSvc = new AttributeDefinitionService((f) => new AttributeDefinitions(f));

            _errorTraceMaker = new ErrorTraceMaker(_configurationService);
            _errorService    = new ErrorService(_configurationService);
        }
Ejemplo n.º 7
0
        private ImmutableTransaction BuildTestTransaction(bool ignoreAutoBrowserMonitoring = false, bool ignoreAllBrowserMonitoring = false)
        {
            var name     = TransactionName.ForWebTransaction("foo", "bar");
            var segments = Enumerable.Empty <Segment>();
            var metadata = new TransactionMetadata().ConvertToImmutableMetadata();
            var guid     = Guid.NewGuid().ToString();

            _internalTransaction = Mock.Create <IInternalTransaction>();
            Mock.Arrange(() => _internalTransaction.IgnoreAllBrowserMonitoring).Returns(ignoreAllBrowserMonitoring);
            Mock.Arrange(() => _internalTransaction.IgnoreAutoBrowserMonitoring).Returns(ignoreAutoBrowserMonitoring);

            var attribDefSvc = new AttributeDefinitionService((f) => new AttributeDefinitions(f));

            return(new ImmutableTransaction(name, segments, metadata, DateTime.UtcNow, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1), guid, ignoreAutoBrowserMonitoring, ignoreAllBrowserMonitoring, false, 0.5f, false, string.Empty, null, attribDefSvc.AttributeDefs));
        }
Ejemplo n.º 8
0
        public static ITransactionSegmentState GetItransactionSegmentState()
        {
            var transactionSegmentState = Mock.Create <ITransactionSegmentState>();

            var attributeService = new AttributeDefinitionService((f) => new AttributeDefinitions(f));

            Mock.Arrange(() => transactionSegmentState.AttribDefs).Returns(attributeService.AttributeDefs);

            var configurationService = Mock.Create <IConfigurationService>();

            var errorService = new Errors.ErrorService(configurationService);

            Mock.Arrange(() => transactionSegmentState.ErrorService).Returns(errorService);

            return(transactionSegmentState);
        }
Ejemplo n.º 9
0
        public void SetUp()
        {
            _configuration = Mock.Create <IConfiguration>();
            var configurationService = Mock.Create <IConfigurationService>();

            Mock.Arrange(() => configurationService.Configuration).Returns(_configuration);

            _databaseService = new DatabaseService(Mock.Create <ICacheStatsReporter>());
            _errorService    = new ErrorService(configurationService);
            _distributedTracePayloadHandler = Mock.Create <IDistributedTracePayloadHandler>();
            _attribDefSvc      = new AttributeDefinitionService((f) => new AttributeDefinitions(f));
            _transaction       = new Transaction(_configuration, Mock.Create <ITransactionName>(), Mock.Create <ITimer>(), DateTime.UtcNow, Mock.Create <ICallStackManager>(), _databaseService, Priority, Mock.Create <IDatabaseStatementParser>(), _distributedTracePayloadHandler, _errorService, _attribDefs);
            _publishedEvent    = null;
            _eventSubscription = new EventSubscription <TransactionFinalizedEvent>(e => _publishedEvent = e);
            _wrapperToken      = new object();
        }
Ejemplo n.º 10
0
        public void SetUp()
        {
            _lowPriorityTransactionContext = Mock.Create <IContextStorage <IInternalTransaction> >();
            Mock.Arrange(() => _lowPriorityTransactionContext.Priority).Returns(1);
            DictionaryTransactionContext(_lowPriorityTransactionContext);

            _highPriorityTransactionContext = Mock.Create <IContextStorage <IInternalTransaction> >();
            Mock.Arrange(() => _highPriorityTransactionContext.Priority).Returns(2);
            DictionaryTransactionContext(_highPriorityTransactionContext);

            var factory1 = CreateFactoryForTransactionContext(_highPriorityTransactionContext);
            var factory2 = CreateFactoryForTransactionContext(_lowPriorityTransactionContext);

            IAttributeDefinitionService _attribDefSvc = new AttributeDefinitionService((f) => new AttributeDefinitions(f));

            _transactionService = new TransactionService(new[] { factory1, factory2 }, Mock.Create <ITimerFactory>(), Mock.Create <ICallStackManagerFactory>(), Mock.Create <IDatabaseService>(), Mock.Create <ITracePriorityManager>(), Mock.Create <IDatabaseStatementParser>(), Mock.Create <IErrorService>(), Mock.Create <IDistributedTracePayloadHandler>(), _attribDefSvc);
        }
Ejemplo n.º 11
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);
            }
        }
        private IInternalTransaction BuildTestTransaction(bool isWebTransaction = true, string uri = null, string referrerUri = null, string guid = null, int?statusCode = null, int?subStatusCode = null, string referrerCrossProcessId = null, string transactionCategory = "defaultTxCategory", string transactionName = "defaultTxName", ErrorData exceptionData = null, ErrorData customErrorData = null, bool isSynthetics = true, bool isCAT = true, bool includeUserAttributes = false)
        {
            var name = isWebTransaction
                ? TransactionName.ForWebTransaction(transactionCategory, transactionName)
                : TransactionName.ForOtherTransaction(transactionCategory, transactionName);

            var segments = Enumerable.Empty <Segment>();

            var placeholderMetadataBuilder = new TransactionMetadata();
            var placeholderMetadata        = placeholderMetadataBuilder.ConvertToImmutableMetadata();

            var attribDefSvc = new AttributeDefinitionService((f) => new AttributeDefinitions(f));

            var immutableTransaction = new ImmutableTransaction(name, segments, placeholderMetadata, DateTime.Now, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10), guid, false, false, false, 0.5f, false, string.Empty, null, attribDefSvc.AttributeDefs);

            var priority            = 0.5f;
            var internalTransaction = new Transaction(Mock.Create <IConfiguration>(), immutableTransaction.TransactionName, _timerFactory.StartNewTimer(), DateTime.UtcNow, Mock.Create <ICallStackManager>(), Mock.Create <IDatabaseService>(), priority, Mock.Create <IDatabaseStatementParser>(), Mock.Create <IDistributedTracePayloadHandler>(), _errorService, _attribDefSvc.AttributeDefs);
            var transactionMetadata = internalTransaction.TransactionMetadata;

            PopulateTransactionMetadataBuilder(transactionMetadata, uri, statusCode, subStatusCode, referrerCrossProcessId, exceptionData, customErrorData, isSynthetics, isCAT, referrerUri, includeUserAttributes);

            return(internalTransaction);
        }