From: Vsevolod Stakhov Date: Sat, 2 Dec 2023 12:36:17 +0000 (+0000) Subject: [Project] Add classify redis script X-Git-Tag: 3.8.0~40^2~20 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=44c6c563c2faf5ca97646e92e8382b972d2d513f;p=thirdparty%2Frspamd.git [Project] Add classify redis script --- diff --git a/.luacheckrc b/.luacheckrc index 353bee41da..7e48b8ee05 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -64,6 +64,7 @@ files['/**/lualib/redis_scripts/**'].globals = { 'redis', 'KEYS', 'cjson', + 'cmsgpack', } files['/**/src/rspamadm/*'].globals = { diff --git a/lualib/redis_scripts/bayes_classify.lua b/lualib/redis_scripts/bayes_classify.lua new file mode 100644 index 0000000000..c2654e476c --- /dev/null +++ b/lualib/redis_scripts/bayes_classify.lua @@ -0,0 +1,26 @@ +-- Lua script to perform bayes classification +-- This script accepts the following parameters: +-- key1 - prefix for bayes tokens (e.g. for per-user classification) +-- key2 - set of tokens encoded in messagepack array of int64_t + +local prefix = KEYS[1] +local input_tokens = cmsgpack.unpack(KEYS[2]) +local output_spam = {} +local output_ham = {} + +for i, token in ipairs(input_tokens) do + local token_data = redis.call('HMGET', prefix .. tostring(token), 'H', 'S') + + if token_data then + local ham_count = tonumber(token_data[1]) or 0 + local spam_count = tonumber(token_data[2]) or 0 + + output_ham[i] = ham_count + output_spam[i] = spam_count + else + output_ham[i] = 0 + output_spam[i] = 0 + end +end + +return cmsgpack.pack({ output_ham, output_spam }) \ No newline at end of file