ntopng/scripts/lua/get_user_script_config.lua
2021-02-16 16:05:16 +01:00

135 lines
3.3 KiB
Lua

--
-- (C) 2019-21 - ntop.org
--
local dirs = ntop.getDirs()
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
require "lua_utils"
local json = require("dkjson")
local user_scripts = require("user_scripts")
local alert_consts = require("alert_consts")
sendHTTPContentTypeHeader('application/json')
local subdir = _GET["script_subdir"] or "host"
local confset_id = tonumber(_GET["confset_id"])
local script_key = _GET["script_key"]
local script_type = user_scripts.getScriptType(subdir)
if(script_type == nil) then
traceError(TRACE_ERROR, TRACE_CONSOLE, "Bad subdir: " .. subdir)
return
end
if(script_key == nil) then
traceError(TRACE_ERROR, TRACE_CONSOLE, "Missing script_key parameter")
return
end
local config_set
if confset_id then
-- If confset_id has been submitted, the user-configuration is returned
config_set = user_scripts.getConfigsets()[confset_id]
else
-- If no confset_id has been submitted, the factory configuration is returned
config_set = user_scripts.getFactoryConfig()
end
if(config_set == nil) then
traceError(TRACE_ERROR, TRACE_CONSOLE, "Unknown configset ID: " .. confset_id)
return
end
-- ################################################
interface.select(getSystemInterfaceId())
local script = user_scripts.loadModule(getSystemInterfaceId(), script_type, subdir, script_key)
if(script == nil) then
traceError(TRACE_ERROR, TRACE_CONSOLE, "Unknown user script: " .. script_key)
return
end
local result = {
hooks = {},
gui = {},
metadata = {},
filters = {}
}
if(script.gui) then
local known_fields = {i18n_title=1, i18n_description=1, i18n_field_unit=1, input_builder=1}
for field, val in pairs(script.gui) do
if not known_fields[field] then
result.gui[field] = val
end
end
if(script.gui.i18n_field_unit) then
result.gui.fields_unit = i18n(script.gui.i18n_field_unit)
end
result.gui.input_builder = script.gui.input_builder
end
if (script.default_value) then
result.metadata.default_value = script.default_value
end
if (script.is_alert) then
result.metadata.is_alert = script.is_alert
end
-- Getting filter configurations
local filter_conf = config_set["filters"]
if not filter_conf then
goto try_filter_default_conf
end
if not filter_conf[subdir] then
goto try_filter_default_conf
end
if not filter_conf[subdir][script_key] then
goto try_filter_default_conf
end
if not filter_conf[subdir][script_key]["filter"] then
goto try_filter_default_conf
end
result.filters = filter_conf[subdir][script_key]["filter"]
tprint(result.filters)
if table.len(result.filters) > 0 then
goto skip_filter_conf
end
-------------------------------
::try_filter_default_conf::
-- No configuration found, trying to check if there is a default filter configured
result.filters = user_scripts.getDefaultFilters(interface.getId(), subdir, script_key)
::skip_filter_conf::
-------------------------------
local hooks_config = user_scripts.getScriptConfig(config_set, script, subdir)
for hook, config in pairs(hooks_config) do
local granularity_info = alert_consts.alerts_granularities[hook]
local label = nil
if(granularity_info) then
label = i18n(granularity_info.i18n_title)
end
result.hooks[hook] = table.merge(config, {
label = label or "",
})
end
-- ################################################
print(json.encode(result))