mirror of
https://github.com/ntop/ntopng.git
synced 2026-04-28 23:19:33 +00:00
Move old code for checking quotas
This commit is contained in:
parent
f2b9912e5f
commit
354d8623a9
1 changed files with 8 additions and 138 deletions
|
|
@ -205,150 +205,20 @@ end
|
|||
|
||||
-- #################################
|
||||
|
||||
-- Keys used for Quota Check (see quota_exceeded.lua)
|
||||
|
||||
-- A redis set with host pools as keys
|
||||
local function getActivePoolsHashKey(ifid)
|
||||
return "ntopng.cache.active_pools.ifid_" .. ifid
|
||||
function alert_utils.getActivePoolsHashKey()
|
||||
return "ntopng.cache.active_pools"
|
||||
end
|
||||
|
||||
function alert_utils.deleteActivePoolsKey(ifid)
|
||||
ntop.delCache(getActivePoolsHashKey(ifid))
|
||||
function alert_utils.deleteActivePoolsKey()
|
||||
ntop.delCache(getActivePoolsHashKey())
|
||||
end
|
||||
|
||||
-- #################################
|
||||
|
||||
-- Redis hashe with key=pool and value=list of quota_exceed_items, separated by |
|
||||
local function getPoolsQuotaExceededItemsKey(ifid)
|
||||
return "ntopng.cache.quota_exceeded_pools.ifid_" .. ifid
|
||||
end
|
||||
|
||||
-- #################################
|
||||
|
||||
function alert_utils.check_host_pools_alerts(params, ifid, alert_pool_connection_enabled, alerts_on_quota_exceeded)
|
||||
local active_pools_set = getActivePoolsHashKey(ifid)
|
||||
local prev_active_pools = swapKeysValues(ntop.getMembersCache(active_pools_set)) or {}
|
||||
local pools_stats = interface.getHostPoolsStats()
|
||||
local quota_exceeded_pools_key = getPoolsQuotaExceededItemsKey(ifid)
|
||||
local quota_exceeded_pools_values = ntop.getHashAllCache(quota_exceeded_pools_key) or {}
|
||||
local quota_exceeded_pools = {}
|
||||
local now_active_pools = {}
|
||||
|
||||
-- Deserialize quota_exceeded_pools
|
||||
for pool, v in pairs(quota_exceeded_pools_values) do
|
||||
quota_exceeded_pools[pool] = {}
|
||||
|
||||
for _, group in pairs(split(quota_exceeded_pools_values[pool], "|")) do
|
||||
local parts = split(group, "=")
|
||||
|
||||
if #parts == 2 then
|
||||
local proto = parts[1]
|
||||
local quota = parts[2]
|
||||
|
||||
local parts = split(quota, ",")
|
||||
quota_exceeded_pools[pool][proto] = {toboolean(parts[1]), toboolean(parts[2])}
|
||||
end
|
||||
end
|
||||
-- quota_exceeded_pools[pool] is like {Youtube={true, false}}, where true is bytes_exceeded, false is time_exceeded
|
||||
end
|
||||
|
||||
local pools = interface.getHostPoolsInfo()
|
||||
if(pools ~= nil) and (pools_stats ~= nil) then
|
||||
for pool, info in pairs(pools.num_members_per_pool) do
|
||||
local pool_stats = pools_stats[tonumber(pool)]
|
||||
local pool_exceeded_quotas = quota_exceeded_pools[pool] or {}
|
||||
|
||||
-- Pool quota
|
||||
if((pool_stats ~= nil) and (shaper_utils ~= nil)) then
|
||||
local quotas_info = shaper_utils.getQuotasInfo(ifid, pool, pool_stats)
|
||||
|
||||
for proto, info in pairs(quotas_info) do
|
||||
local prev_exceeded = pool_exceeded_quotas[proto] or {false,false}
|
||||
|
||||
if alerts_on_quota_exceeded then
|
||||
if info.bytes_exceeded and not prev_exceeded[1] then
|
||||
local alert = alert_consts.alert_types.alert_quota_exceeded.new(
|
||||
"traffic_quota",
|
||||
pool,
|
||||
proto,
|
||||
info.bytes_value,
|
||||
info.bytes_quota
|
||||
)
|
||||
|
||||
alert:set_score_warning()
|
||||
alert:store(alerts_api.hostPoolEntity(pool))
|
||||
end
|
||||
|
||||
if info.time_exceeded and not prev_exceeded[2] then
|
||||
local alert = alert_consts.alert_types.alert_quota_exceeded.new(
|
||||
"time_quota",
|
||||
pool,
|
||||
proto,
|
||||
info.time_value,
|
||||
info.time_quota
|
||||
)
|
||||
|
||||
alert:set_score_warning()
|
||||
alert:store(alerts_api.hostPoolEntity(pool))
|
||||
end
|
||||
end
|
||||
|
||||
if not info.bytes_exceeded and not info.time_exceeded then
|
||||
-- delete as no quota is left
|
||||
pool_exceeded_quotas[proto] = nil
|
||||
else
|
||||
-- update/add serialized
|
||||
pool_exceeded_quotas[proto] = {info.bytes_exceeded, info.time_exceeded}
|
||||
end
|
||||
end
|
||||
|
||||
if table.empty(pool_exceeded_quotas) then
|
||||
ntop.delHashCache(quota_exceeded_pools_key, pool)
|
||||
else
|
||||
-- Serialize the new quota information for the pool
|
||||
for proto, value in pairs(pool_exceeded_quotas) do
|
||||
pool_exceeded_quotas[proto] = table.concat({tostring(value[1]), tostring(value[2])}, ",")
|
||||
end
|
||||
|
||||
ntop.setHashCache(quota_exceeded_pools_key, pool, table.tconcat(pool_exceeded_quotas, "=", "|"))
|
||||
end
|
||||
end
|
||||
|
||||
-- Pool presence
|
||||
if (pool ~= host_pools.DEFAULT_POOL_ID) and (info.num_hosts > 0) then
|
||||
now_active_pools[pool] = 1
|
||||
|
||||
if not prev_active_pools[pool] then
|
||||
-- Pool connection
|
||||
ntop.setMembersCache(active_pools_set, pool)
|
||||
|
||||
if alert_pool_connection_enabled then
|
||||
local alert = alert_consts.alert_types.alert_host_pool_connection.new(
|
||||
pool
|
||||
)
|
||||
|
||||
alert:set_score_notice()
|
||||
alert:store(alerts_api.hostPoolEntity(pool))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Pool presence
|
||||
for pool in pairs(prev_active_pools) do
|
||||
if not now_active_pools[pool] then
|
||||
-- Pool disconnection
|
||||
ntop.delMembersCache(active_pools_set, pool)
|
||||
|
||||
if alert_pool_connection_enabled then
|
||||
local alert = alert_consts.alert_types.alert_host_pool_disconnection.new(
|
||||
pool
|
||||
)
|
||||
|
||||
alert:set_score_notice()
|
||||
alert:store(alerts_api.hostPoolEntity(pool))
|
||||
end
|
||||
end
|
||||
end
|
||||
function alert_utils.getPoolsQuotaExceededItemsKey()
|
||||
return "ntopng.cache.quota_exceeded_pools"
|
||||
end
|
||||
|
||||
-- #################################
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue