aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/certmanager.lua2
-rw-r--r--core/hostmanager.lua1
-rw-r--r--core/moduleapi.lua5
-rw-r--r--core/portmanager.lua2
-rw-r--r--core/rostermanager.lua2
-rw-r--r--core/sessionmanager.lua4
-rw-r--r--core/statsmanager.lua67
-rw-r--r--core/storagemanager.lua2
8 files changed, 78 insertions, 7 deletions
diff --git a/core/certmanager.lua b/core/certmanager.lua
index 7ad7b034..b2c358fe 100644
--- a/core/certmanager.lua
+++ b/core/certmanager.lua
@@ -8,7 +8,7 @@
local configmanager = require "core.configmanager";
local log = require "util.logger".init("certmanager");
-local ssl = ssl;
+local ssl = _G.ssl;
local ssl_newcontext = ssl and ssl.newcontext;
local new_config = require"util.sslconfig".new;
diff --git a/core/hostmanager.lua b/core/hostmanager.lua
index ca532625..b13b1944 100644
--- a/core/hostmanager.lua
+++ b/core/hostmanager.lua
@@ -13,7 +13,6 @@ local disco_items = require "util.multitable".new();
local NULL = {};
local jid_split = require "util.jid".split;
-local uuid_gen = require "util.uuid".generate;
local log = require "util.logger".init("hostmanager");
diff --git a/core/moduleapi.lua b/core/moduleapi.lua
index 754d7497..d6aa0ef0 100644
--- a/core/moduleapi.lua
+++ b/core/moduleapi.lua
@@ -14,6 +14,7 @@ local logger = require "util.logger";
local pluginloader = require "util.pluginloader";
local timer = require "util.timer";
local resolve_relative_path = require"util.paths".resolve_relative_path;
+local measure = require "core.statsmanager".measure;
local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat;
local error, setmetatable, type = error, setmetatable, type;
@@ -390,6 +391,10 @@ function api:open_store(name, type)
return require"core.storagemanager".open(self.host, name or self.name, type);
end
+function api:measure(name, type)
+ return measure(type, "/"..self.host.."/mod_"..self.name.."/"..name);
+end
+
function api.init(mm)
modulemanager = mm;
return api;
diff --git a/core/portmanager.lua b/core/portmanager.lua
index bc2d4264..eab2412a 100644
--- a/core/portmanager.lua
+++ b/core/portmanager.lua
@@ -9,7 +9,7 @@ local set = require "util.set";
local table = table;
local setmetatable, rawset, rawget = setmetatable, rawset, rawget;
-local type, tonumber, tostring, ipairs, pairs = type, tonumber, tostring, ipairs, pairs;
+local type, tonumber, tostring, ipairs = type, tonumber, tostring, ipairs;
local prosody = prosody;
local fire_event = prosody.events.fire_event;
diff --git a/core/rostermanager.lua b/core/rostermanager.lua
index 5266afb5..8c7612b4 100644
--- a/core/rostermanager.lua
+++ b/core/rostermanager.lua
@@ -15,7 +15,7 @@ local pairs = pairs;
local tostring = tostring;
local hosts = hosts;
-local bare_sessions = bare_sessions;
+local bare_sessions = prosody.bare_sessions;
local datamanager = require "util.datamanager"
local um_user_exists = require "core.usermanager".user_exists;
diff --git a/core/sessionmanager.lua b/core/sessionmanager.lua
index 65e5156c..09920b7d 100644
--- a/core/sessionmanager.lua
+++ b/core/sessionmanager.lua
@@ -10,8 +10,8 @@ local tostring, setmetatable = tostring, setmetatable;
local pairs, next= pairs, next;
local hosts = hosts;
-local full_sessions = full_sessions;
-local bare_sessions = bare_sessions;
+local full_sessions = prosody.full_sessions;
+local bare_sessions = prosody.bare_sessions;
local logger = require "util.logger";
local log = logger.init("sessionmanager");
diff --git a/core/statsmanager.lua b/core/statsmanager.lua
new file mode 100644
index 00000000..62d217ef
--- /dev/null
+++ b/core/statsmanager.lua
@@ -0,0 +1,67 @@
+
+local stats = require "util.statistics".new();
+local config = require "core.configmanager";
+local log = require "util.logger".init("stats");
+local timer = require "util.timer";
+local fire_event = prosody.events.fire_event;
+
+local stats_config = config.get("*", "statistics_interval");
+local stats_interval = tonumber(stats_config);
+if stats_config and not stats_interval then
+ log("error", "Invalid 'statistics_interval' setting, statistics will be disabled");
+end
+
+local measure, collect;
+local latest_stats = {};
+local changed_stats = {};
+local stats_extra = {};
+
+if stats_interval then
+ log("debug", "Statistics collection is enabled every %d seconds", stats_interval);
+ function measure(type, name)
+ local f = assert(stats[type], "unknown stat type: "..type);
+ return f(name);
+ end
+
+ 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();
+ changed_stats, stats_extra = {}, {};
+ for stat_name, getter in pairs(stats.get_stats()) do
+ local type, value, extra = getter();
+ 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
+ stats_extra[stat_name] = extra;
+ end
+ end
+ mark_collection_done();
+ local mark_processing_done = mark_processing_start();
+ fire_event("stats-updated", { stats = latest_stats, changed_stats = changed_stats, stats_extra = stats_extra });
+ mark_processing_done();
+ return stats_interval;
+ end
+
+ timer.add_task(stats_interval, collect);
+else
+ log("debug", "Statistics collection is disabled");
+ -- nop
+ function measure()
+ return measure;
+ end
+ function collect()
+ end
+end
+
+return {
+ measure = measure;
+ collect = collect;
+ get_stats = function ()
+ return latest_stats, changed_stats, stats_extra;
+ end;
+};
diff --git a/core/storagemanager.lua b/core/storagemanager.lua
index b2ad29d0..d16bdce5 100644
--- a/core/storagemanager.lua
+++ b/core/storagemanager.lua
@@ -1,5 +1,5 @@
-local error, type, pairs = error, type, pairs;
+local type, pairs = type, pairs;
local setmetatable = setmetatable;
local config = require "core.configmanager";