Initial work to implement user script templates

This commit is contained in:
Simone Mainardi 2021-02-18 18:59:45 +01:00
parent ee8ffaca7d
commit 80ae202ad1
8 changed files with 420 additions and 8 deletions

View file

@ -0,0 +1,72 @@
--
-- (C) 2019-21 - ntop.org
--
-- ##############################################
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
package.path = dirs.installdir .. "/scripts/lua/modules/user_script_templates/?.lua;" .. package.path
-- Import the classes library.
local classes = require "classes"
-- Make sure to import the Superclass!
local user_script_template = require "user_script_template"
local http_lint = require "http_lint"
-- ##############################################
local elephant_flows = classes.class(user_script_template)
-- ##############################################
elephant_flows.meta = {
}
-- ##############################################
-- @brief Prepare an instance of the template
-- @return A table with the template built
function elephant_flows:init()
-- Call the parent constructor
self.super:init()
end
-- #######################################################
function elephant_flows:parseConfig(script, conf)
if(tonumber(conf.l2r_bytes_value) == nil) then
return false, "bad l2r_bytes_value value"
end
if(tonumber(conf.r2l_bytes_value) == nil) then
return false, "bad r2l_bytes_value value"
end
return http_lint.validateListItems(script, conf)
end
-- #######################################################
function elephant_flows:describeConfig(script, hooks_conf)
if not hooks_conf.all then
return '' -- disabled, nothing to show
end
-- E.g. '> 1 GB (L2R), > 2 GB (R2L), except: Datatransfer, Git'
local conf = hooks_conf.all.script_conf
local msg = i18n("user_scripts.elephant_flows_descr", {
l2r_bytes = bytesToSize(conf.l2r_bytes_value),
r2l_bytes = bytesToSize(conf.r2l_bytes_value),
})
if not table.empty(conf.items) then
msg = msg .. ". " .. i18n("user_scripts.exceptions", {exceptions = table.concat(conf.items, ', ')})
end
return(msg)
end
-- #######################################################
return elephant_flows

View file

@ -0,0 +1,52 @@
--
-- (C) 2019-21 - ntop.org
--
-- ##############################################
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
package.path = dirs.installdir .. "/scripts/lua/modules/user_script_templates/?.lua;" .. package.path
-- Import the classes library.
local classes = require "classes"
-- Make sure to import the Superclass!
local user_script_template = require "user_script_template"
local http_lint = require "http_lint"
-- ##############################################
local items_list = classes.class(user_script_template)
-- ##############################################
items_list.meta = {
}
-- ##############################################
-- @brief Prepare an instance of the template
-- @return A table with the template built
function items_list:init()
-- Call the parent constructor
self.super:init()
end
function items_list:parseConfig(script, conf)
return http_lint.validateListItems(script, conf)
end
-- #######################################################
function items_list:describeConfig(script, hooks_conf)
if((not hooks_conf.all) or (not hooks_conf.all.script_conf)) then
return '' -- disabled, nothing to show
end
local items = hooks_conf.all.script_conf.items or {}
return table.concat(items, ", ")
end
-- #######################################################
return items_list

View file

@ -0,0 +1,65 @@
--
-- (C) 2019-21 - ntop.org
--
-- ##############################################
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
package.path = dirs.installdir .. "/scripts/lua/modules/user_script_templates/?.lua;" .. package.path
-- Import the classes library.
local classes = require "classes"
-- Make sure to import the Superclass!
local user_script_template = require "user_script_template"
local http_lint = require "http_lint"
-- ##############################################
local long_lived = classes.class(user_script_template)
-- ##############################################
long_lived.meta = {
}
-- ##############################################
-- @brief Prepare an instance of the template
-- @return A table with the template built
function long_lived:init()
-- Call the parent constructor
self.super:init()
end
-- #######################################################
function long_lived:parseConfig(script, conf)
if(tonumber(conf.min_duration) == nil) then
return false, "bad min_duration value"
end
return http_lint.validateListItems(script, conf)
end
-- #######################################################
function long_lived:describeConfig(script, hooks_conf)
if not hooks_conf.all then
return '' -- disabled, nothing to show
end
local conf = hooks_conf.all.script_conf
local msg = i18n("user_scripts.long_lived_flows_descr", {
duration = secondsToTime(conf.min_duration),
})
if(not table.empty(conf.items)) then
msg = msg .. ". " .. i18n("user_scripts.exceptions", {exceptions = table.concat(conf.items, ', ')})
end
return(msg)
end
-- #######################################################
return long_lived

