new group by events for extraid pandora_enterprise#9425

This commit is contained in:
Daniel Barbero 2022-09-27 15:08:09 +02:00
parent 84d9b272c3
commit 9e2c6edfeb
8 changed files with 111 additions and 65 deletions

View File

@ -90,7 +90,7 @@ $node_id = (int) get_parameter('node_id', 0);
if ($get_comments === true) {
$event = get_parameter('event', false);
$event_rep = get_parameter('event_rep', false);
$event_rep = (int) get_parameter('event_rep', 0);
if ($event === false) {
return __('Failed to retrieve comments');
}
@ -98,7 +98,7 @@ if ($get_comments === true) {
$eventsGrouped = [];
// Consider if the event is grouped.
$whereGrouped = '1=1';
if (isset($event_rep) === true && $event_rep > 0) {
if ($event_rep === EVENT_GROUP_REP_EVENTS) {
// Default grouped message filtering (evento and estado).
$whereGrouped = sprintf(
'`evento` = "%s"',
@ -119,6 +119,11 @@ if ($get_comments === true) {
(int) $event['id_agentmodule']
);
}
} else if ($event_rep === EVENT_GROUP_REP_EXTRAIDS) {
$whereGrouped = sprintf(
'`id_extra` = "%s"',
$event['id_extra']
);
} else {
$whereGrouped = sprintf('`id_evento` = %d', $event['id_evento']);
}
@ -175,7 +180,7 @@ if ($delete_event === true) {
$filter = get_parameter('filter', []);
$id_evento = (int) get_parameter('id_evento', 0);
$server_id = (int) get_parameter('server_id', 0);
$event_rep = get_parameter('event_rep', 0);
$event_rep = (int) get_parameter('event_rep', 0);
try {
if (is_metaconsole() === true
@ -228,7 +233,7 @@ if ($validate_event === true) {
$filter = get_parameter('filter', []);
$id_evento = (int) get_parameter('id_evento', 0);
$server_id = (int) get_parameter('server_id', 0);
$event_rep = get_parameter('event_rep', 0);
$event_rep = (int) get_parameter('event_rep', 0);
try {
if (is_metaconsole() === true
@ -240,7 +245,7 @@ if ($validate_event === true) {
if ($event_rep === 0) {
// Disable group by when there're result is unique.
$filter['group_rep'] = 0;
$filter['group_rep'] = EVENT_GROUP_REP_ALL;
}
// Check acl.
@ -285,7 +290,7 @@ if ($in_process_event === true) {
$filter = get_parameter('filter', []);
$id_evento = (int) get_parameter('id_evento', 0);
$server_id = (int) get_parameter('server_id', 0);
$event_rep = get_parameter('event_rep', 0);
$event_rep = (int) get_parameter('event_rep', 0);
try {
if (is_metaconsole() === true
@ -297,7 +302,7 @@ if ($in_process_event === true) {
if ($event_rep === 0) {
// Disable group by when there're result is unique.
$filter['group_rep'] = 0;
$filter['group_rep'] = EVENT_GROUP_REP_ALL;
}
// Check acl.
@ -464,7 +469,6 @@ if ($get_filter_values) {
$event_filter = [
'status' => EVENT_NO_VALIDATED,
'event_view_hr' => $config['event_view_hr'],
'group_rep' => 1,
'tag_with' => [],
'tag_without' => [],
'history' => false,
@ -480,7 +484,7 @@ if ($get_filter_values) {
'time_to' => '',
'severity' => '',
'event_type' => '',
'group_rep' => 0,
'group_rep' => EVENT_GROUP_REP_ALL,
'id_group' => 0,
'id_group_filter' => 0,
'group_name' => 'All',
@ -2474,7 +2478,7 @@ if ($get_events_fired) {
'id_agent_module' => 0,
'pagination' => 0,
'id_user_ack' => 0,
'group_rep' => 0,
'group_rep' => EVENT_GROUP_REP_ALL,
'tag_with' => [],
'tag_without' => [],
'filter_only_alert' => -1,

View File

@ -45,6 +45,11 @@ define('EVENT_VALIDATE', 1);
define('EVENT_PROCESS', 2);
define('EVENT_NO_VALIDATED', 3);
// Events group by constants.
define('EVENT_GROUP_REP_ALL', 0);
define('EVENT_GROUP_REP_EVENTS', 1);
define('EVENT_GROUP_REP_AGENTS', 2);
define('EVENT_GROUP_REP_EXTRAIDS', 3);
// Agents disabled status.
define('AGENT_ENABLED', 0);

View File

@ -11297,7 +11297,7 @@ function get_events_with_user($trash1, $trash2, $other, $returnType, $user_in_db
$id_user_ack = 0;
$event_view_hr = 0;
$tag = '';
$group_rep = 0;
$group_rep = EVENT_GROUP_REP_ALL;
$utimestamp_upper = 0;
$utimestamp_bottom = 0;
$id_alert_template = -1;
@ -11500,7 +11500,7 @@ function get_events_with_user($trash1, $trash2, $other, $returnType, $user_in_db
$alert_join = ' INNER JOIN talert_template_modules ON '.$table_events.'.id_alert_am=talert_template_modules.id';
}
if ($group_rep == 0) {
if ($group_rep == EVENT_GROUP_REP_ALL) {
if ($filter['total']) {
$sql = 'SELECT COUNT(*)
FROM '.$table_events.'
@ -15953,7 +15953,7 @@ function api_set_create_event_filter($name, $thrash1, $other, $thrash3)
$id_user_ack = (in_array($other['data'][9], $users)) ? $other['data'][9] : 0;
$group_rep = ($other['data'][10] == 0 || $other['data'][10] == 1) ? $other['data'][10] : 0;
$group_rep = ($other['data'][10] == EVENT_GROUP_REP_ALL || $other['data'][10] == EVENT_GROUP_REP_EVENTS) ? $other['data'][10] : EVENT_GROUP_REP_ALL;
$date_from = (preg_match('/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/', $other['data'][11])) ? $other['data'][11] : '0000-00-00';
@ -16180,7 +16180,7 @@ function api_set_update_event_filter($id_event_filter, $thrash1, $other, $thrash
break;
case 11:
$values['group_rep'] = ($other['data'][11] == 0 || $other['data'][11] == 1) ? $other['data'][11] : 0;
$values['group_rep'] = ($other['data'][11] == EVENT_GROUP_REP_ALL || $other['data'][11] == EVENT_GROUP_REP_EVENTS) ? $other['data'][11] : EVENT_GROUP_REP_ALL;
break;
case 12:
@ -17549,9 +17549,11 @@ function api_set_enable_disable_discovery_task($id_task, $thrash2, $other)
}
}
/**
* Make report (PDF, CSV or XML) and send it via e-mail (this method is intended to be used by server's execution
* of alert actions that involve sending reports by e-mail).
*
* @param [string] $server_id id server (Node)
* @param [string] $console_event_id console Id node event in tevent
* @param [string] $trash2 don't use
@ -17598,15 +17600,12 @@ function api_set_send_report($thrash1, $thrash2, $other, $returnType)
$date_today = preg_split('/[\s,]+/', io_safe_output($date_today));
$date_today = __($date_today[0]).' '.$date_today[1].' '.$date_today[2].' '.$date_today[3].' '.$date_today[4];
if ($make_report_from_template === true) {
$filter['id_report'] = $id_item;
$template = reports_get_report_templates(
$filter,
[
'description'
],
['description'],
$return_all_group,
'RR'
)[0];
@ -17614,15 +17613,16 @@ function api_set_send_report($thrash1, $thrash2, $other, $returnType)
$description = $template['description'];
// Report macros post-process.
$body_email = str_replace([
$body_email = str_replace(
[
'_report_description_',
'_report_generated_date_',
'_report_date_'
'_report_date_',
],
[
$description,
$date_today,
$date_today
$date_today,
],
$body_email
);
@ -17636,7 +17636,7 @@ function api_set_send_report($thrash1, $thrash2, $other, $returnType)
$template_regex_agents,
false,
'',
$email,
$email,
$subject_email,
$body_email,
$report_type,
@ -17651,15 +17651,16 @@ function api_set_send_report($thrash1, $thrash2, $other, $returnType)
}
// Report macros post-process.
$body_email = str_replace([
$body_email = str_replace(
[
'_report_description_',
'_report_generated_date_',
'_report_date_'
'_report_date_',
],
[
$report['description'],
$date_today,
$date_today
$date_today,
],
$body_email
);
@ -17846,4 +17847,3 @@ function api_set_send_report($thrash1, $thrash2, $other, $returnType)
returnData($returnType, $data, ';');
}
}

View File

@ -382,14 +382,16 @@ function events_delete($id_evento, $filter=null, $history=false, $force_node=fal
}
if (isset($filter) === false
|| is_array($filter) === true
|| is_array($filter) === false
) {
$filter = ['group_rep' => 0];
$filter = ['group_rep' => EVENT_GROUP_REP_ALL];
}
hd($filter['group_rep'], true);
switch ($filter['group_rep']) {
case '0':
case '2':
case EVENT_GROUP_REP_ALL:
case EVENT_GROUP_REP_AGENTS:
default:
// No groups option direct update.
$delete_sql = sprintf(
@ -399,7 +401,8 @@ function events_delete($id_evento, $filter=null, $history=false, $force_node=fal
);
break;
case '1':
case EVENT_GROUP_REP_EVENTS:
case EVENT_GROUP_REP_EXTRAIDS:
// Group by events.
$sql = events_get_all(
['te.*'],
@ -418,8 +421,16 @@ function events_delete($id_evento, $filter=null, $history=false, $force_node=fal
true
);
$target_ids = db_get_all_rows_sql(
sprintf(
if ((int) $filter['group_rep'] === EVENT_GROUP_REP_EXTRAIDS) {
$sql = sprintf(
'SELECT tu.id_evento FROM tevento tu INNER JOIN ( %s ) tf
ON tu.id_extra = tf.id_extra
AND tf.max_id_evento = %d',
$sql,
$id_evento
);
} else {
$sql = sprintf(
'SELECT tu.id_evento FROM tevento tu INNER JOIN ( %s ) tf
ON tu.estado = tf.estado
AND tu.evento = tf.evento
@ -428,8 +439,10 @@ function events_delete($id_evento, $filter=null, $history=false, $force_node=fal
AND tf.max_id_evento = %d',
$sql,
$id_evento
)
);
);
}
$target_ids = db_get_all_rows_sql($sql);
// Try to avoid deadlock while updating full set.
if ($target_ids !== false && count($target_ids) > 0) {
@ -475,12 +488,12 @@ function events_update_status($id_evento, $status, $filter=null)
}
if (isset($filter) === false || is_array($filter) === false) {
$filter = ['group_rep' => 0];
$filter = ['group_rep' => EVENT_GROUP_REP_ALL];
}
switch ($filter['group_rep']) {
case '0':
case '2':
case EVENT_GROUP_REP_ALL:
case EVENT_GROUP_REP_AGENTS:
default:
// No groups option direct update.
$update_sql = sprintf(
@ -492,7 +505,8 @@ function events_update_status($id_evento, $status, $filter=null)
);
break;
case '1':
case EVENT_GROUP_REP_EVENTS:
case EVENT_GROUP_REP_EXTRAIDS:
// Group by events.
$sql = events_get_all(
['te.*'],
@ -511,8 +525,16 @@ function events_update_status($id_evento, $status, $filter=null)
true
);
$target_ids = db_get_all_rows_sql(
sprintf(
if ((int) $filter['group_rep'] === EVENT_GROUP_REP_EXTRAIDS) {
$sql = sprintf(
'SELECT tu.id_evento FROM tevento tu INNER JOIN ( %s ) tf
ON tu.id_extra = tf.id_extra
AND tf.max_id_evento = %d',
$sql,
$id_evento
);
} else {
$sql = sprintf(
'SELECT tu.id_evento FROM tevento tu INNER JOIN ( %s ) tf
ON tu.estado = tf.estado
AND tu.evento = tf.evento
@ -521,8 +543,10 @@ function events_update_status($id_evento, $status, $filter=null)
AND tf.max_id_evento = %d',
$sql,
$id_evento
)
);
);
}
$target_ids = db_get_all_rows_sql($sql);
// Try to avoid deadlock while updating full set.
if ($target_ids !== false && count($target_ids) > 0) {
@ -1363,7 +1387,10 @@ function events_get_all(
// Order.
$order_by = '';
if (isset($order, $sort_field) === true) {
if (isset($filter['group_rep']) === true && $filter['group_rep'] == 1) {
if (isset($filter['group_rep']) === true
&& $filter['group_rep'] === EVENT_GROUP_REP_EVENTS
&& $filter['group_rep'] === EVENT_GROUP_REP_EXTRAIDS
) {
$order_by = events_get_sql_order('MAX('.$sort_field.')', $order);
} else {
$order_by = events_get_sql_order($sort_field, $order);
@ -1397,22 +1424,22 @@ function events_get_all(
$group_by = 'GROUP BY ';
$tagente_join = 'LEFT';
if (isset($filter['group_rep']) === false) {
$filter['group_rep'] = 0;
$filter['group_rep'] = EVENT_GROUP_REP_ALL;
}
switch ($filter['group_rep']) {
case '0':
case EVENT_GROUP_REP_ALL:
default:
// All events.
$group_by = '';
break;
case '1':
case EVENT_GROUP_REP_EVENTS:
// Group by events.
$group_by .= 'te.evento, te.id_agente, te.id_agentmodule';
break;
case '2':
case EVENT_GROUP_REP_AGENTS:
// Group by agents.
$tagente_join = 'INNER';
$group_by = '';
@ -1426,6 +1453,11 @@ function events_get_all(
);
}
break;
case EVENT_GROUP_REP_EXTRAIDS:
// Group by events.
$group_by .= 'te.id_extra';
break;
}
$tgrupo_join = 'LEFT';
@ -1511,7 +1543,9 @@ function events_get_all(
}
}
if ((int) $filter['group_rep'] === 1 && $count === false) {
if (($filter['group_rep'] === EVENT_GROUP_REP_EVENTS
|| $filter['group_rep'] === EVENT_GROUP_REP_EXTRAIDS) && $count === false
) {
$sql = sprintf(
'SELECT %s
%s
@ -2880,9 +2914,9 @@ function events_get_agent(
// Group by agent.
if ((bool) $show_summary_group === true) {
$filters['group_rep'] = 1;
$filters['group_rep'] = EVENT_GROUP_REP_EVENTS;
} else {
$filters['group_rep'] = 2;
$filters['group_rep'] = EVENT_GROUP_REP_AGENTS;
}
$events = Event::search(
@ -5092,7 +5126,7 @@ function events_get_count_events_validated_by_user($data)
*
* @return string SQL.
*/
function events_get_sql_order($sort_field='timestamp', $sort='DESC', $group_rep=0, $only_fields=false)
function events_get_sql_order($sort_field='timestamp', $sort='DESC', $group_rep=EVENT_GROUP_REP_ALL, $only_fields=false)
{
$sort_field_translated = $sort_field;
switch ($sort_field) {
@ -5113,7 +5147,7 @@ function events_get_sql_order($sort_field='timestamp', $sort='DESC', $group_rep=
break;
case 'timestamp':
$sort_field_translated = ($group_rep == 0) ? 'timestamp' : 'timestamp_last';
$sort_field_translated = ($group_rep == EVENT_GROUP_REP_ALL) ? 'timestamp' : 'timestamp_last';
break;
case 'user_id':

View File

@ -4011,7 +4011,7 @@ function reporting_groups_nodes($content)
}
// Grouped.
$filters['group_rep'] = 1;
$filters['group_rep'] = EVENT_GROUP_REP_EVENTS;
$events = Event::search(
[

View File

@ -357,10 +357,10 @@ class Events
);
if (isset($group_rep) === false) {
$group_rep = 0;
$group_rep = EVENT_GROUP_REP_ALL;
}
if ((int) $group_rep !== 0) {
if ((int) $group_rep !== EVENT_GROUP_REP_ALL) {
if ($event['event_rep'] <= 1) {
$event['event_repeated'] = '<i>'.__('No').'</i>';
} else {
@ -1068,7 +1068,7 @@ class Events
$filters['id_agent'] = $this->id_agent;
}
$filters['group_rep'] = 1;
$filters['group_rep'] = EVENT_GROUP_REP_EVENTS;
if (isset($this->limit) === true
&& $this->limit !== -1

View File

@ -84,7 +84,7 @@ ui_require_javascript_file('pandora_events');
$default_filter = [
'status' => EVENT_NO_VALIDATED,
'event_view_hr' => $config['event_view_hr'],
'group_rep' => 1,
'group_rep' => EVENT_GROUP_REP_EVENTS,
'tag_with' => [],
'tag_without' => [],
'history' => false,
@ -1626,9 +1626,10 @@ $inputs[] = $in;
// Duplicates group { events | agents }.
$data = html_print_select(
[
0 => __('All events'),
1 => __('Group events'),
2 => __('Group agents'),
EVENT_GROUP_REP_ALL => __('All events'),
EVENT_GROUP_REP_EVENTS => __('Group events'),
EVENT_GROUP_REP_AGENTS => __('Group agents'),
EVENT_GROUP_REP_EXTRAIDS => __('Group extra id'),
],
'group_rep',
$group_rep,
@ -2227,12 +2228,14 @@ try {
$active_filters_div .= '<div>';
$active_filters_div .= '<div class="label box-shadow">'.__('Duplicated').'</div>';
$active_filters_div .= '<div id="summary_duplicates" class="content">';
if ($group_rep == 0) {
if ($group_rep == EVENT_GROUP_REP_ALL) {
$active_filters_div .= __('All events.');
} else if ($group_rep == 1) {
} else if ($group_rep == EVENT_GROUP_REP_EVENTS) {
$active_filters_div .= __('Group events');
} else if ($group_rep == 2) {
} else if ($group_rep == EVENT_GROUP_REP_AGENTS) {
$active_filters_div .= __('Group agents.');
} else if ($group_rep == EVENT_GROUP_REP_EXTRAIDS) {
$active_filters_div .= __('Group extra id.');
}
$active_filters_div .= '</div>';

View File

@ -404,7 +404,7 @@ if ($access_console_node === true) {
$user_event_filter = [
'status' => EVENT_NO_VALIDATED,
'event_view_hr' => $config['event_view_hr'],
'group_rep' => 1,
'group_rep' => EVENT_GROUP_REP_EVENTS,
'tag_with' => [],
'tag_without' => [],
'history' => false,