view mod_statistics_statsd/mod_statistics_statsd.lua @ 3902:341850e8866f

mod_muc_moderation: Broadcast retraction via method that saves it Otherwise the retraction is not saved to history, so that those who join after it was sent are unaware of the retraction
author Kim Alvefur <zash@zash.se>
date Sat, 22 Feb 2020 21:41:31 +0100
parents 98a186874806
children
line wrap: on
line source

local statsmanager = require "core.statsmanager";
local udp = require "socket".udp();

local server = module:get_option_string("statsd_server_ip", "127.0.0.1");
local server_port = module:get_option_number("statsd_server_port", 8124);
local max_datagram_size = module:get_option_number("statds_packet_size", 512);

function push_stats(stats, meta)
	local metric_strings, remaining_bytes = {}, max_datagram_size;
	for name, value in pairs(stats) do
		local value_meta = meta[name];
		module:log("warn", "%s %s", name, tostring(value_meta));
		--if not value_meta then
			-- Simple value (gauge)
			local metric_string = ("%s|%d|g"):format(name, value);
			if #metric_string > remaining_bytes then
				udp:sendto(table.concat(metric_strings, "\n"), server, server_port);
				metric_strings, remaining_bytes = {}, max_datagram_size;
			end
			table.insert(metric_strings, metric_string);
			remaining_bytes = remaining_bytes - (#metric_string + 1); -- +1 for newline
		--end
	end
	if #metric_strings > 0 then
		udp:sendto(table.concat(metric_strings, "\n"), server, server_port);
	end
end

module:hook_global("stats-updated", function (event)
	push_stats(event.changed_stats, event.stats_extra);
end);

function module.load()
	local all, changed, extra = statsmanager.get_stats();
	push_stats(all, extra);
end