/// <summary>
 /// Track Event in application insights
 /// </summary>
 /// <param name="logger">logger</param>
 /// <param name="pageViewTelemetry">Pageview telemetry object</param>
 /// <param name="userid">user id</param>
 /// <param name="deviceId">device id</param>
 /// <param name="Ip">Ip of device from where request arrived</param>
 /// <returns></returns>
 public static void TrackPageView(PageViewTelemetry pageViewTelemetry, string userid = null, string deviceId = null, string Ip = null)
 {
     Telemetry.Context.User.Id     = userid ?? string.Empty;
     Telemetry.Context.Device.Id   = deviceId ?? string.Empty;
     Telemetry.Context.Location.Ip = Ip ?? string.Empty;
     Telemetry.TrackPageView(pageViewTelemetry);
 }
        /// <summary>
        /// Logs the quality of srevice event.
        /// </summary>
        private void LogQosEvent()
        {
            if (qosEvent == null)
            {
                return;
            }

            qosEvent.FinishQosEvent();

            PageViewTelemetry pageViewTelemetry = new PageViewTelemetry
            {
                Name      = EVENT_NAME,
                Duration  = qosEvent.Duration,
                Timestamp = qosEvent.StartTime
            };

            pageViewTelemetry.Context.Device.OperatingSystem = Environment.OSVersion.ToString();
            PopulatePropertiesFromQos(pageViewTelemetry.Properties);

            try
            {
#if DEBUG
                telemetryClient.TrackPageView(pageViewTelemetry);
#endif
            }
            catch
            {
                // Ignore any error with capturing the telemetry
            }

            if (qosEvent.Exception != null)
            {
                LogExceptionEvent();
            }
        }
Exemple #3
0
        public static PageViewTelemetry ConvertPageViewToSdkApi(Telemetry inputTelemetry)
        {
            var result = new PageViewTelemetry();

            PageView item = inputTelemetry.PageView;

            item.Event = item.Event ?? new Event();

            result.Id = item.Id;

            if (Uri.TryCreate(item.Url, UriKind.RelativeOrAbsolute, out var uri))
            {
                result.Url = uri;
            }

            result.Duration = item.Duration?.ToTimeSpan() ?? TimeSpan.Zero;

            result.Name = item.Event.Name;

            result.Properties.PopulateFromProtobuf(item.Event?.Properties);
            result.Metrics.PopulateFromProtobuf(item.Event?.Measurements);

            AiTelemetryConverter.CopyCommonFields(inputTelemetry, result);
            AiTelemetryConverter.CopySamplingFields(inputTelemetry, result);

            return(result);
        }
Exemple #4
0
 /// <inheritdoc />
 public void View(string viewName, Dictionary <string, string> properties = null, Dictionary <string, double> metrics = null)
 {
     if (this.telemetryDisabled)
     {
         return;
     }
     try
     {
         PageViewTelemetry tele = new PageViewTelemetry(viewName);
         if (properties != null)
         {
             Utils.CopyDictionary(properties, tele.Properties);
         }
         if (metrics != null)
         {
             Utils.CopyDictionary(metrics, tele.Metrics);
         }
         if (!isSettingsInitialized)
         {
             this.telemetryToSendLater.Enqueue(tele);
         }
         else
         {
             this.TelemetryClient.TrackPageView(tele);
         }
     }
     catch
     {
         if (!this.telimenaProperties.SuppressAllErrors)
         {
             throw;
         }
     }
 }
Exemple #5
0
        public override bool Edit(IPolicyEditArgs policyEditArgs)
        {
            PageViewTelemetry pvt    = new PageViewTelemetry("BranchPolicyEdit");
            Stopwatch         pvtrak = new Stopwatch();

            pvtrak.Start();
            bool result = false;

            try
            {
                IBranchPatternsRepository repo = new BranchPatternsRepository(branchPatterns);
                var wpfwindow = new BranchLockPolicyEditorWindow(policyEditArgs, repo);
                ElementHost.EnableModelessKeyboardInterop(wpfwindow);
                wpfwindow.ShowDialog();
                branchPatterns = repo.FindAll().ToList();
                TellMe.Instance.TrackMetric("BranchPolicyCount", branchPatterns.Count);
                result = true;
            }
            catch (Exception ex)
            {
                TellMe.Instance.TrackException(ex);
                MessageBox.Show(string.Format("There was an error loading the Edit Vew for BranchPatternPolicy:/n/n {0}", ex.Message));
                result = false;
            }
            pvt.Duration = pvtrak.Elapsed;
            TellMe.Instance.TrackPageView(pvt);
            return(result);
        }
