util.statistics: Unify API of methods to include a config table
authorKim Alvefur <zash@zash.se>
Fri, 04 Jan 2019 06:56:45 +0100
changeset 10887 d75d805c852f
parent 10886 1999bb052d49
child 10888 6992c4be1a19
util.statistics: Unify API of methods to include a config table The primary goal here is to allow specifying an unit that each statistic is measured in.
util/statistics.lua
--- a/util/statistics.lua	Wed Jun 03 19:10:42 2020 +0200
+++ b/util/statistics.lua	Fri Jan 04 06:56:45 2019 +0100
@@ -44,19 +44,23 @@
 	local registry = {};
 	local methods;
 	methods = {
-		amount = function (name, initial)
-			local v = initial or 0;
-			registry[name..":amount"] = function () return "amount", v; end
+		amount = function (name, conf)
+			local v = conf and conf.initial or 0;
+			registry[name..":amount"] = function ()
+				return "amount", v, conf;
+			end
 			return function (new_v) v = new_v; end
 		end;
-		counter = function (name, initial)
-			local v = initial or 0;
-			registry[name..":amount"] = function () return "amount", v; end
+		counter = function (name, conf)
+			local v = conf and conf.initial or 0;
+			registry[name..":amount"] = function ()
+				return "amount", v, conf;
+			end
 			return function (delta)
 				v = v + delta;
 			end;
 		end;
-		rate = function (name)
+		rate = function (name, conf)
 			local since, n, total = time(), 0, 0;
 			registry[name..":rate"] = function ()
 				total = total + n;
@@ -65,6 +69,8 @@
 					rate = n/(t-since);
 					count = n;
 					total = total;
+					units = conf and conf.units;
+					type = conf and conf.type;
 				};
 				since, n = t, 0;
 				return "rate", stats.rate, stats;
@@ -73,15 +79,16 @@
 				n = n + 1;
 			end;
 		end;
-		distribution = function (name, unit, type)
-			type = type or "distribution";
+		distribution = function (name, conf)
+			local units = conf and conf.units;
+			local type = conf and conf.type or "distribution";
 			local events, last_event = {}, 0;
 			local n_actual_events = 0;
 			local since = time();
 
 			registry[name..":"..type] = function ()
 				local new_time = time();
-				local stats = get_distribution_stats(events, n_actual_events, since, new_time, unit);
+				local stats = get_distribution_stats(events, n_actual_events, since, new_time, units);
 				events, last_event = {}, 0;
 				n_actual_events = 0;
 				since = new_time;
@@ -96,17 +103,19 @@
 				end
 			end;
 		end;
-		sizes = function (name)
-			return methods.distribution(name, "bytes", "size");
+		sizes = function (name, conf)
+			conf = conf or { units = "bytes", type = "size" }
+			return methods.distribution(name, conf);
 		end;
-		times = function (name)
+		times = function (name, conf)
+			local units = conf and conf.units or "seconds";
 			local events, last_event = {}, 0;
 			local n_actual_events = 0;
 			local since = time();
 
 			registry[name..":duration"] = function ()
 				local new_time = time();
-				local stats = get_distribution_stats(events, n_actual_events, since, new_time, "seconds");
+				local stats = get_distribution_stats(events, n_actual_events, since, new_time, units);
 				events, last_event = {}, 0;
 				n_actual_events = 0;
 				since = new_time;