#include "rgw_lua_background.h"
#include "rgw_lua.h"
#include "rgw_lua_utils.h"
+#include "rgw_perf_counters.h"
#include "include/ceph_assert.h"
#include <lua.hpp>
} else if (rc < 0) {
ldpp_dout(dpp, 1) << "WARNING: failed to read background script. error " << rc << dendl;
} else {
+ auto failed = false;
try {
//execute the background lua script
if (luaL_dostring(L, rgw_script.c_str()) != LUA_OK) {
const std::string err(lua_tostring(L, -1));
ldpp_dout(dpp, 1) << "Lua ERROR: " << err << dendl;
+ failed = true;
}
} catch (const std::exception& e) {
- ldpp_dout(dpp, 1) << "Lua ERROR: " << e.what() << dendl;
+ ldpp_dout(dpp, 1) << "Lua ERROR: " << e.what() << dendl;
+ failed = true;
+ }
+ if (perfcounter) {
+ perfcounter->inc((failed ? l_rgw_lua_script_fail : l_rgw_lua_script_ok), 1);
}
}
std::this_thread::sleep_for(std::chrono::seconds(execute_interval));
#include "rgw_acl.h"
#include "rgw_sal_rados.h"
#include "rgw_lua_background.h"
+#include "rgw_perf_counters.h"
#define dout_subsys ceph_subsys_rgw
ceph_assert(lua_istable(L, -1));
}
+ int rc = 0;
try {
// execute the lua script
if (luaL_dostring(L, script.c_str()) != LUA_OK) {
const std::string err(lua_tostring(L, -1));
ldpp_dout(s, 1) << "Lua ERROR: " << err << dendl;
- return -1;
+ rc = -1;
}
} catch (const std::runtime_error& e) {
ldpp_dout(s, 1) << "Lua ERROR: " << e.what() << dendl;
- return -1;
+ rc = -1;
+ }
+ if (perfcounter) {
+ perfcounter->inc((rc == -1 ? l_rgw_lua_script_fail : l_rgw_lua_script_ok), 1);
}
- return 0;
+ return rc;
}
}
#include <lua.hpp>
#include "include/common_fwd.h"
+#include "rgw_perf_counters.h"
namespace rgw::lua {
class lua_state_guard {
lua_State* l;
public:
- lua_state_guard(lua_State* _l) : l(_l) {}
- ~lua_state_guard() {lua_close(l);}
+ lua_state_guard(lua_State* _l) : l(_l) {
+ if (perfcounter) {
+ perfcounter->inc(l_rgw_lua_current_vms, 1);
+ }
+ }
+ ~lua_state_guard() {
+ lua_close(l);
+ if (perfcounter) {
+ perfcounter->dec(l_rgw_lua_current_vms, 1);
+ }
+ }
void reset(lua_State* _l=nullptr) {l = _l;}
};
plb.add_u64(l_rgw_pubsub_push_pending, "pubsub_push_pending", "Pubsub events pending reply from endpoint");
plb.add_u64_counter(l_rgw_pubsub_missing_conf, "pubsub_missing_conf", "Pubsub events could not be handled because of missing configuration");
+ plb.add_u64_counter(l_rgw_lua_script_ok, "lua_script_ok", "Successfull executions of lua scripts");
+ plb.add_u64_counter(l_rgw_lua_script_fail, "lua_script_fail", "Failed executions of lua scripts");
+ plb.add_u64(l_rgw_lua_current_vms, "lua_current_vms", "Number of Lua VMs currently being executed");
+
perfcounter = plb.create_perf_counters();
cct->get_perfcounters_collection()->add(perfcounter);
return 0;
l_rgw_pubsub_push_pending,
l_rgw_pubsub_missing_conf,
+ l_rgw_lua_current_vms,
+ l_rgw_lua_script_ok,
+ l_rgw_lua_script_fail,
+
l_rgw_last,
};