Mercurial > prosody-hg
view util/throttle.lua @ 14228:84a72e9cb610
util.prosodyctl.check: Print expected TLSA records in consistent format
Same as util.dns now.
Question is if this is easy to copy-paste into DNS editors.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 12 Jun 2026 23:09:09 +0200 |
| parents | d649d011df45 |
| children |
line wrap: on
line source
local time_now = require "prosody.util.time".now; local setmetatable = setmetatable; local _ENV = nil; -- luacheck: std none local throttle = {}; local throttle_mt = { __index = throttle }; function throttle:update() local newt = time_now(); local elapsed = newt - self.t; self.t = newt; local balance = (self.rate * elapsed) + self.balance; if balance > self.max then self.balance = self.max; else self.balance = balance; end return self.balance; end function throttle:peek(cost) cost = cost or 1; return self.balance >= cost or self:update() >= cost; end function throttle:poll(cost, split) if self:peek(cost) then self.balance = self.balance - cost; return true; else local balance = self.balance; if split then self.balance = 0; end return false, balance, (cost-balance); end end local function create(max, period) return setmetatable({ rate = max / period, max = max, t = time_now(), balance = max }, throttle_mt); end return { create = create; };
