aboutsummaryrefslogtreecommitdiffstats
path: root/lib/data.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lib/data.lua')
-rw-r--r--lib/data.lua20
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/data.lua b/lib/data.lua
index 4b31f43..7ae96a7 100644
--- a/lib/data.lua
+++ b/lib/data.lua
@@ -631,6 +631,26 @@ function M.immich_parse(text)
return out
end
+-- A sampling gate for counters that are read per draw. The dashboard draws
+-- every 0.1s while it is on screen, and a CPU or byte counter sampled that
+-- often gives coarse, flickering deltas, so those cards sample on this gate
+-- and redraw their last values in between.
+--
+-- The returned function answers true at most once per `every` seconds, plus
+-- the clock it used: /proc/uptime, because os.time() counts whole seconds and
+-- a rate divided by a rounded interval is off by up to half. `now` is for the
+-- test. An unreadable clock opens the gate, which is the old per-draw behaviour.
+function M.new_gate(every)
+ local last
+ return function(now)
+ now = now or tonumber((M.slurp('/proc/uptime') or ''):match('^(%S+)'))
+ if not now then return true, nil end
+ if last and now - last < every then return false, now end
+ last = now
+ return true, now
+ end
+end
+
-- nvtable's plain table (`nvtable -C -E`), as bin/updates-sample.sh caches it:
--
-- [personal] foo-bin 1.14.9 -> 1.14.9 !! ~ 1.14.10