-- -- (C) 2013-16 - ntop.org -- dirs = ntop.getDirs() package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path require "lua_utils" sendHTTPHeader('text/html; charset=iso-8859-1') -- Table parameters all = _GET["all"] currentPage = _GET["currentPage"] perPage = _GET["perPage"] sortColumn = _GET["sortColumn"] sortOrder = _GET["sortOrder"] group_col = _GET["grouped_by"] as_n = _GET["as"] vlan_n = _GET["vlan"] network_n = _GET["network"] country_n = _GET["country"] os_n = _GET["os"] if(_GET["mode"] == "hostsonly") then mac_n = true else mac_n = false end if (group_col == nil) then group_col = "asn" end -- Get from redis the throughput type bps or pps throughput_type = getThroughputType() if ((sortColumn == nil) or (sortColumn == "column_")) then sortColumn = getDefaultTableSort(group_col) --if(sortColumn == "column_") then sortColumn = "column_name" end else if ((sortColumn ~= "column_") and (sortColumn ~= "")) then tablePreferences("sort_"..group_col,sortColumn) end end if(sortOrder == nil) then sortOrder = getDefaultTableSortOrder(group_col) else if ((sortColumn ~= "column_") and (sortColumn ~= "")) then tablePreferences("sort_order_"..group_col,sortOrder) end end if(currentPage == nil) then currentPage = 1 else currentPage = tonumber(currentPage) end if(perPage == nil) then perPage = getDefaultTableSize() else perPage = tonumber(perPage) tablePreferences("rows_number",perPage) end to_skip = (currentPage-1) * perPage if (all ~= nil) then perPage = 0 currentPage = 0 end if (as_n == nil and vlan_n == nil and network_n == nil and country_n == nil and os_n == nil) then -- single group info requested print ("{ \"currentPage\" : " .. currentPage .. ",\n \"data\" : [\n") end num = 0 total = 0 now = os.time() vals = {} stats_by_group_col = {} interface.select(ifname) stats_by_group_key = interface.getGroupedHosts(false, "column_"..group_col, country_n, os_n, tonumber(vlan_n), tonumber(as_n), tonumber(network_n), mac_n) -- false = little details) stats_by_group_col = stats_by_group_key --[[ Prepares a json containing table data, together with HTML. --]] function print_single_group(value) print ('{ ') print ('\"key\" : \"'..value["id"]..'\",') print ("\"column_id\" : \"") elseif (group_col == "vlan" or vlan_n ~= nil) then print("hosts_stats.lua?vlan="..value["id"].."'>") elseif (group_col == "country" or country_n ~= nil) then print("hosts_stats.lua?country="..value["id"].."'>") print(getFlag(value["country"]).."  ") elseif (group_col == "os" or os_n ~= nil) then print("hosts_stats.lua?os=".. string.gsub(value["id"], " ", '%%20') .."'>") if(value["id"] ~= nil ) then print("".. getOSIcon(value["id"]) .."") end elseif (group_col == "local_network_id" or network_n ~= nil) then print("hosts_stats.lua?network="..tostring(value["id"]).."'>") elseif (group_col == "mac") then print("hosts_stats.lua?mac="..value["name"].."'>") else print("hosts_stats.lua'>") end if (group_col == "local_network_id" or network_n ~= nil) then print(value["name"]..' ') print('", "column_chart": "') if tonumber(value["id"]) ~= -1 and interface.isPcapDumpInterface() == false then print('') else print("-") end print('", ') elseif group_col == "vlan" or vlan_n ~= nil then print(value["id"]..' ') print('", "column_chart": "') if value["id"] ~= "0" then print('') end print('", ') elseif(group_col == "mac") then manufacturer = get_manufacturer_mac(value["name"]) if(manufacturer == nil) then manufacturer = "" end print(manufacturer..'", ') elseif(group_col == "country" and value["id"] == "Uncategorized") then print(''..value["id"]..'", ') else print(value["id"]..'", ') end local alt = getHostAltName(value["id"]) if((alt ~= nil) and (alt ~= value["id"])) then alt = " ("..alt..")" else alt = "" end print('"column_link": "'.. value["id"]..alt..'') if(not(isSpecialMac(value["id"]))) then local icon = getHostIcon(value["id"]) if(icon ~= "") then print(icon) end end print('",') if(group_col == "mac") then print('"column_manufacturer": "'..manufacturer..'",') end print('"column_hosts" : "' .. formatValue(value["num_hosts"]) ..'",') print ("\"column_alerts\" : \"") if((value["num_alerts"] ~= nil) and (value["num_alerts"] > 0)) then print(""..formatValue(value["num_alerts"]).."") else print("0") end print('", ') --- TODO: name for VLANs? if (group_col == "asn" or as_n ~= nil) then print("\"column_name\" : \""..printASN(value["id"], value["name"])) elseif ( group_col == "country" or country_n ~= nil) then print("\"column_name\" : \""..value["id"]) elseif ( group_col == "os" or os_n ~= nil) then print("\"column_name\" : \""..value["id"]) else print("\"column_name\" : \""..value["name"]) end print(" "..getFlag(value["country"])..'", ') print("\"column_since\" : \"" .. secondsToTime(now-value["seen.first"]+1) .. "\", ") sent2rcvd = round((value["bytes.sent"] * 100) / (value["bytes.sent"]+value["bytes.rcvd"]), 0) print ("\"column_breakdown\" : \"