[Yanel-commits] rev 56923 - public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet

michi at wyona.com michi at wyona.com
Wed Feb 23 12:58:25 CET 2011


Author: michi
Date: 2011-02-23 12:58:25 +0100 (Wed, 23 Feb 2011)
New Revision: 56923

Modified:
   public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/AccessLog.java
   public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
Log:
thanks to Marc Schaaf annotations are also added to the access log file

Modified: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/AccessLog.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/AccessLog.java	2011-02-23 09:47:29 UTC (rev 56922)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/AccessLog.java	2011-02-23 11:58:25 UTC (rev 56923)
@@ -34,14 +34,29 @@
      * @param cookieValue Value/UUID of unique persistent cookie
      * @param referer Referer
      * @param userAgent User agent, e.g. Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.0.19) Gecko/2010031218 Firefox/3.0.19
+     * @param tags The current annotations of the page as csv 
      */
-    public static String getLogMessage(String requestURL, String realmID, String cookieValue, String referer, String userAgent) {
-        String result =
+    public static String getLogMessage(String requestURL, String realmID, String cookieValue, String referer, String userAgent, String[] tags) {
+        
+    	String tagsFlat = null;
+
+        if (tags != null && tags.length > 0) {
+            tagsFlat = "";
+            for (String m : tags) {
+                if (!tagsFlat.equals("")) tagsFlat += ",";
+                tagsFlat += m;
+            }
+        } else {
+            //log.debug("No tags!");
+        }
+    	
+    	String result =
             encodeLogField("url", requestURL) +
             encodeLogField("r", realmID) +
             encodeLogField("c", cookieValue) +
             encodeLogField("ref", referer) +
-            encodeLogField("ua", userAgent);
+            encodeLogField("ua", userAgent) + 
+            (tagsFlat != null ? encodeLogField("t", tagsFlat) : "");
 
         return result;
     }
@@ -69,24 +84,32 @@
     /**
      * Get log message
      */
-    public static String getLogMessage(HttpServletRequest request, HttpServletResponse response, String realmID) {
+    public static String getLogMessage(HttpServletRequest request, HttpServletResponse response, String realmID, String[] tags) {
         Cookie cookie = getYanelAnalyticsCookie(request, response);
-        return getLogMessage(request.getRequestURL().toString(), realmID, cookie.getValue(), request.getHeader("referer"), request.getHeader("User-Agent"));
+        return getLogMessage(getURLInclQueryString(request), realmID, cookie.getValue(), request.getHeader("referer"), request.getHeader("User-Agent"),tags);
     }
 
     /**
      * Get log message
      */
-    public static String getLogMessage(HttpServletRequest request, String realmID) {
+    public static String getLogMessage(HttpServletRequest request, String realmID, String[] tags) {
         Cookie cookie = getYanelAnalyticsCookie(request);
         String cookieValue = null;
         if (cookie != null) {
             cookieValue = cookie.getValue();
         }
-        return getLogMessage(request.getRequestURL().toString(), realmID, cookieValue, request.getHeader("referer"), request.getHeader("User-Agent"));
+        return getLogMessage(getURLInclQueryString(request), realmID, cookieValue, request.getHeader("referer"), request.getHeader("User-Agent"), tags);
     }
 
     /**
+     * Get log message
+     * @deprecated Please use getLogMessage(HttpServletRequest, String, String[]) instead
+     */
+    public static String getLogMessage(HttpServletRequest request, String realmID) {
+        return getLogMessage(request, realmID, null);
+    }
+
+    /**
      * Get Yanel analytics cookie
      * @param request Client request
      */
@@ -119,4 +142,16 @@
         response.addCookie(analyticsCookie);
         return analyticsCookie;
     }
+
+    /**
+     * Get request URL including query string
+     */
+    private static String getURLInclQueryString(HttpServletRequest request) {
+        String qs = request.getQueryString();
+        if (qs != null) {
+            return request.getRequestURL().toString() + "?" + qs;
+        } else {
+            return request.getRequestURL().toString();
+        }
+    }
 }

Modified: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2011-02-23 09:47:29 UTC (rev 56922)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2011-02-23 11:58:25 UTC (rev 56923)
@@ -41,6 +41,7 @@
 import org.wyona.yanel.core.ResourceTypeRegistry;
 import org.wyona.yanel.core.ToolbarState;
 import org.wyona.yanel.core.Yanel;
+import org.wyona.yanel.core.api.attributes.AnnotatableV1;
 import org.wyona.yanel.core.api.attributes.IntrospectableV1;
 import org.wyona.yanel.core.api.attributes.ModifiableV1;
 import org.wyona.yanel.core.api.attributes.ModifiableV2;
@@ -1127,7 +1128,7 @@
                         - Or authentication was successful and web authenticator sends a redirect
                 */
                 if(logAccessEnabled) {
-                    doLogAccess(request, response);
+                    doLogAccess(request, response, null);
                 }
                 return response;
             } else {
@@ -1919,17 +1920,20 @@
 
     /**
      * Generate response from a resource view, whereas it will be checked first if the resource already wrote the response (if so, then just return)
+     * @param res Resource which handles the request in order to generate a response
      */
     private HttpServletResponse generateResponse(View view, Resource res, HttpServletRequest request, HttpServletResponse response, Document doc, long size, long lastModified) throws ServletException, IOException {
         // TODO: There seem like no header fields are being set (e.g. Content-Length, ...). Please see below ...
 
+        //log.debug("Generate response: " + res.getPath());
+
         // Check if viewable resource has already created a response
         if (!view.isResponse()) {
             if(logAccessEnabled) {
                 if (view.getMimeType() != null) {
                     // TODO: Add more mime types or rather make it configurable
                     if (view.getMimeType().indexOf("html") > 0 || view.getMimeType().indexOf("pdf") > 0 || view.getMimeType().indexOf("video") >= 0) {
-                        doLogAccess(request, response);
+                        doLogAccess(request, response, res);
                     }
                 }
             }
@@ -1965,7 +1969,7 @@
         if(logAccessEnabled) {
             if (mimeType != null) {
                 if (mimeType.indexOf("html") > 0 || mimeType.indexOf("pdf") > 0) { // INFO: Only HTML pages and PDFs etc. should be logged, but no images, CSS, etc. Check the mime-type instead the suffix or use JavaScript or Pixel
-                    doLogAccess(request, response);
+                    doLogAccess(request, response, res);
                 }
             }
         }
@@ -2436,8 +2440,9 @@
 
     /**
      * Log browser history of each user
+     * @param resource Resource which handles the request
      */
-    private void doLogAccess(HttpServletRequest request, HttpServletResponse response) {
+    private void doLogAccess(HttpServletRequest request, HttpServletResponse response, Resource resource) {
         Cookie cookie = AccessLog.getYanelAnalyticsCookie(request, response);
         // TBD: What about a cluster, performance/scalability? See for example http://www.oreillynet.com/cs/user/view/cs_msg/17399 (also see Tomcat conf/server.xml <Valve className="AccessLogValve" and className="FastCommonAccessLogValve")
         // See apache-tomcat-5.5.20/logs/localhost_access_log.2009-11-07.txt
@@ -2446,6 +2451,21 @@
             Realm realm = map.getRealm(request.getServletPath());
             // TBD/TODO: What if user has logged out, but still has a persistent cookie?!
             //String userID = getEnvironment(request, response).getIdentity().getUsername();
+
+            String[] tags = null;
+            if (resource != null && ResourceAttributeHelper.hasAttributeImplemented(resource, "Annotatable", "1")) {
+                AnnotatableV1 anno = (AnnotatableV1) resource;
+                try {
+                    tags = anno.getAnnotations();
+                } catch (Exception ex) {
+                    log.error(ex, ex);
+                }
+            } else {
+                if (resource != null) {
+                    log.warn("DEBUG: Resource has no tags yet: " + resource.getPath());
+                }
+            }
+            
             Identity identity = getIdentity(request, map);
             if (identity != null && identity.getUsername() != null) {
                 User user = realm.getIdentityManager().getUserManager().getUser(identity.getUsername());
@@ -2470,13 +2490,13 @@
 */
 
                 String requestURL = request.getRequestURL().toString();
-                logAccess.info(AccessLog.getLogMessage(request, response, realm.getID()));
+                logAccess.info(AccessLog.getLogMessage(request, response, realm.getID(), tags));
             } else {
                 // INFO: Log access of anonymous user
                 String requestURL = request.getRequestURL().toString();
                 // TODO: Also log referer as entry point
                 //logAccess.info(requestURL + " r:" + realm.getID() + " c:" + cookie.getValue() + " ref:" + request.getHeader("referer") + " ua:" + request.getHeader("User-Agent"));
-                logAccess.info(AccessLog.getLogMessage(request, response, realm.getID()));
+                logAccess.info(AccessLog.getLogMessage(request, response, realm.getID(), tags));
             }
             //log.debug("Referer: " + request.getHeader(HTTP_REFERRER));
         } catch(Exception e) { // Catch all exceptions, because we do not want to throw exceptions because of logging browser history



More information about the Yanel-commits mailing list