Warning: session_start(): open(/var/lib/php/sessions/sess_k7fftjpbl83q4ee0oa47vaddfv, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
module SteadyBeat extends DynBigNumber {
S priority = 'max;
int interval = 50, showInterval = 1000;
int reportFrom = 75; // pause must be this long to be reported
Map reportedPauses = synchroMap();
sclass Pause {
long count, lastSeen;
}
transient long lastTick;
transient long count, maxDelaySeen, averageSum;
transient long anomalies;
start {
doEvery_maxPriority(interval, r tick);
doEvery(showInterval, r show);
}
void show enter {
//setDescription("MAX/AVG TICK DELAY (TARGET: " + interval + " MS)");
//setValue(maxDelaySeen + "/" + average();
setDescription("ANOMALIES/MAX TICK DELAY (TARGET: " + interval + " MS)");
setValue(anomalies + "/" + maxDelaySeen + " ms");
}
void tick enter {
long now = sysNow();
if (lastTick != 0) {
long delay = now-lastTick;
maxDelaySeen = max(maxDelaySeen, delay);
++count;
averageSum += delay;
if (delay >= reportFrom) {
anomalies++;
long rounded = (delay+interval-1)/interval; // round up to next multiple of target interval (50, 100, 150, ...)
Pause p = reportedPauses.get(rounded);
if (p == null) reportedPauses.put(rounded, p = new Pause);
p.lastSeen = now;
p.count++;
}
}
lastTick = now;
}
// API
long average() {
ret (averageSum+count/2)/count;
}
}