/** * Initializes the properties of the given telemetry. * * @param telemetry The {@link com.microsoft.applicationinsights.telemetry.Telemetry} to initialize. */ @Override protected void onInitializeTelemetry(Telemetry telemetry) { RequestTelemetry requestTelemetry = ThreadContext.getRequestTelemetryContext().getHttpRequestTelemetry(); String userAgent = requestTelemetry.getContext().getUser().getUserAgent(); telemetry.getContext().getUser().setUserAgent(userAgent); } }
/** * Initializes the properties of the given telemetry. * * @param telemetry The {@link com.microsoft.applicationinsights.telemetry.Telemetry} to initialize. */ @Override protected void onInitializeTelemetry(Telemetry telemetry) { RequestTelemetry requestTelemetry = ThreadContext.getRequestTelemetryContext().getHttpRequestTelemetry(); String userAgent = requestTelemetry.getContext().getUser().getUserAgent(); telemetry.getContext().getUser().setUserAgent(userAgent); } }
public static double getSamplingScore(Telemetry telemetry) { double samplingScore = 0; try { if (telemetry.getContext().getUser().getId() != null) { samplingScore = (double) getSamplingHashCode(telemetry.getContext().getUser().getId()) / Integer.MAX_VALUE; } else if (telemetry.getContext().getOperation().getId() != null) { samplingScore = (double) getSamplingHashCode(telemetry.getContext().getOperation().getId()) / Integer.MAX_VALUE; } else { samplingScore = rand.nextDouble(); } } catch (Exception e) { InternalLogger.INSTANCE.error("Failed to fetch sample number for telemetry, using default"); samplingScore = rand.nextDouble(); } samplingScore *= 100; return samplingScore; }
@Override public void initialize(final TelemetryContext context) { if (!isInitialized) { logger.info("Starting TelemetryContext initialization"); initializeInstrumentationKey(context, isDeveloperMode); initializeProperties(context.getProperties()); initializeUser(context.getUser()); initializeComponent(context.getComponent()); initializeDevice(context.getDevice()); initializeTags(context.getTags()); initializeSession(context.getSession()); isInitialized = true; logger.info("Ending TelemetryContext initialization"); } }
@Test public void testWhenCookieExistCorrectUserIdAttachedToSentTelemetry() throws Exception { HttpHelper.sendRequestAndGetResponseCookie(server.getPortNumber(), userCookieFormatted); RequestTelemetry requestTelemetry = channel.getTelemetryItems(RequestTelemetry.class).get(0); Assert.assertTrue(userCookieFormatted.contains(requestTelemetry.getContext().getUser().getId())); Assert.assertEquals(requestTelemetry.getContext().getUser().getId(), HttpHelper.getCookie()); }
@Test public void testNoUserCookie() { RequestTelemetryContext requestTelemetryContext = ThreadContext.getRequestTelemetryContext(); requestTelemetryContext.getHttpRequestTelemetry().getContext().getUser().setAcquisitionDate(null); requestTelemetryContext.getHttpRequestTelemetry().getContext().getUser().setId(null); TraceTelemetry telemetry = new TraceTelemetry(); userTelemetryInitializer.onInitializeTelemetry(telemetry); Assert.assertNull(telemetry.getContext().getUser().getId()); Assert.assertNull(telemetry.getContext().getUser().getAcquisitionDate()); }
@Test public void gsmSyntheticHeadersTest() { WebSyntheticRequestTelemetryInitializer tested = new WebSyntheticRequestTelemetryInitializer(); HttpServletRequest mockRequest = Mockito.mock(HttpServletRequest.class); Mockito.doReturn("").when(mockRequest).getHeader(WebSyntheticRequestTelemetryInitializer.SYNTHETIC_TEST_SOURCE); Mockito.doReturn("A1").when(mockRequest).getHeader(WebSyntheticRequestTelemetryInitializer.SYNTHETIC_TEST_RUN_ID); Mockito.doReturn("A2").when(mockRequest).getHeader(WebSyntheticRequestTelemetryInitializer.SYNTHETIC_TEST_LOCATION); RequestTelemetryContext context = new RequestTelemetryContext(DateTimeUtils.getDateTimeNow().getTime(), mockRequest); ThreadContext.setRequestTelemetryContext(context); TraceTelemetry telemetry = new TraceTelemetry(); tested.initialize(telemetry); assertEquals(WebSyntheticRequestTelemetryInitializer.SYNTHETIC_SOURCE_NAME, telemetry.getContext().getOperation().getSyntheticSource()); assertEquals("A1", telemetry.getContext().getSession().getId()); assertEquals("A2", telemetry.getContext().getUser().getId()); }
@Before public void classInitialize() { acquisitionTime = DateTimeUtils.getDateTimeNow(); RequestTelemetryContext context = new RequestTelemetryContext(DateTimeUtils.getDateTimeNow().getTime()); ThreadContext.setRequestTelemetryContext(context); // Set session ID for the http request. RequestTelemetry requestTelemetry = context.getHttpRequestTelemetry(); requestTelemetry.getContext().getUser().setId(REQUEST_USER_ID); requestTelemetry.getContext().getUser().setAcquisitionDate(acquisitionTime); }
@Test public void testUserIdNotOverriddenIfAlreadySet() { String expectedUserId = "SOME_ID"; TraceTelemetry telemetry = new TraceTelemetry(); telemetry.getContext().getUser().setId(expectedUserId); userTelemetryInitializer.onInitializeTelemetry(telemetry); Assert.assertEquals(expectedUserId, telemetry.getContext().getUser().getId()); }
@BeforeClass public static void classInitialize() { RequestTelemetryContext context = new RequestTelemetryContext(DateTimeUtils.getDateTimeNow().getTime()); context.getHttpRequestTelemetry().getContext().getUser().setUserAgent(HttpHelper.TEST_USER_AGENT); ThreadContext.setRequestTelemetryContext(context); }
@Test public void testUserAgentIsBeingSet() throws Exception { HttpHelper.sendRequestAndGetResponseCookie(server.getPortNumber()); List<RequestTelemetry> items = channel.getTelemetryItems(RequestTelemetry.class); assertEquals(1, items.size()); RequestTelemetry requestTelemetry = items.get(0); Assert.assertEquals(HttpHelper.TEST_USER_AGENT, requestTelemetry.getContext().getUser().getUserAgent()); }
@Test public void samplingScoreIsRandomIfUserIdIsPresentWithoutOperationId() { String userId = generateRandomUserId(); Telemetry eventTelemetry = new EventTelemetry(); eventTelemetry.getContext().getUser().setId(userId); Telemetry requestTelemetry = new RequestTelemetry(); requestTelemetry.getContext().getUser().setId(userId); double eventTelemetrySamplingScore = SamplingScoreGeneratorV2.getSamplingScore(eventTelemetry); double requestTelemetrySamplingScore = SamplingScoreGeneratorV2.getSamplingScore(requestTelemetry); Assert.assertNotEquals(eventTelemetrySamplingScore, requestTelemetrySamplingScore, 0.0); }
@Test public void testTelemetryIsUpdatedWithUserAgent() { TraceTelemetry telemetry = new TraceTelemetry("new telemetry"); initializer.onInitializeTelemetry(telemetry); Assert.assertEquals(HttpHelper.TEST_USER_AGENT, telemetry.getContext().getUser().getUserAgent()); } }
@Test public void testUserIdIsUpdatedFromRequest() { TraceTelemetry telemetry = new TraceTelemetry(); userTelemetryInitializer.onInitializeTelemetry(telemetry); Assert.assertEquals(REQUEST_USER_ID, telemetry.getContext().getUser().getId()); }
@Test public void testAcquisitionDateSetWhenRequired() { TraceTelemetry telemetry = new TraceTelemetry(); userTelemetryInitializer.onInitializeTelemetry(telemetry); Assert.assertEquals(acquisitionTime, telemetry.getContext().getUser().getAcquisitionDate()); } }
@Test public void noSyntheticHeadersTest() { WebSyntheticRequestTelemetryInitializer tested = new WebSyntheticRequestTelemetryInitializer(); HttpServletRequest mockRequest = Mockito.mock(HttpServletRequest.class); Mockito.doReturn("").when(mockRequest).getHeader(anyString()); RequestTelemetryContext context = new RequestTelemetryContext(DateTimeUtils.getDateTimeNow().getTime(), mockRequest); ThreadContext.setRequestTelemetryContext(context); TraceTelemetry telemetry = new TraceTelemetry(); tested.initialize(telemetry); assertTrue(CommonUtils.isNullOrEmpty(telemetry.getContext().getSession().getId())); assertTrue(CommonUtils.isNullOrEmpty(telemetry.getContext().getUser().getId())); assertTrue(CommonUtils.isNullOrEmpty(telemetry.getContext().getOperation().getId())); }
@Test public void testWith0PercentWithUserId() { FixedRateTelemetrySampler tested = new FixedRateTelemetrySampler(); tested.setIncludeTypes("Event, PageView"); tested.setSamplingPercentage(0.0); Telemetry telemetry = new EventTelemetry(); telemetry.getContext().getUser().setId("B"); boolean result = tested.isSampledIn(telemetry); Assert.assertFalse(result); }
@Test public void testWith100PercentWithUserId() { FixedRateTelemetrySampler tested = new FixedRateTelemetrySampler(); tested.setExcludeTypes("Event, PageView"); tested.setSamplingPercentage(100.0); Telemetry telemetry = new EventTelemetry(); telemetry.getContext().getUser().setId("B"); boolean result = tested.isSampledIn(telemetry); Assert.assertTrue(result); }
@Override public void initialize(Telemetry telemetry) { RequestTelemetry requestTelemetry = ThreadContext.getRequestTelemetryContext().getHttpRequestTelemetry(); UserContext requestUserContext = requestTelemetry.getContext().getUser(); if (expectedUserId == null) { //No longer testing for UUID //Assert.assertTrue(Sanitizer.isUUID(requestUserContext.getId())); Assert.assertNotEquals(requestUserContext.getId(), HttpHelper.getCookie()); } else { Assert.assertEquals(expectedUserId, requestUserContext.getId()); } Assert.assertNotNull(requestUserContext.getAcquisitionDate()); } }
@Test public void samplingScoreIsNotAffectedByPresenceOfUserId() { String userId1 = generateRandomUserId(); String userId2 = generateRandomUserId(); String operationId = generateRandomOperationId(); Telemetry eventTelemetry = new EventTelemetry(); eventTelemetry.getContext().getUser().setId(userId1); eventTelemetry.getContext().getOperation().setId(operationId); Telemetry requestTelemetry = new RequestTelemetry(); requestTelemetry.getContext().getUser().setId(userId2); requestTelemetry.getContext().getOperation().setId(operationId); double eventTelemetrySamplingScore = SamplingScoreGeneratorV2.getSamplingScore(eventTelemetry); double requestTelemetrySamplingScore = SamplingScoreGeneratorV2.getSamplingScore(requestTelemetry); Assert.assertEquals(eventTelemetrySamplingScore, requestTelemetrySamplingScore, 0.0); }