-- -- (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