ntopng/scripts/lua/modules/recipients/recipients_lua_utils.lua
2020-08-28 13:19:58 +02:00

107 lines
2.9 KiB
Lua

--
-- (C) 2017-20 - ntop.org
--
local dirs = ntop.getDirs()
package.path = dirs.installdir .. "/scripts/lua/modules/recipients/?.lua;" .. package.path
require "lua_utils"
local json = require "dkjson"
local os_utils = require "os_utils"
local lua_path_utils = require "lua_path_utils"
local base_recipients = require "base_recipients"
-- ##############################################
local recipients_lua_utils = {}
-- ##############################################
-- @brief Returns an array of recipient Lua class instances, for all available recipients
-- e.g., {sqlite_recipients:create(), ...}
--
local function all_recipient_instances_factory()
local recipients_dir = os_utils.fixPath(dirs.installdir .. "/scripts/lua/modules/recipients/")
lua_path_utils.package_path_prepend(recipients_dir)
local res = {}
for recipient_file in pairs(ntop.readdir(recipients_dir)) do
if recipient_file:match("_recipients%.lua$") then
local recipient_module_name = recipient_file:gsub(".lua", "")
local recipient_require = os_utils.fixPath(string.format("recipients.%s", recipient_module_name))
local recipient = require(recipient_require)
if recipient.create then
-- If it has a method create, then we can instantiate it and add it to the result
local instance = recipient:create()
res[#res + 1] = instance
end
end
end
return res
end
-- ##############################################
local all_instances_cache
local function get_all_instances_cache()
if not all_instances_cache then
all_instances_cache = all_recipient_instances_factory()
end
return all_instances_cache
end
-- ##############################################
function recipients_lua_utils.dispatch_trigger_notification(notification)
local all_instances = get_all_instances_cache()
for _, instance in pairs(all_instances) do
instance:dispatch_trigger_notification(notification)
end
return true
end
-- ##############################################
function recipients_lua_utils.dispatch_release_notification(notification)
local all_instances = get_all_instances_cache()
for _, instance in pairs(all_instances) do
instance:dispatch_release_notification(notification)
end
return true
end
-- ##############################################
function recipients_lua_utils.dispatch_store_notification(notification)
local all_instances = get_all_instances_cache()
for _, instance in pairs(all_instances) do
instance:dispatch_store_notification(notification)
end
return true
end
-- ##############################################
function recipients_lua_utils.process_notifications(notification)
local all_instances = get_all_instances_cache()
for _, instance in pairs(all_instances) do
instance:process_notifications(notification)
end
return true
end
-- ##############################################
return recipients_lua_utils