Exemplo n.º 1
0
        /// <summary>
        /// Associates telemetry item to a SQL command object to to avoid duplicate tracking.
        /// When there is an existing telemetry item in the corresponding to the given SQL REQUEST, we return the existing telemetry and associate the same with the SQL REQUEST.
        /// </summary>
        /// <param name="telemetry">Telemetry object that needs to be associated with the web request.</param>
        /// <param name="sqlRequest">SQL request object which is used as a key to store in the tables.</param>
        /// <returns>Dependency telemetry item with an associated dependency telemetry item.</returns>
        public static DependencyTelemetry AssociateTelemetryWithSqlRequest(this DependencyTelemetry telemetry, SqlCommand sqlRequest)
        {
            if (sqlRequest == null)
            {
                DependencyCollectorEventSource.Log.WebRequestIsNullWarning();
                return(null);
            }

            if (telemetry == null)
            {
                DependencyCollectorEventSource.Log.TelemetryToTrackIsNullWarning();
                return(null);
            }

            var telemetryTuple = ClientServerDependencyTracker.GetTupleForSqlDependencies(sqlRequest);

            if (telemetryTuple != null)
            {
                return(telemetryTuple.Item1 as DependencyTelemetry);
            }
            else
            {
                ClientServerDependencyTracker.AddTupleForSqlDependencies(sqlRequest, telemetry, true);
            }

            return(telemetry);
        }
        public void BeginWebTrackingWithParentActivityReturnsOperationItemWithTelemetryItemW3COff()
        {
            Activity.DefaultIdFormat      = ActivityIdFormat.Hierarchical;
            Activity.ForceDefaultIdFormat = true;

            var parentActivity = new Activity("test");

            parentActivity.SetParentId("|guid.1234_");
            parentActivity.AddBaggage("k", "v");

            parentActivity.Start();

            var telemetry = ClientServerDependencyTracker.BeginTracking(this.telemetryClient);

            Assert.AreEqual(parentActivity.Id, telemetry.Context.Operation.ParentId);
            Assert.AreEqual(parentActivity.RootId, telemetry.Context.Operation.Id);
            Assert.IsTrue(telemetry.Id.StartsWith(parentActivity.Id, StringComparison.Ordinal));
            Assert.AreNotEqual(parentActivity.Id, telemetry.Id);

            var properties = telemetry.Properties;

            Assert.AreEqual(1, properties.Count);
            Assert.AreEqual("v", properties["k"]);
            parentActivity.Stop();
        }
        public void BeginWebTrackingWithParentActivityReturnsOperationItemWithTelemetryItem()
        {
            var parentActivity = new Activity("test");

            parentActivity.AddBaggage("k", "v");
            parentActivity.TraceStateString = "state=some";
            parentActivity.Start();

            var telemetry       = ClientServerDependencyTracker.BeginTracking(this.telemetryClient);
            var currentActivity = Activity.Current;

            Assert.IsNotNull(Activity.Current);
            Assert.AreNotEqual(parentActivity, currentActivity);
            Assert.AreEqual(parentActivity, currentActivity.Parent);

            Assert.AreEqual(currentActivity.SpanId.ToHexString(), telemetry.Id);
            Assert.AreEqual(currentActivity.TraceId.ToHexString(), telemetry.Context.Operation.Id);
            Assert.AreEqual(currentActivity.ParentSpanId.ToHexString(), telemetry.Context.Operation.ParentId);

            var properties = telemetry.Properties;

            Assert.AreEqual(2, properties.Count);
            Assert.AreEqual("v", properties["k"]);
            Assert.AreEqual("state=some", properties["tracestate"]);
            parentActivity.Stop();
        }
        public void AddTupleForWebDependenciesThrowsExceptionIfExists()
        {
            var telemetry      = new DependencyTelemetry();
            var falseTelemetry = new DependencyTelemetry();

            ClientServerDependencyTracker.AddTupleForWebDependencies(this.webRequest, falseTelemetry, false);
            ClientServerDependencyTracker.AddTupleForWebDependencies(this.webRequest, telemetry, false);
        }
        public void EndTrackingComputesTheDurationOfTelemetryItem()
        {
            var telemetry = ClientServerDependencyTracker.BeginTracking(this.telemetryClient);

            ClientServerDependencyTracker.EndTracking(this.telemetryClient, telemetry);
            var telemetryItem = this.sendItems[0] as DependencyTelemetry;

            this.ValidateSentTelemetry(telemetryItem);
        }
        public void BeginWebTrackingReturnsOperationItemWithTelemetryItem()
        {
            var telemetry = ClientServerDependencyTracker.BeginTracking(this.telemetryClient);

            Assert.AreEqual(telemetry.Timestamp, telemetry.Timestamp);

            Assert.IsNull(telemetry.Context.Operation.ParentId);
            Assert.IsNotNull(telemetry.Context.Operation.Id);
            Assert.IsTrue(telemetry.Id.StartsWith('|' + telemetry.Context.Operation.Id, StringComparison.Ordinal));
            Assert.AreEqual(0, telemetry.Properties.Count);
        }
        public void EndTrackingSendsTelemetryItemOnSuccess()
        {
            var telemetry = ClientServerDependencyTracker.BeginTracking(this.telemetryClient);

            ClientServerDependencyTracker.EndTracking(this.telemetryClient, telemetry);
            Assert.AreEqual(1, this.sendItems.Count);

            telemetry = ClientServerDependencyTracker.BeginTracking(this.telemetryClient);
            ClientServerDependencyTracker.EndTracking(this.telemetryClient, telemetry);
            Assert.AreEqual(2, this.sendItems.Count);
        }
        public void AddTupleForSqlDependenciesAddsTelemetryTupleToTheTable()
        {
            var telemetry = new DependencyTelemetry();

            ClientServerDependencyTracker.AddTupleForSqlDependencies(this.sqlRequest, telemetry, false);
            var tuple = ClientServerDependencyTracker.GetTupleForSqlDependencies(this.sqlRequest);

            Assert.IsNotNull(tuple);
            Assert.IsNotNull(tuple.Item1);
            Assert.AreEqual(telemetry, tuple.Item1);
        }
        public void EndTrackingTracksTelemetryItemWithInitializedContent()
        {
            var telemetry = ClientServerDependencyTracker.BeginTracking(this.telemetryClient);

            ClientServerDependencyTracker.EndTracking(this.telemetryClient, telemetry);
            var telemetryItem = this.sendItems[0] as DependencyTelemetry;

            Assert.IsNotNull(telemetryItem.Context.User.Id);
            Assert.IsNotNull(telemetryItem.Context.Session.Id);
            Assert.AreEqual(telemetryItem.Context.User.Id, "UserID");
            Assert.AreEqual(telemetryItem.Context.Session.Id, "SessionID");
        }
