]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Move parse_time_interval to lua_util
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 23 Feb 2018 14:13:58 +0000 (14:13 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 23 Feb 2018 14:13:58 +0000 (14:13 +0000)
lualib/lua_stat.lua
lualib/lua_util.lua
lualib/rspamadm/configwizard.lua
lualib/rspamadm/stat_convert.lua

index a5987f9da3775734e8c27476324581d99d7c8729..d3a4355547b07a16ac03df4adacfffc33bf59274 100644 (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
 
index f7e92937dc56a1ddb9c37de71fb63d883fecce99..729e73a5fb535c5da37f59a6fc97c11a0d97ab51 100644 (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
index 14e066939dd7610ee8acea1479c1901012905064..8607cdc1e1273c3ed50ccb4fe0e5e24f13cc0ec7 100644 (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
index 6ad3b0332dcacff8559d94812d6550cbe54728d1..230dc3f3f211c14f74be815aed24f2f4b8a2f0d7 100644 (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