Exemple #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TelemetryForm"/> class.
        /// </summary>
        public TelemetryForm()
        {
            _telemetryData = new PageViewTelemetry(
                !string.IsNullOrWhiteSpace(this.Name) ? this.Name : this.GetType().Name);

            _telemetryClientFetcher = new Lazy <TelemetryClient>(() =>
            {
                System.Diagnostics.Debug.Assert(!string.IsNullOrWhiteSpace(this.TelemetryClientName),
                                                string.Format("No Telemetry client name set on Telemetry Button \"{0}\"", this.Name));

                if (!string.IsNullOrWhiteSpace(this.TelemetryClientName))
                {
                    try
                    {
                        return(Telemetry.GetClient(this.TelemetryClientName));
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.Fail(string.Format("Couldn't find telemetry client with name {0}",
                                                                    this.TelemetryClientName), ex.ToString());
                    }
                }

                return(null);
            });
        }
Exemple #7
0
        public void RichPayloadEventSourcePageViewSentTest()
        {
            var client = new TelemetryClient();

            client.InstrumentationKey = Guid.NewGuid().ToString();

            using (var listener = new Microsoft.ApplicationInsights.TestFramework.TestEventListener())
            {
                listener.EnableEvents(RichPayloadEventSource.Log.EventSourceInternal, EventLevel.Verbose, RichPayloadEventSource.Keywords.PageViews);

                var item = new PageViewTelemetry("TestPage");
                item.Context.Properties.Add("property1", "value1");
                item.Context.User.Id      = "testUserId";
                item.Context.Operation.Id = Guid.NewGuid().ToString();

                client.TrackPageView(item);

                var actualEvent = listener.Messages.FirstOrDefault();

                Assert.IsNotNull(actualEvent);
                Assert.AreEqual(client.InstrumentationKey, actualEvent.Payload[0]);

                object[] tags = actualEvent.Payload[1] as object[];
                Assert.AreEqual("ai.user.id", ((Dictionary <string, object>)(tags[0]))["Key"]);
                Assert.AreEqual("testUserId", ((Dictionary <string, object>)(tags[0]))["Value"]);

                Assert.AreEqual("ai.operation.id", ((Dictionary <string, object>)(tags[1]))["Key"]);
                Assert.AreEqual(item.Context.Operation.Id, ((Dictionary <string, object>)(tags[1]))["Value"]);

                Assert.IsNotNull(actualEvent.Payload[2]);
            }
        }
        private static void SerializePageViewTelemetry(PageViewTelemetry pageViewTelemetry, JsonWriter writer)
        {
            writer.WriteStartObject();

            pageViewTelemetry.WriteTelemetryName(writer, PageViewTelemetry.TelemetryName);
            pageViewTelemetry.WriteEnvelopeProperties(writer);
            writer.WritePropertyName("data");
            {
                writer.WriteStartObject();

                // TODO: MetricTelemetry should write type as this.data.baseType once Common Schema 2.0 compliant.
                writer.WriteProperty("baseType", pageViewTelemetry.BaseType);
                writer.WritePropertyName("baseData");
                {
                    writer.WriteStartObject();

                    writer.WriteProperty("ver", pageViewTelemetry.Data.ver);
                    writer.WriteProperty("name", pageViewTelemetry.Data.name);
                    writer.WriteProperty("url", pageViewTelemetry.Data.url);
                    writer.WriteProperty("duration", pageViewTelemetry.Data.duration);
                    writer.WriteProperty("measurements", pageViewTelemetry.Data.measurements);
                    writer.WriteProperty("properties", pageViewTelemetry.Data.properties);

                    writer.WriteEndObject();
                }

                writer.WriteEndObject();
            }

            writer.WriteEndObject();
        }
Exemple #9
0
 internal void WriteTelemetry(ITelemetry telemetryItem)
 {
     if (telemetryItem == null)
     {
         CoreEventSource.Log.LogVerbose("telemetryItem param is null in EventSourceWriter.WriteTelemetry()");
     }
     else if (eventSource.IsEnabled())
     {
         if (telemetryItem is EventTelemetry)
         {
             EventTelemetry eventTelemetry = telemetryItem as EventTelemetry;
             WriteEvent("Event", eventTelemetry.Context, eventTelemetry.Data);
         }
         else if (telemetryItem is ExceptionTelemetry)
         {
             ExceptionTelemetry exceptionTelemetry = telemetryItem as ExceptionTelemetry;
             WriteEvent("Exception", exceptionTelemetry.Context, exceptionTelemetry.Data);
         }
         else if (telemetryItem is MetricTelemetry)
         {
             MetricTelemetry metricTelemetry = telemetryItem as MetricTelemetry;
             WriteEvent("Metric", metricTelemetry.Context, metricTelemetry.Data);
         }
         else if (telemetryItem is PageViewTelemetry)
         {
             PageViewTelemetry pageViewTelemetry = telemetryItem as PageViewTelemetry;
             WriteEvent("PageView", pageViewTelemetry.Context, pageViewTelemetry.Data);
         }
         else if (telemetryItem is RemoteDependencyTelemetry)
         {
             RemoteDependencyTelemetry remoteDependencyTelemetry = telemetryItem as RemoteDependencyTelemetry;
             WriteEvent("RemoteDependency", remoteDependencyTelemetry.Context, remoteDependencyTelemetry.Data);
         }
         else if (telemetryItem is RequestTelemetry)
         {
             RequestTelemetry requestTelemetry = telemetryItem as RequestTelemetry;
             WriteEvent("Request", requestTelemetry.Context, requestTelemetry.Data);
         }
         else if (telemetryItem is SessionStateTelemetry)
         {
             SessionStateTelemetry sessionStateTelemetry = telemetryItem as SessionStateTelemetry;
             sessionStateTelemetry.Data.state = (Coding4Fun.VisualStudio.ApplicationInsights.Extensibility.Implementation.External.SessionState)sessionStateTelemetry.State;
             WriteEvent("SessionState", sessionStateTelemetry.Context, sessionStateTelemetry.Data);
         }
         else if (telemetryItem is TraceTelemetry)
         {
             TraceTelemetry traceTelemetry = telemetryItem as TraceTelemetry;
             WriteEvent("Message", traceTelemetry.Context, traceTelemetry.Data);
         }
         else
         {
             string message = string.Format(CultureInfo.InvariantCulture, "Unknown telemtry type: {0}", new object[1]
             {
                 telemetryItem.GetType()
             });
             CoreEventSource.Log.LogVerbose(message);
         }
     }
 }