Exemplo n.º 10
0
        public void FrameworkHttpProcessingIsDisabledWhenHttpDesktopDiagSourceIsEnabled()
        {
            DependencyTableStore.IsDesktopHttpDiagnosticSourceActivated = true;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.testUrl);
            var            id      = ClientServerDependencyTracker.GetIdForRequestObject(request);

            this.httpProcessingFramework.OnBeginHttpCallback(id, this.testUrl.ToString());
            this.httpProcessingFramework.OnEndHttpCallback(id, null, false, 200);

            Assert.AreEqual(0, this.sendItems.Count, "No telemetry item should be sent");
        }
Exemplo n.º 11
0
        public void RddTestHttpProcessingFrameworkOnEndHttpCallbackInvalidId()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.testUrl);
            var            id1     = ClientServerDependencyTracker.GetIdForRequestObject(request);
            var            id2     = 200;

            this.httpProcessingFramework.OnBeginHttpCallback(id1, this.testUrl.ToString());
            Thread.Sleep(this.sleepTimeMsecBetweenBeginAndEnd);
            Assert.AreEqual(0, this.sendItems.Count, "No telemetry item should be processed without calling End");

            this.httpProcessingFramework.OnEndHttpCallback(id2, true, true, null);
            Assert.AreEqual(0, this.sendItems.Count, "No telemetry item should be processed as invalid id is passed");
        }
Exemplo n.º 12
0
        public void HttpProcessorSetsTargetForNonStandardPort()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.testUrlNonStandardPort);
            var            id      = ClientServerDependencyTracker.GetIdForRequestObject(request);

            this.httpProcessingFramework.OnBeginHttpCallback(id, this.testUrlNonStandardPort.ToString());
            this.httpProcessingFramework.OnEndHttpCallback(id, null, false, 500);

            Assert.AreEqual(1, this.sendItems.Count, "Exactly one telemetry item should be sent");
            DependencyTelemetry receivedItem = (DependencyTelemetry)this.sendItems[0];
            string expectedTarget            = this.testUrlNonStandardPort.Host + ":" + this.testUrlNonStandardPort.Port;

            Assert.AreEqual(expectedTarget, receivedItem.Target, "HttpProcessingFramework returned incorrect target for non standard port.");
        }
