Browse Source

[Minor] Move parse_time_interval to lua_util

tags/1.7.0
Vsevolod Stakhov 6 years ago
parent
commit
4fda9686da
4 changed files with 54 additions and 44 deletions
  1. 6
    1
      lualib/lua_stat.lua
  2. 41
    0
      lualib/lua_util.lua
  3. 2
    41
      lualib/rspamadm/configwizard.lua
  4. 5
    2
      lualib/rspamadm/stat_convert.lua

+ 6
- 1
lualib/lua_stat.lua View File

@@ -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


+ 41
- 0
lualib/lua_util.lua View File

@@ -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

+ 2
- 41
lualib/rspamadm/configwizard.lua View File

@@ -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

+ 5
- 2
lualib/rspamadm/stat_convert.lua View File

@@ -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

Loading…
Cancel
Save