Exemple #10
0
        public void SendEventToValidateEndpoint()
        {
            EventTelemetry              telemetry1  = new EventTelemetry();
            MetricTelemetry             telemetry2  = new MetricTelemetry();
            DependencyTelemetry         telemetry3  = new DependencyTelemetry();
            ExceptionTelemetry          telemetry4  = new ExceptionTelemetry();
            MetricTelemetry             telemetry5  = new MetricTelemetry();
            PageViewTelemetry           telemetry6  = new PageViewTelemetry();
            PerformanceCounterTelemetry telemetry7  = new PerformanceCounterTelemetry();
            RequestTelemetry            telemetry8  = new RequestTelemetry();
            SessionStateTelemetry       telemetry9  = new SessionStateTelemetry();
            TraceTelemetry              telemetry10 = new TraceTelemetry();

            var telemetryItems = new List <ITelemetry>
            {
                telemetry1,
                telemetry2,
                telemetry3,
                telemetry4,
                telemetry5,
                telemetry6,
                telemetry7,
                telemetry8,
                telemetry9,
                telemetry10
            };

            // ChuckNorrisTeamUnitTests resource in Prototypes5
            var config = new TelemetryConfiguration {
                InstrumentationKey = "fafa4b10-03d3-4bb0-98f4-364f0bdf5df8"
            };
            var telemetryClient = new TelemetryClient(config);

            telemetryClient.Initialize(telemetry1);
            telemetryClient.Initialize(telemetry2);
            telemetryClient.Initialize(telemetry3);
            telemetryClient.Initialize(telemetry4);
            telemetryClient.Initialize(telemetry5);
            telemetryClient.Initialize(telemetry6);
            telemetryClient.Initialize(telemetry7);
            telemetryClient.Initialize(telemetry8);
            telemetryClient.Initialize(telemetry9);
            telemetryClient.Initialize(telemetry10);

            string json = JsonSerializer.SerializeAsString(telemetryItems);

            HttpClient client = new HttpClient();
            var        result = client.PostAsync(
                "https://dc.services.visualstudio.com/v2/validate",
                new ByteArrayContent(Encoding.UTF8.GetBytes(json))).GetAwaiter().GetResult();

            if (result.StatusCode != HttpStatusCode.OK)
            {
                var response = result.Content.ReadAsStringAsync().GetAwaiter().GetResult();
                Trace.WriteLine(response);
            }

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);
        }
Exemple #11
0
 /// <summary>
 /// Track information about the page viewed in the application.
 /// </summary>
 /// <param name="pageViewTelemetry">Page view to track.</param>
 public void TrackPageView(PageViewTelemetry pageViewTelemetry, [CallerFilePath] string sourceFile = "", [CallerLineNumber] int sourceLine = 0, [CallerMemberName] string member = "")
 {
     _telemetryClient.TrackPageView(pageViewTelemetry);
     if (AutoForcedFlushEnabled)
     {
         Flush();
     }
 }
        private void TrackPageViewWithPropertiesButton_Click()
        {
            PageViewTelemetry pvt = new PageViewTelemetry();

            pvt.Name = "Scenario1_Crashes_PageViewTelemetry";
            pvt.Properties.Add("Property1", "Value1");
            HockeyClient.Current.TrackPageView(pvt);
        }
Exemple #13
0
 /// <summary>
 /// Send information about the page viewed in the application.
 /// </summary>
 public void TrackPageView(PageViewTelemetry telemetry)
 {
     if (telemetry == null)
     {
         telemetry = new PageViewTelemetry();
     }
     Track(telemetry);
 }
