#9033 Fixed group events

This commit is contained in:
Daniel Maya 2022-06-09 14:59:43 +02:00
parent 50442faf26
commit 2cfb4e53c2
1 changed files with 86 additions and 41 deletions

View File

@ -393,8 +393,15 @@ function events_delete($id_evento, $filter=null, $history=false, $force_node=fal
case '1':
// Group by events.
$event = events_get_event($id_evento, ['estado', 'event_type', 'id_agente', 'id_agentmodule']);
$filter['group_rep'] = 0;
$filter['status'] = $event['estado'];
$filter['event_type'] = $event['event_type'];
$filter['id_agent'] = $event['id_agente'];
$filter['id_agentmodule'] = $event['id_agentmodule'];
$sql = events_get_all(
['te.*'],
['te.id_evento'],
$filter,
// Offset.
null,
@ -410,19 +417,7 @@ function events_delete($id_evento, $filter=null, $history=false, $force_node=fal
true
);
$target_ids = db_get_all_rows_sql(
sprintf(
'SELECT tu.id_evento FROM %s tu INNER JOIN ( %s ) tf
ON tu.estado = tf.estado
AND tu.evento = tf.evento
AND tu.id_agente = tf.id_agente
AND tu.id_agentmodule = tf.id_agentmodule
AND tf.max_id_evento = %d',
$table,
$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) {
@ -495,7 +490,14 @@ function events_get_related_events(
case '1':
// Group by events.
$sql = events_get_all(
$event = events_get_event($id_evento, ['estado', 'event_type', 'id_agente', 'id_agentmodule']);
$filter['group_rep'] = 0;
$filter['status'] = $event['estado'];
$filter['event_type'] = $event['event_type'];
$filter['id_agent'] = $event['id_agente'];
$filter['id_agentmodule'] = $event['id_agentmodule'];
$related_sql = events_get_all(
['te.*'],
$filter,
// Offset.
@ -511,18 +513,6 @@ function events_get_related_events(
// Return_sql.
true
);
$related_sql = sprintf(
'SELECT %s FROM %s tu INNER JOIN ( %s ) tf
WHERE tu.estado = tf.estado
AND tu.evento = tf.evento
AND tu.id_agente = tf.id_agente
AND tu.id_agentmodule = tf.id_agentmodule
AND tf.max_id_evento = %d',
$select,
$table,
$sql,
$id_evento
);
break;
}
@ -584,8 +574,15 @@ function events_update_status($id_evento, $status, $filter=null, $history=false)
case '1':
// Group by events.
$event = events_get_event($id_evento, ['estado', 'event_type', 'id_agente', 'id_agentmodule']);
$filter['group_rep'] = 0;
$filter['status'] = $event['estado'];
$filter['event_type'] = $event['event_type'];
$filter['id_agent'] = $event['id_agente'];
$filter['id_agentmodule'] = $event['id_agentmodule'];
$sql = events_get_all(
['te.*'],
['te.id_evento'],
$filter,
// Offset.
null,
@ -601,19 +598,7 @@ function events_update_status($id_evento, $status, $filter=null, $history=false)
true
);
$target_ids = db_get_all_rows_sql(
sprintf(
'SELECT tu.id_evento FROM %s tu INNER JOIN ( %s ) tf
ON tu.estado = tf.estado
AND tu.evento = tf.evento
AND tu.id_agente = tf.id_agente
AND tu.id_agentmodule = tf.id_agentmodule
AND tf.max_id_evento = %d',
$table,
$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) {
@ -826,6 +811,13 @@ function events_get_all(
);
}
if (isset($filter['id_agentmodule']) === true && $filter['id_agentmodule'] > 0) {
$sql_filters[] = sprintf(
' AND te.id_agentmodule = %d ',
$filter['id_agentmodule']
);
}
if (empty($filter['event_type']) === false && $filter['event_type'] !== 'all') {
if ($filter['event_type'] === 'warning'
|| $filter['event_type'] === 'critical'
@ -1884,6 +1876,59 @@ function events_get_similar_ids($id, $meta=false, $history=false)
}
/**
* Gets the ids of grouped events to a given event id.
*
* Events are grouped together if status, type, id_agent and id_agentmodule are
* the same.
*
* @param integer $id Event id.
* @param boolean $meta Metaconsole mode flag.
* @param boolean $history History mode flag.
*
* @return array A list of events ids.
*/
function events_get_grouped_ids($id, $meta=false, $history=false)
{
if ($meta === true) {
$event = events_meta_get_event(
$id,
[
'evento',
'id_agentmodule',
],
$history
);
} else {
$event = events_get_event($id, ['estado', 'event_type', 'id_agente', 'id_agentmodule']);
}
$ids = [];
if ($event === false) {
return $ids;
}
$events_table = events_get_events_table($meta, $history);
$events = db_get_all_rows_filter(
$events_table,
[
'estado' => $event['estado'],
'event_type' => $event['event_type'],
'id_agente' => $event['id_agente'],
'id_agentmodule' => $event['id_agentmodule'],
],
['id_evento']
);
foreach ($events as $event) {
$ids[] = $event['id_evento'];
}
return $ids;
}
/**
* Delete events in a transresponse
*