new object $lag_watcher: $utilities;
var $lag_watcher lags = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var $lag_watcher last_time = 872013833;
var $root created_on = 796268969;
var $root flags = ['methods, 'code, 'variables, 'core];
var $root inited = 1;
var $root managed = [$lag_watcher];
var $root manager = $lag_watcher;
public method .lag() {
var lag, total, weight, lag_i, lag_d;
// the current lag floated
total = 0;
weight = 0;
for lag in (lags) {
++weight;
total += lag * weight;
}
lag_i = total / 55;
lag_d = tostr(((total - (lag_i * 55)) * 10) / 55).subrange(1, 1);
return (tostr(lag_i) + ".") + lag_d;
};
public method .lag_str() {
return ("Current server lag is " + (.lag())) + " seconds.";
};
public method .pulse() {
var lag;
// Called by $heart every 15 seconds
(> .perms(sender(), $heart) <);
lag = time() - last_time;
last_time = time();
.update(lag);
};
public method .shutdown() {
// Called by $sys.shutdown();
(> .perms(sender(), 'manager) <);
$heart.del_heartbeat();
last_time = 0;
lags = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
};
public method .startup() {
arg @args;
// Called by $sys.startup()
(> .perms(sender(), 'manager) <);
lags = [];
last_time = time();
$heart.add_heartbeat(14);
};
protected method .update() {
arg lag;
// Called by .pulse() every 15 minutes
if (type(lags) != 'list)
lags = [];
while ((lags.length()) > 9)
lags = lags.delete(1);
lag = (lag > 15) ? (lag - 15) : 0;
lags += [lag];
};
public method .value() {
var lag, total, weight, lag_i;
// unparsed lag value
total = 0;
weight = 0;
for lag in (lags) {
++weight;
total += lag * weight;
}
lag_i = total / 55;
return lag_i;
};
public method .verbose_lag_str() {
// returns lag as a string with verbosity
return [("Current server lag is " + (.lag())) + " seconds.", toliteral(lags)];
};