Exemple #14
0
 private static void SerializeTelemetryItem(ITelemetry telemetryItem, JsonWriter jsonWriter)
 {
     if (telemetryItem is EventTelemetry)
     {
         EventTelemetry eventTelemetry = telemetryItem as EventTelemetry;
         SerializeEventTelemetry(eventTelemetry, jsonWriter);
     }
     else if (telemetryItem is ExceptionTelemetry)
     {
         ExceptionTelemetry exceptionTelemetry = telemetryItem as ExceptionTelemetry;
         SerializeExceptionTelemetry(exceptionTelemetry, jsonWriter);
     }
     else if (telemetryItem is MetricTelemetry)
     {
         MetricTelemetry metricTelemetry = telemetryItem as MetricTelemetry;
         SerializeMetricTelemetry(metricTelemetry, jsonWriter);
     }
     else if (telemetryItem is PageViewTelemetry)
     {
         PageViewTelemetry pageViewTelemetry = telemetryItem as PageViewTelemetry;
         SerializePageViewTelemetry(pageViewTelemetry, jsonWriter);
     }
     else if (telemetryItem is DependencyTelemetry)
     {
         DependencyTelemetry remoteDependencyTelemetry = telemetryItem as DependencyTelemetry;
         SerializeDependencyTelemetry(remoteDependencyTelemetry, jsonWriter);
     }
     else if (telemetryItem is RequestTelemetry)
     {
         RequestTelemetry requestTelemetry = telemetryItem as RequestTelemetry;
         SerializeRequestTelemetry(requestTelemetry, jsonWriter);
     }
     else if (telemetryItem is SessionStateTelemetry)
     {
         SessionStateTelemetry sessionStateTelemetry = telemetryItem as SessionStateTelemetry;
         SerializeSessionStateTelemetry(sessionStateTelemetry, jsonWriter);
     }
     else if (telemetryItem is TraceTelemetry)
     {
         TraceTelemetry traceTelemetry = telemetryItem as TraceTelemetry;
         SerializeTraceTelemetry(traceTelemetry, jsonWriter);
     }
     else if (telemetryItem is PerformanceCounterTelemetry)
     {
         PerformanceCounterTelemetry performanceCounterTelemetry = telemetryItem as PerformanceCounterTelemetry;
         SerializePerformanceCounter(performanceCounterTelemetry, jsonWriter);
     }
     else if (telemetryItem is CrashTelemetry)
     {
         CrashTelemetry crashTelemetry = telemetryItem as CrashTelemetry;
         SerializeCrash(crashTelemetry, jsonWriter);
     }
     else
     {
         string msg = string.Format(CultureInfo.InvariantCulture, "Unknown telemtry type: {0}", telemetryItem.GetType());
         CoreEventSource.Log.LogVerbose(msg);
     }
 }
        public void AiTelemetryConverterTests_ConvertsPageView()
        {
            // ARRANGE
            var timestamp = DateTimeOffset.UtcNow;

            Telemetry telemetry = new Telemetry()
            {
                Ver          = 5,
                DataTypeName = "PageView",
                DateTime     = timestamp.ToString("o"),
                SamplingRate = new Google.Protobuf.WellKnownTypes.DoubleValue()
                {
                    Value = 25
                },
                SequenceNumber     = "50",
                InstrumentationKey = "ikey",
                PageView           = new PageView()
                {
                    Url = "http://microsoft.com/", Duration = new Google.Protobuf.WellKnownTypes.Duration()
                    {
                        Seconds = 123
                    }, Id = "PageView1", ReferrerUri = "http://none.com", Event = new Event()
                    {
                        Ver = 6, Name = "Event1"
                    }
                }
            };

            telemetry.Tags.Add(new ContextTagKeys().SessionId, "sessionId");
            telemetry.Tags.Add("ai.internal.sdkVersion", "java:2.1.2");

            telemetry.PageView.Event.Properties.Add("prop1", "propValue1");
            telemetry.PageView.Event.Measurements.Add("measurement1", 105);

            // ACT
            PageViewTelemetry result = AiTelemetryConverter.ConvertPageViewToSdkApi(telemetry);

            // ASSERT
            Assert.AreEqual("PageView1", result.Id);
            Assert.AreEqual("http://microsoft.com/", result.Url.OriginalString);
            Assert.AreEqual(TimeSpan.FromSeconds(123), result.Duration);
            Assert.AreEqual("Event1", result.Name);

            Assert.AreEqual("prop1", result.Properties.Single().Key);
            Assert.AreEqual("propValue1", result.Properties.Single().Value);
            Assert.AreEqual("measurement1", result.Metrics.Single().Key);
            Assert.AreEqual(105.0, result.Metrics.Single().Value);

            // common fields
            Assert.AreEqual("50", result.Sequence);
            Assert.AreEqual(timestamp, result.Timestamp);
            Assert.AreEqual("ikey", result.Context.InstrumentationKey);
            Assert.AreEqual("sessionId", result.Context.Session.Id);
            Assert.AreEqual("lf_java:2.1.2", result.Context.GetInternalContext().SdkVersion);

            // sampling fields
            Assert.IsNull((result as ISupportSampling).SamplingPercentage);
        }
