More flows and hosts filters (#1007)

* Add active flows hosts filter

* Add hosts and flows filter by IP version

* Highlight active items

* Fix Unknown protocol filter
This commit is contained in:
Emanuele Faranda 2017-03-02 19:21:43 +01:00 committed by simonemainardi
parent b6adcdcb04
commit a624cda58d
9 changed files with 298 additions and 103 deletions

View file

@ -19,6 +19,10 @@ application_filter = ""
hosts = _GET["hosts"]
host = _GET["host"]
vhost = _GET["vhost"]
flowhosts_type = _GET["flowhosts_type"]
flowhosts_type_filter = ""
ipversion = _GET["version"]
ipversion_filter = ""
network_id = _GET["network"]
@ -27,6 +31,18 @@ interface.select(ifname)
ifstats = interface.getStats()
ndpistats = interface.getnDPIStats()
local filter_base_url = ntop.getHttpPrefix() .. "/lua/flows_stats.lua"
local filter_url_params = {}
function getPageUrl(params, base_url)
local base_url = base_url or filter_base_url
local params = params or filter_url_params
for _,_ in pairs(params) do
return base_url .. "?" .. table.tconcat(params, "=", "&")
end
return base_url
end
if (network_id ~= nil) then
network_name = ntop.getNetworkNameById(tonumber(network_id))
url = ntop.getHttpPrefix()..'/lua/flows_stats.lua?network='..network_id
@ -61,55 +77,46 @@ print [[
end
if (page == "flows" or page == nil) then
num_param = 0
print [[
<hr>
<div id="table-flows"></div>
<script>
var url_update = "]]
print(ntop.getHttpPrefix())
print [[/lua/get_flows_data.lua]]
var url_update = "]]
if(application ~= nil) then
print("?application="..application)
num_param = num_param + 1
filter_url_params["application"] = application
application_filter = '<span class="glyphicon glyphicon-filter"></span>'
end
if(host ~= nil) then
if(num_param > 0) then print("&") else print("?") end
print("host="..host)
num_param = num_param + 1
filter_url_params["host"] = host
end
if(vhost ~= nil) then
if(num_param > 0) then print("&") else print("?") end
print("vhost="..vhost)
num_param = num_param + 1
filter_url_params["vhost"] = vhost
end
if(hosts ~= nil) then
if (num_param > 0) then
print("&")
else
print("?")
end
print("hosts="..hosts)
num_param = num_param + 1
filter_url_params["hosts"] = hosts
end
if(ipversion ~= nil) then
filter_url_params["version"] = ipversion
ipversion_filter = '<span class="glyphicon glyphicon-filter"></span>'
end
if(network_id ~= nil) then
if (num_param > 0) then
print("&")
else
print("?")
end
print("network="..network_id)
num_param = num_param + 1
filter_url_params["network"] = network_id
end
if(flowhosts_type ~= nil) then
filter_url_params["flowhosts_type"] = flowhosts_type
flowhosts_type_filter = '<span class="glyphicon glyphicon-filter"></span>'
end
print(getPageUrl(filter_url_params, ntop.getHttpPrefix().."/lua/get_flows_data.lua"))
print ('";')
ntop.dumpFile(dirs.installdir .. "/httpdocs/inc/flows_stats_id.inc")
@ -152,21 +159,41 @@ print [[",
-- Automatic default sorted. NB: the column must be exists.
print ('sort: [ ["' .. getDefaultTableSort("flows") ..'","' .. getDefaultTableSortOrder("flows").. '"] ],\n')
print ('buttons: [ \'<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-toggle="dropdown">Applications ' .. application_filter .. '<span class="caret"></span></button> <ul class="dropdown-menu" role="menu" id="flow_dropdown">')
print ('buttons: [')
print('<li><a href="'..ntop.getHttpPrefix()..'/lua/flows_stats.lua')
-- begin buttons
n = 0
if(host ~= nil) then print('?host='..host) n = n + 1 end
if(vhost ~= nil) then
if(n == 0) then print("?") else print("&") end
print('vhost='..vhost)
end
if(network_id ~= nil) then
if(n == 0) then print("?") else print("&") end
print('network='..network_id)
-- Local / Remote hosts selector
local flowhosts_type_params = table.clone(filter_url_params)
flowhosts_type_params["flowhosts_type"] = nil
print[['\
<div class="btn-group">\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">Hosts]] print(flowhosts_type_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu" role="menu" id="flow_dropdown">\
<li><a href="]] print(getPageUrl(flowhosts_type_params)) print[[">All Hosts</a></li>\]]
for _, htype in ipairs({
{"local_only", "Local Only"},
{"remote_only", "Remote Only"},
{"local_origin_remote_target", "Local Client - Remote Server"},
{"remote_origin_local_target", "Local Server - Remote Client"}}) do
flowhosts_type_params["flowhosts_type"] = htype[1]
print[[<li]]
if htype[1] == flowhosts_type then print(' class="active"') end
print[[><a href="]] print(getPageUrl(flowhosts_type_params)) print[[">]] print(htype[2]) print[[</a></li>]]
end
print[[\
</ul>\
</div>\
']]
-- L7 Application
print(', \'<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-toggle="dropdown">Applications ' .. application_filter .. '<span class="caret"></span></button> <ul class="dropdown-menu" role="menu" id="flow_dropdown">')
print('<li><a href="')
local application_filter_params = table.clone(filter_url_params)
application_filter_params["application"] = nil
print(getPageUrl(application_filter_params))
print('">All Proto</a></li>')
for key, value in pairsByKeys(ndpistats["ndpi"], asc) do
@ -174,16 +201,32 @@ for key, value in pairsByKeys(ndpistats["ndpi"], asc) do
if(key == application) then
class_active = ' class="active"'
end
print('<li '..class_active..'><a href="'..ntop.getHttpPrefix()..'/lua/flows_stats.lua?application=' .. key)
if(host ~= nil) then print('&host='..host) end
if(vhost ~= nil) then print('&vhost='..vhost) end
if(network_id ~= nil) then print('&network='..network_id) end
print('<li '..class_active..'><a href="')
application_filter_params["application"] = key
print(getPageUrl(application_filter_params))
print('">'..key..'</a></li>')
end
print("</ul> </div>'")
print("</ul> </div>' ],\n")
-- Ip version selector
local ipversion_params = table.clone(filter_url_params)
ipversion_params["version"] = nil
print[[, '\
<div class="btn-group pull-right">\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">IP Version]] print(ipversion_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu" role="menu" id="flow_dropdown">\
<li><a href="]] print(getPageUrl(ipversion_params)) print[[">All Versions</a></li>\
<li]] if ipversion == "4" then print(' class="active"') end print[[><a href="]] ipversion_params["version"] = "4"; print(getPageUrl(ipversion_params)); print[[">IPv4 Only</a></li>\
<li]] if ipversion == "6" then print(' class="active"') end print[[><a href="]] ipversion_params["version"] = "6"; print(getPageUrl(ipversion_params)); print[[">IPv6 Only</a></li>\
</ul>\
</div>\
']]
-- end buttons
print(" ],\n")
ntop.dumpFile(dirs.installdir .. "/httpdocs/inc/flows_stats_top.inc")