コード例 #1
0
        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, float priority = 0.5f, bool sampled = false, string traceId = "traceId")
        {
            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 immutableTransaction = new ImmutableTransaction(name, segments, placeholderMetadata, DateTime.UtcNow, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10), guid, false, false, false, priority, sampled, traceId, null, _attribDefs);

            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>(), Mock.Create <IErrorService>(), _attribDefs);

            var adaptiveSampler = Mock.Create <IAdaptiveSampler>();

            Mock.Arrange(() => adaptiveSampler.ComputeSampled(ref priority)).Returns(sampled);
            internalTransaction.SetSampled(adaptiveSampler);

            var transactionMetadata = internalTransaction.TransactionMetadata;

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

            return(internalTransaction);
        }
コード例 #2
0
        private IInternalTransaction CreateInternalTransaction(ITransactionName initialTransactionName, Action onCreate)
        {
            RemoveOutstandingInternalTransactions(true, true);

            var transactionContext = GetFirstActivePrimaryContext();

            if (transactionContext == null)
            {
                Log.Error("Unable to locate a valid TransactionContext.");
                return(null);
            }
            var priority    = _tracePriorityManager.Create();
            var transaction = new Transaction(_configuration, initialTransactionName, _timerFactory.StartNewTimer(),
                                              DateTime.UtcNow, _callStackManagerFactory.CreateCallStackManager(), _databaseService, priority,
                                              _databaseStatementParser, _distributedTracePayloadHandler, _errorService, _attribDefSvc.AttributeDefs);

            try
            {
                transactionContext.SetData(transaction);
            }
            catch (Exception exception)
            {
                Log.Error($"The chosen TransactionContext threw an exception when setting the data: {exception}");
                return(null);
            }

            if (Log.IsFinestEnabled)
            {
                transaction.LogFinest($"Created transaction on {transactionContext}");
            }

            if (onCreate != null)
            {
                onCreate();
            }

            return(transaction);
        }