[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