From 4fda9686da8300e8f187ae784819f8eb040846e5 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Fri, 23 Feb 2018 14:13:58 +0000 Subject: [PATCH] [Minor] Move parse_time_interval to lua_util --- lualib/lua_stat.lua | 7 +++++- lualib/lua_util.lua | 41 ++++++++++++++++++++++++++++++ lualib/rspamadm/configwizard.lua | 43 ++------------------------------ lualib/rspamadm/stat_convert.lua | 7 ++++-- 4 files changed, 54 insertions(+), 44 deletions(-) diff --git a/lualib/lua_stat.lua b/lualib/lua_stat.lua index a5987f9da..d3a435554 100644 --- a/lualib/lua_stat.lua +++ b/lualib/lua_stat.lua @@ -479,8 +479,9 @@ exports.load_sqlite_config = load_sqlite_config -- 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' @@ -495,6 +496,10 @@ local function redis_classifier_from_sqlite(sqlite_classifier) } } + if expire then + result.expire = expire + end + return {classifier = {bayes = result}} end diff --git a/lualib/lua_util.lua b/lualib/lua_util.lua index f7e92937d..729e73a5f 100644 --- a/lualib/lua_util.lua +++ b/lualib/lua_util.lua @@ -215,4 +215,45 @@ 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 diff --git a/lualib/rspamadm/configwizard.lua b/lualib/rspamadm/configwizard.lua index 14e066939..8607cdc1e 100644 --- a/lualib/rspamadm/configwizard.lua +++ b/lualib/rspamadm/configwizard.lua @@ -291,45 +291,6 @@ local function setup_dkim_signing(cfg, changes) 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 @@ -373,7 +334,7 @@ local function check_redis_classifier(cls, changes) 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") @@ -432,7 +393,7 @@ local function setup_statistic(cfg, changes) 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 diff --git a/lualib/rspamadm/stat_convert.lua b/lualib/rspamadm/stat_convert.lua index 6ad3b0332..230dc3f3f 100644 --- a/lualib/rspamadm/stat_convert.lua +++ b/lualib/rspamadm/stat_convert.lua @@ -2,10 +2,13 @@ local lua_redis = require "lua_redis" 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') @@ -29,7 +32,7 @@ return function (_, res) 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 -- 2.39.5