mirror of
https://github.com/ntop/ntopng.git
synced 2026-04-29 07:29:32 +00:00
Improves error handling and visualization upon data deletion
This commit is contained in:
parent
290eaa5970
commit
c1c3c49b45
3 changed files with 71 additions and 46 deletions
|
|
@ -8,30 +8,53 @@ local os_utils = require "os_utils"
|
|||
local delete_data_utils = {}
|
||||
local dry_run = false
|
||||
|
||||
function delete_data_utils.status_to_i18n(err)
|
||||
local map = {
|
||||
ERR_NO_HOST_FS_DATA = "delete_data..msg_err_no_fs_data",
|
||||
ERR_INVALID_HOST = "delete_data.msg_err_invalid_host",
|
||||
}
|
||||
|
||||
return map[err] or 'delete_data.msg_err_unknown'
|
||||
end
|
||||
|
||||
local function delete_host_fs_data(interface_id, host_info)
|
||||
local status = "OK"
|
||||
|
||||
if not isMacAddress(host_info["host"]) and not isIPv4(host_info["host"]) and not isIPv6(host_info["host"]) then
|
||||
-- TODO: try to find the IP address of a string
|
||||
return false
|
||||
status = "ERR_INVALID_HOST"
|
||||
else
|
||||
-- getRRDName automatically determines the right path both for ip and mac addresses
|
||||
local host_rrd_dir = os_utils.fixPath(dirs.workingdir .. "/" .. interface_id .. "/rrd/" .. getPathFromKey(hostinfo2hostkey(host_info)))
|
||||
|
||||
if not ntop.isdir(host_rrd_dir) then
|
||||
-- missing directory
|
||||
status = "ERR_NO_HOST_FS_DATA"
|
||||
else
|
||||
local host_rrd_dir_contents = ntop.readdir(host_rrd_dir)
|
||||
|
||||
if host_rrd_dir_contents and table.len(host_rrd_dir_contents) == 0 then
|
||||
-- directory existing, but missing files
|
||||
status = "ERR_NO_HOST_FS_DATA"
|
||||
end
|
||||
|
||||
if not dry_run then
|
||||
ntop.rmdir(host_rrd_dir)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- getRRDName automatically determines the right path both for ip and mac addresses
|
||||
local host_rrd_dir = os_utils.fixPath(dirs.workingdir .. "/" .. interface_id .. "/rrd/" .. getPathFromKey(hostinfo2hostkey(host_info)))
|
||||
|
||||
if not dry_run and ntop.isdir(host_rrd_dir) then
|
||||
ntop.rmdir(host_rrd_dir)
|
||||
end
|
||||
|
||||
return true
|
||||
return {status = status}
|
||||
end
|
||||
|
||||
local function delete_host_redis_keys(interface_id, host_info)
|
||||
local status = "OK"
|
||||
local serialized_k, dns_k, devnames_k, devtypes_k
|
||||
|
||||
if not isMacAddress(host_info["host"]) then
|
||||
-- this is an IP address, see HOST_SERIALIZED_KEY (ntop_defines.h)
|
||||
serialized_k = string.format("ntopng.serialized_hosts.ifid_%u__%s@%d", interface_id, host_info["host"], host_info["vlan"] or "0")
|
||||
dns_k = string.format("ntopng.dns.cache.%s", host_info["host"]) -- neither vlan nor ifid implemented for the dns cache
|
||||
else
|
||||
elseif isIPv4(host_info["host"]) or isIPv6(host_info["host"]) then
|
||||
-- is a mac address, see MAC_SERIALIED_KEY (see ntop_defines.h)
|
||||
serialized_k = string.format("ntopng.serialized_macs.ifid_%u__%s", interface_id, host_info["host"])
|
||||
devnames_k = string.format("ntopng.cache.devnames.%s", host_info["host"])
|
||||
|
|
@ -45,48 +68,39 @@ local function delete_host_redis_keys(interface_id, host_info)
|
|||
if dns_k then ntop.delCache(dns_k) end
|
||||
end
|
||||
|
||||
return true
|
||||
return {status = status}
|
||||
end
|
||||
|
||||
local function delete_host_mysql_flows(interface_id, host_info)
|
||||
if not ntop.getPrefs()["is_dump_flows_to_mysql_enabled"] then
|
||||
-- nothing to do..
|
||||
return true
|
||||
end
|
||||
local status = "OK"
|
||||
|
||||
local addr = host_info["host"]
|
||||
local vlan = host_info["vlan"] or 0
|
||||
local q
|
||||
if ntop.getPrefs()["is_dump_flows_to_mysql_enabled"] then
|
||||
local addr = host_info["host"]
|
||||
local vlan = host_info["vlan"] or 0
|
||||
local q
|
||||
|
||||
if isIPv4(addr) then
|
||||
q = string.format("DELETE FROM %s WHERE (IP_SRC_ADDR = INET_ATON('%s') OR IP_DST_ADDR = INET_ATON('%s')) AND VLAN_ID = %u",
|
||||
"flowsv4", addr, addr, vlan)
|
||||
elseif isIPv6(addr) then
|
||||
q = string.format("DELETE FROM %s WHERE (IP_SRC_ADDR = '%s' OR IP_DST_ADDR = '%s') AND VLAN_ID = %u",
|
||||
"flowsv6", addr, addr, vlan)
|
||||
else
|
||||
return true
|
||||
end
|
||||
if isIPv4(addr) then
|
||||
q = string.format("DELETE FROM %s WHERE (IP_SRC_ADDR = INET_ATON('%s') OR IP_DST_ADDR = INET_ATON('%s')) AND VLAN_ID = %u and INTERFACE_ID = %u",
|
||||
"flowsv4", addr, addr, vlan, interface_id)
|
||||
elseif isIPv6(addr) then
|
||||
q = string.format("DELETE FROM %s WHERE (IP_SRC_ADDR = '%s' OR IP_DST_ADDR = '%s') AND VLAN_ID = %u AND INTERFACE_ID = %u",
|
||||
"flowsv6", addr, addr, vlan, interface_id)
|
||||
end
|
||||
|
||||
if not dry_run and q then
|
||||
interface.execSQLQuery(q)
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function delete_data_utils.delete_host(interface_id, host_info)
|
||||
res = {status = "ERR_DELETE_FAILED"}
|
||||
|
||||
if delete_host_fs_data(interface_id, host_info) then
|
||||
if delete_host_redis_keys(interface_id, host_info) then
|
||||
if delete_host_mysql_flows(interface_id, host_info) then
|
||||
res = {status = "OK"}
|
||||
end
|
||||
if not dry_run and q then
|
||||
interface.execSQLQuery(q)
|
||||
end
|
||||
end
|
||||
|
||||
return res
|
||||
return {status = status}
|
||||
end
|
||||
|
||||
function delete_data_utils.delete_host(interface_id, host_info)
|
||||
local h_fs = delete_host_fs_data(interface_id, host_info)
|
||||
local h_rk = delete_host_redis_keys(interface_id, host_info)
|
||||
local h_db = delete_host_mysql_flows(interface_id, host_info)
|
||||
|
||||
return {delete_host_fs_data = h_fs, delete_host_redis_keys = h_rk, delete_host_mysql_flows = h_db}
|
||||
end
|
||||
|
||||
return delete_data_utils
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue