private boolean activateProcessors(Telemetry telemetry) { for (TelemetryProcessor processor : configuration.getTelemetryProcessors()) { try { if (!processor.process(telemetry)) { return false; } } catch (ThreadDeath td) { throw td; } catch (Throwable t) { try { InternalLogger.INSTANCE.error("Exception while processing telemetry: '%s'",t.toString()); } catch (ThreadDeath td) { throw td; } catch (Throwable t2) { // chomp } } } return true; }
private void setTelemetryProcessors(ApplicationInsightsXmlConfiguration appConfiguration, TelemetryConfiguration configuration) { TelemetryProcessorsXmlElement configurationProcessors = appConfiguration.getTelemetryProcessors(); List<TelemetryProcessor> processors = configuration.getTelemetryProcessors();
@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 testFilterOutTelemetry() throws Throwable { RequestTelemetryFilter filter = new RequestTelemetryFilter(); filter.setNotNeededResponseCodes("200-400"); configuration.getTelemetryProcessors().add(filter); RequestTelemetry rt = new RequestTelemetry(); rt.setUrl(new URL("http:///www.microsoft.com/")); client.trackRequest(rt); Mockito.verify(channel, Mockito.never()).send(rt); }
@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 shouldBeAbleToConfigureSamplingTelemetryProcessor() { EnvironmentTestUtils.addEnvironment(context, "azure.application-insights.instrumentation-key: 00000000-0000-0000-0000-000000000000", "azure.application-insights.telemetry-processor.sampling.percentage=50", "azure.application-insights.telemetry-processor.sampling.include=Request", "azure.application-insights.telemetry-processor.sampling.enabled=true"); context.register(PropertyPlaceholderAutoConfiguration.class, ApplicationInsightsTelemetryAutoConfiguration.class); context.refresh(); TelemetryConfiguration telemetryConfiguration = context.getBean(TelemetryConfiguration.class); FixedRateSamplingTelemetryProcessor fixedRateSamplingTelemetryProcessor = context.getBean(FixedRateSamplingTelemetryProcessor.class); assertThat(telemetryConfiguration.getTelemetryProcessors()).extracting("class").contains(FixedRateSamplingTelemetryProcessor.class); assertThat(fixedRateSamplingTelemetryProcessor).extracting("samplingPercentage").contains(50.); assertThat(fixedRateSamplingTelemetryProcessor.getIncludedTypes()).contains(RequestTelemetry.class); assertThat(fixedRateSamplingTelemetryProcessor.getExcludedTypes()).isEmpty(); }
@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()); }
@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)); }
assertThat(mockConfiguration.getChannel(), instanceOf(StdOutChannel.class)); assertThat(mockConfiguration.getTelemetryProcessors(), hasSize(4)); assertThat(mockConfiguration.getTelemetryProcessors(), Matchers.<TelemetryProcessor>hasItem(instanceOf(SyntheticSourceFilter.class))); assertThat(mockConfiguration.getTelemetryProcessors(), Matchers.<TelemetryProcessor>hasItem(instanceOf(RequestTelemetryFilter.class))); assertThat(mockConfiguration.getTelemetryProcessors(), Matchers.<TelemetryProcessor>hasItem(instanceOf(ValidProcessorsWithSetters.class))); assertThat(mockConfiguration.getTelemetryProcessors(), Matchers.<TelemetryProcessor>hasItem(instanceOf(TestProcessorWithoutSetters.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)); }