Added connection players info, fix some params

master
googol 2019-02-07 10:44:37 +02:00
parent 09f4a9c5b4
commit ec4075493f
1 changed files with 47 additions and 32 deletions

View File

@ -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