We can have much more clear information if we store the real action in case of `soft-reject`. In this case, we can just imply that a module that has set this action is an action itself, such as: * greylist * ratelimit * multimap * antivirus rule name This policy seems quite reasonable, as `soft reject` has no meaning on its own.tags/3.5
@@ -186,4 +186,23 @@ exports.describe = function(verdict, what) | |||
return nil | |||
end | |||
---[[[ | |||
-- @function lua_verdict.adjust_passthrough_action(task) | |||
-- If an action is `soft reject` then this function extracts a module that has set this action | |||
-- and returns an adjusted action (e.g. 'greylist' or 'ratelimit'). | |||
-- Otherwise an action is returned as is. | |||
--]] | |||
exports.adjust_passthrough_action = function(task) | |||
local action = task:get_metric_action() | |||
if action == 'soft reject' then | |||
local has_pr,_,_,module = task:has_pre_result() | |||
if has_pr and module then | |||
action = module | |||
end | |||
end | |||
return action | |||
end | |||
return exports |
@@ -47,6 +47,7 @@ local lua_redis = require "lua_redis" | |||
local fun = require "fun" | |||
local ucl = require "ucl" | |||
local ts = (require "tableshape").types | |||
local lua_verdict = require "lua_verdict" | |||
local E = {} | |||
local N = "history_redis" | |||
local hostname = rspamd_util.get_hostname() | |||
@@ -109,6 +110,7 @@ local function normalise_results(tbl, task) | |||
tbl.rmilter = nil | |||
tbl.messages = nil | |||
tbl.urls = nil | |||
tbl.action = lua_verdict.adjust_passthrough_action(task) | |||
local seconds = task:get_timeval()['tv_sec'] | |||
tbl.unix_time = seconds | |||
@@ -148,8 +150,8 @@ local function history_save(task) | |||
rspamd_logger.errx('cannot get protocol reply, skip saving in history') | |||
return | |||
end | |||
-- 1 is 'json-compact' but faster | |||
local json = ucl.to_format(data, 1) | |||
local json = ucl.to_format(data, 'json-compact') | |||
if settings.compress then | |||
json = rspamd_util.zstd_compress(json) |