From d916f02050c63045ec7eb6e238dd281337e804c5 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 6 Apr 2020 17:09:18 +0100 Subject: [Minor] Allow to add named results via lua API --- src/lua/lua_task.c | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'src/lua/lua_task.c') diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index 4a6040145..ce15813ac 100644 --- a/src/lua/lua_task.c +++ b/src/lua/lua_task.c @@ -1080,10 +1080,30 @@ LUA_FUNCTION_DEF (task, lookup_words); /** * @method task:topointer() * - * Returns raw C pointer (lightuserdata) associated with task + * Returns raw C pointer (lightuserdata) associated with task. This might be + * broken with luajit and GC64, use with caution. */ LUA_FUNCTION_DEF (task, topointer); +/** + * @method task:add_named_result(name, symbol_control_function) + * + * Adds a new named result for this task. symbol_control_function is a callback + * called with 3 parameters: + * `function(task, symbol, result_name)` and it should return boolean that + * specifies if this symbol should be added to this named result. + * @param {string} name for this result + * @param {function} symbol_control_function predicate for symbols + */ +LUA_FUNCTION_DEF (task, add_named_result); + +/*** + * @method task:get_dns_req() + * Get number of dns requests being sent in the task + * @return {number} number of DNS requests + */ +LUA_FUNCTION_DEF (task, get_dns_req); + static const struct luaL_reg tasklib_f[] = { LUA_INTERFACE_DEF (task, create), LUA_INTERFACE_DEF (task, load_from_file), @@ -6509,6 +6529,26 @@ lua_task_topointer (lua_State *L) return 1; } +static gint +lua_task_add_named_result (lua_State *L) +{ + LUA_TRACE_POINT; + struct rspamd_task *task = lua_check_task (L, 1); + const gchar *name = luaL_checkstring (L, 2); + gint cbref; + + if (task && name && lua_isfunction (L, 3)) { + lua_pushvalue (L, 3); + cbref = luaL_ref (L, LUA_REGISTRYINDEX); + rspamd_create_metric_result (task, name, cbref); + } + else { + return luaL_error (L, "invalid arguments"); + } + + return 0; +} + /* Image functions */ static gint -- cgit v1.2.3