ntopng/scripts/lua/get_top_realtime.lua

74 lines
1.8 KiB
Lua

--
-- (C) 2013-18 - ntop.org
--
local dirs = ntop.getDirs()
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
require "lua_utils"
local json = require("dkjson")
local top_talkers_utils = require("top_talkers_utils")
local direction = _GET["senders_receivers"] or "senders"
sendHTTPContentTypeHeader('text/html')
local top_type = _GET["module"]
local data = {}
local json_res = top_talkers_utils.makeTopJson(ifname, false --[[ do not save checkpoint as we are not in minute.lua ]])
if json_res ~= nil then
local res = json.decode(json_res)
if res and res.vlan[1] then
res = res.vlan[1]
if top_type == "top_asn" then
res = res.asn[1]
else
res = res.hosts[1]
end
if res ~= nil then
data = res[direction]
local min_percentage = 0.08
local tot = 0
local other_value = 0
for _, item in pairs(data) do
tot = tot + item.value
end
local final_data = {}
for _, item in pairs(data) do
local perc = item.value / tot
if (perc >= min_percentage) and (item.address ~= "Other") then
if isEmptyString(item.label) then item.label = item.address end
if top_type == "top_talkers" then
item.url = ntop.getHttpPrefix() .. "/lua/host_details.lua?host=" .. item.address
elseif top_type == "top_asn" then
item.url = ntop.getHttpPrefix() .. "/lua/hosts_stats.lua?asn=" .. item.address
end
final_data[#final_data + 1] = item
else
other_value = other_value + item.value
end
end
if other_value > 0 then
final_data[#final_data + 1] = {
label = i18n("other"),
value = other_value,
}
end
data = final_data
end
end
end
print(json.encode(data))