Majow historical_flow_utils cleanup

This commit is contained in:
Alfredo Cardigliano 2023-06-27 16:17:38 +02:00
parent 44ddc0bf6e
commit 96a3117da3

View file

@ -1731,7 +1731,7 @@ local all_datatable_columns_def_by_tag = {
['cli_port'] = build_datatable_column_def_port('cli_port', "db_search.cli_port"),
['srv_port'] = build_datatable_column_def_port('srv_port', "db_search.srv_port"),
['packets'] = build_datatable_column_def_packets('packets', "db_search.packets"),
['bytes'] = build_datatable_column_def_default('bytes', "db_search.bytes"),
['bytes'] = build_datatable_column_def_bytes('bytes', "db_search.bytes"),
['throughput'] = {
title_i18n = "db_search.throughput",
data_field = "throughput",
@ -1807,593 +1807,6 @@ function historical_flow_utils.get_datatable_column_def_by_tag(tag)
end
end
------------------------------------------------------------------------
-- JS DataTable columns (deprecated)
-- #####################################
local function build_datatable_js_column_default(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap'}]]
}
end
-- #####################################
local function build_datatable_js_column_number(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined)
return NtopUtils.formatValue(]] .. name .. [[);
}}]]
}
end
-- #####################################
local function build_datatable_js_column_ip(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
let html_ref = '';
let location = '';
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined) {
if (]] .. name .. [[.reference !== undefined)
html_ref = ]] .. name .. [[.reference;
if (]] .. name .. [[.location)
location = ]] .. name .. [[.location.label;
return `<a class='tag-filter' data-tag-key='${]] .. name .. [[.tag_key}' data-tag-value='${]] .. name .. [[.value}' title='${]] .. name .. [[.title}' href='#'>${]] .. name .. [[.label}</a> ${location} ${html_ref}`;
}}}]] }
end
-- #####################################
local function build_datatable_js_column_port(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined)
return `<a class='tag-filter' data-tag-value='${]] .. name .. [[.value}' href='#'>${]] .. name .. [[.label}</a>`;
}}]]
}
end
-- #####################################
local function build_datatable_js_column_flow(name, data_name, label, order, hide)
return {
i18n = label,
order = 5,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', orderable: false, className: 'text-nowrap', width: '100%', render: DataTableRenders.formatFlowTuple}]]
}
end
-- #####################################
local function build_datatable_js_column_nw_latency(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined)
return `<a class='tag-filter' data-tag-value='${]] .. name .. [[}' href='#'>${NtopUtils.msecToTime(]] .. name .. [[)}</a>`;
}}]]
}
end
-- #####################################
local function build_datatable_js_column_asn(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined && ]] .. name .. [[.value != 0)
return `<a class='tag-filter' data-tag-value='${]] .. name .. [[.value}' title='${]] .. name .. [[.title}' href='#'>${]] .. name .. [[.label}</a>`;
return ''}}]] }
end
-- #####################################
local function build_datatable_js_column_snmp_interface(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined && ]] .. name .. [[.value != 0)
return `<a class='tag-filter' data-tag-value='${]] .. name .. [[.value}' title='${]] .. name .. [[.title}' href='#'>${]] .. name .. [[.label}</a>`;
return ''}}]] }
end
-- #####################################
local function build_datatable_js_column_network(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined) {
return `<a class='tag-filter' data-tag-value='${]] .. name .. [[.value}' title='${]] .. name .. [[.title}' href='#'>${]] .. name .. [[.label}</a>`;
}}}]] }
end
-- #####################################
local function build_datatable_js_column_pool_id(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined) {
return `<a class='tag-filter' data-tag-value='${]] .. name .. [[.value}' title='${]] .. name .. [[.title}' href='#'>${]] .. name .. [[.label}</a>`;
}}}]] }
end
-- #####################################
local function build_datatable_js_column_country(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined) {
return `<a class='tag-filter' data-tag-value='${]] .. name .. [[.value}' title='${]] .. name .. [[.title}' href='#'>${]] .. name .. [[.label}</a>`;
}}}]] }
end
-- #####################################
local function build_datatable_js_column_community_id(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined) {
return `<a class='tag-filter' data-tag-value='${]] .. name .. [[}' title='${]] .. name .. [[}' href='#'>${]] .. name .. [[}</a>`;
}}}]] }
end
-- #####################################
local function build_datatable_js_column_packets(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined)
return NtopUtils.formatPackets(]] .. name .. [[);
}}]]
}
end
-- #####################################
local function build_datatable_js_column_bytes(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined)
return NtopUtils.bytesToVolume(]] .. name .. [[);
}}]]
}
end
-- #####################################
local function build_datatable_js_column_tcp_flags(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined)
return `<a class='tag-filter' data-tag-value='${]] .. name .. [[.value}' title='${]] .. name .. [[.title}' href='#'>${]] .. name .. [[.label}</a>`;
}}]] }
end
-- #####################################
local function build_datatable_js_column_dscp(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. data_name .. [[', className: 'no-wrap', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined)
return `<a class='tag-filter' data-tag-value='${]] .. name .. [[.value}' title='${]] .. name .. [[.title}' href='#'>${]] .. name .. [[.label}</a>`;
}}]] }
end
-- #####################################
local function build_datatable_js_column_float(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. name .. [[', className: 'text-right', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined)
return (]] .. name .. [[ > 0) ? NtopUtils.ffloat(]] .. name .. [[) : "";
}}]] }
end
-- #####################################
local function build_datatable_js_column_msec(name, data_name, label, order, hide)
return {
i18n = label,
order = order,
visible_by_default = not hide,
js = [[
{name: ']] .. name .. [[', responsivePriority: 2, data: ']] .. name .. [[', className: 'text-right', render: (]] .. name .. [[, type) => {
if (type !== 'display') return ]] .. name .. [[;
if (]] .. name .. [[ !== undefined)
return (]] .. name .. [[ > 0) ? NtopUtils.msecToTime(]] .. name .. [[) : "";
}}]] }
end
-- #####################################
historical_flow_utils.datatable_js_column_builder_by_type = {
['default'] = build_datatable_js_column_default,
['number'] = build_datatable_js_column_number,
['ip'] = build_datatable_js_column_ip,
['port'] = build_datatable_js_column_port,
['asn'] = build_datatable_js_column_asn,
['tcp_flags'] = build_datatable_js_column_tcp_flags,
['dscp'] = build_datatable_js_column_dscp,
['packets'] = build_datatable_js_column_packets,
['bytes'] = build_datatable_js_column_bytes,
['float'] = build_datatable_js_column_float,
['msec'] = build_datatable_js_column_msec,
['network'] = build_datatable_js_column_network,
['pool_id'] = build_datatable_js_column_pool_id,
['country'] = build_datatable_js_column_country,
['snmp_interface'] = build_datatable_js_column_snmp_interface,
}
-- #####################################
local all_datatable_js_columns_by_tag = {
['first_seen'] = {
i18n = i18n("db_search.first_seen"),
order = 0,
visible_by_default = true,
js = [[
{name: 'first_seen', responsivePriority: 0, data: 'first_seen', className: 'no-wrap', createdCell: DataTableRenders.applyCellStyle, render: (first_seen, type) => {
if (type !== 'display') return first_seen;
if (first_seen !== undefined)
return first_seen.time;
}}]] },
['last_seen'] = {
i18n = i18n("db_search.last_seen"),
order = 1,
visible_by_default = true,
js = [[
{name: 'last_seen', responsivePriority: 0, data: 'last_seen', className: 'no-wrap'}]] },
['l4proto'] = {
i18n = i18n("db_search.l4proto"),
order = 2,
visible_by_default = true,
js = [[
{name: 'l4proto', responsivePriority: 0, data: 'l4proto', className: 'no-wrap', render: (l4proto, type) => {
if (type !== 'display') return l4proto;
if (l4proto !== undefined)
return `<a class='tag-filter' data-tag-value='${l4proto.label}' data-tag-realvalue='${l4proto.value}' title='${l4proto.title}' href='#'>${l4proto.label}</a>`;
}}]] },
['l7proto'] = {
i18n = i18n("db_search.l7proto"),
order = 3,
visible_by_default = true,
js = [[
{name: 'l7proto', responsivePriority: 0, data: 'l7proto', className: 'no-wrap', render: (proto, type, row) => {
if (type !== 'display') return proto;
if (proto !== undefined) {
let confidence = ""
if (proto.confidence !== undefined) {
(proto.confidence == "DPI") ? confidence = `<span class="badge bg-success">${proto.confidence}</span>` : confidence = `<span class="badge bg-warning">${proto.confidence}</span>`
}
return `<a class='tag-filter' data-tag-value='${proto.value}' title='${proto.title}' href='#'>${proto.label} ${confidence}</a>`;
}
}}]] },
['score'] = {
i18n = i18n("score"),
order = 4,
visible_by_default = true,
js = [[
{name: 'score', responsivePriority: 1, data: 'score', className: 'text-center', render: (score, type) => {
if (type !== 'display') return score;
if (score !== undefined && score.value != 0)
return `<a class='tag-filter' data-tag-value='${score.value}' href='#'><span style='color: ${score.color}'>` + NtopUtils.fint(score.value) + `</span></a>`;
}}]] },
["flow"] = build_datatable_js_column_flow("flow", "flow", i18n("flow")),
['vlan_id'] = {
i18n = i18n("db_search.vlan_id"),
order = 6,
visible_by_default = interface.hasVLANs(),
js = [[
{name: 'vlan_id', responsivePriority: 0, data: 'vlan_id', visible: ]] ..ternary(interface.hasVLANs(), "true", "false").. [[, className: 'no-wrap', render: (vlan_id, type) => {
if (type !== 'display')
return vlan_id;
if (vlan_id !== undefined)
return `<a class='tag-filter' data-tag-value='${vlan_id.value}' title='${vlan_id.title}' href='#'>${vlan_id.label}</a>`;
}}]] },
['cli_ip'] = build_datatable_js_column_ip('cli_ip', 'cli_ip', i18n("db_search.client"), 7),
['srv_ip'] = build_datatable_js_column_ip('srv_ip', 'srv_ip', i18n("db_search.server"), 8),
['cli_port'] = build_datatable_js_column_port('cli_port', 'cli_port', i18n("db_search.cli_port"), 9),
['srv_port'] = build_datatable_js_column_port('srv_port', 'srv_port', i18n("db_search.srv_port"), 10),
['packets'] = build_datatable_js_column_packets('packets', 'packets', i18n("db_search.packets"), 11, false),
['bytes'] = build_datatable_js_column_default('bytes', 'bytes', i18n("db_search.bytes"), 12, false),
['throughput'] = {
i18n = i18n("db_search.throughput"),
order = 13,
visible_by_default = true,
js = [[
{name: 'throughput', responsivePriority: 2, data: 'throughput', className: 'no-wrap'}]] },
['cli_asn'] = build_datatable_js_column_asn('cli_asn', 'cli_asn', i18n("db_search.cli_asn"), 14, true),
['srv_asn'] = build_datatable_js_column_asn('srv_asn', 'srv_asn', i18n("db_search.srv_asn"), 15, true),
['l7cat'] = {
i18n = i18n("db_search.l7cat"),
order = 16,
visible_by_default = true,
js = [[
{name: 'l7cat', responsivePriority: 2, data: 'l7cat', className: 'no-wrap', render: (l7cat, type) => {
if (type !== 'display') return l7cat;
if (l7cat !== undefined) {
const label = (l7cat.label || l7cat.value);
const value = l7cat.value;
return `<a class='tag-filter' data-tag-value='${value}' title='${l7cat.title}' href='#'>${label}</a>`;
}
}}]] },
['alert_id'] = {
i18n = i18n("db_search.alert_id"),
order = 17,
visible_by_default = true,
js = [[
{name: 'alert_id', responsivePriority: 2, data: 'alert_id', className: 'no-wrap', render: (alert_id, type) => {
if (type !== 'display') return alert_id;
if (alert_id !== undefined)
return `<a class='tag-filter' data-tag-value='${alert_id.value}' title='${alert_id.title}' href='#'>${alert_id.label}</a>`;
}}]] },
['flow_risk'] = {
i18n = i18n("db_search.flow_risk"),
order = 18,
visible_by_default = false,
js = [[
{name: 'flow_risk', responsivePriority: 2, data: 'flow_risk', className: 'no-wrap', render: (flow_risks, type) => {
if (type !== 'display') return flow_risks;
if (flow_risks !== undefined) {
let res = [];
for (let i = 0; i < flow_risks.length; i++) {
const flow_risk = flow_risks[i];
const flow_risk_label = (flow_risk.label || flow_risk.value);
const flow_risk_help = (flow_risk.help);
// res.push(`<a class='tag-filter' data-tag-value='${flow_risk.value}' title='${flow_risk.title}' href='#'>${flow_risk_label}</a>`);
res.push(`${flow_risk_label} ${flow_risk_help}`);
}
return res.join(', ');
}
}}]] },
['src2dst_tcp_flags'] = build_datatable_js_column_tcp_flags('src2dst_tcp_flags', 'src2dst_tcp_flags', i18n("db_search.src2dst_tcp_flags"), 19, true),
['dst2src_tcp_flags'] = build_datatable_js_column_tcp_flags('dst2src_tcp_flags', 'dst2src_tcp_flags', i18n("db_search.dst2src_tcp_flags"), 20, true),
['src2dst_dscp'] = build_datatable_js_column_dscp('src2dst_dscp', 'src2dst_dscp', i18n("db_search.src2dst_dscp"), 21, true),
['dst2src_dscp'] = build_datatable_js_column_dscp('dst2src_dscp', 'dst2src_dscp', i18n("db_search.dst2src_dscp"), 22, true),
['cli_nw_latency'] = build_datatable_js_column_nw_latency('cli_nw_latency', 'cli_nw_latency', i18n("db_search.cli_nw_latency"), 23, true),
['srv_nw_latency'] = build_datatable_js_column_nw_latency('srv_nw_latency', 'srv_nw_latency', i18n("db_search.srv_nw_latency"), 24, true),
['info'] = {
i18n = i18n("db_search.info"),
order = 25,
visible_by_default = true,
js = [[
{name: 'info', responsivePriority: 2, data: 'info', orderable: true, render: (info, type) => {
if (type !== 'display') return info;
if (info !== undefined)
return `<a class='tag-filter' data-tag-value='${info.title}' title='${info.title}' href='#'>${info.label}</a>`;
}}]] },
['observation_point_id'] = {
i18n = i18n("db_search.observation_point_id"),
order = 26,
visible_by_default = false,
js = [[
{name: 'observation_point_id', responsivePriority: 2, data: 'observation_point_id', visible: ]] ..ternary(not interface.isPacketInterface(), "true", "false").. [[, className: 'no-wrap', render: (observation_point_id, type) => {
if (type !== 'display') return observation_point_id;
if (observation_point_id !== undefined)
return `<a class='tag-filter' data-tag-value='${observation_point_id.value}' title='${observation_point_id.title}' href='#'>${observation_point_id.label}</a>`;
}}]] },
['probe_ip'] = {
i18n = i18n("db_search.probe_ip"),
order = 27,
visible_by_default = false,
js = [[
{name: 'probe_ip', responsivePriority: 2, data: 'probe_ip', className: 'no-wrap', render: (probe_ip, type) => {
if (type !== 'display') return probe_ip;
if (probe_ip !== undefined && probe_ip.label !== "") {
return `<a class='tag-filter' data-tag-value='${probe_ip.value}' title='${probe_ip.title}' href='#'>${probe_ip.label}</a>`;
}
return ''
}}]] },
['cli_network'] = build_datatable_js_column_network('cli_network', 'cli_network', i18n("db_search.tags.cli_network"), 28, true),
['srv_network'] = build_datatable_js_column_network('srv_network', 'srv_network', i18n("db_search.tags.srv_network"), 29, true),
['cli_host_pool_id'] = build_datatable_js_column_pool_id('cli_host_pool_id', 'cli_host_pool_id', i18n("db_search.tags.cli_host_pool_id"), 30, true),
['srv_host_pool_id'] = build_datatable_js_column_pool_id('srv_host_pool_id', 'srv_host_pool_id', i18n("db_search.tags.srv_host_pool_id"), 31, true),
["input_snmp"] = build_datatable_js_column_snmp_interface("input_snmp", "input_snmp", i18n("db_search.tags.input_snmp"), 32, true),
["output_snmp"] = build_datatable_js_column_snmp_interface("output_snmp", "output_snmp", i18n("db_search.tags.output_snmp"), 33, true),
['cli_country'] = build_datatable_js_column_country('cli_country', 'cli_country', i18n("db_search.tags.cli_country"), 34, true),
['srv_country'] = build_datatable_js_column_country('srv_country', 'srv_country', i18n("db_search.tags.srv_country"), 35, true),
['community_id'] = build_datatable_js_column_community_id('community_id', 'community_id', i18n("db_search.tags.community_id"), 36, true),
}
-- #####################################
function historical_flow_utils.get_datatable_js_columns_by_tag(tag, hide)
if all_datatable_js_columns_by_tag[tag] then
return all_datatable_js_columns_by_tag[tag]
else
local order = table.len(all_datatable_js_columns_by_tag)
return build_datatable_js_column_default(tag, tag, i18n("db_search.tags."..tag) or tag, order, hide)
end
end
-- #####################################
local function get_js_columns_to_display()
-- Display selected columns in the flows table
local js_columns = {}
js_columns["flow"] = build_datatable_js_column_flow("flow", "flow", i18n("flow"))
js_columns["l4proto"] = historical_flow_utils.get_datatable_js_columns_by_tag("l4proto")
js_columns["l7proto"] = historical_flow_utils.get_datatable_js_columns_by_tag("l7proto")
js_columns["score"] = historical_flow_utils.get_datatable_js_columns_by_tag("score")
js_columns["packets"] = historical_flow_utils.get_datatable_js_columns_by_tag("packets")
js_columns["bytes"] = historical_flow_utils.get_datatable_js_columns_by_tag("bytes")
js_columns["throughput"] = historical_flow_utils.get_datatable_js_columns_by_tag("throughput")
js_columns["first_seen"] = historical_flow_utils.get_datatable_js_columns_by_tag("first_seen")
js_columns["last_seen"] = historical_flow_utils.get_datatable_js_columns_by_tag("last_seen")
js_columns["l7cat"] = historical_flow_utils.get_datatable_js_columns_by_tag("l7cat")
js_columns["alert_id"] = historical_flow_utils.get_datatable_js_columns_by_tag("alert_id")
js_columns["flow_risk"] = historical_flow_utils.get_datatable_js_columns_by_tag("flow_risk")
js_columns["info"] = historical_flow_utils.get_datatable_js_columns_by_tag("info")
js_columns["cli_asn"] = historical_flow_utils.get_datatable_js_columns_by_tag("cli_asn")
js_columns["srv_asn"] = historical_flow_utils.get_datatable_js_columns_by_tag("srv_asn")
js_columns["src2dst_tcp_flags"] = historical_flow_utils.get_datatable_js_columns_by_tag("src2dst_tcp_flags")
js_columns["dst2src_tcp_flags"] = historical_flow_utils.get_datatable_js_columns_by_tag("dst2src_tcp_flags")
js_columns["cli_nw_latency"] = historical_flow_utils.get_datatable_js_columns_by_tag("cli_nw_latency")
js_columns["srv_nw_latency"] = historical_flow_utils.get_datatable_js_columns_by_tag("srv_nw_latency")
js_columns["observation_point_id"] = historical_flow_utils.get_datatable_js_columns_by_tag("observation_point_id")
js_columns["probe_ip"] = historical_flow_utils.get_datatable_js_columns_by_tag("probe_ip")
js_columns["cli_network"] = historical_flow_utils.get_datatable_js_columns_by_tag("cli_network")
js_columns["srv_network"] = historical_flow_utils.get_datatable_js_columns_by_tag("srv_network")
js_columns["cli_host_pool_id"] = historical_flow_utils.get_datatable_js_columns_by_tag("cli_host_pool_id")
js_columns["srv_host_pool_id"] = historical_flow_utils.get_datatable_js_columns_by_tag("srv_host_pool_id")
js_columns["cli_country"] = historical_flow_utils.get_datatable_js_columns_by_tag("cli_country")
js_columns["srv_country"] = historical_flow_utils.get_datatable_js_columns_by_tag("srv_country")
js_columns["input_snmp"] = historical_flow_utils.get_datatable_js_columns_by_tag("input_snmp")
js_columns["output_snmp"] = historical_flow_utils.get_datatable_js_columns_by_tag("output_snmp")
js_columns["community_id"] = historical_flow_utils.get_datatable_js_columns_by_tag("community_id")
local ifstats = interface.getStats()
if ifstats.has_seen_ebpf_events then
js_columns["cli_proc_name"] = historical_flow_utils.get_datatable_js_columns_by_tag("cli_proc_name")
js_columns["srv_proc_name"] = historical_flow_utils.get_datatable_js_columns_by_tag("srv_proc_name")
js_columns["cli_user_name"] = historical_flow_utils.get_datatable_js_columns_by_tag("cli_user_name")
js_columns["srv_user_name"] = historical_flow_utils.get_datatable_js_columns_by_tag("srv_user_name")
end
return js_columns
-- Or print all columns defined
--return all_datatable_js_columns_by_tag
end
-- #####################################
local function order_asc(a, b)
return asc(a.order, b.order)
end
-- #####################################
function historical_flow_utils.get_datatable_js_columns()
local str = "["
local js_columns = get_js_columns_to_display()
for _, column in pairsByValues(js_columns, order_asc) do
str = str .. column.js .. ","
end
str = str:sub(1, -2)
str = str .. "]"
return str
end
function historical_flow_utils.get_datatable_default_hidden_columns()
local hidden_columns = ""
local js_columns = get_js_columns_to_display()
local idx = 0
for name, column in pairsByValues(js_columns, order_asc) do
if not column.visible_by_default then
hidden_columns = hidden_columns .. idx .. ","
end
idx = idx + 1
end
if not isEmptyString(hidden_columns) then
hidden_columns = hidden_columns:sub(1, -2)
end
return hidden_columns
end
function historical_flow_utils.get_datatable_i18n_columns()
local columns = {}
local js_columns = get_js_columns_to_display()
for _, column in pairsByValues(js_columns, order_asc) do
columns[#columns + 1] = column.i18n
end
return columns
end
-- #####################################