-- A helper method that suggests a user how to configure Redis based
-- classifier based on the existing sqlite classifier
-local function redis_classifier_from_sqlite(sqlite_classifier)
+local function redis_classifier_from_sqlite(sqlite_classifier, expire)
local result = {
+ new_schema = true,
backend = 'redis',
cache = {
backend = 'redis'
}
}
+ if expire then
+ result.expire = expire
+ end
+
return {classifier = {bayes = result}}
end
exports.disable_module = disable_module
+local function parse_time_interval(str)
+ local function parse_time_suffix(s)
+ if s == 's' then
+ return 1
+ elseif s == 'm' then
+ return 60
+ elseif s == 'h' then
+ return 3600
+ elseif s == 'd' then
+ return 86400
+ elseif s == 'y' then
+ return 365 * 86400;
+ end
+ end
+
+ local lpeg = require "lpeg"
+
+ local digit = lpeg.R("09")
+ local parser = {}
+ parser.integer =
+ (lpeg.S("+-") ^ -1) *
+ (digit ^ 1)
+ parser.fractional =
+ (lpeg.P(".") ) *
+ (digit ^ 1)
+ parser.number =
+ (parser.integer *
+ (parser.fractional ^ -1)) +
+ (lpeg.S("+-") * parser.fractional)
+ parser.time = lpeg.Cf(lpeg.Cc(1) *
+ (parser.number / tonumber) *
+ ((lpeg.S("smhdy") / parse_time_suffix) ^ -1),
+ function (acc, val) return acc * val end)
+
+ local t = lpeg.match(parser.time, str)
+
+ return t
+end
+
+exports.parse_time_interval = parse_time_interval
+
return exports
changes.l.dkim_signing = {domain = domains}
end
-local function parse_time_interval(str)
- local function parse_time_suffix(s)
- if s == 's' then
- return 1
- elseif s == 'm' then
- return 60
- elseif s == 'h' then
- return 3600
- elseif s == 'd' then
- return 86400
- elseif s == 'y' then
- return 365 * 86400;
- end
- end
-
- local lpeg = require "lpeg"
-
- local digit = lpeg.R("09")
- local parser = {}
- parser.integer =
- (lpeg.S("+-") ^ -1) *
- (digit ^ 1)
- parser.fractional =
- (lpeg.P(".") ) *
- (digit ^ 1)
- parser.number =
- (parser.integer *
- (parser.fractional ^ -1)) +
- (lpeg.S("+-") * parser.fractional)
- parser.time = lpeg.Cf(lpeg.Cc(1) *
- (parser.number / tonumber) *
- ((lpeg.S("smhdy") / parse_time_suffix) ^ -1),
- function (acc, val) return acc * val end)
-
- local t = lpeg.match(parser.time, str)
-
- return t
-end
-
local function check_redis_classifier(cls, changes)
local symbol_spam, symbol_ham
-- Load symbols from statfiles
if ask_yes_no("Do you wish to convert data to the new schema?", true) then
local expire = readline_default("Expire time for new tokens [default: 100d]: ",
'100d')
- expire = parse_time_interval(expire)
+ expire = lua_util.parse_time_interval(expire)
if not lua_stat_tools.convert_bayes_schema(parsed_redis, symbol_spam, symbol_ham) then
printf("Conversion failed")
printf('You have %d sqlite classifiers', #sqlite_configs)
local expire = readline_default("Expire time for new tokens [default: 100d]: ",
'100d')
- expire = parse_time_interval(expire)
+ expire = lua_util.parse_time_interval(expire)
local reset_previous = ask_yes_no("Reset previuous data?")
if ask_yes_no('Do you wish to convert them to Redis?', true) then
local stat_tools = require "lua_stat"
local ucl = require "ucl"
local logger = require "rspamd_logger"
-
+local lua_util = require "lua_util"
return function (_, res)
local redis_params = {}
+ if res.expire then
+ res.expire = lua_util.parse_time_interval(res.expire)
+ end
if not lua_redis.try_load_redis_servers(res.redis, nil, redis_params) then
logger.errx('cannot load redis server definition')
end
logger.messagex('Converted classifier to the from sqlite to redis')
logger.messagex('Suggested configuration:')
- logger.messagex(ucl.to_format(stat_tools.redis_classifier_from_sqlite(cls),
+ logger.messagex(ucl.to_format(stat_tools.redis_classifier_from_sqlite(cls, res.expire),
'config'))
end
end