ntopng/scripts/lua/modules/notifications/recipients_rest_utils.lua
2024-01-12 11:44:18 +01:00

145 lines
4 KiB
Lua

--
-- (C) 2017-24 - ntop.org
--
local dirs = ntop.getDirs()
require "lua_utils"
local alert_severities = require "alert_severities"
local checks = require "checks"
local host_pools = require "host_pools":create()
local am_utils = require "am_utils"
local alert_entities = require "alert_entities"
-- ##############################################
local recipients_rest_utils = {}
-- ##############################################
-- @brief Parses and validates a comma-separated list of check category ids into a lua array
-- @return A lua array of valid check category ids
function recipients_rest_utils.parse_check_categories(categories_string)
local categories = {}
if isEmptyString(categories_string) then return categories end
-- Unfold the categories csv
categories = categories_string:split(",") or {categories_string}
local res = {}
for _, category_id in pairs(categories) do
local category_id = tonumber(category_id)
for _, category in pairs(checks.check_categories) do
if category_id == category.id then
res[#res + 1] = category_id
break
end
end
end
return res
end
-- ##############################################
-- @brief Parses and validates a comma-separated list of check entity ids into a lua array
-- @return A lua array of valid checkentity ids
function recipients_rest_utils.parse_check_entities(entities_string)
local entities = {}
if isEmptyString(entities_string) then return entities end
-- Unfold the entities csv
entities = entities_string:split(",") or {entities_string}
local res = {}
for _, entity_id in pairs(entities) do
local entity_id = tonumber(entity_id)
for _, entity_info in pairs(alert_entities) do
if entity_id == entity_info.entity_id then
res[#res + 1] = entity_id
break
end
end
end
return res
end
-- ##############################################
-- @brief Parses and validates a comma-separated list of host pool ids into a lua array
-- @return A lua array of valid ids
function recipients_rest_utils.parse_host_pools(pools_string)
local pools = host_pools:get_all_pools()
local pools_list = {}
if isEmptyString(pools_string) then return pools_list end
-- Unfold the pools csv
pools_list = pools_string:split(",") or {pools_string}
local res = {}
for _, pool_id in pairs(pools_list) do
local pool_id = tonumber(pool_id)
for _, pool in pairs(pools) do
if pool_id == pool.pool_id then
res[#res + 1] = pool_id
break
end
end
end
return res
end
-- ##############################################
-- @brief Parses and validates a comma-separated list of active monitoring hosts into a lua array
-- @return A lua array of valid ids
function recipients_rest_utils.parse_am_hosts(hosts_string)
local hosts_list = {}
if isEmptyString(hosts_string) then return hosts_list end
-- Unfold the hosts csv
hosts_list = hosts_string:split(",") or {hosts_string}
local am_hosts = am_utils.getHosts()
local res = {}
for _, host_id in pairs(hosts_list) do
if am_hosts[host_id] then
res[#res + 1] = host_id
else
-- Debug
tprint(host_id .. " AM host not found")
end
end
return res
end
-- ##############################################
-- @brief Parses and validates a severity id string and returns it as a number
-- @param minimum_severity_id_string An string with an integer severity id as found in `alert_severities`
-- @return A valid integer severity id or nil when validation fails
function recipients_rest_utils.parse_minimum_severity(minimum_severity_id_string)
local minimum_severity_id = tonumber(minimum_severity_id_string)
for _, alert_severity in pairs(alert_severities) do
if minimum_severity_id == alert_severity.severity_id then
return minimum_severity_id
end
end
return alert_severities.notice.severity_id -- No minimum severity
end
-- ##############################################
return recipients_rest_utils