diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/data.lua | 20 |
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 |