Exemplo n.º 13
0
        public void OnEndHttpCallbackSetsSuccessToTrueForLessThan400()
        {
            int statusCode = 399;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.testUrl);
            var            id      = ClientServerDependencyTracker.GetIdForRequestObject(request);

            this.httpProcessingFramework.OnBeginHttpCallback(id, this.testUrl.ToString());
            this.httpProcessingFramework.OnEndHttpCallback(id, null, false, statusCode);

            Assert.AreEqual(1, this.sendItems.Count, "Only one telemetry item should be sent");
            var actual = this.sendItems[0] as DependencyTelemetry;

            Assert.IsTrue(actual.Success.Value);
        }
Exemplo n.º 14
0
        public void OnEndHttpCallbackSetsSuccessToFalseForNegativeStatusCode()
        {
            // -1 StatusCode is returned in case of no response
            int statusCode = -1;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.testUrl);
            var            id      = ClientServerDependencyTracker.GetIdForRequestObject(request);

            this.httpProcessingFramework.OnBeginHttpCallback(id, this.testUrl.ToString());
            this.httpProcessingFramework.OnEndHttpCallback(id, null, false, statusCode);

            Assert.AreEqual(1, this.sendItems.Count, "Only one telemetry item should be sent");
            var actual = this.sendItems[0] as DependencyTelemetry;

            Assert.IsFalse(actual.Success.Value);
        }
        public void BeginWebTrackingWithParentActivityReturnsOperationItemWithTelemetryItemNoParent()
        {
            var telemetry       = ClientServerDependencyTracker.BeginTracking(this.telemetryClient);
            var currentActivity = Activity.Current;

            Assert.IsNotNull(Activity.Current);
            Assert.IsNull(currentActivity.Parent);

            Assert.AreEqual(currentActivity.SpanId.ToHexString(), telemetry.Id);
            Assert.AreEqual(currentActivity.TraceId.ToHexString(), telemetry.Context.Operation.Id);
            Assert.IsNull(telemetry.Context.Operation.ParentId);

            var properties = telemetry.Properties;

            Assert.AreEqual(0, properties.Count);
        }
Exemplo n.º 16
0
        public void RddTestHttpProcessingFrameworkStartTimeFromGetRequestStreamAsync()
        {
            Stopwatch      stopwatch = Stopwatch.StartNew();
            HttpWebRequest request   = (HttpWebRequest)WebRequest.Create(this.testUrl);
            var            id1       = ClientServerDependencyTracker.GetIdForRequestObject(request);

            this.httpProcessingFramework.OnBeginHttpCallback(id1, this.testUrl.ToString());
            Thread.Sleep(this.sleepTimeMsecBetweenBeginAndEnd);
            this.httpProcessingFramework.OnBeginHttpCallback(id1, this.testUrl.ToString());
            Thread.Sleep(this.sleepTimeMsecBetweenBeginAndEnd);
            Assert.AreEqual(0, this.sendItems.Count, "No telemetry item should be processed without calling End");
            this.httpProcessingFramework.OnEndHttpCallback(id1, true, false, 200);
            stopwatch.Stop();

            Assert.AreEqual(1, this.sendItems.Count, "Exactly one telemetry item should be sent");
            ValidateTelemetryPacketForOnBeginHttpCallback(this.sendItems[0] as DependencyTelemetry, this.testUrl, RemoteDependencyConstants.HTTP, true, stopwatch.Elapsed.TotalMilliseconds, "200");
        }
        public void BeginWebTrackingWithDesktopParentActivityReturnsOperationItemWithTelemetryItem()
        {
            var activity = new Activity("System.Net.Http.Desktop.HttpRequestOut");

            activity.SetParentId(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.None);
            activity.AddBaggage("k", "v");

            activity.Start();

            var telemetry = ClientServerDependencyTracker.BeginTracking(this.telemetryClient);

            Assert.AreEqual(activity.SpanId.ToHexString(), telemetry.Id);
            Assert.AreEqual(activity.TraceId.ToHexString(), telemetry.Context.Operation.Id);
            Assert.AreEqual(activity.ParentSpanId.ToHexString(), telemetry.Context.Operation.ParentId);

            var properties = telemetry.Properties;

            Assert.AreEqual(1, properties.Count);
            Assert.AreEqual("v", properties["k"]);
            activity.Stop();
        }
        public void BeginWebTrackingWithDesktopParentActivityReturnsOperationItemWithTelemetryItem()
        {
            var parentActivity = new Activity("System.Net.Http.Desktop.HttpRequestOut");

            parentActivity.SetParentId("|guid.1234_");
            parentActivity.AddBaggage("k", "v");

            parentActivity.Start();

            var telemetry = ClientServerDependencyTracker.BeginTracking(this.telemetryClient);

            Assert.AreEqual(parentActivity.Id, telemetry.Id);
            Assert.AreEqual(parentActivity.RootId, telemetry.Context.Operation.Id);
            Assert.AreEqual(parentActivity.ParentId, telemetry.Context.Operation.ParentId);

            var properties = telemetry.Context.Properties;

            Assert.AreEqual(1, properties.Count);
            Assert.AreEqual("v", properties["k"]);
            parentActivity.Stop();
        }