Exemple #16
0
        public void TrackPageView(string pageName)
        {
            var tel = new PageViewTelemetry(pageName);

            tel.Properties.Add(new KeyValuePair <string, string>("Machine_name", _machine));
            tel.Properties.Add(new KeyValuePair <string, string>("User_name", _user));
            tel.Properties.Add(new KeyValuePair <string, string>("Domain_name", _domain));
            _telemetryClient.TrackPageView(tel);
        }
        public void Process_PageView_NullUris()
        {
            var telemetry = new PageViewTelemetry();

            BuildProcessor().Process(telemetry);

            Assert.Null(telemetry.Url);
            Assert.Empty(telemetry.Properties);
        }
Exemple #18
0
        public void InitializeSetsLocationIpToUserHostAddressIfHeadersIsEmpty()
        {
            var module    = new TestableClientIpHeaderTelemetryInitializer(new Dictionary <string, string>());
            var telemetry = new PageViewTelemetry();

            module.Initialize(telemetry);

            Assert.AreEqual("127.0.0.1", telemetry.Context.Location.Ip);
        }
Exemple #19
0
        public void TrackPageView(string name)
        {
            if (!IsTrackingEnabled)
            {
                return;
            }
            var telemetry = new PageViewTelemetry(name);

            Client.TrackPageView(telemetry);
        }
Exemple #20
0
        /// <summary>
        /// Raises the <see cref="E:NavigatedFrom" /> event.
        /// </summary>
        /// <param name="e">The <see cref="NavigationEventArgs"/> instance containing the event data.</param>
        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            base.OnNavigatedFrom(e);
            TelemetryClient   client    = new TelemetryClient();
            PageViewTelemetry telemetry = new PageViewTelemetry(this.GetType().FullName)
            {
                Duration = DateTimeOffset.Now - this.whenNavigatedTo,
            };

            client.TrackPageView(telemetry);
        }
Exemple #21
0
        public void TestGetNameOrMessage_PageViewTelemetry()
        {
            // arrange
            string            expected  = "TestName";
            PageViewTelemetry telemetry = new PageViewTelemetry(expected);

            // act
            string actual = telemetry.GetNameOrMessage();

            // assert
            Assert.AreEqual(expected, actual);
        }
Exemple #22
0
        public void TestGetTelemetryTypePrefix_PageViewTelemetry()
        {
            // arrange
            string            expected  = "PageView";
            PageViewTelemetry telemetry = new PageViewTelemetry(expected);

            // act
            string actual = telemetry.GetTelemetryTypePrefix();

            // assert
            Assert.AreEqual(expected, actual);
        }
Exemple #23
0
        public void InitializeCutsPortFromIp()
        {
            var dictionary = new Dictionary <string, string> {
                { "X-Forwarded-For", "1.2.3.4:54321" }
            };
            var module    = new TestableClientIpHeaderTelemetryInitializer(dictionary);
            var telemetry = new PageViewTelemetry();

            module.Initialize(telemetry);

            Assert.AreEqual("1.2.3.4", telemetry.Context.Location.Ip);
        }
        public void TrackPageViewSendsGivenPageViewTelemetryToTelemetryChannel()
        {
            var             sentTelemetry = new List <ITelemetry>();
            TelemetryClient client        = this.InitializeTelemetryClient(sentTelemetry);

            var pageViewTelemetry = new PageViewTelemetry("TestName");

            client.TrackPageView(pageViewTelemetry);

            var channelPageView = (PageViewTelemetry)sentTelemetry.Single();

            Assert.Same(pageViewTelemetry, channelPageView);
        }
Exemple #25
0
        public void TrackPageView(string name, string parameter)
        {
            if (!IsTrackingEnabled)
            {
                return;
            }
            var telemetry = new PageViewTelemetry(name);

            if (!string.IsNullOrEmpty(parameter))
            {
                telemetry.Properties.Add("Parameter", parameter);
            }
            Client.TrackPageView(telemetry);
        }
