private void activateInitializers(Telemetry telemetry) { for (TelemetryInitializer initializer : this.configuration.getTelemetryInitializers()) { try { initializer.initialize(telemetry); } catch (ThreadDeath td) { throw td; } catch (Throwable e) { try { InternalLogger.INSTANCE.error("Failed during telemetry initialization class '%s', exception: %s", initializer.getClass().getName(), e.toString()); } catch (ThreadDeath td) { throw td; } catch (Throwable t2) { // chomp } } } }
/** * Sets the configuration data of Telemetry Initializers in configuration class. * @param telemetryInitializers The configuration data. * @param configuration The configuration class. */ private void setTelemetryInitializers(TelemetryInitializersXmlElement telemetryInitializers, TelemetryConfiguration configuration) { if (telemetryInitializers == null) { return; } List<TelemetryInitializer> initializerList = configuration.getTelemetryInitializers(); ReflectionUtils.loadComponents(TelemetryInitializer.class, initializerList, telemetryInitializers.getAdds()); }
@Test public void testTelemetryContextsAreCalled() { ContextInitializer mockContextInitializer = Mockito.mock(ContextInitializer.class); configuration.getContextInitializers().add(mockContextInitializer); TelemetryInitializer mockTelemetryInitializer = Mockito.mock(TelemetryInitializer.class); configuration.getTelemetryInitializers().add(mockTelemetryInitializer); TelemetryContext mockContext = new TelemetryContext(); Telemetry mockTelemetry = Mockito.mock(Telemetry.class); Mockito.doReturn(mockContext).when(mockTelemetry).getContext(); client.track(mockTelemetry); Mockito.verify(mockContextInitializer, Mockito.times(1)).initialize(any(TelemetryContext.class)); Mockito.verify(mockTelemetryInitializer, Mockito.times(1)).initialize(mockTelemetry); }
@Bean @DependsOn("internalLogger") public TelemetryConfiguration telemetryConfiguration(TelemetryChannel telemetryChannel) { TelemetryConfiguration telemetryConfiguration = TelemetryConfiguration.getActiveWithoutInitializingConfig(); telemetryConfiguration.setTrackingIsDisabled(!applicationInsightsProperties.isEnabled()); telemetryConfiguration.setInstrumentationKey(applicationInsightsProperties.getInstrumentationKey()); if (contextInitializers != null) { telemetryConfiguration.getContextInitializers().addAll(contextInitializers); } if (telemetryInitializers != null) { telemetryConfiguration.getTelemetryInitializers().addAll(telemetryInitializers); } if (telemetryModules != null) { telemetryConfiguration.getTelemetryModules().addAll(telemetryModules); } if (telemetryProcessors != null) { telemetryConfiguration.getTelemetryProcessors().addAll(telemetryProcessors); } telemetryConfiguration.setChannel(telemetryChannel); initializeComponents(telemetryConfiguration); initializePerformanceCounterContainer(); return telemetryConfiguration; }
@Test public void shouldBeAbleToAddCustomModules() { EnvironmentTestUtils.addEnvironment(context, "azure.application-insights.instrumentation-key: 00000000-0000-0000-0000-000000000000"); context.register(PropertyPlaceholderAutoConfiguration.class, ApplicationInsightsTelemetryAutoConfiguration.class, CustomModuleConfiguration.class); context.refresh(); TelemetryConfiguration telemetryConfiguration = context.getBean(TelemetryConfiguration.class); ContextInitializer myContextInitializer = context.getBean("myContextInitializer", ContextInitializer.class); TelemetryInitializer myTelemetryInitializer = context.getBean("myTelemetryInitializer", TelemetryInitializer.class); TelemetryModule myTelemetryModule = context.getBean("myTelemetryModule", TelemetryModule.class); TelemetryProcessor myTelemetryProcessor = context.getBean("myTelemetryProcessor", TelemetryProcessor.class); assertThat(telemetryConfiguration.getContextInitializers()).contains(myContextInitializer); assertThat(telemetryConfiguration.getTelemetryInitializers()).contains(myTelemetryInitializer); assertThat(telemetryConfiguration.getTelemetryModules()).contains(myTelemetryModule); assertThat(telemetryConfiguration.getTelemetryProcessors()).contains(myTelemetryProcessor); }
@Test public void shouldHaveIdenticalConfiguration() throws Exception{ Field field = telemetryClient.getClass().getDeclaredField("configuration"); field.setAccessible(true); TelemetryConfiguration config1 = (TelemetryConfiguration)field.get(telemetryClient); //needed for clearing down the active instance and get the new config. tearDown(); //Instance created from XML config. TelemetryClient t2 = new TelemetryClient(); Field field2 = t2.getClass().getDeclaredField("configuration"); field2.setAccessible(true); TelemetryConfiguration config2 = (TelemetryConfiguration)field2.get(t2); Assert.assertNotEquals(config1, config2); //There is one additional TelemetryInitializer in case of SpringBoot(For Cloud_RoleName) Assert.assertEquals(config1.getTelemetryInitializers().size(), config2.getTelemetryInitializers().size() + 1); Assert.assertEquals(config1.getTelemetryModules().size(), config2.getTelemetryModules().size()); Assert.assertEquals(config1.getContextInitializers().size(), config2.getContextInitializers().size()); Assert.assertEquals(config1.getTelemetryProcessors().size(), config2.getTelemetryProcessors().size()); Assert.assertEquals(config1.getInstrumentationKey(), config2.getInstrumentationKey()); Assert.assertEquals(config1.isTrackingDisabled(), config2.isTrackingDisabled()); }
@Test public void testNewUserCookieIsNotCreatedWhenCookieNotExist() throws Exception { TelemetryConfiguration.getActive().getTelemetryInitializers().add(new TestModuleInitializer(null)); CookiesContainer cookiesContainer = HttpHelper.sendRequestAndGetResponseCookie(server.getPortNumber()); Assert.assertNull("User cookie should be null.", cookiesContainer.getUserCookie()); }
@Test public void testNewSessionCookieIsNotCreatedWhenCookieNotExist() throws Exception { TelemetryConfiguration.getActive().getTelemetryInitializers().add(new TestModuleInitializer(null, false)); CookiesContainer cookiesContainer = HttpHelper.sendRequestAndGetResponseCookie(server.getPortNumber()); Assert.assertNull("Session cookie should be null.", cookiesContainer.getSessionCookie()); }
@Test public void testInitializeAllDefaults() throws Exception { AppInsightsConfigurationBuilder mockParser = createMockParser(true, true, false); ApplicationInsightsXmlConfiguration appConf = mockParser.build(null); appConf.setInstrumentationKey(MOCK_IKEY); TelemetryConfiguration mockConfiguration = new TelemetryConfiguration(); initializeWithFactory(mockParser, mockConfiguration); assertEquals(false, mockConfiguration.isTrackingDisabled()); assertEquals(MOCK_IKEY, mockConfiguration.getInstrumentationKey()); assertThat(mockConfiguration.getContextInitializers(), Matchers.<ContextInitializer>hasSize(3)); assertThat(mockConfiguration.getTelemetryInitializers(), Matchers.<TelemetryInitializer>empty()); assertThat(mockConfiguration.getTelemetryProcessors(), empty()); assertThat(mockConfiguration.getChannel(), instanceOf(StdOutChannel.class)); }
@Test public void testContextInitializers() { AppInsightsConfigurationBuilder mockParser = createMockParser(true, true, false); ApplicationInsightsXmlConfiguration appConf = mockParser.build(null); appConf.setInstrumentationKey(MOCK_IKEY); ContextInitializersXmlElement contextInitializersXmlElement = new ContextInitializersXmlElement(); ArrayList<AddTypeXmlElement> contexts = new ArrayList<AddTypeXmlElement>(); AddTypeXmlElement addXmlElement = new AddTypeXmlElement(); addXmlElement.setType("com.microsoft.applicationinsights.extensibility.initializer.DeviceInfoContextInitializer"); contexts.add(addXmlElement); contextInitializersXmlElement.setAdds(contexts); appConf.setContextInitializers(contextInitializersXmlElement); TelemetryConfiguration mockConfiguration = new TelemetryConfiguration(); initializeWithFactory(mockParser, mockConfiguration); assertEquals(false, mockConfiguration.isTrackingDisabled()); assertEquals(MOCK_IKEY, mockConfiguration.getInstrumentationKey()); assertThat(mockConfiguration.getContextInitializers(), hasSize(4)); assertThat(mockConfiguration.getTelemetryInitializers(), empty()); assertThat(mockConfiguration.getTelemetryProcessors(), empty()); assertThat(mockConfiguration.getChannel(), instanceOf(StdOutChannel.class)); }
@Test public void testTelemetryContextInitializers() { AppInsightsConfigurationBuilder mockParser = createMockParser(true, true, false); ApplicationInsightsXmlConfiguration appConf = mockParser.build( null ); appConf.setInstrumentationKey(MOCK_IKEY); TelemetryInitializersXmlElement telemetryInitializersXmlElement = new TelemetryInitializersXmlElement(); ArrayList<AddTypeXmlElement> contexts = new ArrayList<AddTypeXmlElement>(); AddTypeXmlElement addXmlElement = new AddTypeXmlElement(); addXmlElement.setType("com.microsoft.applicationinsights.extensibility.initializer.TimestampPropertyInitializer"); contexts.add(addXmlElement); telemetryInitializersXmlElement.setAdds(contexts); appConf.setTelemetryInitializers(telemetryInitializersXmlElement); TelemetryConfiguration mockConfiguration = new TelemetryConfiguration(); initializeWithFactory(mockParser, mockConfiguration); assertEquals(false, mockConfiguration.isTrackingDisabled()); assertEquals(MOCK_IKEY, mockConfiguration.getInstrumentationKey()); assertThat(mockConfiguration.getContextInitializers(), hasSize(3)); assertThat(mockConfiguration.getTelemetryInitializers(), hasSize(1)); assertThat(mockConfiguration.getTelemetryProcessors(), empty()); assertThat(mockConfiguration.getChannel(), instanceOf(StdOutChannel.class)); }
assertEquals(MOCK_IKEY, mockConfiguration.getInstrumentationKey()); assertThat(mockConfiguration.getContextInitializers(), hasSize(3)); assertThat(mockConfiguration.getTelemetryInitializers(), empty()); assertThat(mockConfiguration.getChannel(), instanceOf(StdOutChannel.class));