implemented custom data filter in event view

This commit is contained in:
alejandro.campos@artica.es 2022-03-29 18:09:19 +02:00
parent a54344348c
commit d137e0d798
11 changed files with 191 additions and 30 deletions

View File

@ -2,6 +2,9 @@ START TRANSACTION;
ALTER TABLE `tipam_vlan` ADD COLUMN `custom_id` bigint(20) unsigned DEFAULT NULL; ALTER TABLE `tipam_vlan` ADD COLUMN `custom_id` bigint(20) unsigned DEFAULT NULL;
ALTER TABLE `tevent_filter` ADD COLUMN `custom_data` VARCHAR(500) DEFAULT '';
ALTER TABLE `tevent_filter` ADD COLUMN `custom_data_filter_type` TINYINT UNSIGNED DEFAULT 0;
UPDATE `tuser_task` SET `parameters` = 'a:3:{i:0;a:2:{s:11:"description";s:11:"Description";s:4:"type";s:4:"text";}i:1;a:3:{s:11:"description";s:20:"Save to disk in path";s:4:"type";s:6:"string";s:13:"default_value";s:21:"_%_ATTACHMENT_PATH_%_";}i:2;a:3:{s:11:"description";s:14:"Active backups";s:4:"type";s:6:"number";s:13:"default_value";i:3;}}' WHERE `function_name` = 'cron_task_do_backup'; UPDATE `tuser_task` SET `parameters` = 'a:3:{i:0;a:2:{s:11:"description";s:11:"Description";s:4:"type";s:4:"text";}i:1;a:3:{s:11:"description";s:20:"Save to disk in path";s:4:"type";s:6:"string";s:13:"default_value";s:21:"_%_ATTACHMENT_PATH_%_";}i:2;a:3:{s:11:"description";s:14:"Active backups";s:4:"type";s:6:"number";s:13:"default_value";i:3;}}' WHERE `function_name` = 'cron_task_do_backup';
CREATE TABLE IF NOT EXISTS `tbackup` ( CREATE TABLE IF NOT EXISTS `tbackup` (

View File

@ -1543,6 +1543,8 @@ ALTER TABLE `tevent_filter` MODIFY COLUMN `severity` text NOT NULL;
ALTER TABLE tevent_filter ADD COLUMN `server_id` int(10) NOT NULL default 0; ALTER TABLE tevent_filter ADD COLUMN `server_id` int(10) NOT NULL default 0;
ALTER TABLE `tevent_filter` ADD COLUMN `time_from` TIME NULL; ALTER TABLE `tevent_filter` ADD COLUMN `time_from` TIME NULL;
ALTER TABLE `tevent_filter` ADD COLUMN `time_to` TIME NULL; ALTER TABLE `tevent_filter` ADD COLUMN `time_to` TIME NULL;
ALTER TABLE `tevent_filter` ADD COLUMN `custom_data` VARCHAR(500) DEFAULT '';
ALTER TABLE `tevent_filter` ADD COLUMN `custom_data_filter_type` TINYINT UNSIGNED DEFAULT 0;
-- --------------------------------------------------------------------- -- ---------------------------------------------------------------------
-- Table `tusuario` -- Table `tusuario`

View File

@ -116,6 +116,7 @@ $fields_available['data'] = __('Data');
$fields_available['module_status'] = __('Module Status'); $fields_available['module_status'] = __('Module Status');
$fields_available['mini_severity'] = __('Severity mini'); $fields_available['mini_severity'] = __('Severity mini');
$fields_available['module_custom_id'] = __('Module custom ID'); $fields_available['module_custom_id'] = __('Module custom ID');
$fields_available['custom_data'] = __('Custom data');
// Remove fields already selected. // Remove fields already selected.

View File

@ -89,6 +89,8 @@ if ($id) {
$tag_without_base64 = base64_encode($tag_without_json_clean); $tag_without_base64 = base64_encode($tag_without_json_clean);
$filter_only_alert = $filter['filter_only_alert']; $filter_only_alert = $filter['filter_only_alert'];
$custom_data = $filter['custom_data'];
$custom_data_filter_type = $filter['custom_data_filter_type'];
if ($id_agent_module != 0) { if ($id_agent_module != 0) {
$text_module = modules_get_agentmodule_name($id_agent_module); $text_module = modules_get_agentmodule_name($id_agent_module);
@ -165,30 +167,34 @@ if ($update || $create) {
$tag_without_json = io_safe_input(base64_decode($tag_without_base64)); $tag_without_json = io_safe_input(base64_decode($tag_without_base64));
$filter_only_alert = get_parameter('filter_only_alert', ''); $filter_only_alert = get_parameter('filter_only_alert', '');
$custom_data = get_parameter('custom_data', '');
$custom_data_filter_type = get_parameter('custom_data_filter_type', '');
$values = [ $values = [
'id_name' => $id_name, 'id_name' => $id_name,
'id_group_filter' => $id_group_filter, 'id_group_filter' => $id_group_filter,
'id_group' => $id_group, 'id_group' => $id_group,
'event_type' => $event_type, 'event_type' => $event_type,
'severity' => $severity, 'severity' => $severity,
'status' => $status, 'status' => $status,
'search' => $search, 'search' => $search,
'text_agent' => $text_agent, 'text_agent' => $text_agent,
'id_agent_module' => $id_agent_module, 'id_agent_module' => $id_agent_module,
'id_agent' => $id_agent, 'id_agent' => $id_agent,
'pagination' => $pagination, 'pagination' => $pagination,
'event_view_hr' => $event_view_hr, 'event_view_hr' => $event_view_hr,
'id_user_ack' => $id_user_ack, 'id_user_ack' => $id_user_ack,
'group_rep' => $group_rep, 'group_rep' => $group_rep,
'tag_with' => $tag_with_json, 'tag_with' => $tag_with_json,
'tag_without' => $tag_without_json, 'tag_without' => $tag_without_json,
'date_from' => $date_from, 'date_from' => $date_from,
'date_to' => $date_to, 'date_to' => $date_to,
'source' => $source, 'source' => $source,
'id_extra' => $id_extra, 'id_extra' => $id_extra,
'user_comment' => $user_comment, 'user_comment' => $user_comment,
'filter_only_alert' => $filter_only_alert, 'filter_only_alert' => $filter_only_alert,
'custom_data' => $custom_data,
'custom_data_filter_type' => $custom_data_filter_type,
]; ];
$severity = explode(',', $severity); $severity = explode(',', $severity);
@ -627,9 +633,26 @@ $table->data[23][1] = html_print_input_text('id_extra', $id_extra, '', 11, 255,
$table->data[24][0] = '<b>'.__('Comment').'</b>'; $table->data[24][0] = '<b>'.__('Comment').'</b>';
$table->data[24][1] = html_print_input_text('user_comment', $user_comment, '', 35, 255, true); $table->data[24][1] = html_print_input_text('user_comment', $user_comment, '', 35, 255, true);
$table->data[25][0] = '<b>'.__('Custom data filter type').'</b>';
$table->data[25][1] = html_print_select(
[
'0' => __('Filter custom data by name field'),
'1' => __('Filter custom data by value field'),
],
'custom_data_filter_type',
$custom_data_filter_type,
'',
false,
'',
true
);
$table->data[26][0] = '<b>'.__('Custom data').'</b>';
$table->data[26][1] = html_print_input_text('custom_data', $custom_data, '', 35, 255, true);
if (is_metaconsole()) { if (is_metaconsole()) {
$table->data[25][0] = '<b>'.__('Id souce event').'</b>'; $table->data[27][0] = '<b>'.__('Id souce event').'</b>';
$table->data[25][1] = html_print_input_text( $table->data[27][1] = html_print_input_text(
'id_source_event', 'id_source_event',
$id_source_event, $id_source_event,
'', '',

View File

@ -290,6 +290,8 @@ if ($save_event_filter) {
$values['id_extra'] = get_parameter('id_extra'); $values['id_extra'] = get_parameter('id_extra');
$values['user_comment'] = get_parameter('user_comment'); $values['user_comment'] = get_parameter('user_comment');
$values['id_source_event'] = get_parameter('id_source_event'); $values['id_source_event'] = get_parameter('id_source_event');
$values['custom_data'] = get_parameter('custom_data');
$values['custom_data_filter_type'] = get_parameter('custom_data_filter_type');
if (is_metaconsole()) { if (is_metaconsole()) {
$values['server_id'] = get_parameter('server_id'); $values['server_id'] = get_parameter('server_id');
@ -344,6 +346,8 @@ if ($update_event_filter) {
$values['id_extra'] = get_parameter('id_extra'); $values['id_extra'] = get_parameter('id_extra');
$values['user_comment'] = get_parameter('user_comment'); $values['user_comment'] = get_parameter('user_comment');
$values['id_source_event'] = get_parameter('id_source_event'); $values['id_source_event'] = get_parameter('id_source_event');
$values['custom_data'] = get_parameter('custom_data');
$values['custom_data_filter_type'] = get_parameter('custom_data_filter_type');
if (is_metaconsole() === true) { if (is_metaconsole() === true) {
$values['server_id'] = get_parameter('server_id'); $values['server_id'] = get_parameter('server_id');
@ -815,7 +819,9 @@ function save_new_filter() {
"id_extra": $("#text-id_extra").val(), "id_extra": $("#text-id_extra").val(),
"user_comment": $("#text-user_comment").val(), "user_comment": $("#text-user_comment").val(),
"id_source_event": $("#text-id_source_event").val(), "id_source_event": $("#text-id_source_event").val(),
"server_id": $("#server_id").val() "server_id": $("#server_id").val(),
"custom_data": $("#text-custom_data").val(),
"custom_data_filter_type": $("#custom_data_filter_type").val()
}, },
function (data) { function (data) {
$("#info_box").hide(); $("#info_box").hide();

View File

@ -210,6 +210,7 @@ function events_get_all_fields()
$columns['data'] = __('Data'); $columns['data'] = __('Data');
$columns['module_status'] = __('Module status'); $columns['module_status'] = __('Module status');
$columns['module_custom_id'] = __('Module custom id'); $columns['module_custom_id'] = __('Module custom id');
$columns['custom_data'] = __('Custom data');
return $columns; return $columns;
} }
@ -310,6 +311,9 @@ function events_get_column_name($field, $table_alias=false)
case 'direccion': case 'direccion':
return __('Agent IP'); return __('Agent IP');
case 'custom_data':
return __('Custom data');
default: default:
return __($field); return __($field);
} }
@ -1118,6 +1122,23 @@ function events_get_all(
); );
} }
// Custom data.
if (empty($filter['custom_data']) === false) {
if ($filter['custom_data_filter_type'] === '1') {
$sql_filters[] = sprintf(
' AND JSON_VALID(custom_data) = 1 AND JSON_EXTRACT(custom_data, "$.*") LIKE lower("%%%s%%") ',
$filter['custom_data'],
$filter['custom_data']
);
} else {
$sql_filters[] = sprintf(
' AND JSON_VALID(custom_data) = 1 AND JSON_KEYS(custom_data) REGEXP "%s" ',
$filter['custom_data'],
$filter['custom_data']
);
}
}
// Validated or in process by. // Validated or in process by.
if (empty($filter['id_user_ack']) === false) { if (empty($filter['id_user_ack']) === false) {
$sql_filters[] = sprintf( $sql_filters[] = sprintf(
@ -5139,6 +5160,14 @@ function events_page_general($event)
$data[1] = '<i>'.__('N/A').'</i>'; $data[1] = '<i>'.__('N/A').'</i>';
} }
$data = [];
$data[0] = __('Custom data');
if ($event['custom_data'] != '') {
$data[1] = $event['custom_data'];
} else {
$data[1] = '<i>'.__('N/A').'</i>';
}
$table_general->data[] = $data; $table_general->data[] = $data;
$table_data = $table_general->data; $table_data = $table_general->data;

View File

@ -134,7 +134,7 @@ if ($group_rep == 2) {
echo '<div class="nf">'.__('No events').'</div>'; echo '<div class="nf">'.__('No events').'</div>';
} }
} else { } else {
// fields that the user has selected to show // Fields that the user has selected to show.
if ($meta) { if ($meta) {
$show_fields = events_meta_get_custom_fields_user(); $show_fields = events_meta_get_custom_fields_user();
} else { } else {
@ -345,6 +345,13 @@ if ($group_rep == 2) {
$i++; $i++;
} }
if ($fields === 'custom_data') {
$table->head[$i] = __('Custom data');
$table->align[$i] = 'left';
$i++;
}
} }
if (in_array('estado', $show_fields)) { if (in_array('estado', $show_fields)) {

View File

@ -226,6 +226,16 @@ $server_id = get_parameter(
$filter['id_server_meta'] $filter['id_server_meta']
); );
$custom_data_filter_type = get_parameter(
'filter[custom_data_filter_type]',
$filter['custom_data_filter_type']
);
$custom_data = get_parameter(
'filter[custom_data]',
$filter['custom_data']
);
if (is_metaconsole() === true) { if (is_metaconsole() === true) {
// Connect to node database. // Connect to node database.
$id_node = $server_id; $id_node = $server_id;
@ -530,6 +540,8 @@ if ($loaded_filter !== false && $from_event_graph != 1 && !isset($fb64)) {
$user_comment = $filter['user_comment']; $user_comment = $filter['user_comment'];
$id_source_event = ($filter['id_source_event'] ?? ''); $id_source_event = ($filter['id_source_event'] ?? '');
$server_id = $filter['server_id']; $server_id = $filter['server_id'];
$custom_data = $filter['custom_data'];
$custom_data_filter_type = $filter['custom_data_filter_type'];
} }
} }
@ -1451,6 +1463,54 @@ $adv_inputs[] = html_print_div(
true true
); );
// Custom data filter type.
$custom_data_filter_type_input = html_print_select(
[
'0' => __('Filter custom data by field name'),
'1' => __('Filter custom data by field value'),
],
'custom_data_filter_type',
$custom_data_filter_type,
'',
false,
-1,
true
);
$adv_inputs[] = html_print_div(
[
'class' => 'filter_input',
'content' => sprintf(
'<label>%s</label>%s',
__('Custom data filter'),
$custom_data_filter_type_input
),
],
true
);
// Custom data.
$custom_data_input = html_print_input_text(
'custom_data',
$custom_data,
'',
5,
255,
true
);
$adv_inputs[] = html_print_div(
[
'class' => 'filter_input',
'content' => sprintf(
'<label>%s</label>%s',
__('Custom data search'),
$custom_data_input
),
],
true
);
// Tags. // Tags.
if (is_metaconsole() === true) { if (is_metaconsole() === true) {
$data = '<fieldset><legend class="pdd_0px">'.__('Events with following tags').'</legend>'.html_print_table($tabletags_with, true).'</fieldset>'; $data = '<fieldset><legend class="pdd_0px">'.__('Events with following tags').'</legend>'.html_print_table($tabletags_with, true).'</fieldset>';
@ -2259,6 +2319,27 @@ function process_datatables_item(item) {
/* Module name */ /* Module name */
item.id_agentmodule = item.module_name; item.id_agentmodule = item.module_name;
if (item.custom_data !== '') {
var custom_data_str = '';
var item_custom_data_obj = (function(json_str) {
try {
return JSON.parse(json_str);
} catch (err) {
return false;
}
})(item.custom_data);
if (item_custom_data_obj !== false) {
for (const [attr_name, val] of Object.entries(item_custom_data_obj)) {
custom_data_str += attr_name + ' = ' + val + '<br>';
}
item.custom_data = custom_data_str;
} else {
item.custom_data = '';
}
}
} }
/* Datatables auxiliary functions ends */ /* Datatables auxiliary functions ends */

View File

@ -127,6 +127,8 @@ if (is_ajax()) {
$values['source'] = get_parameter('source'); $values['source'] = get_parameter('source');
$values['id_extra'] = get_parameter('id_extra'); $values['id_extra'] = get_parameter('id_extra');
$values['user_comment'] = get_parameter('user_comment'); $values['user_comment'] = get_parameter('user_comment');
$values['custom_data'] = get_parameter('custom_data');
$values['custom_data_filter_type'] = get_parameter('custom_data_filter_type');
if (is_metaconsole()) { if (is_metaconsole()) {
$values['id_source_event'] = get_parameter('id_source_event'); $values['id_source_event'] = get_parameter('id_source_event');
@ -182,6 +184,8 @@ if (is_ajax()) {
$values['source'] = get_parameter('source'); $values['source'] = get_parameter('source');
$values['id_extra'] = get_parameter('id_extra'); $values['id_extra'] = get_parameter('id_extra');
$values['user_comment'] = get_parameter('user_comment'); $values['user_comment'] = get_parameter('user_comment');
$values['custom_data'] = get_parameter('custom_data');
$values['custom_data_filter_type'] = get_parameter('custom_data_filter_type');
if (is_metaconsole()) { if (is_metaconsole()) {
$values['id_source_event'] = get_parameter('id_source_event'); $values['id_source_event'] = get_parameter('id_source_event');
@ -1567,8 +1571,9 @@ $(document).ready( function() {
"id_extra": $("#text-id_extra").val(), "id_extra": $("#text-id_extra").val(),
"user_comment": $("#text-user_comment").val(), "user_comment": $("#text-user_comment").val(),
"id_source_event": $("#text-id_source_event").val(), "id_source_event": $("#text-id_source_event").val(),
"server_id" : $("#server_id").val() "server_id" : $("#server_id").val(),
"custom_data" : $("#text-custom_data").val(),
"custom_data_filter_type" : $("#custom_data_filter_type").val()
}, },
function (data) { function (data) {
$(".info_box").hide(); $(".info_box").hide();
@ -1670,7 +1675,9 @@ $(document).ready( function() {
"id_extra": $("#text-id_extra").val(), "id_extra": $("#text-id_extra").val(),
"user_comment": $("#text-user_comment").val(), "user_comment": $("#text-user_comment").val(),
"id_source_event": $("#text-id_source_event").val(), "id_source_event": $("#text-id_source_event").val(),
"server_id" : $("#server_id").val() "server_id" : $("#server_id").val(),
"custom_data" : $("#text-custom_data").val()
"custom_data_filter_type" : $("#custom_data_filter_type").val()
}, },
function (data) { function (data) {
$(".info_box").hide(); $(".info_box").hide();

View File

@ -226,7 +226,7 @@ try {
if ($custom_data_array !== null) { if ($custom_data_array !== null) {
array_walk( array_walk(
$custom_data_array, $custom_data_array,
function (&$value, $field) { function (&$value, $field) use ($separator) {
if (is_array($value) === true) { if (is_array($value) === true) {
$value = '['.implode($separator, $value).']'; $value = '['.implode($separator, $value).']';
} }

View File

@ -1251,6 +1251,8 @@ CREATE TABLE IF NOT EXISTS `tevent_filter` (
`server_id` INT NOT NULL DEFAULT 0, `server_id` INT NOT NULL DEFAULT 0,
`time_from` TIME NULL, `time_from` TIME NULL,
`time_to` TIME NULL, `time_to` TIME NULL,
`custom_data` VARCHAR(500) DEFAULT '',
`custom_data_filter_type` TINYINT UNSIGNED DEFAULT 0,
PRIMARY KEY (`id_filter`) PRIMARY KEY (`id_filter`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;