diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-09-23 09:41:49 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-09-23 09:41:49 +0100 |
commit | 2ce540685876ad369fcd3f0f63062f84856e4140 (patch) | |
tree | 959f02620009df27f9d75596871e4a3b70210403 /src | |
parent | de0d6076198efa2c4bf7d5cf0d11b23f0664d0c5 (diff) | |
download | rspamd-2ce540685876ad369fcd3f0f63062f84856e4140.tar.gz rspamd-2ce540685876ad369fcd3f0f63062f84856e4140.zip |
[Minor] Lua_worker: Improve control commands handlers
Diffstat (limited to 'src')
-rw-r--r-- | src/lua/lua_worker.c | 70 |
1 files changed, 68 insertions, 2 deletions
diff --git a/src/lua/lua_worker.c b/src/lua/lua_worker.c index 1768b1c2a..eaf0e02d7 100644 --- a/src/lua/lua_worker.c +++ b/src/lua/lua_worker.c @@ -297,7 +297,7 @@ lua_worker_control_handler (struct rspamd_main *rspamd_main, struct rspamd_control_cbdata *cbd = (struct rspamd_control_cbdata *)ud; rspamd_mempool_t *pool; lua_State *L; - gint err_idx; + gint err_idx, status; L = cbd->L; pool = cbd->pool; @@ -316,7 +316,73 @@ lua_worker_control_handler (struct rspamd_main *rspamd_main, rspamd_lua_setclass (L, "rspamd{session}", -1); *psession = session; - if (lua_pcall (L, 1, 0, err_idx) != 0) { + /* Command name */ + lua_pushstring (L, rspamd_control_command_to_string (cmd->type)); + + /* Command's extras */ + lua_newtable (L); + + switch (cmd->type) { + case RSPAMD_CONTROL_CHILD_CHANGE: + lua_pushinteger (L, cmd->cmd.child_change.pid); + lua_setfield (L, -2, "pid"); + switch (cmd->cmd.child_change.what) { + case rspamd_child_offline: + lua_pushstring (L, "offline"); + lua_setfield (L, -2, "what"); + break; + case rspamd_child_online: + lua_pushstring (L, "online"); + lua_setfield (L, -2, "what"); + break; + case rspamd_child_terminated: + lua_pushstring (L, "terminated"); + lua_setfield (L, -2, "what"); + status = cmd->cmd.child_change.additional; + + if (WIFEXITED (status)) { + lua_pushinteger (L, WEXITSTATUS (status)); + lua_setfield (L, -2, "exit_code"); + } + + if (WIFSIGNALED (status)) { + lua_pushinteger (L, WTERMSIG (status)); + lua_setfield (L, -2, "signal"); +#ifdef WCOREDUMP + lua_pushboolean (L, WCOREDUMP (status)); + lua_setfield (L, -2, "core"); +#endif + } + break; + } + break; + case RSPAMD_CONTROL_MONITORED_CHANGE: + lua_pushinteger (L, cmd->cmd.monitored_change.sender); + lua_setfield (L, -2, "sender"); + lua_pushboolean (L, cmd->cmd.monitored_change.alive); + lua_setfield (L, -2, "alive"); + lua_pushlstring (L, cmd->cmd.monitored_change.tag, + sizeof (cmd->cmd.monitored_change.tag)); + lua_setfield (L, -2, "tag"); + break; + case RSPAMD_CONTROL_HYPERSCAN_LOADED: + lua_pushstring (L, cmd->cmd.hs_loaded.cache_dir); + lua_setfield (L, -2, "cache_dir"); + lua_pushboolean (L, cmd->cmd.hs_loaded.forced); + lua_setfield (L, -2, "forced"); + break; + case RSPAMD_CONTROL_STAT: + case RSPAMD_CONTROL_RELOAD: + case RSPAMD_CONTROL_RERESOLVE: + case RSPAMD_CONTROL_RECOMPILE: + case RSPAMD_CONTROL_LOG_PIPE: + case RSPAMD_CONTROL_FUZZY_STAT: + case RSPAMD_CONTROL_FUZZY_SYNC: + default: + break; + } + + if (lua_pcall (L, 3, 0, err_idx) != 0) { msg_err_pool ("cannot init lua parser script: %s", lua_tostring (L, -1)); lua_settop (L, err_idx - 1); |