/// <summary> /// Emit the provided log event to the sink. /// </summary> /// <param name="logEvent">The log event to write.</param> public void Emit(LogEvent logEvent) { var renderedMessage = logEvent.RenderMessage(_formatProvider); // take logEvent and use it for the corresponding ITelemetry counterpart if (logEvent.Exception != null) { var exceptionTelemetry = new ExceptionTelemetry(logEvent.Exception) { SeverityLevel = logEvent.Level.ToSeverityLevel(), HandledAt = ExceptionHandledAt.UserCode, Timestamp = logEvent.Timestamp }; // write logEvent's .Properties to the AI one ForwardLogEventPropertiesToTelemetryProperties(exceptionTelemetry, logEvent, renderedMessage); _telemetryClient.TrackException(exceptionTelemetry); } else { var eventTelemetry = new EventTelemetry(logEvent.MessageTemplate.Text) { Timestamp = logEvent.Timestamp }; // write logEvent's .Properties to the AI one ForwardLogEventPropertiesToTelemetryProperties(eventTelemetry, logEvent, renderedMessage); _telemetryClient.TrackEvent(eventTelemetry); } }
private bool disposedValue = false; // To detect redundant calls /// <summary> /// Releases unmanaged and - optionally - managed resources. /// </summary> /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { var eventTelemetry = new EventTelemetry(_eventName) { Timestamp = _startTime, }; this.Properties.ToList().ForEach(p => eventTelemetry.Properties.Add(p)); this.Metrics.ToList().ForEach(m => eventTelemetry.Metrics.Add(m)); eventTelemetry.Metrics.Add(string.Concat(_eventName, "_Duration"), (DateTime.UtcNow - _startTime).TotalMilliseconds); _client.TrackEvent(eventTelemetry); } // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below. // TODO: set large fields to null. disposedValue = true; } }
private void button2_Click(object sender, RoutedEventArgs e) { var ev = new EventTelemetry("button2"); ev.Properties["click_time"] = DateTime.Now.ToString(CultureInfo.InvariantCulture.DateTimeFormat); tc.TrackEvent(ev); tc.Flush(); }
public void SetsClientIpFromWcfContextOnOtherEvent() { const String originalIp = "10.12.32.12"; const String newIp = "172.34.12.45"; var context = new MockOperationContext(); context.IncomingProperties.Add( RemoteEndpointMessageProperty.Name, new RemoteEndpointMessageProperty(originalIp, 7656)); var initializer = new ClientIpTelemetryInitializer(); // initialize request with the original IP initializer.Initialize(context.Request, context); // replace IP so that we can tell // it is being picked up from the request // rather than the context context.IncomingProperties.Clear(); context.IncomingProperties.Add( RemoteEndpointMessageProperty.Name, new RemoteEndpointMessageProperty(newIp, 7656)); var telemetry = new EventTelemetry("myevent"); initializer.Initialize(telemetry, context); Assert.AreEqual(originalIp, telemetry.Context.Location.Ip); }
public void InitializeSetsDateTime() { EventTelemetry telemetry = new EventTelemetry("TestEvent"); new TelemetryClient().Initialize(telemetry); Assert.True(telemetry.Timestamp != default(DateTimeOffset)); }
/// <summary> /// Reports an event with a string data to the telemetry system. /// </summary> /// <param name="eventName"></param> public void ReportEvent(object component, string eventName, string data) { TelemetryClient client = new TelemetryClient(); EventTelemetry eventT = new EventTelemetry(); eventT.Name = component.GetType().Name + ":" + eventName; eventT.Properties.Add("data", data); client.TrackEvent(eventName); }
public void EventTelemetryHasCorrectValueOfSamplingPercentageAfterSerialization() { var telemetry = new EventTelemetry("my event"); ((ISupportSampling)telemetry).SamplingPercentage = 10; var item = TelemetryItemTestHelper.SerializeDeserializeTelemetryItem<EventTelemetry, DataPlatformModel.EventData>(telemetry); Assert.Equal(10, item.SampleRate); }
public void HandleEvent(string eventName) { var interval = _random.Next(1, 10); var ev = new EventTelemetry(eventName) {Timestamp = DateTimeOffset.UtcNow}; ev.Metrics.Add("ResponseTime", interval); _telemetryClient.TrackEvent(ev); Console.WriteLine("Event - {0}", eventName); }
public void SerializeWritesNullValuesAsExpectedByEndpoint() { EventTelemetry original = new EventTelemetry(); original.Name = null; ((ITelemetry)original).Sanitize(); var item = TelemetryItemTestHelper.SerializeDeserializeTelemetryItem<EventTelemetry, DataPlatformModel.EventData>(original); Assert.Equal(2, item.Data.BaseData.Ver); }
public EventTelemetryMessage(EventTelemetry telemetry) { this.Time = telemetry.Timestamp.DateTime; this.Name = telemetry.Name; this.Details = null; this.Properties = telemetry.Properties.Count > 0 ? telemetry.Properties : null; this.Type = "Event"; this.Context = telemetry.Context; }
public void InitializeSetsLocationIpToUserHostAddressIfNoHeadersInRequest() { var module = new TestableClientIpHeaderTelemetryInitializer(); var telemetry = new EventTelemetry(); module.Initialize(telemetry); Assert.AreEqual("127.0.0.1", telemetry.Context.Location.Ip); }
public void InitializeGetsFirstIpIfHeaderHasSeveralIps() { var dictionary = new Dictionary<string, string> { { "X-Forwarded-For", "1.2.3.4, 2.3.4.5,3.4.5.6" } }; var module = new TestableClientIpHeaderTelemetryInitializer(dictionary); var telemetry = new EventTelemetry(); module.Initialize(telemetry); Assert.AreEqual("1.2.3.4", telemetry.Context.Location.Ip); }
public void ContextInitializerDoesNotOverrideMachineName() { var telemetryItem = new EventTelemetry(); var source = new DomainNameRoleInstanceTelemetryInitializer(); telemetryItem.Context.Cloud.RoleInstance = "Test"; source.Initialize(telemetryItem); Assert.Equal("Test", telemetryItem.Context.Cloud.RoleInstance); }
public void SamplingScoreIsRandomIfUserIdAndOperationIdAreNotPresent() { var eventTelemetry = new EventTelemetry(); var traceTelemetry = new TraceTelemetry(); var eventTelemetrySamplingScore = SamplingScoreGenerator.GetSamplingScore(eventTelemetry); var traceTelemetrySamplingScore = SamplingScoreGenerator.GetSamplingScore(traceTelemetry); Assert.NotEqual(eventTelemetrySamplingScore, traceTelemetrySamplingScore); }
public void SanitizesTelemetryItem() { string name = new string('Z', 10000); EventTelemetry t = new EventTelemetry(name); string exceptionAsJson = JsonSerializer.SerializeAsString(t); JObject obj = JsonConvert.DeserializeObject<JObject>(exceptionAsJson); Assert.Equal(512, obj["data"]["baseData"]["name"].ToString().Length); }
public void InitializeSetsTelemetryOperationNameToMethodAndPath() { var contextAccessor = HttpContextAccessorHelper.CreateHttpContextAccessor(new RequestTelemetry(), null); var initializer = new OperationNameTelemetryInitializer(contextAccessor, new DiagnosticListener(TestListenerName)); var telemetry = new EventTelemetry(); initializer.Initialize(telemetry); Assert.Equal("GET /Test", telemetry.Context.Operation.Name); }
public void SyntheticSourceIsNotSetIfContextIsNull() { var eventTelemetry = new EventTelemetry("name"); var source = new SyntheticUserAgentTelemetryInitializer(); source.Filters = this.botSubstrings; source.Initialize(eventTelemetry); Assert.IsNull(eventTelemetry.Context.Operation.SyntheticSource); }
public void InitializeDoesNotOverrideOperationNameProvidedInline() { var contextAccessor = HttpContextAccessorHelper.CreateHttpContextAccessor(new RequestTelemetry(), null); var initializer = new OperationNameTelemetryInitializer(contextAccessor, new DiagnosticListener(TestListenerName)); var telemetry = new EventTelemetry(); telemetry.Context.Operation.Name = "Name"; initializer.Initialize(telemetry); Assert.Equal("Name", telemetry.Context.Operation.Name); }
public void InitializeDoesNotSetIdIfTelemetryHasIt() { var eventTelemetry = new EventTelemetry("name"); var source = new TestableUserTelemetryInitializer(); var requestTelemetry = source.FakeContext.CreateRequestTelemetryPrivate(); requestTelemetry.Context.User.Id = "1"; eventTelemetry.Context.User.Id = "2"; source.Initialize(eventTelemetry); Assert.AreEqual("2", eventTelemetry.Context.User.Id); }
public void InitializeSetsTelemetryOperationIdToRequestId() { var telemetry = new EventTelemetry(); var requestTelemetry = new RequestTelemetry(); var contextAccessor = HttpContextAccessorHelper.CreateHttpContextAccessor(requestTelemetry); var initializer = new OperationIdTelemetryInitializer(contextAccessor); initializer.Initialize(telemetry); Assert.Equal(requestTelemetry.Id, telemetry.Context.Operation.Id); }
public void InitializeDoesNotOverrideOperationIdProvidedInline() { var telemetry = new EventTelemetry(); telemetry.Context.Operation.Id = "123"; var contextAccessor = HttpContextAccessorHelper.CreateHttpContextAccessor(); var initializer = new OperationIdTelemetryInitializer(contextAccessor); initializer.Initialize(telemetry); Assert.Equal("123", telemetry.Context.Operation.Id); }
public void InitializeSetsIdForTelemetryUsingIdFromRequestTelemetry() { var eventTelemetry = new EventTelemetry("name"); var source = new TestableSessionTelemetryInitializer(); var context = source.FakeContext.CreateRequestTelemetryPrivate(); context.Context.Session.Id = "1"; source.Initialize(eventTelemetry); Assert.AreEqual("1", eventTelemetry.Context.Session.Id); }
/// <summary> /// Reports an event that might need to be looked at, an unexpected event. /// </summary> /// <param name="eventName"></param> public void ReportUnExpectedEvent(object component, string eventName, Exception excpetion = null) { TelemetryClient client = new TelemetryClient(); EventTelemetry eventT = new EventTelemetry(); eventT.Name = component.GetType().Name + ":" + eventName; eventT.Properties.Add("error", "unexpected"); if(excpetion != null) { eventT.Properties.Add("exception", excpetion.Message); } client.TrackEvent(eventName); }
public void InitializeDoesNotOverrideOperationNameProvidedInline() { var contextAccessor = HttpContextAccessorHelper.CreateHttpContextAccessor(new RequestTelemetry(), null); var initializer = new OperationNameTelemetryInitializer(contextAccessor, new Notifier(new ProxyNotifierMethodAdapter())); var telemetry = new EventTelemetry(); telemetry.Context.Operation.Name = "Name"; initializer.Initialize(telemetry); Assert.Equal("Name", telemetry.Context.Operation.Name); }
public void AzureRoleEnvironmentTelemetryInitializerDoesNotOverrideRoleInstance() { var telemetryItem = new EventTelemetry(); AzureRoleEnvironmentTelemetryInitializer initializer = new AzureRoleEnvironmentTelemetryInitializer(); AzureRoleEnvironmentContextReader.BaseDirectory = ServiceRuntimeHelper.TestWithServiceRuntimePath; AzureRoleEnvironmentContextReader.Instance = null; ServiceRuntimeHelper.IsAvailable = true; telemetryItem.Context.Cloud.RoleInstance = "Test"; initializer.Initialize(telemetryItem); Assert.Equal("Test", telemetryItem.Context.Cloud.RoleInstance); }
public void InitializeSetsIsFirstForTelemetryUsingIdFromRequestTelemetry() { var telemetry = new EventTelemetry("name"); var source = new TestableSessionTelemetryInitializer(); var context = source.FakeContext.CreateRequestTelemetryPrivate(); context.Context.Session.IsFirst = true; source.Initialize(telemetry); Assert.IsTrue(telemetry.Context.Session.IsFirst.HasValue); Assert.IsTrue(telemetry.Context.Session.IsFirst.Value); }
public void SyntheticSourceIsSetToWellKnownValue() { var eventTelemetry = new EventTelemetry("name"); var source = new TestableWebTestTelemetryInitializer(new Dictionary<string, string> { { "SyntheticTest-Location", "LOCATION" }, { "synthetictest-runid", "ID" }, }); source.Initialize(eventTelemetry); Assert.AreEqual("Application Insights Availability Monitoring", eventTelemetry.Context.Operation.SyntheticSource); }
public void InitializeDoesNotThrowWhenHttpContextIsNull() { // Arrange HttpContext.Current = null; var source = new AccountIdTelemetryInitializer(); // Act var eventTelemetry = new EventTelemetry("name"); source.Initialize(eventTelemetry); // Assert Assert.AreEqual("name", eventTelemetry.Name); }
public void AzureRoleEnvironmentTelemetryInitializerSetsTelemetryContextPropertiesWhenRoleEnvironmentIsNotAvailable() { var telemetryItem = new EventTelemetry(); AzureRoleEnvironmentTelemetryInitializer initializer = new AzureRoleEnvironmentTelemetryInitializer(); AzureRoleEnvironmentContextReader.BaseDirectory = ServiceRuntimeHelper.TestWithServiceRuntimePath; AzureRoleEnvironmentContextReader.Instance = null; ServiceRuntimeHelper.IsAvailable = false; initializer.Initialize(telemetryItem); ServiceRuntimeHelper.IsAvailable = true; Assert.Null(telemetryItem.Context.Cloud.RoleName); Assert.Null(telemetryItem.Context.Cloud.RoleInstance); }
public void SessionIdIsSetToRunId() { var eventTelemetry = new EventTelemetry("name"); var source = new TestableWebTestTelemetryInitializer(new Dictionary<string, string> { { "SyntheticTest-Location", "LOCATION" }, { "synthetictest-runid", "ID" }, }); source.Initialize(eventTelemetry); Assert.AreEqual("ID", eventTelemetry.Context.Session.Id); }
public void EventTelemetryDeepCloneCopiesAllProperties() { var eventTelemetry = new EventTelemetry(); eventTelemetry.Name = "Test Event"; eventTelemetry.Properties["Test Property"] = "Test Value"; eventTelemetry.Metrics["Test Property"] = 4.2; EventTelemetry other = (EventTelemetry)eventTelemetry.DeepClone(); CompareLogic deepComparator = new CompareLogic(); var result = deepComparator.Compare(eventTelemetry, other); Assert.IsTrue(result.AreEqual, result.DifferencesString); }
public void EventTelemetrySerializesToJsonCorrectly() { var expected = new EventTelemetry(); expected.Name = "Test Event"; expected.Properties["Test Property"] = "Test Value"; expected.Metrics["Test Property"] = 4.2; var item = TelemetryItemTestHelper.SerializeDeserializeTelemetryItem <EventTelemetry, DataPlatformModel.EventData>(expected); // NOTE: It's correct that we use the v1 name here, and therefore we test against it. Assert.Equal(Microsoft.Developer.Analytics.DataCollection.Model.v1.ItemType.Event, item.Name); Assert.Equal(typeof(DataPlatformModel.EventData).Name, item.Data.BaseType); Assert.Equal(2, item.Data.BaseData.Ver); Assert.Equal(expected.Name, item.Data.BaseData.Name); Assert.Equal(expected.Metrics.ToArray(), item.Data.BaseData.Measurements.ToArray()); Assert.Equal(expected.Properties.ToArray(), item.Data.BaseData.Properties.ToArray()); }
public void EventTelemetrySerializesToJsonCorrectly() { var expected = new EventTelemetry(); expected.Name = "Test Event"; expected.Properties["Test Property"] = "Test Value"; expected.Metrics["Test Property"] = 4.2; var item = TelemetryItemTestHelper.SerializeDeserializeTelemetryItem <EventTelemetry, AI.EventData>(expected); // NOTE: It's correct that we use the v1 name here, and therefore we test against it. Assert.AreEqual(AI.ItemType.Event, item.name); Assert.AreEqual(typeof(AI.EventData).Name, item.data.baseType); Assert.AreEqual(2, item.data.baseData.ver); Assert.AreEqual(expected.Name, item.data.baseData.name); AssertEx.AreEqual(expected.Metrics.ToArray(), item.data.baseData.measurements.ToArray()); AssertEx.AreEqual(expected.Properties.ToArray(), item.data.baseData.properties.ToArray()); }
public void EventTelemetryPropertiesFromContextAndItemSerializesToPropertiesInJson() { var expected = new EventTelemetry(); expected.Context.GlobalProperties.Add("TestPropertyGlobal", "contextpropvalue"); expected.Properties.Add("TestProperty", "TestPropertyValue"); ((ITelemetry)expected).Sanitize(); Assert.AreEqual(1, expected.Properties.Count); Assert.AreEqual(1, expected.Context.GlobalProperties.Count); Assert.IsTrue(expected.Properties.ContainsKey("TestProperty")); Assert.IsTrue(expected.Context.GlobalProperties.ContainsKey("TestPropertyGlobal")); var item = TelemetryItemTestHelper.SerializeDeserializeTelemetryItem <AI.EventData>(expected); // Items added to both event.Properties, and event.Context.GlobalProperties are serialized to properties. Assert.AreEqual(2, item.data.baseData.properties.Count); Assert.IsTrue(item.data.baseData.properties.ContainsKey("TestPropertyGlobal")); Assert.IsTrue(item.data.baseData.properties.ContainsKey("TestProperty")); }
public void SanitizeWillTrimAppropriateFields() { EventTelemetry telemetry = new EventTelemetry(); telemetry.Name = new string('Z', Property.MaxEventNameLength + 1); telemetry.Properties.Add(new string('X', Property.MaxDictionaryNameLength) + 'X', new string('X', Property.MaxValueLength + 1)); telemetry.Properties.Add(new string('X', Property.MaxDictionaryNameLength) + 'Y', new string('X', Property.MaxValueLength + 1)); telemetry.Metrics.Add(new string('Y', Property.MaxDictionaryNameLength) + 'X', 42.0); telemetry.Metrics.Add(new string('Y', Property.MaxDictionaryNameLength) + 'Y', 42.0); ((ITelemetry)telemetry).Sanitize(); Assert.Equal(new string('Z', Property.MaxEventNameLength), telemetry.Name); Assert.Equal(2, telemetry.Properties.Count); Assert.Equal(new string('X', Property.MaxDictionaryNameLength), telemetry.Properties.Keys.ToArray()[0]); Assert.Equal(new string('X', Property.MaxValueLength), telemetry.Properties.Values.ToArray()[0]); Assert.Equal(new string('X', Property.MaxDictionaryNameLength - 3) + "001", telemetry.Properties.Keys.ToArray()[1]); Assert.Equal(new string('X', Property.MaxValueLength), telemetry.Properties.Values.ToArray()[1]); Assert.Equal(2, telemetry.Metrics.Count); Assert.Equal(new string('Y', Property.MaxDictionaryNameLength), telemetry.Metrics.Keys.ToArray()[0]); Assert.Equal(new string('Y', Property.MaxDictionaryNameLength - 3) + "001", telemetry.Metrics.Keys.ToArray()[1]); }
public void EventTelemetryReturnsNonNullContext() { EventTelemetry item = new EventTelemetry(); Assert.NotNull(item.Context); }
public void EventTelemetryImplementsISupportSamplingContract() { var telemetry = new EventTelemetry(); Assert.NotNull(telemetry as ISupportSampling); }
/// <summary> /// Initializes a new instance of the <see cref="SessionStateTelemetry"/> class by cloning an existing instance. /// </summary> /// <param name="source">Source instance of <see cref="SessionStateTelemetry"/> to clone from.</param> private SessionStateTelemetry(SessionStateTelemetry source) { this.Data = (EventTelemetry)source.Data.DeepClone(); }
/// <summary> /// Initializes a new instance of the <see cref="SessionStateTelemetry"/> class with the specified <paramref name="state"/>. /// </summary> /// <param name="state"> /// A <see cref="SessionState"/> value indicating state of the user session. /// </param> public SessionStateTelemetry(SessionState state) { this.Data = new EventTelemetry(); this.State = state; }
public void EventTelemetrySuppliesParameterizedConstructorToSimplifyCreatingEventWithGivenNameInAdvancedScenarios() { var @event = new EventTelemetry("Test Name"); Assert.Equal("Test Name", @event.Name); }