diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2018-02-15 12:48:33 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2018-02-15 12:48:33 +0000 |
commit | 440b588a749911bb064055d4084d99b7be35f815 (patch) | |
tree | 34a85a083cb7347fddbc6f7b3eec19d97d50b9d2 /lualib/rspamadm/stat_convert.lua | |
parent | 5ee9d4f25d79dfc1197935d301ed4951b3c8a53e (diff) | |
download | rspamd-440b588a749911bb064055d4084d99b7be35f815.tar.gz rspamd-440b588a749911bb064055d4084d99b7be35f815.zip |
[Rework] Start major stat_convert rework
Diffstat (limited to 'lualib/rspamadm/stat_convert.lua')
-rw-r--r-- | lualib/rspamadm/stat_convert.lua | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/lualib/rspamadm/stat_convert.lua b/lualib/rspamadm/stat_convert.lua index 7b6de9836..d497333a1 100644 --- a/lualib/rspamadm/stat_convert.lua +++ b/lualib/rspamadm/stat_convert.lua @@ -100,126 +100,5 @@ local function convert_learned(cache, server, password, redis_db) end return function (_, res) - local db = sqlite3.open(res['source_db']) - local tokens = {} - local num = 0 - local total = 0 - local nusers = 0 - local lim = 1000 -- Update each 1000 tokens - local users_map = {} - local learns = {} - local redis_password = res['redis_password'] - local redis_db = nil - local cmd = 'HINCRBY' - local ret, err_str - - if res['redis_db'] then - redis_db = tostring(res['redis_db']) - end - if res['reset_previous'] then - cmd = 'HSET' - end - - if res['cache_db'] then - if not convert_learned(res['cache_db'], res['redis_host'], - redis_password, redis_db) then - print('Cannot convert learned cache to redis') - return - end - end - - if not db then - print('Cannot open source db: ' .. res['source_db']) - return - end - - db:sql('BEGIN;') - -- Fill users mapping - for row in db:rows('SELECT * FROM users;') do - if row.id == '0' then - users_map[row.id] = '' - else - users_map[row.id] = row.name - end - learns[row.id] = row.learns - nusers = nusers + 1 - end - - -- Workaround for old databases - for row in db:rows('SELECT * FROM languages') do - if learns['0'] then - learns['0'] = learns['0'] + row.learns - else - learns['0'] = row.learns - end - end - - -- Fill tokens, sending data to redis each `lim` records - for row in db:rows('SELECT token,value,user FROM tokens;') do - local user = '' - if row.user ~= 0 and users_map[row.user] then - user = users_map[row.user] - end - - table.insert(tokens, {row.token, row.value, user}) - - num = num + 1 - total = total + 1 - if num > lim then - ret,err_str = send_redis(res['redis_host'], res['symbol'], - tokens, redis_password, redis_db, cmd) - if not ret then - print('Cannot send tokens to the redis server: ' .. err_str) - return - end - - num = 0 - tokens = {} - end - end - if #tokens > 0 then - ret, err_str = send_redis(res['redis_host'], res['symbol'], tokens, - redis_password, redis_db, cmd) - if not ret then - print('Cannot send tokens to the redis server: ' .. err_str) - return - end - end - -- Now update all users - local conn,err = redis.connect_sync({ - host = res['redis_host'], - }) - - if not conn then - print('Cannot connect to ' .. res['redis_host'] .. ' error: ' .. err) - return false - end - - if redis_password then - conn:add_cmd('AUTH', {redis_password}) - end - if redis_db then - conn:add_cmd('SELECT', {redis_db}) - end - - for id,learned in pairs(learns) do - local user = users_map[id] - if not conn:add_cmd(cmd, {res['symbol'] .. user, 'learns', learned}) then - print('Cannot update learns for user: ' .. user) - end - if not conn:add_cmd('SADD', {res['symbol'] .. '_keys', res['symbol'] .. user}) then - print('Cannot update learns for user: ' .. user) - end - end - db:sql('COMMIT;') - - ret = conn:exec() - - if ret then - print(string.format('Migrated %d tokens for %d users for symbol %s', - total, nusers, res['symbol'])) - else - print('Error occurred during sending data to redis') - end end |