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:25 UTC

[unomi] branch UNOMI-285-optional-sessions created (now 7e9226a)

This is an automated email from the ASF dual-hosted git repository.

shuber pushed a change to branch UNOMI-285-optional-sessions
in repository https://gitbox.apache.org/repos/asf/unomi.git.


      at 7e9226a  UNOMI-285 Make sessions optional in eventcollector and contextservlet

This branch includes the following new commits:

     new 7e9226a  UNOMI-285 Make sessions optional in eventcollector and contextservlet

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[unomi] 01/01: UNOMI-285 Make sessions optional in eventcollector and contextservlet

Posted by sh...@apache.org.
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) {