/** * Builds the web telemetry modules from the given configuration. * @param configuration The configuration */ private void buildWebModules(TelemetryConfiguration configuration) { for (TelemetryModule module : configuration.getTelemetryModules()) { if (module instanceof WebTelemetryModule) { modules.add((WebTelemetryModule)module); } } }
/** * Builds the web telemetry modules from the given configuration. * @param configuration The configuration */ private void buildWebModules(TelemetryConfiguration configuration) { for (TelemetryModule module : configuration.getTelemetryModules()) { if (module instanceof WebTelemetryModule) { modules.add((WebTelemetryModule)module); } } }
/** * Adds heartbeat module with default configuration * @param configuration TelemetryConfiguration Instance */ private void addHeartBeatModule(TelemetryConfiguration configuration) { HeartBeatModule module = new HeartBeatModule(new HashMap<String, String>()); configuration.getTelemetryModules().add(module); }
private void initializeComponents(TelemetryConfiguration configuration) { List<TelemetryModule> telemetryModules = configuration.getTelemetryModules(); for (TelemetryModule module : telemetryModules) { try { module.initialize(configuration); } catch (Exception e) { log.error("Failed to initialized telemetry module " + module.getClass().getSimpleName(), e); } } }
private void initializeComponents(TelemetryConfiguration configuration) { List<TelemetryModule> telemetryModules = configuration.getTelemetryModules(); for (TelemetryModule module : telemetryModules) { try { module.initialize(configuration); } catch (Exception e) { InternalLogger.INSTANCE.error( "Failed to initialized telemetry module " + module.getClass().getSimpleName() + ". Exception"); } } }
private static WebRequestTrackingTelemetryModule getCurrentWebRequestTrackingModule() { List<TelemetryModule> modules = TelemetryConfiguration.getActive().getTelemetryModules(); for (TelemetryModule module : modules) { if (module instanceof WebRequestTrackingTelemetryModule) { return (WebRequestTrackingTelemetryModule) module; } } return null; }
@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; }
/** * Sets the configuration data of Modules Initializers in configuration class. * @param appConfiguration The configuration data. * @param configuration The configuration class. */ private void setTelemetryModules(ApplicationInsightsXmlConfiguration appConfiguration, TelemetryConfiguration configuration) { TelemetryModulesXmlElement configurationModules = appConfiguration.getModules(); List<TelemetryModule> modules = configuration.getTelemetryModules(); if (configurationModules != null) { ReflectionUtils.loadComponents(TelemetryModule.class, modules, configurationModules.getAdds()); } //if heartbeat module is not loaded, load heartbeat module if (!isHeartBeatModuleAdded(modules)) { addHeartBeatModule(configuration); } List<TelemetryModule> pcModules = getPerformanceModules(appConfiguration.getPerformance()); modules.addAll(pcModules); }
@Test public void canDisableHeartBeatPriorToInitialize() throws Exception { Map<String, String> dummyPropertyMap = new HashMap<>(); dummyPropertyMap.put("isHeartBeatEnabled", "false"); HeartBeatModule module = new HeartBeatModule(dummyPropertyMap); TelemetryConfiguration configuration = new TelemetryConfiguration(); configuration.getTelemetryModules().add(module); module.initialize(configuration); Assert.assertFalse(module.isHeartBeatEnabled()); Field field = module.getClass().getDeclaredField("heartBeatProviderInterface"); field.setAccessible(true); HeartBeatProviderInterface hbi = (HeartBeatProviderInterface) field.get(module); Assert.assertFalse(hbi.isHeartBeatEnabled()); }
@Test public void testTelemetryModulesReturnsEmptyListByDefault() { TelemetryConfiguration configuration = TelemetryConfiguration.getActive(); List<TelemetryModule> modules = configuration.getTelemetryModules(); Assert.assertNotNull("Telemetry modules list shouldn't be null", modules); Assert.assertFalse("Modules list should be empty", modules.isEmpty()); } }
@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); }
private List<TelemetryModule> doPerfModuleTest(String enabled, int expectedModuleCount) { AppInsightsConfigurationBuilder mockParser = createMockParser(true, true, true); ApplicationInsightsXmlConfiguration appConf = mockParser.build(null); appConf.setInstrumentationKey(MOCK_IKEY); appConf.getChannel().setDeveloperMode(true); System.setProperty(TelemetryConfigurationFactory.PERFORMANCE_MODULES_SCANNING_ENABLED_PROPERTY, enabled); TelemetryConfigurationFactory.INSTANCE.setPerformanceCountersSection("com.microsoft.applicationinsights.internal.config"); TelemetryConfiguration mockConfiguration = new TelemetryConfiguration(); initializeWithFactory(mockParser, mockConfiguration); //heartbeat is added as default List<TelemetryModule> mods = mockConfiguration.getTelemetryModules(); for (TelemetryModule tm : mods) { System.out.println(" >> loaded telemetry module: "+tm.getClass().getCanonicalName()); } assertEquals(expectedModuleCount, mods.size()); return mods; }
@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 heartBeatIsEnabledByDefault() { TelemetryClient client = new TelemetryClient(); List<TelemetryModule> modules = TelemetryConfiguration.getActive().getTelemetryModules(); System.out.println(modules.size()); boolean hasHeartBeatModule = false; HeartBeatModule hbm = null; for (TelemetryModule m : modules) { if (m instanceof HeartBeatModule) { hasHeartBeatModule = true; hbm = (HeartBeatModule)m; break; } } System.out.println(hasHeartBeatModule); Assert.assertTrue(hasHeartBeatModule); Assert.assertNotNull(hbm); Assert.assertTrue(hbm.isHeartBeatEnabled()); }
@Test public void testEmptyConfiguration() { TelemetryConfiguration emptyConfig = TelemetryConfiguration.getActiveWithoutInitializingConfig(); Assert.assertNull(emptyConfig.getInstrumentationKey()); Assert.assertSame(NopTelemetryChannel.instance(), emptyConfig.getChannel()); Assert.assertEquals(0, emptyConfig.getTelemetryModules().size()); Assert.assertFalse(emptyConfig.isTrackingDisabled()); Assert.assertEquals(0, emptyConfig.getContextInitializers().size()); Assert.assertEquals(0, emptyConfig.getTelemetryProcessors().size()); }
private MockTelemetryModule generateTelemetryModules(boolean addParameter) { AppInsightsConfigurationBuilder mockParser = createMockParser(true, true, false); ApplicationInsightsXmlConfiguration appConf = mockParser.build(null); appConf.setInstrumentationKey(MOCK_IKEY); TelemetryModulesXmlElement modulesXmlElement = new TelemetryModulesXmlElement(); ArrayList<AddTypeXmlElement> modules = new ArrayList<AddTypeXmlElement>(); AddTypeXmlElement addXmlElement = new AddTypeXmlElement(); addXmlElement.setType("com.microsoft.applicationinsights.internal.config.MockTelemetryModule"); if (addParameter) { final ParamXmlElement param1 = new ParamXmlElement(); param1.setName("param1"); param1.setValue("value1"); ArrayList<ParamXmlElement> list = new ArrayList<ParamXmlElement>(); list.add(param1); addXmlElement.setParameters(list); } modules.add(addXmlElement); modulesXmlElement.setAdds(modules); appConf.setModules(modulesXmlElement); TelemetryConfiguration mockConfiguration = new TelemetryConfiguration(); initializeWithFactory(mockParser, mockConfiguration); MockTelemetryModule module = (MockTelemetryModule)mockConfiguration.getTelemetryModules().get(0); return module; }
@Test public void initializationOfTelemetryClientDoesNotResetHeartbeat() { TelemetryClient client = new TelemetryClient(); boolean origIsEnabled = true; String origExcludedHbProvider = "FakeProvider"; long originalInterval = 0; long setInterval = 30; for (TelemetryModule module : TelemetryConfiguration.getActive().getTelemetryModules()) { if (module instanceof HeartBeatModule) { origIsEnabled = ((HeartBeatModule) module).isHeartBeatEnabled(); ((HeartBeatModule) module).setHeartBeatEnabled(!origIsEnabled); Assert.assertFalse(((HeartBeatModule)module).getExcludedHeartBeatProperties().contains(origExcludedHbProvider)); ((HeartBeatModule)module).setExcludedHeartBeatPropertiesProvider(Arrays.asList(origExcludedHbProvider)); originalInterval = ((HeartBeatModule)module).getHeartBeatInterval(); ((HeartBeatModule)module).setExcludedHeartBeatProperties(Arrays.asList("test01")); ((HeartBeatModule)module).setHeartBeatInterval(setInterval); } } TelemetryClient client2 = new TelemetryClient(); for (TelemetryModule module :TelemetryConfiguration.getActive().getTelemetryModules()) { if (module instanceof HeartBeatModule) { Assert.assertNotEquals(((HeartBeatModule)module).isHeartBeatEnabled(), origIsEnabled); Assert.assertTrue(((HeartBeatModule)module).getExcludedHeartBeatPropertiesProvider().contains(origExcludedHbProvider)); Assert.assertTrue(((HeartBeatModule)module).getExcludedHeartBeatProperties().contains("test01")); Assert.assertNotEquals(((HeartBeatModule)module).getHeartBeatInterval(), originalInterval); Assert.assertEquals(((HeartBeatModule)module).getHeartBeatInterval(), setInterval); } } }