Browse Source

[Project] Allow per bucket multipliers

tags/1.7.9
Vsevolod Stakhov 5 years ago
parent
commit
ed3efb12d8
1 changed files with 14 additions and 14 deletions
  1. 14
    14
      src/plugins/lua/ratelimit.lua

+ 14
- 14
src/plugins/lua/ratelimit.lua View File

@@ -453,17 +453,18 @@ local function ratelimit_cb(task)
rspamd_logger.infox(task,
'set_symbol_only: ratelimit "%s(%s)" exceeded, (%s / %s): %s (%s:%s dyn)',
lim_name, prefix,
bucket[2], bucket[1],
bucket.burst, bucket.rate,
data[2], data[3], data[4])
return
-- set INFO symbol and soft reject
elseif settings.info_symbol then
task:insert_result(settings.info_symbol, 1.0, lim_name .. "(" .. prefix .. ")")
task:insert_result(settings.info_symbol, 1.0,
lim_name .. "(" .. prefix .. ")")
end
rspamd_logger.infox(task,
'ratelimit "%s(%s)" exceeded, (%s / %s): %s (%s:%s dyn)',
lim_name, prefix,
bucket[2], bucket[1],
bucket.burst, bucket.rate,
data[2], data[3], data[4])
task:set_pre_result('soft reject',
message_func(task, lim_name, prefix, bucket))
@@ -485,11 +486,11 @@ local function ratelimit_cb(task)
local bucket = value.bucket
local rate = (bucket[1]) / 1000.0 -- Leak rate in messages/ms
rspamd_logger.debugm(N, task, "check limit %s:%s -> %s (%s/%s)",
value.name, pr, value.hash, bucket[2], bucket[1])
value.name, pr, value.hash, bucket.burst, bucket.rate)
lua_redis.exec_redis_script(bucket_check_id,
{key = value.hash, task = task, is_write = true},
gen_check_cb(pr, bucket, value.name),
{value.hash, tostring(now), tostring(rate), tostring(bucket[2]),
{value.hash, tostring(now), tostring(rate), tostring(bucket.burst),
tostring(settings.expire)})
end
end
@@ -510,14 +511,6 @@ local function ratelimit_update_cb(task)
is_spam = false
end

local mult_burst = settings.ham_factor_burst
local mult_rate = settings.ham_factor_burst

if is_spam then
mult_burst = settings.spam_factor_burst
mult_rate = settings.spam_factor_rate
end

-- Update each bucket
for k, v in pairs(prefixes) do
local bucket = v.bucket
@@ -529,12 +522,19 @@ local function ratelimit_update_cb(task)
rspamd_logger.debugm(N, task,
"updated limit %s:%s -> %s (%s/%s), burst: %s, dyn_rate: %s, dyn_burst: %s",
v.name, k, v.hash,
bucket[2], bucket[1],
bucket.burst, bucket.rate,
data[1], data[2], data[3])
end
end
local now = rspamd_util.get_time()
now = lua_util.round(now * 1000.0) -- Get milliseconds
local mult_burst = bucket.ham_factor_burst or 1.0
local mult_rate = bucket.ham_factor_burst or 1.0

if is_spam then
mult_burst = bucket.spam_factor_burst or 1.0
mult_rate = bucket.spam_factor_rate or 1.0
end

lua_redis.exec_redis_script(bucket_update_id,
{key = v.hash, task = task, is_write = true},

Loading…
Cancel
Save