View file

@ -0,0 +1,79 @@
--
-- (C) 2019-21 - ntop.org
--
-- ##############################################
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
package.path = dirs.installdir .. "/scripts/lua/modules/user_script_templates/?.lua;" .. package.path
-- Import the classes library.
local classes = require "classes"
-- Make sure to import the Superclass!
local user_script_template = require "user_script_template"
local http_lint = require "http_lint"
-- ##############################################
local multi_select = classes.class(user_script_template)
-- ##############################################
multi_select.meta = {
}
-- ##############################################
-- @brief Prepare an instance of the template
-- @return A table with the template built
function multi_select:init()
-- Call the parent constructor
self.super:init()
end
-- #######################################################
function multi_select:parseConfig(script, conf)
return http_lint.validateListItems(script, conf)
end
-- #######################################################
function multi_select:describeConfig(script, hooks_conf)
if (not hooks_conf.all) then
return '' -- disabled, nothing to show
end
local conf = hooks_conf.all.script_conf
local msg = ''
if not table.empty(conf.items) then
local temp_msg = {}
local groups = script.gui.groups
-- build a string containing selected elements separated by comma
for _, group in ipairs(groups) do
local elements = group.elements
for _, element in ipairs(elements) do
local id = element[1]
local label = element[2]
if table.has_key(conf.items, id) then
-- if the label is nil then use the id
table.insert(temp_msg, label or id)
end
end
end
msg = table.concat(temp_msg, ', ')
end
return (msg)
end
-- #######################################################
return multi_select

View file

@ -0,0 +1,88 @@
--
-- (C) 2019-21 - ntop.org
--
-- ##############################################
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
package.path = dirs.installdir .. "/scripts/lua/modules/user_script_templates/?.lua;" .. package.path
-- Import the classes library.
local classes = require "classes"
-- Make sure to import the Superclass!
local user_script_template = require "user_script_template"
local http_lint = require "http_lint"
local format_utils = require "format_utils"
-- ##############################################
local threshold_cross = classes.class(user_script_template)
-- ##############################################
threshold_cross.meta = {
}
-- ##############################################
-- @brief Prepare an instance of the template
-- @return A table with the template built
function threshold_cross:init()
-- Call the parent constructor
self.super:init()
end
-- #######################################################
function threshold_cross:parseConfig(script, conf)
if(not http_lint.validateOperator(conf.operator)) then
return false, "bad operator"
end
if(tonumber(conf.threshold) == nil) then
return false, "bad threshold"
end
return true, conf
end
-- #######################################################
function threshold_cross:describeConfig(script, hooks_conf)
local alert_consts = require("alert_consts")
local granularities_order = {"min", "5mins", "hour", "day"}
local items = {}
-- E.g. "> 50 Sec (Minute), > 300 Sec (Hourly)"
for _, granularity in ipairs(granularities_order) do
local hook = hooks_conf[granularity]
local granularity = alert_consts.alerts_granularities[granularity]
if granularity and hook and hook.script_conf.threshold then
local unit = ""
local op = ternary(hook.script_conf.operator == "gt", ">", "<")
if(script.gui and script.gui.i18n_field_unit) then
unit = " " .. i18n(script.gui.i18n_field_unit)
end
-- Note: it would be desirable to export a 'script.unit' field
-- instead of 'script.gui.i18n_field_unit' to properly format
-- numeri values as with bytes below.
if script.gui.i18n_field_unit == 'field_units.bytes' then
local formatted_threshold = format_utils.bytesToSize(hook.script_conf.threshold)
items[#items + 1] = string.format("%s (%s)", op,
formatted_threshold, i18n(granularity.i18n_title) or granularity.i18n_title)
else
items[#items + 1] = string.format("%s %s%s (%s)", op,
hook.script_conf.threshold, unit, i18n(granularity.i18n_title) or granularity.i18n_title)
end
end
end
return table.concat(items, ", ")
end
-- #######################################################
return threshold_cross

View file

@ -0,0 +1,36 @@
--
-- (C) 2013-21 - ntop.org
--
local dirs = ntop.getDirs()
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
-- Import the classes library.
local classes = require "classes"
-- ##############################################
local user_script_template = classes.class()
-- ##############################################
function user_script_template:init()
end
-- ##############################################
function user_script_template:parseConfig(script, conf)
return true, conf
end
-- ##############################################
function user_script_template:describeConfig(script, hooks_conf)
return ''
end
-- ##############################################
return user_script_template
-- ##############################################