ntopng/scripts/lua/modules/prefs_utils.lua
Simone Mainardi 616ca6b3d1 Implements preferences refresh facilities
Preferences set automatically trigger an update of
the class Preferences() members to make sure they are up
to date.

Additionally, the housekeeping frequency has been made customizable.
2016-05-31 19:09:07 +02:00

297 lines
11 KiB
Lua

--
-- (C) 2014-15 - ntop.org
--
-- This file contains the description of all functions
-- used to trigger host alerts
local verbose = false
-- notify ntopng upon preference changes
function notifyNtopng(key)
if key == nil then return end
-- notify runtime ntopng configuration changes
if string.starts(key, 'nagios') then
if verbose then io.write('notifying ntopng upon nagios pref change\n') end
ntop.reloadNagiosConfig()
end
end
-- ############################################
-- Runtime preference
function prefsInputFieldPrefs(label, comment, prekey, key, default_value, _input_type, showEnabled)
k = prekey..key
if(_GET[key] ~= nil) then
v_s = _GET[key]
v = tonumber(v_s)
v_cache = ntop.getPref(k)
value = v_cache
if ((v_cache==nil) or (v ~= v_cache)) then
if(v ~= nil and (v > 0) and (v <= 86400)) then
ntop.setPref(k, tostring(v))
value = v
elseif (v_s ~= nil) then
v_s = string.gsub(v_s, "ldaps:__", "ldaps://")
v_s = string.gsub(v_s, "ldap:__", "ldap://")
ntop.setPref(k, v_s)
value = v_s
end
-- least but not last we ascynchronously notify the runtime ntopng instance for changes
notifyNtopng(key)
end
else
v_s = ntop.getPref(k)
value = v_s
if((v_s==nil) or (v_s=="")) then
ntop.setPref(k, tostring(default_value))
value = default_value
notifyNtopng(key)
end
end
if ((showEnabled == nil) or (showEnabled == true)) then
showEnabled = "table-row"
else
showEnabled = "none"
end
local input_type = "text"
if _input_type ~= nil then input_type = _input_type end
print('<tr id="'..key..'" style="display: '..showEnabled..';"><td width=50%><strong>'..label..'</strong><p><small>'..comment..'</small></td>')
print [[
<td class="input-group col-lg-3" align=right>]]
print [[
<div class="input-group" >
<div >
<input id="id_input_]] print(key) print[["type="]] print(input_type) print [[" class="form-control" name="]] print(key) print [[" style="text-align:right;" value="]] print(value.."") print [[">
</div>
</div><!-- /input-group -->
</td></tr>
]]
end
function toggleTableButton(label, comment, on_label, on_value, on_color , off_label, off_value, off_color, submit_field, redis_key, disabled)
if(_GET[submit_field] ~= nil) then
ntop.setPref(redis_key, _GET[submit_field])
value = _GET[submit_field]
notifyNtopng(submit_field)
else
value = ntop.getPref(redis_key)
end
if (disabled == true) then
disabled = 'disabled = ""'
else
disabled = ""
end
-- Read it anyway to
if(value == off_value) then
rev_value = on_value
on_active = "btn-default"
off_active = "btn-"..off_color.." active"
else
rev_value = off_value
on_active = "btn-"..on_color.." active"
off_active = "btn-default"
end
if(label ~= "") then print('<tr><td width=50%><strong>'..label..'</strong><p><small>'..comment..'</small></td><td align=right>\n') end
print('<form>\n<div class="btn-group btn-toggle">')
print('<button type="submit" '..disabled..' class="btn btn-sm '..on_active..'">'..on_label..'</button>')
print('<button '..disabled..' class="btn btn-sm '..off_active..'">'..off_label..'</button></div>\n')
print('<input id="csrf" name="csrf" type="hidden" value="'..ntop.getRandomCSRFValue()..'" />\n')
print('<input type=hidden name='..submit_field..' value='..rev_value..' />\n')
print('</form>\n')
if(label ~= "") then print('</td></tr>') end
return(value)
end
function toggleTableButtonPrefs(label, comment, on_label, on_value, on_color , off_label, off_value, off_color, submit_field,
redis_key, default_value, disabled, elementToSwitch, hideOn, showElement)
value = ntop.getPref(redis_key)
if(_GET[submit_field] ~= nil) then
if ( (value == nil) or (value ~= _GET[submit_field])) then
ntop.setPref(redis_key, _GET[submit_field])
value = _GET[submit_field]
notifyNtopng(submit_field)
end
else
if ((value == nil) or (value == "")) then
if (default_value ~= nil) then
value = default_value
else
value = off_value
end
ntop.setPref(redis_key, value)
notifyNtopng(submit_field)
end
end
if (disabled == true) then
disabled = 'disabled = ""'
else
disabled = ""
end
-- Read it anyway to
if(value == off_value) then
on_active = "btn-default"
off_active = "btn-"..off_color.." active"
else
value = on_value
on_active = "btn-"..on_color.." active"
off_active = "btn-default"
end
local objRow = ""
if ((showElement ~= nil) and (showElement == false)) then
objRow = " style=\"display:none\""
else
objRow = " style=\"display:table-row\""
end
if(label ~= "") then print('<tr id="row_'..submit_field..'"'..objRow..'><td width=50%><strong>'..label..'</strong><p><small>'..comment..'</small></td><td align=right>\n') end
print('<div class="btn-group btn-toggle">')
print('<button type="button" onclick="'..submit_field..'_functionOn()" id="'..submit_field..'_on_id" '..disabled..' class="btn btn-sm '..on_active..'">'..on_label..'</button>')
print('<button type="button" onclick="'..submit_field..'_functionOff()" id="'..submit_field..'_off_id" '..disabled..' class="btn btn-sm '..off_active..'">'..off_label..'</button></div>\n')
print('<input type=hidden id="'..submit_field..'_input" name='..submit_field..' value="'..value..'"/>\n')
if(label ~= "") then print('</td></tr>') end
print('\n')
print('<script>\n')
print[[function ]] print(submit_field) print [[_functionOn(){
var classOn = document.getElementById("]] print(submit_field) print [[_on_id");
var classOff = document.getElementById("]] print(submit_field) print [[_off_id");
classOn.removeAttribute("class");
classOff.removeAttribute("class");
classOn.setAttribute("class", "btn btn-sm btn-]]print(on_color) print[[ active");
classOff.setAttribute("class", "btn btn-sm btn-default");
$("#]] print(submit_field) print [[_input").val("]] print(on_value) print[[");]]
if elementToSwitch ~= nil then
for element = 1, #elementToSwitch do
if ((hideOn == nil) or (hideOn == false)) then
print('$("#'..elementToSwitch[element]..'").css("display","table-row");')
else
print('$("#'..elementToSwitch[element]..'").css("display","none");')
end
end
end
print[[
}
]]
print[[
function ]] print(submit_field) print [[_functionOff(){
var classOn = document.getElementById("]] print(submit_field) print [[_on_id");
var classOff = document.getElementById("]] print(submit_field) print [[_off_id");
classOn.removeAttribute("class");
classOff.removeAttribute("class");
classOn.setAttribute("class", "btn btn-sm btn-default");
classOff.setAttribute("class", "btn btn-sm btn-]]print(off_color) print[[ active");
$("#]] print(submit_field) print [[_input").val("]]print(off_value) print[[");]]
if elementToSwitch ~= nil then
for element = 1, #elementToSwitch do
if ((hideOn == nil) or (hideOn == false)) then
print('$("#'..elementToSwitch[element]..'").css("display","none");')
else
print('$("#'..elementToSwitch[element]..'").css("display","table-row");')
end
end
end
print [[
}]]
print('</script>\n')
return(value)
end
function multipleTableButtonPrefs(label, comment, array_labels, array_values, default_value, selected_color,
submit_field, redis_key, disabled, elementToSwitch, showElementArray,
javascriptAfterSwitch, showElement)
if(_GET[submit_field] ~= nil) then
ntop.setPref(redis_key, _GET[submit_field])
value = _GET[submit_field]
notifyNtopng(submit_field)
else
value = ntop.getPref(redis_key)
if(value == "") then
if(default_value ~= nil) then
ntop.setPref(redis_key, default_value)
value = default_value
end
end
end
if (disabled == true) then
disabled = 'disabled = ""'
else
disabled = ""
end
local objRow = ""
if ((showElement ~= nil) and (showElement == false)) then
objRow = " style=\"display:none\""
else
objRow = " style=\"display:table-row\""
end
if(value ~= nil) then
if(label ~= "") then print('<tr id="row_'..submit_field..'"'..objRow..'><td width=50%><strong>'..label..'</strong><p><small>'..comment..'</small></td><td align=right>\n') end
print('<div class="btn-group" data-toggle="buttons-radio" data-toggle-name="'..submit_field..'">')
for nameCount = 1, #array_labels do
local type_button = "btn-default"
if(value == array_values[nameCount]) then
type_button = "btn-"..selected_color.." active"
end
print('<button id="id_'..array_values[nameCount]..'" value="'..array_values[nameCount]..'" type="button" class="btn btn-sm '..type_button..'" data-toggle="button">'..array_labels[nameCount]..'</button>\n')
end
print('</div>\n')
print('<input type="hidden" id="id-toggle-'..submit_field..'" name="'..submit_field..'" value="'..value..'" />\n')
print('<script>\n')
for nameCount = 1, #array_labels do
print('$("#id_'..array_values[nameCount]..'").click(function() {\n')
print(' $(\'#id-toggle-'..submit_field..'\').val("'..array_values[nameCount]..'");\n')
for indexLabel = 1, #array_labels do
print[[ var class_]] print(array_values[indexLabel]) print[[ = document.getElementById("id_]] print(array_values[indexLabel]) print [[");
class_]] print(array_values[indexLabel]) print[[.removeAttribute("class");]]
if(array_values[indexLabel] == array_values[nameCount]) then
print[[class_]] print(array_values[indexLabel]) print[[.setAttribute("class", "btn btn-sm btn-]]print(selected_color) print[[ active");]]
else
print[[class_]] print(array_values[indexLabel]) print[[.setAttribute("class", "btn btn-sm btn-default");]]
end
end
if (showElementArray ~= nil) then
for indexSwitch = 1, #showElementArray do
if (indexSwitch == nameCount) then
if elementToSwitch ~= nil then
for element = 1, #elementToSwitch do
if (showElementArray[indexSwitch] == true) then
print('$("#'..elementToSwitch[element]..'").css("display","table-row");\n')
else
print('$("#'..elementToSwitch[element]..'").css("display","none");\n')
end
end
end
end
end
end
if javascriptAfterSwitch ~= nil then
print(javascriptAfterSwitch)
end
print('});\n')
end
print('</script>\n')
if(label ~= "") then print('</td></tr>') end
end
return(value)
end