pandorafms/pandora_console/godmode/alerts/alert_compounds.php

268 lines
8.2 KiB
PHP

<?php
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2010 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation for version 2.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
global $config;
check_login ();
if (! check_acl ($config['id_user'], 0, "LM")) {
db_pandora_audit("ACL Violation",
"Trying to access Alert Management");
require ("general/noaccess.php");
exit;
}
require_once ('include/functions_alerts.php');
require_once($config['homedir'] . "/include/functions_agents.php");
require_once($config['homedir'] . '/include/functions_users.php');
$id_group = (int) get_parameter ('id_group');
$id_agent = (int) get_parameter ('id_agent');
$search = (string) get_parameter ('search');
$url = 'index.php?galertas&sec2=godmode/alerts/alert_compounds';
if ($id_group)
$url .= '&id_group='.$id_group;
if ($id_agent)
$url .= '&id_agent='.$id_agent;
if ($search != '');
$url .= '&search='.$search;
$groups = users_get_groups (0, 'LM');
if ($id_group > 0 && isset ($groups[$id_group]))
$agents = agents_get_group_agents ($id_group, false, "none");
else
$agents = agents_get_group_agents (array_keys ($groups), false, "none");
$update_compound = (bool) get_parameter ('update_compound');
$delete_alert = (int) get_parameter ('delete_alert');
$enable_alert = (int) get_parameter ('enable_alert');
$disable_alert = (int) get_parameter ('disable_alert');
// Header
ui_print_page_header (__('Alerts').' &raquo; '.__('Correlated alerts'), "images/god2.png", false, "alert_compound", true);
if ($update_compound) {
$id = (int) get_parameter ('id');
$recovery_notify = (bool) get_parameter ('recovery_notify');
$field2_recovery = (string) get_parameter ('field2_recovery');
$field3_recovery = (string) get_parameter ('field3_recovery');
$result = alerts_update_alert_compound ($id,
array ('recovery_notify' => $recovery_notify,
'field2_recovery' => $field2_recovery,
'field3_recovery' => $field3_recovery));
ui_print_result_message ($result,
__('Successfully updated'),
__('Could not be updated'));
}
if ($delete_alert) {
$id = (int) get_parameter ('id');
$result = alerts_delete_alert_compound ($id);
ui_print_result_message ($result,
__('Successfully deleted'),
__('Could not be deleted'));
if (is_ajax ())
return;
}
if ($enable_alert) {
$id = (int) get_parameter ('id');
$result = alerts_set_alerts_compound_disable ($id, false);
ui_print_result_message ($result,
__('Successfully enabled'),
__('Could not be enabled'));
if (is_ajax ())
return;
}
if ($disable_alert) {
$id = (int) get_parameter ('id');
$result = alerts_set_alerts_compound_disable ($id, true);
ui_print_result_message ($result,
__('Successfully disabled'),
__('Could not be disabled'));
if (is_ajax ())
return;
}
$table->id = 'filter_compound_table';
$table->width = '98%';
$table->data = array ();
$table->style = array ();
$table->style[0] = 'font-weight: bold; vertical-align:top';
$table->style[2] = 'font-weight: bold';
$table->size = array ();
$table->colspan = array ();
$table->size[0] = '15%';
$table->size[1] = '35%';
$table->size[2] = '15%';
$table->size[3] = '35%';
$table->data[0][0] = __('Group');
$table->data[0][1] = html_print_select_groups(0, "LM", true, 'id_group', $id_group, false, '',
'', true);
$table->data[0][2] = __('Agent');
$table->data[0][2] .= ' <span id="agent_loading" class="invisible">';
$table->data[0][2] .= html_print_image("images/spinner.png", true);
$table->data[0][2] .= '</span>';
$table->data[0][3] = html_print_select ($agents, 'id_agent', $id_agent, false,
__('All'), 0, true);
$table->data[1][0] = __('Free search');
$table->data[1][1] = html_print_input_text ('search', $search, '', 20, 40, true);
$table->colspan[1][1] = 3;
echo '<form id="filter_form" method="post" action="index.php?galertas&sec2=godmode/alerts/alert_compounds">';
html_print_table ($table);
echo '<div class="action-buttons" style="width: 90%">';
html_print_input_hidden ('do_search', 1);
html_print_submit_button (__('Search'), 'search_btn', false, 'class="sub search"');
echo '</div>';
echo '</form>';
unset ($table);
$where = '';
if ($search != '') {
switch ($config["dbtype"]) {
case "mysql":
case "postgresql":
$where = sprintf (' AND (description LIKE "%%%s%%" OR name LIKE "%%%s%%")',
$search, $search);
break;
case "oracle":
$where = sprintf (' AND (description LIKE \'%%%s%%\' OR name LIKE \'%%%s%%\')',
$search, $search);
break;
}
}
if ($id_agent)
$agents = array ($id_agent => $id_agent);
$total = 0;
if (count($agents) > 0) {
$sql = sprintf ('SELECT COUNT(*) FROM talert_compound
WHERE id_agent in (%s)%s',
implode (',', array_keys ($agents)), $where);
$total = (int) db_get_sql ($sql);
}
ui_pagination ($total, $url);
$table->id = 'alert_list';
$table->class = 'alert_list databox';
$table->width = '98%';
$table->data = array ();
$table->head = array ();
$table->style = array ();
$table->style[1] = 'font-weight: bold';
$table->align = array ();
$table->align[3] = 'center';
$table->size = array ();
$table->size[0] = '20px';
$table->size[3] = '20px';
$table->head[0] = '';
$table->head[1] = __('Name');
$table->head[2] = __('Agent');
$table->head[3] = __('Delete');
$id_alerts = false;
if (count($agents)) {
switch ($config["dbtype"]) {
case "mysql":
case "postgresql":
$sql = sprintf ('SELECT id FROM talert_compound
WHERE id_agent in (%s)%s LIMIT %d OFFSET %d',
implode (',', array_keys ($agents)), $where,
$config['block_size'], get_parameter ('offset'));
break;
case "oracle":
$set = array();
$set['offset'] = get_parameter ('offset');
$set['limit'] = $config['block_size'];
$sql = sprintf ('SELECT id FROM talert_compound
WHERE id_agent in (%s)%s',
implode (',', array_keys ($agents)), $where);
$sql = oracle_recode_query($sql, $set);
break;
}
$id_alerts = db_get_all_rows_sql ($sql);
if (($config["dbtype"] == 'oracle') && ($id_alerts !== false)) {
for ($i=0; $i < count($id_alerts); $i++) {
unset($id_alerts[$i]['rnum']);
}
}
}
if ($id_alerts === false)
$id_alerts = array ();
foreach ($id_alerts as $alert) {
$alert = alerts_get_alert_compound ($alert['id']);
if ($alert === false)
continue;
$data = array ();
$data[0] = '<form class="disable_alert_form" action="'.$url.'" method="post" style="display: inline;">';
if ($alert['disabled']) {
$data[0] .= html_print_input_image ('enable', 'images/lightbulb_off.png', 1, '', true);
$data[0] .= html_print_input_hidden ('enable_alert', 1, true);
}
else {
$data[0] .= html_print_input_image ('disable', 'images/lightbulb.png', 1, '', true);
$data[0] .= html_print_input_hidden ('disable_alert', 1, true);
}
$data[0] .= html_print_input_hidden ('id', $alert['id'], true);
$data[0] .= '</form>';
$data[1] = '<a href="index.php?sec=galertas&sec2=godmode/alerts/configure_alert_compound&id='.$alert['id'].'">';
$data[1] .= $alert['name'];
$data[1] .= '</a>';
$data[2] = agents_get_name ($alert['id_agent']);
$data[3] = '<a href="'.$url.'&delete_alert=1&id='.$alert['id'].'"
onClick="javascript:confirm(\''.__('Are you sure?').'\')">';
$data[3] .= html_print_image("images/cross.png", true, array("title" => __('Delete')));
$data[3] .= '</a>';
array_push ($table->data, $data);
}
if (isset($data)){
html_print_table ($table);
}
else {
echo "<div class='nf'>".__('No alerts found')."</div>";
}
echo '<div class="action-buttons" style="width: '.$table->width.'">';
echo '<form method="post" action="index.php?sec=galertas&sec2=godmode/alerts/configure_alert_compound">';
html_print_submit_button (__('Create'), 'crtbtn', false, 'class="sub next"');
html_print_input_hidden ('new_compound', 1);
echo '</form>';
echo '</div>';
ui_require_jquery_file ('pandora.controls');
?>
<script type="text/javascript">
$(document).ready (function () {
$("#id_group").pandoraSelectGroupAgent ();
});
</script>