Exemplo n.º 19
0
        /// <summary>
        /// Associates telemetry item to a web request to avoid duplicate tracking, and populates cookies with data from initialized telemetry item if setCookies is set to true.
        /// When there is an existing telemetry item in the corresponding to the given WEB REQUEST, we return the existing telemetry and associate the same with the WEB REQUEST.
        /// </summary>
        /// <param name="telemetry">Telemetry object that needs to be associated with the web request.</param>
        /// <param name="webRequest">Web request object which we use to populate from the information obtained from the initialized telemetry.</param>
        /// <param name="setCookies">Set cookies enables the process of setting the cookies to the web request. By default it is set to false.</param>
        /// <param name="setCorrelationContext">Set request headers to correlate dependency telemetry item with the request telemetry item that will process this http request.</param>
        /// <returns>Dependency telemetry item with an associated dependency telemetry item.</returns>
        public static DependencyTelemetry AssociateTelemetryWithWebRequest(this DependencyTelemetry telemetry, WebRequest webRequest, bool setCookies = false, bool setCorrelationContext = false)
        {
            if (webRequest == null)
            {
                DependencyCollectorEventSource.Log.WebRequestIsNullWarning();
                return(null);
            }

            if (telemetry == null)
            {
                DependencyCollectorEventSource.Log.TelemetryToTrackIsNullWarning();
                return(null);
            }

            DependencyTelemetry result;

            var telemetryTuple = ClientServerDependencyTracker.GetTupleForWebDependencies(webRequest);

            if (telemetryTuple != null)
            {
                result = telemetryTuple.Item1 as DependencyTelemetry;
            }
            else
            {
                result = telemetry;
                ClientServerDependencyTracker.AddTupleForWebDependencies(webRequest, telemetry, true);
            }

            if (setCookies)
            {
                WebRequestDependencyTrackingHelpers.SetUserAndSessionContextForWebRequest(result, webRequest);
            }

            if (setCorrelationContext)
            {
                WebRequestDependencyTrackingHelpers.SetCorrelationContextForWebRequest(result, webRequest);
            }

            return(telemetry);
        }
 public void GetTupleForSqlDependenciesReturnsNullIfEntryDoesNotExistInTables()
 {
     Assert.IsNull(ClientServerDependencyTracker.GetTupleForSqlDependencies(new SqlCommand("select * from table;")));
 }
 public void GetTupleForSqlDependenciesThrowsArgumentNullExceptionForNullSqlRequest()
 {
     ClientServerDependencyTracker.GetTupleForSqlDependencies(null);
 }
        public void GetTupleForSqlDependenciesReturnsNullIfTheItemDoesNotExistInTheTable()
        {
            var tuple = ClientServerDependencyTracker.GetTupleForSqlDependencies(this.sqlRequest);

            Assert.IsNull(tuple);
        }
 public void GetTupleForWebDependenciesReturnsNullIfEntryDoesNotExistInTables()
 {
     Assert.IsNull(ClientServerDependencyTracker.GetTupleForWebDependencies(WebRequest.Create(new Uri("http://bing.com"))));
 }
 public void AddTupleForWebDependenciesThrowsArgumentNullExceptionForNullWebRequest()
 {
     ClientServerDependencyTracker.AddTupleForWebDependencies(null, new DependencyTelemetry(), false);
 }
 public void AddTupleForWebDependenciesThrowsArgumentNullExceptionForNullTelemetry()
 {
     ClientServerDependencyTracker.AddTupleForWebDependencies(WebRequest.Create(new Uri("http://bing.com")), null, false);
 }
 public void AddTupleForSqlDependenciesThrowsArgumentNullExceptionForNullTelemetry()
 {
     ClientServerDependencyTracker.AddTupleForSqlDependencies(new SqlCommand("select * from table;"), null, false);
 }