*/
void rspamd_monitored_start (struct rspamd_monitored *m);
+/**
+ * Propagate external monitored error
+ * @param m
+ * @param error
+ */
+void rspamd_monitored_propagate_error (struct rspamd_monitored *m,
+ const gchar *error);
+
/**
* Destroy monitored context and all monitored objects inside
* @param ctx
LUA_FUNCTION_DEF (monitored, latency);
LUA_FUNCTION_DEF (monitored, offline);
LUA_FUNCTION_DEF (monitored, total_offline);
+LUA_FUNCTION_DEF (monitored, propagate_error);
static const struct luaL_reg monitoredlib_m[] = {
LUA_INTERFACE_DEF (monitored, alive),
LUA_INTERFACE_DEF (monitored, latency),
LUA_INTERFACE_DEF (monitored, offline),
LUA_INTERFACE_DEF (monitored, total_offline),
+ LUA_INTERFACE_DEF (monitored, propagate_error),
{"__tostring", rspamd_lua_class_tostring},
{NULL, NULL}
};
return 1;
}
+static gint
+lua_monitored_propagate_error (lua_State *L)
+{
+ LUA_TRACE_POINT;
+ struct rspamd_monitored *m = lua_check_monitored (L, 1);
+ const gchar *what = luaL_checkstring (L, 2);
+
+ if (m && what) {
+ rspamd_monitored_propagate_error (m, what);
+ }
+ else {
+ return luaL_error (L, "invalid arguments");
+ }
+
+ return 0;
+}
+
void
luaopen_config (lua_State * L)
{
rspamd_logger.infox(task, 'error looking up %s: %s', to_resolve, err)
task:insert_result(rbl.symbol .. '_FAIL', 1, string.format('%s:%s',
resolve_table_elt.orig, err))
+ if rbl.monitored then
+ rbl.monitored:propagate_error(err)
+ end
return
end