diff --git a/init.lua b/init.lua index f9f55f7..60d3e46 100644 --- a/init.lua +++ b/init.lua @@ -2,50 +2,65 @@ local mt_stat ={} mt_stat.http = minetest.request_http_api() mt_stat.url = minetest.settings:get("mt_stat.url") or "http://localhost:8086" -mt_stat.timeout = minetest.settings:get("mt_stat.timeout") or 10 +mt_stat.uptime = minetest.settings:get("mt_stat.uptime") or 10 mt_stat.db = minetest.settings:get("mt_stat.db") or "minetest" -mt_stat.receive = minetest.settings:get("mt_stat.receive") or 30 +mt_stat.timeout = minetest.settings:get("mt_stat.timeout") or 30 -- For secure connect set header value (Authorization: Basic bG9naW46cGFzc3dvcmQ=) -- where bG9naW46cGFzc3dvcmQ= is the base64(login:password) mt_stat.header = minetest.settings:get("mt_stat.header") or nil +function mt_stat.avg_value(players,v) + local m = 0 + for _,player in ipairs(players) do + local cp = minetest.get_player_information(player:get_player_name()) + m = m + cp[v] + end + return m / #players +end + function mt_stat.send_metrics() - mt_stat.measurements = {} - local players = minetest.get_connected_players() - mt_stat.measurements.players_online = #players - mt_stat.measurements.max_lag = string.match(minetest.get_server_status(), "max_lag=(.-), cli") + mt_stat.measurements = {} + local players = minetest.get_connected_players() + mt_stat.measurements.players_online = #players + mt_stat.measurements.users_min_rtt = mt_stat.avg_value(players,"min_rtt") + mt_stat.measurements.users_max_rtt = mt_stat.avg_value(players,"max_rtt") + mt_stat.measurements.users_min_jitter = mt_stat.avg_value(players,"min_jitter") + mt_stat.measurements.users_max_jitter = mt_stat.avg_value(players,"max_jitter") + mt_stat.measurements.users_conn_uptime = mt_stat.avg_value(players,"connection_uptime") + mt_stat.measurements.max_lag = string.match(minetest.get_server_status(), "max_lag=(.-), cli") mt_stat.measurements.game_time = minetest.get_timeofday() * 24000 - mt_stat.measurements.server_uptime = minetest.get_server_uptime() - local united_data = "mt_stat " - local t = "" - for key,value in pairs(mt_stat.measurements) do - united_data = united_data..t..string.format('%s=%02f',key,value) - t = "," - end - mt_stat.request_http("/write?db="..mt_stat.db, united_data) - minetest.after(mt_stat.timeout, mt_stat.send_metrics) + mt_stat.measurements.server_uptime = minetest.get_server_uptime() + local united_data = "mt_stat " + local t = "" + for key,value in pairs(mt_stat.measurements) do + united_data = united_data..t..string.format('%s=%02f',key,value) + t = "," + end + --print(united_data) + mt_stat.request_http("/write?db="..mt_stat.db, united_data) + minetest.after(mt_stat.uptime, mt_stat.send_metrics) end function mt_stat.request_http(url,pd) - local req = {url = mt_stat.url..url, post_data = pd, extra_headers = {mt_stat.header}, timeout = mt_stat.interval} - mt_stat.http.fetch(req, function(result) - if result.succeeded and result.code == 200 then - if req.post_data.q == "SHOW DATABASES" and string.find(result.data, mt_stat.db) then - minetest.after(mt_stat.timeout, mt_stat.send_metrics) - minetest.log("mt_stat: Loaded... [OK]") - elseif req.post_data.q == "SHOW DATABASES" and not string.find(result.data, mt_stat.db) then - mt_stat.request_http("/query",{q="CREATE DATABASE "..mt_stat.db}) - minetest.log("mt_stat: Create database "..mt_stat.db.."!") - elseif req.post_data.q == "CREATE DATABASE "..mt_stat.db then - mt_stat.request_http("/query",{q="SHOW DATABASES"}) - minetest.log("mt_stat: Database created!") - end - end - end) + local req = {url = mt_stat.url..url, post_data = pd, extra_headers = {mt_stat.header}, timeout = mt_stat.timeout} + mt_stat.http.fetch(req, function(result) + if result.succeeded and result.code == 200 then + if req.post_data.q == "SHOW DATABASES" and string.find(result.data, mt_stat.db) then + minetest.after(mt_stat.uptime, mt_stat.send_metrics) + minetest.log("mt_stat: Loaded... [OK]") + elseif req.post_data.q == "SHOW DATABASES" and not string.find(result.data, mt_stat.db) then + mt_stat.request_http("/query",{q="CREATE DATABASE "..mt_stat.db}) + minetest.log("mt_stat: Create database "..mt_stat.db.."!") + elseif req.post_data.q == "CREATE DATABASE "..mt_stat.db then + mt_stat.request_http("/query",{q="SHOW DATABASES"}) + minetest.log("mt_stat: Database created!") + end + end + end) end if mt_stat.http then - mt_stat.request_http("/query",{q="SHOW DATABASES"}) + mt_stat.request_http("/query",{q="SHOW DATABASES"}) else - minetest.log("mt_stat: Please setup (secure.http_mod = mt_stat) in minetest.conf") + minetest.log("mt_stat: Please setup (secure.http_mod = mt_stat) in minetest.conf") end \ No newline at end of file