mod_pubsub_stats/mod_pubsub_stats.lua
author Kim Alvefur <zash@zash.se>
Tue, 29 May 2018 05:34:05 +0200
changeset 3072 380f92276e57
parent 3071 b01ef74c9fc0
child 3161 8a870e0319db
permissions -rw-r--r--
mod_pubsub_stats: Make the node used configurable
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3071
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
local st = require "util.stanza";
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
local dt = require "util.datetime";
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
local pubsub = module:depends"pubsub";
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
local actor = module.host .. "/modules/" .. module.name;
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
3072
380f92276e57 mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents: 3071
diff changeset
     8
local node = module:get_option_string(module.name .. "_node", "stats");
380f92276e57 mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents: 3071
diff changeset
     9
3071
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
local function publish_stats(stats, stats_extra)
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
	local id = "current";
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
	local xitem = st.stanza("item", { id = id })
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
		:tag("query", { xmlns = "http://jabber.org/protocol/stats" });
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
	for name, value in pairs(stats) do
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
		local stat_extra = stats_extra[name];
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
		local unit = stat_extra and stat_extra.units;
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
		xitem:tag("stat", { name = name, unit = unit, value = tostring(value) }):up();
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
	end
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
3072
380f92276e57 mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents: 3071
diff changeset
    21
	local ok, err = pubsub.service:publish(node, actor, id, xitem);
3071
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
	if not ok then
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
		module:log("error", "Error publishing stats: %s", err);
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
	end
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
end
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
function module.load()
3072
380f92276e57 mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents: 3071
diff changeset
    28
	pubsub.service:create(node, true);
380f92276e57 mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents: 3071
diff changeset
    29
	pubsub.service:set_affiliation(node, true, actor, "publisher");
3071
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
end
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
module:hook_global("stats-updated", function (event)
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
	publish_stats(event.stats, event.stats_extra);
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
end);
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
function module.unload()
3072
380f92276e57 mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents: 3071
diff changeset
    37
	pubsub.service:delete(node, true);
3071
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
end