UNOMI-660 : store correctly the ids of the events leading to the sess… (#488)
* UNOMI-660 : store correctly the ids of the events leading to the session creation
diff --git a/api/src/main/java/org/apache/unomi/api/Session.java b/api/src/main/java/org/apache/unomi/api/Session.java
index fc622ab..986323c 100644
--- a/api/src/main/java/org/apache/unomi/api/Session.java
+++ b/api/src/main/java/org/apache/unomi/api/Session.java
@@ -17,6 +17,7 @@
package org.apache.unomi.api;
+import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -53,8 +54,8 @@
private int duration = 0;
- private List<String> originEventTypes;
- private List<String> originEventIds;
+ private List<String> originEventTypes = new ArrayList<>();
+ private List<String> originEventIds = new ArrayList<>();
/**
* Instantiates a new Session.
diff --git a/itests/src/test/java/org/apache/unomi/itests/ContextServletIT.java b/itests/src/test/java/org/apache/unomi/itests/ContextServletIT.java
index 5717fbc..6559c46 100644
--- a/itests/src/test/java/org/apache/unomi/itests/ContextServletIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/ContextServletIT.java
@@ -66,6 +66,7 @@
import static org.hamcrest.core.IsCollectionContaining.hasItem;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
@@ -201,7 +202,7 @@
Objects::nonNull, DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
//Act
- Event event = new Event(eventId, TEST_EVENT_TYPE, null, profile, TEST_SCOPE, null, null, new Date());
+ Event event = new Event(TEST_EVENT_TYPE, null, profile, TEST_SCOPE, null, null, new Date());
ContextRequest contextRequest = new ContextRequest();
contextRequest.setSessionId(sessionId);
@@ -211,12 +212,13 @@
request.setEntity(new StringEntity(objectMapper.writeValueAsString(contextRequest), ContentType.APPLICATION_JSON));
TestUtils.executeContextJSONRequest(request, sessionId);
- keepTrying("Event " + eventId + " not saved in the required time", () -> eventService.getEvent(eventId), Objects::nonNull, DEFAULT_TRYING_TIMEOUT,
+ Session session = keepTrying("Session with the id " + sessionId + " not saved in the required time",
+ () -> profileService.loadSession(sessionId,
+ null), Objects::nonNull, DEFAULT_TRYING_TIMEOUT,
DEFAULT_TRYING_TRIES);
- Session session = profileService.loadSession(sessionId, null);
assertEquals(TEST_EVENT_TYPE, session.getOriginEventTypes().get(0));
- assertEquals(eventId, session.getOriginEventIds().get(0));
+ assertFalse(session.getOriginEventIds().isEmpty());
}
@Test
diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/ContextJsonEndpoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/ContextJsonEndpoint.java
index 546ce5a..9d2a3c6 100644
--- a/rest/src/main/java/org/apache/unomi/rest/endpoints/ContextJsonEndpoint.java
+++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/ContextJsonEndpoint.java
@@ -167,7 +167,7 @@
// build public context, profile + session creation/anonymous etc ...
EventsRequestContext eventsRequestContext = restServiceUtils.initEventsRequest(scope, sessionId, profileId,
- personaId, invalidateProfile, invalidateSession, request, response, timestamp, events != null ? events: Collections.emptyList());
+ personaId, invalidateProfile, invalidateSession, request, response, timestamp);
// Build response
ContextResponse contextResponse = new ContextResponse();
diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/EventsCollectorEndpoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/EventsCollectorEndpoint.java
index 81007d8..c9b3109 100644
--- a/rest/src/main/java/org/apache/unomi/rest/endpoints/EventsCollectorEndpoint.java
+++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/EventsCollectorEndpoint.java
@@ -114,7 +114,7 @@
// build public context, profile + session creation/anonymous etc ...
EventsRequestContext eventsRequestContext = restServiceUtils.initEventsRequest(scope, sessionId, profileId, null, false, false,
- request, response, timestamp, events);
+ request, response, timestamp);
// process events
eventsRequestContext = restServiceUtils.performEventsRequest(eventsCollectorRequest.getEvents(), eventsRequestContext);
diff --git a/rest/src/main/java/org/apache/unomi/rest/service/RestServiceUtils.java b/rest/src/main/java/org/apache/unomi/rest/service/RestServiceUtils.java
index 6024a36..153b6ad 100644
--- a/rest/src/main/java/org/apache/unomi/rest/service/RestServiceUtils.java
+++ b/rest/src/main/java/org/apache/unomi/rest/service/RestServiceUtils.java
@@ -47,13 +47,12 @@
* @param request the current request
* @param response the current request response
* @param timestamp the current date, for timestamp the current visitor data
- * @param events list of events sent with the request
* @return the built EventsRequestContext
*/
EventsRequestContext initEventsRequest(String scope, String sessionId, String profileId, String personaId,
boolean invalidateProfile, boolean invalidateSession,
HttpServletRequest request, HttpServletResponse response,
- Date timestamp, List<Event> events);
+ Date timestamp);
/**
* Execute the list of events using the dedicated eventsRequestContext
diff --git a/rest/src/main/java/org/apache/unomi/rest/service/impl/RestServiceUtilsImpl.java b/rest/src/main/java/org/apache/unomi/rest/service/impl/RestServiceUtilsImpl.java
index c18fad5..ace630b 100644
--- a/rest/src/main/java/org/apache/unomi/rest/service/impl/RestServiceUtilsImpl.java
+++ b/rest/src/main/java/org/apache/unomi/rest/service/impl/RestServiceUtilsImpl.java
@@ -88,8 +88,7 @@
@Override
public EventsRequestContext initEventsRequest(String scope, String sessionId, String profileId, String personaId,
boolean invalidateProfile, boolean invalidateSession,
- HttpServletRequest request, HttpServletResponse response, Date timestamp,
- List<Event> events) {
+ HttpServletRequest request, HttpServletResponse response, Date timestamp) {
// Build context
EventsRequestContext eventsRequestContext = new EventsRequestContext(timestamp, null, null, request, response);
@@ -186,9 +185,8 @@
// Only save session and send event if a session id was provided, otherwise keep transient session
Session session = new Session(sessionId, sessionProfile, timestamp, scope);
- session.setOriginEventTypes(events.stream().map(Event::getEventType).collect(Collectors.toList()));
- session.setOriginEventIds(events.stream().map(Item::getItemId).collect(Collectors.toList()));
eventsRequestContext.setSession(session);
+ eventsRequestContext.setNewSession(true);
eventsRequestContext.addChanges(EventService.SESSION_UPDATED);
Event event = new Event("sessionCreated", eventsRequestContext.getSession(), eventsRequestContext.getProfile(),
scope, null, eventsRequestContext.getSession(), null, timestamp, false);
@@ -276,6 +274,10 @@
if ((eventsRequestContext.getChanges() & EventService.PROFILE_UPDATED) == EventService.PROFILE_UPDATED) {
eventsRequestContext.setProfile(eventToSend.getProfile());
}
+ if (eventsRequestContext.isNewSession()) {
+ eventsRequestContext.getSession().getOriginEventIds().add(eventToSend.getItemId());
+ eventsRequestContext.getSession().getOriginEventTypes().add(eventToSend.getEventType());
+ }
if ((eventsRequestContext.getChanges() & EventService.ERROR) == EventService.ERROR) {
//Don't count the event that failed
eventsRequestContext.setProcessedItems(eventsRequestContext.getProcessedItems() - 1);
@@ -284,6 +286,7 @@
}
}
}
+
}
return eventsRequestContext;
diff --git a/rest/src/main/java/org/apache/unomi/utils/EventsRequestContext.java b/rest/src/main/java/org/apache/unomi/utils/EventsRequestContext.java
index 188f42d..6798875 100644
--- a/rest/src/main/java/org/apache/unomi/utils/EventsRequestContext.java
+++ b/rest/src/main/java/org/apache/unomi/utils/EventsRequestContext.java
@@ -35,6 +35,8 @@
private Date timestamp;
private Profile profile;
private Session session;
+
+ private boolean newSession = false;
private HttpServletRequest request;
private HttpServletResponse response;
private int changes;
@@ -79,6 +81,14 @@
this.session = session;
}
+ public boolean isNewSession() {
+ return newSession;
+ }
+
+ public void setNewSession(boolean newSession) {
+ this.newSession = newSession;
+ }
+
public int getChanges() {
return changes;
}