ntopng/scripts/lua/modules/widget_gui_utils.lua

210 lines
6.2 KiB
Lua

--
-- (C) 2013-26 - ntop.org
--
local dirs = ntop.getDirs()
package.path = dirs.installdir .. "/scripts/lua/modules/pools/?.lua;" .. package.path
require("lua_trace")
require("lua_utils")
local json = require("dkjson")
local ui_utils = require("ui_utils")
local template_utils = require("template_utils")
local widget_gui_utils = {}
-- a table with registered widgets to render
local registered_widgets = {
charts = {
-- [widgetName] = registeredWidget
},
}
local function build_css_styles(css_styles)
local style = {}
for name, value in pairs(css_styles) do
style[#style+1] = string.format("%s:%s", name, value)
end
return table.concat(style, ";")
end
local function check_widget_existance(widgets, name)
-- check if exists a widget with the same name
if table.has_key(registered_widgets.charts, name) then
traceError(TRACE_WARNING, TRACE_CONSOLE, string.format("Overriding existing [%s] widget...", name))
end
end
local color_palette = {
"#C6D9FD",
"#90EE90",
"#EE8434",
"#C95D63",
"#AE8799",
"#717EC3",
"#496DDB",
"#5A7ADE",
"#6986E1",
"#7791E4",
"#839BE6",
"#8EA4E8",
}
---Register a new Chart.js widget to be rendered
---@param name any
---@param type any
---@param update_time any
---@param datasources any
---@param additional_params any
function widget_gui_utils.register_chart_widget(name, type, update_time, datasources, additional_params)
additional_params = additional_params or {}
check_widget_existance(registered_widgets.charts, name)
registered_widgets.charts[name] = {
type = type,
update_time = update_time,
datasources = datasources,
additional_params = additional_params
}
end
--- Shortcut Functions
function widget_gui_utils.register_bubble_chart(name, update_time, datasources, additional_params)
widget_gui_utils.register_chart_widget(name, 'bubble', update_time, datasources, additional_params)
end
function widget_gui_utils.register_timeline_chart(name, update_time, datasources, additional_params)
widget_gui_utils.register_chart_widget(name, 'rangeBar', update_time, datasources, additional_params)
end
function widget_gui_utils.register_bar_chart(name, update_time, datasources, additional_params)
widget_gui_utils.register_chart_widget(name, 'bar', update_time, datasources, additional_params)
end
function widget_gui_utils.register_timeseries_area_chart(name, update_time, datasources)
widget_gui_utils.register_chart_widget(name, 'area', update_time, datasources, {
apex = {
legend = {
show = true,
},
chart = {
type = "area",
width = "100%",
height = "100%",
-- foreColor = "#999",
stacked = true,
toolbar = {
tools = {
selection = false,
zoomin = false,
zoomout = false,
reset = false,
pan = false,
-- set the zoom field to a space to hide the len icon
zoom = " ",
download = false
}
}
},
dataLabels = {
enabled = false
},
stroke = {
show = false,
curve = 'smooth',
},
fill = {
type = "solid"
},
xaxis = {
type = "datetime",
labels = {
datetimeUTC = false,
},
axisBorder = {
show = true
},
axisTicks = {
show = false
},
tooltip={
enabled=false
},
},
yaxis = {
show = true,
},
grid = {
show = false,
},
tooltip = {
x = {
format = "dd MMM yyyy HH:mm:ss"
},
},
}
})
end
function widget_gui_utils.register_pie_chart(name, update_time, datasources, additional_params)
widget_gui_utils.register_chart_widget(name, 'pie', update_time, datasources, additional_params)
end
function widget_gui_utils.register_donut_chart(name, update_time, datasources, additional_params)
widget_gui_utils.register_chart_widget(name, 'donut', update_time, datasources, additional_params)
end
function widget_gui_utils.register_radar_chart(name, update_time, datasources, additional_params)
widget_gui_utils.register_chart_widget(name, 'radar', update_time, datasources, additional_params)
end
function widget_gui_utils.register_polararea_chart(name, update_time, datasources, additional_params)
widget_gui_utils.register_chart_widget(name, 'polarArea', update_time, datasources, additional_params)
end
function widget_gui_utils.register_radialbar_chart(name, update_time, datasources, additional_params)
widget_gui_utils.register_chart_widget(name, 'radialBar', update_time, datasources, additional_params)
end
function widget_gui_utils.register_heatmap_chart(name, update_time, datasources, additional_params)
widget_gui_utils.register_chart_widget(name, 'heatmap', update_time, datasources, additional_params)
end
function widget_gui_utils.register_treemap_chart(name, update_time, datasources, additional_params)
widget_gui_utils.register_chart_widget(name, 'treemap', update_time, datasources, additional_params)
end
function widget_gui_utils.register_geomap(name, update_time, datasources, additional_params)
widget_gui_utils.register_chart_widget(name, 'geomap', update_time, datasources, additional_params)
end
---Get an array of chart widgets registered
---@return table
function widget_gui_utils.get_registered_chart_names()
local names = {}
for name, _ in pairs(registered_widgets.charts) do
names[#names+1] = name
end
return names
end
function widget_gui_utils.datasource(name, params)
return { endpoint = name .. build_query_params(params or {}), name = name, params = params }
end
function widget_gui_utils.get_color_palette()
return color_palette
end
return widget_gui_utils