mirror of
https://github.com/ntop/ntopng.git
synced 2026-04-29 23:49:33 +00:00
Majow historical_flow_utils cleanup
This commit is contained in:
parent
44ddc0bf6e
commit
96a3117da3
1 changed files with 1 additions and 588 deletions
|
|
@ -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
|
||||
|
||||
-- #####################################
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue