# HG changeset patch # User Kim Alvefur # Date 1546581405 -3600 # Node ID d75d805c852fcab5782de054e60d93937f8f1dab # Parent 1999bb052d49b9958fc8d37a2c33e17b3119a9be 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. diff -r 1999bb052d49 -r d75d805c852f 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;