aboutsummaryrefslogtreecommitdiffstats
path: root/src/lua
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-04-05 11:26:26 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-04-05 11:26:26 +0100
commitfe998c33cd207e938bd0b63a10b6de765aafd883 (patch)
tree19d2fbc31ef8fb4fd31da63303a6bb99fd9e2f9a /src/lua
parente1d71beb097f090bfa50a7fa4ef6be7ee308c232 (diff)
downloadrspamd-fe998c33cd207e938bd0b63a10b6de765aafd883.tar.gz
rspamd-fe998c33cd207e938bd0b63a10b6de765aafd883.zip
[Feature] Add task:get_symbols_numeric method
Diffstat (limited to 'src/lua')
-rw-r--r--src/lua/lua_task.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c
index 003c4f086..e522110e1 100644
--- a/src/lua/lua_task.c
+++ b/src/lua/lua_task.c
@@ -393,6 +393,14 @@ LUA_FUNCTION_DEF (task, get_symbol);
* @return {table|strings} table of strings with symbols names
*/
LUA_FUNCTION_DEF (task, get_symbols);
+
+/***
+ * @method task:get_symbols_numeric()
+ * Returns array of all symbols matched for this task
+ * @return {table|number} table of numbers with symbols ids
+ */
+LUA_FUNCTION_DEF (task, get_symbols_numeric);
+
/***
* @method task:has_symbol(name)
* Fast path to check if a specified symbol is in the task's results
@@ -604,6 +612,7 @@ static const struct luaL_reg tasklib_m[] = {
LUA_INTERFACE_DEF (task, get_images),
LUA_INTERFACE_DEF (task, get_symbol),
LUA_INTERFACE_DEF (task, get_symbols),
+ LUA_INTERFACE_DEF (task, get_symbols_numeric),
LUA_INTERFACE_DEF (task, has_symbol),
LUA_INTERFACE_DEF (task, get_date),
LUA_INTERFACE_DEF (task, get_message_id),
@@ -2058,6 +2067,40 @@ lua_task_get_symbols (lua_State *L)
return 1;
}
+static gint
+lua_task_get_symbols_numeric (lua_State *L)
+{
+ struct rspamd_task *task = lua_check_task (L, 1);
+ struct metric_result *mres;
+ gint i = 1, id;
+ GHashTableIter it;
+ gpointer k, v;
+
+ if (task) {
+ mres = g_hash_table_lookup (task->results, DEFAULT_METRIC);
+
+ if (mres) {
+ lua_createtable (L, g_hash_table_size (mres->symbols), 0);
+ g_hash_table_iter_init (&it, mres->symbols);
+
+ while (g_hash_table_iter_next (&it, &k, &v)) {
+ id = rspamd_symbols_cache_find_symbol (task->cfg->cache,
+ k);
+ lua_pushnumber (L, id);
+ lua_rawseti (L, -2, i++);
+ }
+ }
+ else {
+ lua_createtable (L, 0, 0);
+ }
+ }
+ else {
+ return luaL_error (L, "invalid arguments");
+ }
+
+ return 1;
+}
+
enum lua_date_type {
DATE_CONNECT = 0,
DATE_MESSAGE,