You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by sh...@apache.org on 2020/03/10 09:31:26 UTC
[unomi] 01/01: UNOMI-285 Make sessions optional in eventcollector
and contextservlet
This is an automated email from the ASF dual-hosted git repository.
shuber pushed a commit to branch UNOMI-285-optional-sessions
in repository https://gitbox.apache.org/repos/asf/unomi.git
commit 7e9226a975f29b4c0b8582df050ad8ed64e24842
Author: Serge Huber <sh...@apache.org>
AuthorDate: Tue Mar 10 10:31:17 2020 +0100
UNOMI-285 Make sessions optional in eventcollector and contextservlet
---
.../baseplugin/actions/SetPropertyAction.java | 3 +++
.../META-INF/cxs/rules/sessionPageReferrer.json | 2 +-
.../java/org/apache/unomi/web/ContextServlet.java | 20 ++++++++-------
.../apache/unomi/web/EventsCollectorServlet.java | 30 ++++++++++++----------
.../java/org/apache/unomi/web/ServletCommon.java | 2 +-
5 files changed, 33 insertions(+), 24 deletions(-)
diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/SetPropertyAction.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/SetPropertyAction.java
index 4fcdde7..4134cec 100644
--- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/SetPropertyAction.java
+++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/SetPropertyAction.java
@@ -41,6 +41,9 @@ public class SetPropertyAction implements ActionExecutor {
public int execute(Action action, Event event) {
boolean storeInSession = Boolean.TRUE.equals(action.getParameterValues().get("storeInSession"));
+ if (storeInSession && event.getSession() == null) {
+ return EventService.NO_CHANGE;
+ }
String propertyName = (String) action.getParameterValues().get("setPropertyName");
diff --git a/plugins/baseplugin/src/main/resources/META-INF/cxs/rules/sessionPageReferrer.json b/plugins/baseplugin/src/main/resources/META-INF/cxs/rules/sessionPageReferrer.json
index ad09b7a..d3e2f10 100644
--- a/plugins/baseplugin/src/main/resources/META-INF/cxs/rules/sessionPageReferrer.json
+++ b/plugins/baseplugin/src/main/resources/META-INF/cxs/rules/sessionPageReferrer.json
@@ -27,7 +27,7 @@
{
"parameterValues": {
"setPropertyName": "size",
- "setPropertyValue": "script::session.size + 1",
+ "setPropertyValue": "script::session != null ? session.size + 1 : 0",
"storeInSession": true
},
"type": "setPropertyAction"
diff --git a/wab/src/main/java/org/apache/unomi/web/ContextServlet.java b/wab/src/main/java/org/apache/unomi/web/ContextServlet.java
index d4bc05c..961276b 100644
--- a/wab/src/main/java/org/apache/unomi/web/ContextServlet.java
+++ b/wab/src/main/java/org/apache/unomi/web/ContextServlet.java
@@ -211,10 +211,10 @@ public class ContextServlet extends HttpServlet {
if (session == null || invalidateSession) {
sessionProfile = privacyService.isRequireAnonymousBrowsing(profile) ? privacyService.getAnonymousProfile(profile) : profile;
- session = new Session(sessionId, sessionProfile, timestamp, scope);
if (StringUtils.isNotBlank(sessionId)) {
// Only save session and send event if a session id was provided, otherwise keep transient session
+ session = new Session(sessionId, sessionProfile, timestamp, scope);
changes |= EventService.SESSION_UPDATED;
Event event = new Event("sessionCreated", session, profile, scope, null, session, timestamp);
if (sessionProfile.isAnonymousProfile()) {
@@ -241,7 +241,7 @@ public class ContextServlet extends HttpServlet {
if (logger.isDebugEnabled()) {
logger.debug("Received event {} for profile={} {} target={} timestamp={}", profileUpdated.getEventType(), profile.getItemId(),
- " session=" + session.getItemId(), profileUpdated.getTarget(), timestamp);
+ " session=" + (session != null ? session.getItemId() : null), profileUpdated.getTarget(), timestamp);
}
changes |= eventService.send(profileUpdated);
}
@@ -336,13 +336,15 @@ public class ContextServlet extends HttpServlet {
data.setProfileProperties(profileProperties);
}
- data.setSessionId(session.getItemId());
- if (contextRequest.getRequiredSessionProperties() != null) {
- Map<String, Object> sessionProperties = new HashMap<>(session.getProperties());
- if (!contextRequest.getRequiredSessionProperties().contains("*")) {
- sessionProperties.keySet().retainAll(contextRequest.getRequiredSessionProperties());
+ if (session != null) {
+ data.setSessionId(session.getItemId());
+ if (contextRequest.getRequiredSessionProperties() != null) {
+ Map<String, Object> sessionProperties = new HashMap<>(session.getProperties());
+ if (!contextRequest.getRequiredSessionProperties().contains("*")) {
+ sessionProperties.keySet().retainAll(contextRequest.getRequiredSessionProperties());
+ }
+ data.setSessionProperties(sessionProperties);
}
- data.setSessionProperties(sessionProperties);
}
processOverrides(contextRequest, profile, session);
@@ -398,7 +400,7 @@ public class ContextServlet extends HttpServlet {
if (contextRequest.getProfileOverrides().getProperties()!=null) {
profile.setProperties(contextRequest.getProfileOverrides().getProperties());
}
- if (contextRequest.getSessionPropertiesOverrides()!=null) {
+ if (contextRequest.getSessionPropertiesOverrides()!=null && session != null) {
session.setProperties(contextRequest.getSessionPropertiesOverrides());
}
}
diff --git a/wab/src/main/java/org/apache/unomi/web/EventsCollectorServlet.java b/wab/src/main/java/org/apache/unomi/web/EventsCollectorServlet.java
index a55adf8..2f27836 100644
--- a/wab/src/main/java/org/apache/unomi/web/EventsCollectorServlet.java
+++ b/wab/src/main/java/org/apache/unomi/web/EventsCollectorServlet.java
@@ -112,16 +112,10 @@ public class EventsCollectorServlet extends HttpServlet {
if (sessionId == null) {
sessionId = request.getParameter("sessionId");
}
- if (sessionId == null) {
- response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Check logs for more details");
- logger.error("No sessionId found in incoming request, aborting processing. See debug level for more information");
- if (logger.isDebugEnabled()) {
- logger.debug("Request dump:" + HttpUtils.dumpRequestInfo(request));
- }
- return;
+ Session session = null;
+ if (sessionId != null) {
+ session = profileService.loadSession(sessionId, timestamp);
}
-
- Session session = profileService.loadSession(sessionId, timestamp);
Profile profile = null;
if (session == null) {
String scope = "systemscope";
@@ -137,9 +131,16 @@ public class EventsCollectorServlet extends HttpServlet {
}
}
}
- // Create non persisted profile to create the session
- profile = new Profile("temp_" + UUID.randomUUID().toString());
- profile.setProperty("firstVisit", timestamp);
+ String cookieProfileId = ServletCommon.getProfileIdCookieValue(request, profileIdCookieName);
+ if (StringUtils.isNotBlank(cookieProfileId)) {
+ profile = profileService.load(cookieProfileId);
+ }
+ if (profile == null) {
+ // Create non persisted profile to create the session
+ profile = new Profile("temp_" + UUID.randomUUID().toString());
+ profile.setProperty("firstVisit", timestamp);
+ }
+ /*
// Create anonymous profile so we don't keep track of the temp profile anywhere
Profile anonymousProfile = privacyService.getAnonymousProfile(profile);
// Create new session which should not be persisted as well as the temp profile
@@ -147,6 +148,7 @@ public class EventsCollectorServlet extends HttpServlet {
if (logger.isDebugEnabled()) {
logger.debug("No session found for sessionId={}, creating new session!", sessionId);
}
+ */
} else {
Profile sessionProfile = session.getProfile();
if (sessionProfile.getItemId() != null) {
@@ -181,7 +183,9 @@ public class EventsCollectorServlet extends HttpServlet {
profileService.save(profile);
}
if ((changes & EventService.SESSION_UPDATED) == EventService.SESSION_UPDATED) {
- profileService.saveSession(session);
+ if (session != null) {
+ profileService.saveSession(session);
+ }
}
response.setContentType("application/json");
diff --git a/wab/src/main/java/org/apache/unomi/web/ServletCommon.java b/wab/src/main/java/org/apache/unomi/web/ServletCommon.java
index da27fca..44785aa 100644
--- a/wab/src/main/java/org/apache/unomi/web/ServletCommon.java
+++ b/wab/src/main/java/org/apache/unomi/web/ServletCommon.java
@@ -85,7 +85,7 @@ public class ServletCommon {
eventToSend.getAttributes().put(Event.HTTP_REQUEST_ATTRIBUTE, request);
eventToSend.getAttributes().put(Event.HTTP_RESPONSE_ATTRIBUTE, response);
logger.debug("Received event " + event.getEventType() + " for profile=" + profile.getItemId() + " session="
- + session.getItemId() + " target=" + event.getTarget() + " timestamp=" + timestamp);
+ + (session!= null?session.getItemId():null) + " target=" + event.getTarget() + " timestamp=" + timestamp);
changes = eventService.send(eventToSend);
// If the event execution changes the profile we need to update it so the next event use the right profile
if ((changes & EventService.PROFILE_UPDATED) == EventService.PROFILE_UPDATED) {