diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2018-07-13 15:36:41 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2018-07-13 17:24:42 +0100 |
commit | ed3efb12d8e2173b5891e7512c2397bc661410ef (patch) | |
tree | 915441ba65dc37230c2ab13ba44ee173be384c4d | |
parent | e2a9c13006dc5447e5cda71e4d0144d63eacd61c (diff) | |
download | rspamd-ed3efb12d8e2173b5891e7512c2397bc661410ef.tar.gz rspamd-ed3efb12d8e2173b5891e7512c2397bc661410ef.zip |
[Project] Allow per bucket multipliers
-rw-r--r-- | src/plugins/lua/ratelimit.lua | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/plugins/lua/ratelimit.lua b/src/plugins/lua/ratelimit.lua index c09ebc148..f81ac4f6e 100644 --- a/src/plugins/lua/ratelimit.lua +++ b/src/plugins/lua/ratelimit.lua @@ -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}, |