# HG changeset patch
# User Matthew Wild <mwild1@gmail.com>
# Date 1425998695 0
# Node ID b59812aaabad8702aa9a5b50547d5b1a5aa18bfd
# Parent  738e9874a374992643a37db6c35fbe889f756e6e
mod_statistics_statsd: Module for pushing from util.statistics (0.10) to statsd

diff -r 738e9874a374 -r b59812aaabad mod_statistics_statsd/mod_statistics_statsd.lua
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_statistics_statsd/mod_statistics_statsd.lua	Tue Mar 10 14:44:55 2015 +0000
@@ -0,0 +1,36 @@
+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];
+		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