else
return {0, 0, 0}
end
- end):totable()
+ end):totable()
end
local function generate_format_string(args, is_set)
--- Called when value is got from server
local function rate_get_cb(task, err, data)
if data then
- local tv = task:get_timeval()
- local ntime = tv['tv_usec'] / 1000000. + tv['tv_sec']
+ local ntime = rspamd_util.get_time()
_.each(function(elt, limit)
local bucket = elt[2]
local atime = elt[1]
local ctime = elt[3]
+ if atime == 0 then return end
+
if atime - ctime > max_delay then
rspamd_logger.infox(task, 'limit is too old: %1 seconds; ignore it',
atime - ctime)
local function rate_set_cb(task, err, data)
if data then
- local tv = task:get_timeval()
- local ntime = tv['tv_usec'] / 1000000. + tv['tv_sec']
+ local ntime = rspamd_util.get_time()
local values = {}
_.each(function(elt, limit)
local bucket = elt[2]
local ctime = elt[3]
if atime - ctime > max_delay then
- bucket = 1
- ctime = atime
rspamd_logger.infox(task, 'limit is too old: %1 seconds; start it over',
atime - ctime)
+ bucket = 1
+ ctime = ntime
+ atime = ntime
else
if bucket > 0 then
bucket = bucket - rate * (ntime - atime) + 1;
end
end
+ if ctime == 0 then ctime = ntime end
+
local lstr = string.format('%.3f:%.3f:%.3f', ntime, bucket, ctime)
table.insert(values, {limit[2], max_delay, lstr})
end, _.zip(parse_limits(data), _.iter(args)))