Exemple #26
0
 private void LogUsageEvent(AzurePSQoSEvent qos)
 {
     foreach (TelemetryClient client in TelemetryClients)
     {
         var pageViewTelemetry = new PageViewTelemetry
         {
             Name      = qos.CommandName ?? "empty",
             Duration  = qos.Duration,
             Timestamp = qos.StartTime
         };
         LoadTelemetryClientContext(qos, pageViewTelemetry.Context);
         PopulatePropertiesFromQos(qos, pageViewTelemetry.Properties);
         client.TrackPageView(pageViewTelemetry);
     }
 }
        public static void TrackPage(string name)
        {
            if (context == null)
            {
                Initialize();
            }
            if (!enable)
            {
                return;
            }
            PageViewTelemetry page = new PageViewTelemetry(name);

            page.Context.Operation.Name = name;
            context.TrackPageView(page);
        }
        public void Process_PageView_SingleQueryParam_NotFiltered()
        {
            var telemetry = new PageViewTelemetry
            {
                Url        = new Uri("https://test.com/?key=value"),
                Properties =
                {
                    { "refUri", "https://test.com/ref?key=value" }
                }
            };

            BuildProcessor().Process(telemetry);

            Assert.Equal("https://test.com/?key=value", telemetry.Url.AbsoluteUri);
            Assert.Equal("https://test.com/ref?key=value", telemetry.Properties["refUri"]);
        }
        public void Process_PageView_SingleQueryParam()
        {
            var telemetry = new PageViewTelemetry
            {
                Url        = new Uri("https://test.com/?code=my-code"),
                Properties =
                {
                    { "refUri", "https://test.com/ref?code=my-code" }
                }
            };

            BuildProcessor().Process(telemetry);

            Assert.Equal("https://test.com/?code=__redacted__", telemetry.Url.AbsoluteUri);
            Assert.Equal("https://test.com/ref?code=__redacted__", telemetry.Properties["refUri"]);
        }
        public void Process_PageView_InvalidRefUri()
        {
            var telemetry = new PageViewTelemetry
            {
                Url        = new Uri("https://test.com/"),
                Properties =
                {
                    { "refUri", "Not a URI" }
                }
            };

            BuildProcessor().Process(telemetry);

            Assert.Equal("https://test.com/", telemetry.Url.AbsoluteUri);
            Assert.Equal("Not a URI", telemetry.Properties["refUri"]);
        }
        private static void SerializePageViewTelemetry(PageViewTelemetry pageViewTelemetry, JsonWriter writer)
        {
            writer.WriteStartObject();

            pageViewTelemetry.WriteTelemetryName(writer, PageViewTelemetry.TelemetryName);
            pageViewTelemetry.WriteEnvelopeProperties(writer);
            writer.WritePropertyName("data");
            {
                writer.WriteStartObject();

                // TODO: MetricTelemetry should write type as this.data.baseType once Common Schema 2.0 compliant.
                writer.WriteProperty("baseType", pageViewTelemetry.BaseType);
                writer.WritePropertyName("baseData");
                {
                    writer.WriteStartObject();

                    writer.WriteProperty("ver", pageViewTelemetry.Data.ver);
                    writer.WriteProperty("name", pageViewTelemetry.Data.name);
                    writer.WriteProperty("url", pageViewTelemetry.Data.url);
                    writer.WriteProperty("duration", pageViewTelemetry.Data.duration);
                    writer.WriteProperty("measurements", pageViewTelemetry.Data.measurements);
                    writer.WriteProperty("properties", pageViewTelemetry.Data.properties);

                    writer.WriteEndObject();
                }

                writer.WriteEndObject();
            }

            writer.WriteEndObject();
        }
        /// <summary>
        /// Send information about the page viewed in the application.
        /// </summary>
        public void TrackPageView(PageViewTelemetry telemetry)
        {
            if (telemetry == null)
            {
                telemetry = new PageViewTelemetry();
            }

            this.Track(telemetry);
        }
        private void TrackPageView(string pageName, TimeSpan duration)
        {
            var client = (HockeyClient)(HockeyClient.Current);

            var telemetry = new PageViewTelemetry(pageName)
            {
                Duration = duration,
            };

            try
            {
                client.TrackPageView(telemetry);
            }
            catch (ObjectDisposedException)
            {
                Interlocked.CompareExchange(ref this.client, null, client);
            }
        }