r1036 - in xwiki/trunk/src/main/java/com/xpn/xwiki: monitor/api render

Ludovic Dubost ludovic at users.forge.objectweb.org
Sun Apr 9 14:03:53 CEST 2006


Author: ludovic
Date: 2006-04-09 14:03:53 +0200 (Sun, 09 Apr 2006)
New Revision: 1036

Modified:
   xwiki/trunk/src/main/java/com/xpn/xwiki/monitor/api/MonitorData.java
   xwiki/trunk/src/main/java/com/xpn/xwiki/monitor/api/MonitorPlugin.java
   xwiki/trunk/src/main/java/com/xpn/xwiki/render/XWikiRenderingEngine.java
Log:
Added reporting on the render caching status in the context
Changed MonitorPlugin to report detailed data even if details is null in startTimer()
Added reset function in MonitorPlugin


Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/monitor/api/MonitorData.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/monitor/api/MonitorData.java	2006-04-09 11:56:20 UTC (rev 1035)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/monitor/api/MonitorData.java	2006-04-09 12:03:53 UTC (rev 1036)
@@ -133,7 +133,7 @@
     }
 
     public void startTimer(String timername) {
-        startTimer(timername, null);
+        startTimer(timername, "");
     }
 
     public void setTimerDetails(String timername, String details) {

Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/monitor/api/MonitorPlugin.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/monitor/api/MonitorPlugin.java	2006-04-09 11:56:20 UTC (rev 1035)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/monitor/api/MonitorPlugin.java	2006-04-09 12:03:53 UTC (rev 1036)
@@ -51,11 +51,19 @@
 
     public void init(XWikiContext context) {
         super.init(context);
+        reset(context);
+        long iActive = context.getWiki().ParamAsLong("xwiki.monitor", 1);
+        setActive((iActive>0));
+    }
+
+    public void reset(XWikiContext context) {
+        timerSummaries = new HashMap();
+        activeTimerDataList = new HashMap();
+        duration = 0;
+        nbrequests = 0;
         long size = context.getWiki().ParamAsLong("xwiki.monitor.lastlistsize", 20);
         lastTimerDataList = new CircularFifoBuffer((int)size);
         lastUnfinishedTimerDataList = new CircularFifoBuffer((int)size);
-        long iActive = context.getWiki().ParamAsLong("xwiki.monitor", 1);
-        setActive((iActive>0));
     }
 
     public String getName() {

Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/render/XWikiRenderingEngine.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/render/XWikiRenderingEngine.java	2006-04-09 11:56:20 UTC (rev 1035)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/render/XWikiRenderingEngine.java	2006-04-09 12:03:53 UTC (rev 1036)
@@ -41,7 +41,7 @@
 
     private List renderers = new ArrayList();
     private HashMap renderermap = new LinkedHashMap();
-    private XWikiCache cache = new OSCacheCache();
+    private XWikiCache cache = new OSCacheCache(100);
 
     public XWikiRenderingEngine(XWiki xwiki, XWikiContext context) throws XWikiException {
         if (xwiki.Param("xwiki.render.macromapping", "0").equals("1"))
@@ -112,85 +112,110 @@
         return renderText(text, includingdoc, includingdoc, context);
     }
 
+    public void addToCached(String key, XWikiContext context) {
+        List cached = (ArrayList) context.get("render_cached");
+        if (cached==null) {
+            cached = new ArrayList();
+            context.put("render_cached", cached);
+        }
+        cached.add(key);
+    }
+
+    public void addToRefreshed(String key, XWikiContext context) {
+        List cached = (ArrayList) context.get("render_refreshed");
+        if (cached==null) {
+            cached = new ArrayList();
+            context.put("render_refreshed", cached);
+        }
+        cached.add(key);
+    }
+
     public String renderText(String text, XWikiDocument contentdoc, XWikiDocument includingdoc, XWikiContext context) {
         String key = getKey(text, contentdoc, includingdoc, context);
-        try {
-            XWikiRenderingCache cacheObject = null;
+        synchronized (key) {
             try {
-                cacheObject = (XWikiRenderingCache) cache.getFromCache(key);
-            } catch (XWikiCacheNeedsRefreshException e2) {
-                cache.cancelUpdate(key);
+                XWikiRenderingCache cacheObject = null;
+                try {
+                    cacheObject = (XWikiRenderingCache) cache.getFromCache(key);
+                } catch (XWikiCacheNeedsRefreshException e2) {
+                    cache.cancelUpdate(key);
+                }
+                if (cacheObject!=null) {
+                    XWikiRequest request = context.getRequest();
+                    boolean refresh = (request!=null) && ("1".equals(request.get("refresh")));
+                    if ((cacheObject.isValid()&&(!refresh))) {
+                        addToCached(key, context);
+                        return cacheObject.getContent();
+                    } else {
+                        addToRefreshed(key, context);
+                    }
+                }
+            } catch (Exception e) {
             }
-            if ((cacheObject!=null)&&cacheObject.isValid()) {
-                XWikiRequest request = context.getRequest();
-                boolean refresh = "1".equals((request!=null) ? request.get("refresh") : "");
-                if (!refresh)
-                 return cacheObject.getContent();
-            }
-        } catch (Exception e) {
-        }
 
-        MonitorPlugin monitor  = Util.getMonitorPlugin(context);
-        try {
-            // Start monitoring timer
-            if (monitor!=null)
-             monitor.startTimer("rendering");
+            MonitorPlugin monitor  = Util.getMonitorPlugin(context);
+            try {
+                // Start monitoring timer
+                if (monitor!=null)
+                    monitor.startTimer("rendering");
 
-        XWikiDocument doc = context.getDoc();
-        XWikiDocument cdoc = context.getDoc();
+                XWikiDocument doc = context.getDoc();
+                XWikiDocument cdoc = context.getDoc();
 
-        // Let's call the beginRendering loop
-        context.getWiki().getPluginManager().beginRendering(context);
+                // Let's call the beginRendering loop
+                context.getWiki().getPluginManager().beginRendering(context);
 
-        String content = text;
+                String content = text;
 
-        // Which is the current idoc and sdoc
-        XWikiDocument idoc = (XWikiDocument) context.get("idoc");
-        XWikiDocument sdoc = (XWikiDocument) context.get("sdoc");
-        // We put the including and security doc in the context
-        // It will be needed to verify programming rights
-        context.put("idoc", includingdoc);
-        context.put("sdoc", contentdoc);
+                // Which is the current idoc and sdoc
+                XWikiDocument idoc = (XWikiDocument) context.get("idoc");
+                XWikiDocument sdoc = (XWikiDocument) context.get("sdoc");
+                // We put the including and security doc in the context
+                // It will be needed to verify programming rights
+                context.put("idoc", includingdoc);
+                context.put("sdoc", contentdoc);
 
-        try {
+                try {
 
-            for (int i=0;i<renderers.size();i++)
-                content = ((XWikiRenderer)renderers.get(i)).render(content, contentdoc, includingdoc, context);
-        } finally {
-            // Remove including doc or set the previous one
-            if (idoc==null)
-             context.remove("idoc");
-            else
-             context.put("idoc", idoc);
+                    for (int i=0;i<renderers.size();i++)
+                        content = ((XWikiRenderer)renderers.get(i)).render(content, contentdoc, includingdoc, context);
+                } finally {
+                    // Remove including doc or set the previous one
+                    if (idoc==null)
+                        context.remove("idoc");
+                    else
+                        context.put("idoc", idoc);
 
-            // Remove security doc or set the previous one
-            if (sdoc==null)
-             context.remove("sdoc");
-            else
-             context.put("sdoc", sdoc);
+                    // Remove security doc or set the previous one
+                    if (sdoc==null)
+                        context.remove("sdoc");
+                    else
+                        context.put("sdoc", sdoc);
 
-            // Let's call the endRendering loop
-            context.getWiki().getPluginManager().endRendering(context);
-        }
+                    // Let's call the endRendering loop
+                    context.getWiki().getPluginManager().endRendering(context);
+                }
 
-         try {
-          int cacheDuration = context.getCacheDuration();
-          if (cacheDuration>0) {
-             XWikiRenderingCache cacheObject = new XWikiRenderingCache(key, content, cacheDuration, new Date());
-             cache.putInCache(key, (Object)cacheObject);
-           }
-         } catch (Exception e) {}
-         return content;
+                try {
+                    int cacheDuration = context.getCacheDuration();
+                    if (cacheDuration>0) {
+                        XWikiRenderingCache cacheObject = new XWikiRenderingCache(key, content, cacheDuration, new Date());
+                        cache.putInCache(key, (Object)cacheObject);
+                    }
+                } catch (Exception e) {}
+                return content;
+            }
+            finally {
+                if (monitor!=null)
+                    monitor.endTimer("rendering");
+            }
         }
-        finally {
-               if (monitor!=null)
-                   monitor.endTimer("rendering");
-        }
     }
 
     private String getKey(String text, XWikiDocument contentdoc, XWikiDocument includingdoc, XWikiContext context) {
         return context.getDatabase() + "-" + contentdoc.getDatabase() + ":" + contentdoc.getFullName() + "-"
-                + includingdoc.getDatabase() + ":" + includingdoc.getFullName() + "-" + text.hashCode();
+                + includingdoc.getDatabase() + ":" + includingdoc.getFullName() + "-" + context.getRequest().getQueryString()
+                + "-" + text.hashCode();
     }
 
     public void flushCache() {





More information about the Xwiki-notifications mailing list