diff --git a/doc/lua-api/index.rst b/doc/lua-api/index.rst index 5c05871aa..4055ac24d 100644 --- a/doc/lua-api/index.rst +++ b/doc/lua-api/index.rst @@ -1337,6 +1337,15 @@ Server class :param class_server sv: A :ref:`server_class` which indicates the manipulated server. +.. js:function:: Server.tracking(sv) + + Check if the current server is tracking another server. + + :param class_server sv: A :ref:`server_class` which indicates the manipulated + server. + :returns: A :ref:`server_class` which indicates the tracked server or nil if + the server doesn't track another one. + .. js:function:: Server.event_sub(sv, event_types, func) Register a function that will be called on specific server events. diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c index 61eb580f3..931b60970 100644 --- a/src/hlua_fcn.c +++ b/src/hlua_fcn.c @@ -1410,6 +1410,26 @@ int hlua_server_agent_force_down(lua_State *L) return 0; } +/* returns the tracked server, if any */ +int hlua_server_tracking(lua_State *L) +{ + struct server *sv; + struct server *tracked; + + sv = hlua_check_server(L, 1); + if (sv == NULL) { + return 0; + } + + tracked = sv->track; + if (tracked == NULL) + lua_pushnil(L); + else + hlua_fcn_new_server(L, tracked); + + return 1; +} + /* hlua_event_sub wrapper for per-server subscription: * * hlua_event_sub() is called with sv->e_subs subscription list and @@ -1472,6 +1492,7 @@ int hlua_fcn_new_server(lua_State *L, struct server *srv) hlua_class_function(L, "agent_disable", hlua_server_agent_disable); hlua_class_function(L, "agent_force_up", hlua_server_agent_force_up); hlua_class_function(L, "agent_force_down", hlua_server_agent_force_down); + hlua_class_function(L, "tracking", hlua_server_tracking); hlua_class_function(L, "event_sub", hlua_server_event_sub); return 1;