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)); }
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); }
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()); }
public void SetUp() { _configurationService = Mock.Create <IConfigurationService>(); _attribDefSvc = new AttributeDefinitionService((f) => new AttributeDefinitions(f)); _errorTraceMaker = new ErrorTraceMaker(_configurationService); _errorService = new ErrorService(_configurationService); }
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)); }
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); }
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(); }
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); }
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); }