mirror of
https://github.com/ntop/ntopng.git
synced 2026-04-29 07:29:32 +00:00
218 lines
5.5 KiB
Lua
218 lines
5.5 KiB
Lua
--
|
|
-- (C) 2014-18 - ntop.org
|
|
--
|
|
|
|
local format_utils = {}
|
|
|
|
function format_utils.round(num, idp)
|
|
num = tonumber(num)
|
|
local res
|
|
|
|
if num == nil then
|
|
return 0
|
|
end
|
|
|
|
if num == math.floor(num) then
|
|
-- This is an integer, so represent it
|
|
-- without decimals
|
|
res = string.format("%d", math.floor(num))
|
|
else
|
|
-- This is a number with decimal, so represent
|
|
-- it with a number of decimal digits equal to idp
|
|
res = string.format("%." .. (idp or 0) .. "f", num)
|
|
end
|
|
|
|
return tonumber(res) or 0
|
|
end
|
|
|
|
local round = format_utils.round
|
|
|
|
function format_utils.secondsToTime(seconds)
|
|
local seconds = tonumber(seconds)
|
|
if(seconds == nil) then return "" end
|
|
|
|
if(seconds < 1) then
|
|
return("< 1 sec")
|
|
end
|
|
|
|
local days = math.floor(seconds / 86400)
|
|
local hours = math.floor((seconds / 3600) - (days * 24))
|
|
local minutes = math.floor((seconds / 60) - (days * 1440) - (hours * 60))
|
|
local sec = seconds % 60
|
|
local msg = ""
|
|
|
|
if(days > 0) then
|
|
years = math.floor(days/365)
|
|
|
|
if(years > 0) then
|
|
days = days % 365
|
|
|
|
msg = years .. " year"
|
|
if(years > 1) then msg = msg .. "s" end
|
|
end
|
|
|
|
if(days > 0) then
|
|
if(string.len(msg) > 0) then msg = msg .. ", " end
|
|
msg = msg .. days .. " day"
|
|
if(days > 1) then msg = msg .. "s" end
|
|
end
|
|
end
|
|
|
|
if(string.len(msg) > 0) then msg = msg .. ", " end
|
|
|
|
if(hours > 0) then
|
|
msg = msg .. string.format("%02d:", truncate(hours))
|
|
end
|
|
msg = msg .. string.format("%02d:", truncate(minutes))
|
|
msg = msg .. string.format("%02d", truncate(sec));
|
|
|
|
return msg
|
|
end
|
|
|
|
function format_utils.msToTime(ms)
|
|
if(ms > 1000) then
|
|
return format_utils.secondsToTime(ms/1000)
|
|
else
|
|
if(ms < 1) then
|
|
return("< 1 ms")
|
|
else
|
|
return(round(ms, 4).." ms")
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Convert bytes to human readable format
|
|
function format_utils.bytesToSize(bytes)
|
|
if(bytes == nil) then
|
|
return("0")
|
|
else
|
|
local precision = 2
|
|
local kilobyte = 1024;
|
|
local megabyte = kilobyte * 1024;
|
|
local gigabyte = megabyte * 1024;
|
|
local terabyte = gigabyte * 1024;
|
|
|
|
bytes = tonumber(bytes)
|
|
if bytes == 1 then return "1 Byte"
|
|
elseif((bytes >= 0) and (bytes < kilobyte)) then
|
|
return round(bytes, precision) .. " Bytes";
|
|
elseif((bytes >= kilobyte) and (bytes < megabyte)) then
|
|
return round(bytes / kilobyte, precision) .. ' KB';
|
|
elseif((bytes >= megabyte) and (bytes < gigabyte)) then
|
|
return round(bytes / megabyte, precision) .. ' MB';
|
|
elseif((bytes >= gigabyte) and (bytes < terabyte)) then
|
|
return round(bytes / gigabyte, precision) .. ' GB';
|
|
elseif(bytes >= terabyte) then
|
|
return round(bytes / terabyte, precision) .. ' TB';
|
|
else
|
|
return round(bytes, precision) .. ' Bytes';
|
|
end
|
|
end
|
|
end
|
|
|
|
function format_utils.formatValue(amount)
|
|
local formatted = amount
|
|
|
|
if(formatted == nil) then return(0) end
|
|
while true do
|
|
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
|
|
if(k==0) then
|
|
break
|
|
end
|
|
end
|
|
return formatted
|
|
end
|
|
|
|
function format_utils.formatPackets(amount)
|
|
local amount = tonumber(amount)
|
|
if (amount == 1) then return "1 Pkt" end
|
|
return format_utils.formatValue(amount).." Pkts"
|
|
end
|
|
|
|
function format_utils.formatFlows(amount)
|
|
local amount = tonumber(amount)
|
|
if (amount == 1) then return "1 Flow" end
|
|
return format_utils.formatValue(amount).." Flows"
|
|
end
|
|
|
|
-- Convert packets to pps readable format
|
|
function format_utils.pktsToSize(pkts)
|
|
local precision = 2
|
|
if(pkts >= 1000000) then
|
|
return round(pkts/1000000, precision)..' Mpps';
|
|
elseif(pkts >= 1000) then
|
|
return round(pkts/1000, precision)..' Kpps';
|
|
else
|
|
return round(pkts, precision)..' pps';
|
|
end
|
|
end
|
|
|
|
-- Convert bits to human readable format
|
|
|
|
function format_utils.bitsToSizeMultiplier(bits, multiplier)
|
|
if(bits == nil) then return(0) end
|
|
|
|
local precision = 2
|
|
local kilobit = 1000;
|
|
local megabit = kilobit * multiplier;
|
|
local gigabit = megabit * multiplier;
|
|
local terabit = gigabit * multiplier;
|
|
|
|
if((bits >= kilobit) and (bits < megabit)) then
|
|
return round(bits / kilobit, precision) .. ' kbit/s';
|
|
elseif((bits >= megabit) and (bits < gigabit)) then
|
|
return round(bits / megabit, precision) .. ' Mbit/s';
|
|
elseif((bits >= gigabit) and (bits < terabit)) then
|
|
return round(bits / gigabit, precision) .. ' Gbit/s';
|
|
elseif(bits >= terabit) then
|
|
return round(bits / terabit, precision) .. ' Tbit/s';
|
|
else
|
|
return round(bits, precision) .. ' bit/s';
|
|
end
|
|
end
|
|
|
|
function format_utils.bitsToSize(bits)
|
|
return(bitsToSizeMultiplier(bits, 1000))
|
|
end
|
|
|
|
-- maxRateToString
|
|
function format_utils.maxRateToString(max_rate)
|
|
if((max_rate == nil) or (max_rate == "")) then max_rate = -1 end
|
|
max_rate = tonumber(max_rate)
|
|
|
|
if(max_rate < 1000) then
|
|
return(max_rate.." Kbit/s")
|
|
else
|
|
local mr
|
|
mr = round(max_rate / 1000, 2)
|
|
|
|
if(mr < 1000) then
|
|
return(mr.." Mbit/s")
|
|
else
|
|
gbit = mr /1000
|
|
return(gbit.." Gbit/s")
|
|
end
|
|
end
|
|
end
|
|
|
|
function format_utils.formatEpoch(epoch)
|
|
if epoch == 0 then
|
|
return("-")
|
|
else
|
|
return(os.date("%d/%m/%Y %X", epoch))
|
|
end
|
|
end
|
|
|
|
-- shorten an epoch when there is a well defined interval
|
|
function format_utils.formatEpochShort(epoch_begin, epoch_end, epoch)
|
|
local begin_day = os.date("%d", epoch_begin)
|
|
local end_day = os.date("%d", epoch_end)
|
|
|
|
if begin_day == end_day then
|
|
return os.date("%X", epoch)
|
|
end
|
|
|
|
return format_utils.formatEpoch(epoch)
|
|
end
|
|
|
|
return format_utils
|