diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog index 386361092b..abb23ecaaf 100644 --- a/pandora_console/ChangeLog +++ b/pandora_console/ChangeLog @@ -1,3 +1,12 @@ +2013-03-15 Vanessa Gil + + * include/functions_treeview.php + include/functions_ui.php + include/ajax/module.php + include/javascript/pandora_modules.js + operation/tree.php: Added popup with data + module. + 2013-03-15 Hirofumi Kosaka * include/functions_api.php: Improved performance of diff --git a/pandora_console/godmode/reporting/reporting_builder.php b/pandora_console/godmode/reporting/reporting_builder.php index 1700616861..d44cfdda8b 100644 --- a/pandora_console/godmode/reporting/reporting_builder.php +++ b/pandora_console/godmode/reporting/reporting_builder.php @@ -1456,4 +1456,4 @@ switch ($activeTab) { reporting_enterprise_select_tab($activeTab); break; } -?> \ No newline at end of file +?> diff --git a/pandora_console/include/ajax/module.php b/pandora_console/include/ajax/module.php index fbe72d5eba..e5d3dc1631 100644 --- a/pandora_console/include/ajax/module.php +++ b/pandora_console/include/ajax/module.php @@ -14,8 +14,13 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -include_once($config['homedir'] . "/include/functions_agents.php"); +global $config; +include_once($config['homedir'] . "/include/functions_agents.php"); +include_once($config['homedir'] . "/include/functions_ui.php"); +require_once ($config['homedir'] . '/enterprise/include/functions_metaconsole.php'); +ui_require_jquery_file ("ui-timepicker-addon"); + $search_modules = get_parameter('search_modules'); if ($search_modules) { @@ -47,4 +52,193 @@ if ($get_plugin_macros) { echo json_encode($macros); } +$get_module_detail = get_parameter ('get_module_detail', 0); + +if ($get_module_detail) { + + $module_id = get_parameter ('id_module'); + $period = get_parameter ("period", 86400); + $group = agents_get_agentmodule_group ($module_id); + $agentId = get_parameter("id_agent"); + $server_name = get_parameter('server_name'); + + if (defined ('METACONSOLE')) { + $server = metaconsole_get_connection ($server_name); + $conexion = mysql_connect ($server['dbhost'], $server['dbuser'], $server['dbpass']); + $select_db = mysql_select_db ($server['dbname'], $conexion); + } + + $formtable->width = '98%'; + $formtable->class = "databox"; + $formtable->data = array (); + $formtable->size = array (); + + $periods = array(300=>__('5 minutes'), 1800=>__('30 minutes'), 3600=>__('1 hour'), 21600=>__('6 hours'), 43200=>__('12 hours'), + 86400=>__('1 day'), 604800=>__('1 week'), 1296000=>__('15 days'), 2592000=>__('1 month'), 7776000=>__('3 months'), + 15552000=>__('6 months'), 31104000=>__('1 year'), 62208000=>__('2 years'), 93312000=>__('3 years') + ); + + $formtable->data[0][0] = __('Select period:'); + $formtable->data[0][1] = html_print_select ($periods, 'period', $period, '', '', 0, true, false, false); + $formtable->data[0][2] = "". html_print_image ("images/refresh.png", true, array ("style" => 'vertical-align: middle;', "border" => "0" )) . ""; + + html_print_table($formtable); + + $moduletype_name = modules_get_moduletype_name (modules_get_agentmodule_type ($module_id)); + + $offset = (int) get_parameter("offset"); + $block_size = (int) $config["block_size"]; + + $columns = array (); + + $datetime_from = strtotime ($date_from.' '.$time_from); + $datetime_to = strtotime ($date_to.' '.$time_to); + + if ($moduletype_name == "log4x") { + $table->width = "100%"; + + $sql_body = sprintf ("FROM tagente_datos_log4x WHERE id_agente_modulo = %d AND utimestamp > %d ORDER BY utimestamp DESC", $module_id, get_system_time () - $period); + + $columns = array( + "Timestamp" => array("utimestamp", "modules_format_timestamp", "align" => "center" ), + "Sev" => array("severity", "modules_format_data", "align" => "center", "width" => "70px"), + "Message"=> array("message", "modules_format_verbatim", "align" => "left", "width" => "45%"), + "StackTrace" => array("stacktrace", "modules_format_verbatim", "align" => "left", "width" => "50%") + ); + } + else if (preg_match ("/string/", $moduletype_name)) { + + $sql_body = sprintf (" FROM tagente_datos_string WHERE id_agente_modulo = %d AND utimestamp > %d ORDER BY utimestamp DESC", $module_id, get_system_time () - $period); + $columns = array( + "Timestamp" => array("utimestamp", "modules_format_timestamp", "align" => "left"), + "Data" => array("datos", "modules_format_data", "align" => "left"), + "Time" => array("utimestamp", "modules_format_time", "align" => "center") + ); + } + else { + + $sql_body = sprintf (" FROM tagente_datos WHERE id_agente_modulo = %d AND utimestamp > %d ORDER BY utimestamp DESC", $module_id, get_system_time () - $period); + + $columns = array( + "Timestamp" => array("utimestamp", "modules_format_timestamp", "align" => "left"), + "Data" => array("datos", "modules_format_data", "align" => "left"), + "Time" => array("utimestamp", "modules_format_time", "align" => "center") + ); + } + + $sql_body = io_safe_output($sql_body); + // Clean all codification characters + + $sql = "SELECT * " . $sql_body; + $sql_count = "SELECT count(*) " . $sql_body; + + $count = db_get_value_sql ($sql_count, $conexion); + + switch ($config["dbtype"]) { + case "mysql": + $sql .= " LIMIT " . $offset . "," . $block_size; + break; + case "postgresql": + $sql .= " LIMIT " . $block_size . " OFFSET " . $offset; + break; + case "oracle": + $set = array(); + $set['limit'] = $block_size; + $set['offset'] = $offset; + $sql = oracle_recode_query ($sql, $set); + break; + } + + $result = db_get_all_rows_sql ($sql, false, true, $conexion); + + if ($result === false) { + $result = array (); + } + + if (($config['dbtype'] == 'oracle') && ($result !== false)) { + for ($i=0; $i < count($result); $i++) { + unset($result[$i]['rnum']); + } + } + + $table->width = '98%'; + $table->data = array(); + + $index = 0; + foreach($columns as $col => $attr) { + $table->head[$index] = $col; + + if (isset($attr["align"])) + $table->align[$index] = $attr["align"]; + + if (isset($attr["width"])) + $table->size[$index] = $attr["width"]; + + $index++; + } + + $id_type_web_content_string = db_get_value('id_tipo', 'ttipo_modulo', + 'nombre', 'web_content_string'); + + foreach ($result as $row) { + $data = array (); + + $is_web_content_string = (bool)db_get_value_filter('id_agente_modulo', + 'tagente_modulo', + array('id_agente_modulo' => $row['id_agente_modulo'], + 'id_tipo_modulo' => $id_type_web_content_string)); + + foreach($columns as $col => $attr) { + if ($attr[1] != "modules_format_data") { + $data[] = $attr[1] ($row[$attr[0]]); + + } + elseif (($config['command_snapshot']) && (preg_match ("/[\n]+/i", $row[$attr[0]]))) { + // Its a single-data, multiline data (data snapshot) ? + + + // Detect string data with \n and convert to
's + $datos = preg_replace ('/\n/i','
',$row[$attr[0]]); + $datos = preg_replace ('/\s/i',' ',$datos); + + // Because this *SHIT* of print_table monster, I cannot format properly this cells + // so, eat this, motherfucker :)) + + $datos = "".$datos.""; + + // I dont why, but using index (value) method, data is automatically converted to html entities ¿? + $data[$attr[1]] = $datos; + } + elseif ($is_web_content_string) { + //Fixed the goliat sends the strings from web + //without HTML entities + + $data[$attr[1]] = io_safe_input($row[$attr[0]]); + } + else { + // Just a string of alphanumerical data... just do print + //Fixed the data from Selenium Plugin + if ($row[$attr[0]] != strip_tags($row[$attr[0]])) + $data[$attr[1]] = io_safe_input($row[$attr[0]]); + else + $data[$attr[1]] = $row[$attr[0]]; + } + } + + array_push ($table->data, $data); + if (count($table->data) > 200) break; + } + + if (empty ($table->data)) { + echo '

'.__('No available data to show').'

'; + } + else { + ui_pagination($count, false, $offset); + html_print_table($table); + } + return; + } + + ?> + diff --git a/pandora_console/include/functions_treeview.php b/pandora_console/include/functions_treeview.php index 3a741e8b57..2bfea516b9 100755 --- a/pandora_console/include/functions_treeview.php +++ b/pandora_console/include/functions_treeview.php @@ -96,12 +96,22 @@ function treeview_printModuleTable($id_module, $server_data = false) { $agent_name = db_get_value('nombre', 'tagente', 'id_agente', $module['id_agente']); // Actions table +/* echo ''; echo ''; echo ''; + echo '
'; html_print_submit_button (__('Go to modules detail'), 'upd_button', false, 'class="sub search"'); echo '
'; +*/ + +//id_module and id_agent hidden +echo ''; return; } @@ -350,10 +360,12 @@ function treeview_printTable($id_agente, $server_data = array()) { echo ''; // If user has access to normal console +/* echo ''; echo ''; +*/ echo '
'; html_print_submit_button (__('Go to agent detail'), 'upd_button', false, 'class="sub search"'); echo '
'; @@ -1202,3 +1214,89 @@ function treeview_getSecondBranchSQL ($fatherType, $id, $id_father) { return $sql; } ?> + + diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php index ccd2fed453..3ed7a177fb 100644 --- a/pandora_console/include/functions_ui.php +++ b/pandora_console/include/functions_ui.php @@ -1489,7 +1489,9 @@ function ui_pagination ($count, $url = false, $offset = 0, $pagination = 0, $ret $inicio_bloque_fake = $inicio_bloque + 1; // To Calculate last block (doesnt end with round data, // it must be shown if not round to block limit) - $output .= '" . html_print_image ("images/binary.png", true, array ("style" => 'vertical-align: middle;', "border" => "0" )) . ""; - + //echo "" . html_print_image ("images/binary.png", true, array ("style" => 'vertical-align: middle;', "border" => "0" )) . ""; + echo "". html_print_image ("images/binary.png", true, array ("style" => 'vertical-align: middle;', "border" => "0" )) . ""; + echo " "; $nmodule_alerts = db_get_value_sql(sprintf("SELECT count(*) FROM talert_template_modules WHERE id_agent_module = %s", $row["id_agente_modulo"])); @@ -609,7 +610,8 @@ echo "
"; echo "
"; ///////// END MENU AND TABS ///////////// - +echo "
"; +ui_require_javascript_file('pandora_modules'); treeview_printTree($activeTab); ?> @@ -794,4 +796,51 @@ treeview_printTree($activeTab); } }); } + + // Show the modal window of an module + function show_module_detail_dialog(module_id, id_agent, server_name, offset, period) { + if (period == -1) { + period = $('#period').val(); + } + $.ajax({ + type: "POST", + url: "", + data: "page=include/ajax/module&get_module_detail=1&server_name="+server_name+"&id_agent="+id_agent+"&id_module=" + module_id+"&offset="+offset+"&period="+period, + dataType: "html", + success: function(data){ + $("#module_details_window").hide () + .empty () + .append (data) + .dialog ({ + resizable: true, + draggable: true, + modal: true, + overlay: { + opacity: 0.5, + background: "black" + }, + width: 620, + height: 500 + }) + .show (); + refresh_pagination_callback (module_id, id_agent, server_name); + + } + }); + } + + function refresh_pagination_callback (module_id, id_agent, server_name) { + $(".pagination").click( function() { + var classes = $(this).attr('class'); + classes = classes.split(' '); + var offset_class = classes[1]; + offset_class = offset_class.split('_'); + var offset = offset_class[1]; + + var period = $('#period').val(); + + show_module_detail_dialog(module_id, id_agent, server_name, offset, period); + return false; + }); + }