Differentiate between interactive reports and periodically generated reports.

Only reset our accumulating counters for the periodic reports.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4219 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2006-06-25 23:03:51 +00:00
parent 091fda3e77
commit 012549d177
3 changed files with 28 additions and 14 deletions
@@ -712,7 +712,8 @@ public class PresentsDObjectMgr
} }
// documentation inherited from interface PresentsServer.Reporter // documentation inherited from interface PresentsServer.Reporter
public void appendReport (StringBuilder report, long now, long sinceLast) public void appendReport (
StringBuilder report, long now, long sinceLast, boolean reset)
{ {
report.append("* presents.PresentsDObjectMgr:\n"); report.append("* presents.PresentsDObjectMgr:\n");
int queueSize = _evqueue.size(); int queueSize = _evqueue.size();
@@ -733,9 +734,11 @@ public class PresentsDObjectMgr
} }
// roll over stats // roll over stats
_recent = _current; if (reset) {
_current = new Stats(); _recent = _current;
_current.maxQueueSize = queueSize; _current = new Stats();
_current.maxQueueSize = queueSize;
}
} }
/** /**
@@ -58,7 +58,8 @@ public class PresentsInvoker extends Invoker
} }
// documentation inherited from interface // documentation inherited from interface
public void appendReport (StringBuilder buf, long now, long sinceLast) public void appendReport (
StringBuilder buf, long now, long sinceLast, boolean reset)
{ {
buf.append("* presents.util.Invoker:\n"); buf.append("* presents.util.Invoker:\n");
int qsize = _queue.size(); int qsize = _queue.size();
@@ -66,13 +67,15 @@ public class PresentsInvoker extends Invoker
synchronized (this) { synchronized (this) {
buf.append("- Max queue size: ").append(_maxQueueSize).append("\n"); buf.append("- Max queue size: ").append(_maxQueueSize).append("\n");
buf.append("- Units executed: ").append(_unitsRun).append("\n"); buf.append("- Units executed: ").append(_unitsRun).append("\n");
_maxQueueSize = qsize;
_unitsRun = 0;
if (_currentUnit != null) { if (_currentUnit != null) {
String uname = StringUtil.safeToString(_currentUnit); String uname = StringUtil.safeToString(_currentUnit);
buf.append("- Current unit: ").append(uname).append(" "); buf.append("- Current unit: ").append(uname).append(" ");
buf.append(now-_currentUnitStart).append("ms\n"); buf.append(now-_currentUnitStart).append("ms\n");
} }
if (reset) {
_maxQueueSize = qsize;
_unitsRun = 0;
}
} }
if (PresentsDObjectMgr.UNIT_PROF_ENABLED) { if (PresentsDObjectMgr.UNIT_PROF_ENABLED) {
@@ -83,7 +86,9 @@ public class PresentsInvoker extends Invoker
} }
buf.append(" ").append(key).append(" "); buf.append(" ").append(key).append(" ");
buf.append(profile).append("\n"); buf.append(profile).append("\n");
profile.clear(); if (reset) {
profile.clear();
}
} }
} }
} }
@@ -61,9 +61,11 @@ public class PresentsServer
* epoch millis. * epoch millis.
* @param sinceLast number of milliseconds since the last time we * @param sinceLast number of milliseconds since the last time we
* generated a report. * generated a report.
* @param reset if true, all accumulating stats should be reset, if
* false they should be allowed to continue to accumulate.
*/ */
public void appendReport ( public void appendReport (
StringBuilder buffer, long now, long sinceLast); StringBuilder buffer, long now, long sinceLast, boolean reset);
} }
/** Implementers of this interface will be notified when the server is /** Implementers of this interface will be notified when the server is
@@ -135,7 +137,7 @@ public class PresentsServer
// queue up an interval which will generate reports // queue up an interval which will generate reports
new Interval(omgr) { new Interval(omgr) {
public void expired () { public void expired () {
logReport(generateReport(System.currentTimeMillis())); logReport(generateReport(System.currentTimeMillis(), true));
} }
}.schedule(REPORT_INTERVAL, true); }.schedule(REPORT_INTERVAL, true);
} }
@@ -203,7 +205,7 @@ public class PresentsServer
case SignalManager.SIGUSR1: case SignalManager.SIGUSR1:
// generate a system status report // generate a system status report
Log.info(generateReport(System.currentTimeMillis())); Log.info(generateReport(System.currentTimeMillis(), false));
break; break;
default: default:
@@ -227,7 +229,7 @@ public class PresentsServer
/** /**
* Generates and logs a "state of server" report. * Generates and logs a "state of server" report.
*/ */
protected String generateReport (long now) protected String generateReport (long now, boolean reset)
{ {
long sinceLast = now - _lastReportStamp; long sinceLast = now - _lastReportStamp;
long uptime = now - _serverStartTime; long uptime = now - _serverStartTime;
@@ -249,7 +251,7 @@ public class PresentsServer
for (int ii = 0; ii < _reporters.size(); ii++) { for (int ii = 0; ii < _reporters.size(); ii++) {
Reporter rptr = (Reporter)_reporters.get(ii); Reporter rptr = (Reporter)_reporters.get(ii);
try { try {
rptr.appendReport(report, now, sinceLast); rptr.appendReport(report, now, sinceLast, reset);
} catch (Throwable t) { } catch (Throwable t) {
Log.warning("Reporter choked [rptr=" + rptr + "]."); Log.warning("Reporter choked [rptr=" + rptr + "].");
Log.logStackTrace(t); Log.logStackTrace(t);
@@ -272,7 +274,11 @@ public class PresentsServer
report.delete(blen-1, blen); report.delete(blen-1, blen);
} }
_lastReportStamp = now; // only reset the last report time if this is a periodic report
if (reset) {
_lastReportStamp = now;
}
return report.toString(); return report.toString();
} }