ntopng/scripts/lua/modules/rtt_utils.lua
2020-01-08 23:52:51 +01:00

140 lines
3.3 KiB
Lua

--
-- (C) 2019-20 - ntop.org
--
local rtt_utils = {}
local ts_utils = require "ts_utils_core"
local format_utils = require "format_utils"
-- ##############################################
local rtt_hosts_key = string.format("ntopng.prefs.ifid_%d.system_rtt_hosts", getSystemInterfaceId())
-- ##############################################
local function rtt_last_updates_key(key)
return string.format("ntopng.cache.ifid_%d.system_rtt_hosts.last_update." .. key, getSystemInterfaceId())
end
-- ##############################################
function rtt_utils.host2key(host, iptype, probetype)
return table.concat({host, iptype, probetype}, "@")
end
-- ##############################################
function rtt_utils.setLastRttUpdate(key, when, rtt, ipaddress)
ntop.setCache(rtt_last_updates_key(key), string.format("%u@%.2f@%s", when, rtt, ipaddress))
end
-- ##############################################
function rtt_utils.getLastRttUpdate(key)
local val = ntop.getCache(rtt_last_updates_key(key))
if(val ~= nil)then
local parts = string.split(val, "@")
if((parts ~= nil) and (#parts == 3)) then
return {
when = parts[1],
value = parts[2],
ip = parts[3],
}
end
end
end
-- ##############################################
function rtt_utils.key2label(key)
local parts = string.split(key, "@")
if((parts ~= nil) and (#parts == 3)) then
-- TODO improve
return string.format("%s [%s] (%s)", parts[1], parts[2], string.upper(parts[3]))
end
return key
end
-- ##############################################
function rtt_utils.deserializeHost(val)
local parts = string.split(val, "|")
if((parts ~= nil) and (#parts == 4)) then
local value = {
host = parts[1],
iptype = parts[2], -- ipv4 or ipv6
probetype = parts[3],
max_rtt = tonumber(parts[4]),
}
return value
end
end
-- ##############################################
function rtt_utils.getHostsSerialized()
return ntop.getHashAllCache(rtt_hosts_key) or {}
end
-- ##############################################
function rtt_utils.getHostSerialized(host_key)
return ntop.getHashCache(rtt_hosts_key, host_key) or {}
end
-- ##############################################
function rtt_utils.getHosts()
local hosts = rtt_utils.getHostsSerialized()
local rv = {}
for host, val in pairs(hosts) do
rv[host] = rtt_utils.deserializeHost(val)
end
return rv
end
-- ##############################################
function rtt_utils.getHost(host_key)
if not host_key then
return
end
res = rtt_utils.getHostSerialized(host_key)
if not isEmptyString(res) then
return rtt_utils.deserializeHost(res)
end
end
-- ##############################################
function rtt_utils.addHost(host, value)
ntop.setHashCache(rtt_hosts_key, host, value)
end
-- ##############################################
function rtt_utils.removeHost(host)
local alerts_api = require("alerts_api")
local rtt_host_entity = alerts_api.pingedHostEntity(host)
local old_ifname = ifname
interface.select(getSystemInterfaceId())
alerts_api.releaseEntityAlerts(rtt_host_entity)
interface.select(old_ifname)
ntop.delHashCache(rtt_hosts_key, host)
end
-- ##############################################
return rtt_utils