diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog index 1c04f7ccb7..92fed90e15 100644 --- a/pandora_console/ChangeLog +++ b/pandora_console/ChangeLog @@ -1,3 +1,12 @@ +2012-05-16 Sergio Martin + + * include/constants.php: Added a constants for + more common used colors in pandora: critical, + warning, normal, unknown... + + * extensions/agents_alerts.php: Added new view of + agents/alerts for pending tasks #3468889 + 2012-05-14 Juan Manuel Ramon * include/styles/pandora.css: Added transparent background in input diff --git a/pandora_console/extensions/agents_alerts.php b/pandora_console/extensions/agents_alerts.php new file mode 100755 index 0000000000..96d60017b9 --- /dev/null +++ b/pandora_console/extensions/agents_alerts.php @@ -0,0 +1,334 @@ + "ANY(SELECT id_agente FROM tagente WHERE id_grupo = " . $group); + + db_process_sql_update('tagente_modulo', array("flag" => 1), $where); + } + else { + db_pandora_audit("ACL Violation", "Trying to set flag for groups"); + require ("general/noaccess.php"); + exit; + } + } + + if ($config["realtimestats"] == 0) { + $updated_info = __('Last update'). " : ". ui_print_timestamp (db_get_sql ("SELECT min(utimestamp) FROM tgroup_stat"), true); + } + else { + $updated_info = __("Updated at realtime"); + } + + $updated_time = html_print_image ("images/information.png", true, array ("title" => __('Last update'), "style" => 'margin: 5px 3px 0px 10px')).$updated_info; + + $refr = get_parameter('refr', 30); // By default 30 seconds + + $group_id = get_parameter('group_id', 0); + $offset = get_parameter('offset', 0); + $hor_offset = get_parameter('hor_offset', 0); + $block = 20; + + $groups = users_get_groups (); + + $filter_groups = '
'; + $filter_groups .= ''.__('Group').''; + $filter_groups .= html_print_select_groups(false, "AR", true, 'group_id', $group_id, 'this.form.submit()', '', '', true, false, true, '', false , 'width: 100px; margin-right: 10px;; margin-top: 5px;'); + $filter_groups .= '
'; + + $comborefr = '
'; + $comborefr .= ''.__('Refresh').''; + $comborefr .= html_print_select (array('30' => '30 '.__('seconds'), '60' => '1 '.__('minute'), '120' => '2 '.__('minutes'), '300' => '5 '.__('minutes'), '600' => '10 '.__('minutes')) , 'refr', $config['refr'], $script = 'this.form.submit()', '', 0, true, false, false, '', false, 'width: 100px; margin-right: 10px; margin-top: 5px;'); + $comborefr .= "
"; + + if ($config["pure"] == 0) { + $fullscreen = '' + . html_print_image ("images/fullscreen.png", true, array ("title" => __('Full screen mode'))) + . ""; + } + else { + $fullscreen = '' + . html_print_image ("images/normalscreen.png", true, array ("title" => __('Back to normal mode'))) + . ""; + $config['refr'] = $refr; + } + + $onheader = array('updated_time' => $updated_time, 'fullscreen' => $fullscreen, + 'combo_groups' => $filter_groups); + + if($config['pure'] == 1) { + $onheader['combo_refr'] = $comborefr; + } + + // Header + ui_print_page_header (__("Agents/Alerts"), "images/bell.png", false, "", false, $onheader); + + // Old style table, we need a lot of special formatting,don't use table function + // Prepare old-style table + + $filter = array ('offset' => (int) $offset, + 'limit' => (int) $config['block_size']); + $filter_count = array(); + + if($group_id > 0) { + $filter['id_grupo'] = $group_id; + $filter_count['id_grupo'] = $group_id; + } + + // Get the id of all agents with alerts + $sql = 'SELECT DISTINCT(id_agente) FROM tagente_modulo WHERE id_agente_modulo IN + (SELECT id_agent_module FROM talert_template_modules)'; + $agents_with_alerts_raw = db_get_all_rows_sql($sql); + + if($agents_with_alerts_raw === false) { + $agents_with_alerts_raw = array(); + } + + $agents_with_alerts = array(); + foreach($agents_with_alerts_raw as $awar) { + $agents_with_alerts[] = $awar['id_agente']; + } + + $filter['id_agente'] = $agents_with_alerts; + $filter_count['id_agente'] = $agents_with_alerts; + + $agents = agents_get_agents ($filter); + + $nagents = count(agents_get_agents ($filter_count)); + + if($agents == false) { + echo "
".__('There are no agents with alerts')."
"; + return; + } + + $all_alerts = agents_get_alerts_simple (); + + if($config["pure"] == 1) { + $block = count($all_alerts); + } + + $templates = array(); + $agent_alerts = array(); + foreach($all_alerts as $alert) { + $templates[$alert['id_alert_template']] = ''; + $agent_alerts[$alert['agent_name']][$alert['id_alert_template']][] = $alert; + } + + // Prepare pagination + ui_pagination ($nagents); + echo "
"; + + echo ''; + echo ""; + + if($hor_offset > 0) { + $new_hor_offset = $hor_offset-$block; + echo ""; + } + + if(!empty($templates)) { + $sql = sprintf('SELECT id, name FROM talert_templates WHERE id IN (%s)',implode(',',array_keys($templates))); + + $templates_raw = db_get_all_rows_sql($sql); + } + + $alerts = array(); + $ntemplates = 0; + foreach($templates_raw as $temp) { + if(isset($templates[$temp['id']]) && $templates[$temp['id']] == '') { + $ntemplates++; + if($ntemplates <= $hor_offset || $ntemplates > ($hor_offset+$block)) { + continue; + } + $templates[$temp['id']] = $temp['name']; + } + } + + foreach($templates as $tid => $tname) { + if($tname == '') { + continue; + } + echo '"; + } + + if(($hor_offset + $block) < $ntemplates) { + $new_hor_offset = $hor_offset+$block; + echo ""; + } + + foreach($agents as $agent) { + echo ''; + // Name of the agent + echo ''; + + // Alerts of the agent + $anyfired = false; + foreach($templates as $tid => $tname) { + if($tname == '') { + continue; + } + if(isset($agent_alerts[$agent['nombre']][$tid])) { + foreach($agent_alerts[$agent['nombre']][$tid] as $alert) { + if($alert["times_fired"] > 0) { + $anyfired = true; + } + } + + $cellstyle = ''; + if($anyfired) { + $cellstyle = 'background:'.COL_ALERTFIRED.';'; + } + + echo ''; + } + echo ''; + } + + echo '
".__("Agents")." / ".__("Alert templates")."".html_print_image("images/darrowleft.png",true, array('title' => __('Previous templates')))." '. html_print_image('images/information.png', true, array('title' => io_safe_output($tname))) ."".html_print_image("images/darrowright.png",true, array('title' => __('More templates')))."
'.$agent['nombre'].' '; + + $uniqid = uniqid(); + echo "
"; + + echo count($agent_alerts[$agent['nombre']][$tid])." ".__('Alerts')." "; + + echo "".html_print_image('images/zoom.png', true).""; + + echo "
"; + + print_alerts_summary_modal_window($uniqid, $agent_alerts[$agent['nombre']][$tid]); + } + else { + echo '
'; + } + echo '
'; +} + +// Print the modal window for the summary of each alerts group +function print_alerts_summary_modal_window($id, $alerts) { + + $table->width = '98%'; + $table->class = "databox"; + $table->data = array (); + + $table->head[0] = __('Module'); + $table->head[1] = __('Action'); + $table->head[2] = __('Last fired'); + $table->head[3] = __('Status'); + + foreach($alerts as $alert) { + $data[0] = modules_get_agentmodule_name ($alert['id_agent_module']); + + $actions = alerts_get_alert_agent_module_actions ($alert['id']); + + $actionDefault = db_get_value_sql("SELECT id_alert_action FROM talert_templates WHERE id = " . $alert['id_alert_template']); + + $actionText = ''; + + if (!empty($actions)) { + $actionText = '
    '; + foreach ($actions as $action) { + $actionText .= '
  • ' . $action['name']; + if ($action["fires_min"] != $action["fires_max"]){ + $actionText .= " (".$action["fires_min"] . " / ". $action["fires_max"] . ")"; + } + $actionText .= '

  • '; + } + $actionText .= '
'; + } + else { + if(!empty($actionDefault)) { + $actionText = db_get_sql ("SELECT name FROM talert_actions WHERE id = $actionDefault"). " (".__("Default") . ")"; + } + } + + $data[1] = $actionText; + $data[2] = ui_print_timestamp ($alert["last_fired"], true); + + $status = STATUS_ALERT_NOT_FIRED; + + if ($alert["times_fired"] > 0) { + $status = STATUS_ALERT_FIRED; + $title = __('Alert fired').' '.$alert["times_fired"].' '.__('times'); + } elseif ($alert["disabled"] > 0) { + $status = STATUS_ALERT_DISABLED; + $title = __('Alert disabled'); + } else { + $status = STATUS_ALERT_NOT_FIRED; + $title = __('Alert not fired'); + } + + $data[3] = ui_print_status_image($status, $title, true); + + array_push ($table->data, $data); + } + + $content = html_print_table($table,true); + + $agent = modules_get_agentmodule_agent_name($alerts[0]['id_agent_module']); + $template = alerts_get_alert_template_name($alerts[0]['id_alert_template']); + + echo ''; +} + +extensions_add_operation_menu_option(__("Agents/Alerts view"), 'estado'); +extensions_add_main_function('mainAgentsAlerts'); + +ui_require_jquery_file('pandora'); + +?> + + diff --git a/pandora_console/include/constants.php b/pandora_console/include/constants.php index ea9953fdd8..20ba3be36f 100644 --- a/pandora_console/include/constants.php +++ b/pandora_console/include/constants.php @@ -79,4 +79,12 @@ switch ($config["dbtype"]) { define ('BACKUP_FULLPATH', 'DATA_PUMP_DIR'); break; } + +/* Color constants */ +define('COL_CRITICAL','#cc0000'); +define('COL_WARNING','#ffcc00'); +define('COL_NORMAL','#8ae234'); +define('COL_NOTINIT','#ef2929'); +define('COL_UNKNOWN','#aaaaaa'); +define('COL_ALERTFIRED','#ff8800'); ?>