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