@SuppressWarnings("unchecked") @Override public void onRemoval(RemovalNotification<AbstractEUMSpanDetails, Pair<Boolean, AbstractEUMPointBuilder>> notification) { AbstractEUMSpanDetails element = notification.getKey(); synchronized (element) { AbstractEUMPointBuilder builder = notification.getValue().getSecond(); Long sessId = element.getOwningSpan().getSessionId(); Long tabId = element.getOwningSpan().getTabId(); Pair<Long, Long> plrSessionTabId = new Pair<Long, Long>(sessId, tabId); missingSessionInfosMap.remove(sessId, element); missingPageLoadRequestsMap.remove(plrSessionTabId, element); // Force a write even if data is still missing in case of an cache // eviction because of the timeout if (notification.getCause() != RemovalCause.EXPLICIT) { PageLoadRequest plr = pageLoadRequestCache.getIfPresent(plrSessionTabId); UserSessionInfo sessionInfo = sessionInfoCache.getIfPresent(sessId); dataPointsToWrite.addAll(builder.build(sessionInfo, plr, element)); } } } }).build();
UserSessionInfo sessInfo = null; Long sessId = element.getOwningSpan().getSessionId(); Long tabId = element.getOwningSpan().getTabId(); Pair<Long, Long> plrSessionTabId = new Pair<Long, Long>(sessId, tabId);
protected Beacon generateBeacon(AbstractEUMSpanDetails elementToSend, boolean containsSessionInfo, boolean containsPLR, String modules) { ArrayList<EUMBeaconElement> data = new ArrayList<>(); if (containsSessionInfo) { data.add(sessionInfo); } if (containsPLR) { data.add(pageLoadRequest.getOwningSpan()); when(pageLoadRequest.getOwningSpan().getActiveAgentModules()).thenReturn(modules); } if (elementToSend != null) { EUMSpan span = Mockito.mock(EUMSpan.class); when(span.getTabId()).thenReturn(TAB_ID); when(span.getSessionId()).thenReturn(SESSION_ID); when(span.getDetails()).thenReturn(elementToSend); if (elementToSend instanceof DummyBeaconElement) { ((DummyBeaconElement) elementToSend).owner = span; } else { when(elementToSend.getOwningSpan()).thenReturn(span); } when(span.getActiveAgentModules()).thenReturn(modules); data.add(span); } return new Beacon(SESSION_ID, TAB_ID, modules, data); }