return f(name);
end
- local mark_collection_start = measure("duration", "stats.collection_time");
- local mark_processing_start = measure("duration", "stats.processing_time");
+ local mark_collection_start = measure("times", "stats.collection");
+ local mark_processing_start = measure("times", "stats.processing");
function collect()
local mark_collection_done = mark_collection_start();
+ fire_event("stats-update");
changed_stats, stats_extra = {}, {};
- for name, getter in pairs(stats.get_stats()) do
+ for stat_name, getter in pairs(stats.get_stats()) do
local type, value, extra = getter();
- local stat_name = name..":"..type;
local old_value = latest_stats[stat_name];
latest_stats[stat_name] = value;
if value ~= old_value then
changed_stats[stat_name] = value;
end
if extra then
- print(stat_name, extra)
stats_extra[stat_name] = extra;
- if type == "duration" then
- local rate = extra.rate;
- local rate_name = name..":rate";
- latest_stats[rate_name] = rate;
- changed_stats[rate_name] = rate;
- end
end
end
mark_collection_done();
end
timer.add_task(stats_interval, collect);
+ prosody.events.add_handler("server-started", function () collect() end, -1);
else
log("debug", "Statistics collection is disabled");
-- nop
get_stats = function ()
return latest_stats, changed_stats, stats_extra;
end;
+ get = function (name)
+ return latest_stats[name], stats_extra[name];
+ end;
};