diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog index 83e4b6219e..55d6a4948f 100644 --- a/pandora_console/ChangeLog +++ b/pandora_console/ChangeLog @@ -1,3 +1,16 @@ +2012-03-27 Sergio Martin + + * include/styles/images/ui-bg_highlight-soft_100_eeeeee_1x100.png + include/functions_reporting.php + include/functions.php + include/constants.php + include/functions_reports.php + godmode/reporting/reporting_builder.list_items.php + godmode/reporting/reporting_builder.php + godmode/reporting/reporting_builder.item_editor.php: Clean code, + fix a baseline graph report, and add a new tipe of report item: + inventory + 2012-03-26 Hirofumi Kosaka * include/functions_api.php: Fixed set_create_plugin_module diff --git a/pandora_console/godmode/reporting/reporting_builder.item_editor.php b/pandora_console/godmode/reporting/reporting_builder.item_editor.php index 6f59eb6831..627b5c2a4e 100644 --- a/pandora_console/godmode/reporting/reporting_builder.item_editor.php +++ b/pandora_console/godmode/reporting/reporting_builder.item_editor.php @@ -317,6 +317,13 @@ switch ($action) { $group = $item['id_group']; $modulegroup = $item ['id_module_group']; break; + case 'inventory': + $description = $item['description']; + $es = json_decode($item['external_source'], true); + $date = $es['date']; + $inventory_modules = $es['inventory_modules']; + $id_agents = $es['id_agents']; + break; } //Restore db connection @@ -441,7 +448,7 @@ html_print_input_hidden('id_item', $idItem); - + @@ -482,6 +489,42 @@ html_print_input_hidden('id_item', $idItem); ?> + + + + + + + + + + + + + + + + + + @@ -841,6 +884,8 @@ function print_General_list($width, $action, $idItem = null) { diff --git a/pandora_console/godmode/reporting/reporting_builder.list_items.php b/pandora_console/godmode/reporting/reporting_builder.list_items.php index 59f388d97e..4753d8e12f 100644 --- a/pandora_console/godmode/reporting/reporting_builder.list_items.php +++ b/pandora_console/godmode/reporting/reporting_builder.list_items.php @@ -295,7 +295,12 @@ foreach ($items as $item) { } } - $row[4] = human_time_description_raw($item['period']); + if($item['period'] > 0) { + $row[4] = human_time_description_raw($item['period']); + } + else { + $row[4] = '-'; + } if ($item['description'] == '') { $row[5] = '-'; diff --git a/pandora_console/godmode/reporting/reporting_builder.php b/pandora_console/godmode/reporting/reporting_builder.php index 9d9ea6f873..f8042995c9 100644 --- a/pandora_console/godmode/reporting/reporting_builder.php +++ b/pandora_console/godmode/reporting/reporting_builder.php @@ -318,37 +318,50 @@ switch ($action) { $values['type'] = get_parameter('type', null); // Added support for projection graphs, prediction date and SLA reports // 'top_n_value','top_n' and 'text' fields will be reused for these types of report - if ($values['type'] == 'projection_graph'){ - $values['period'] = get_parameter('period1'); - $values['top_n_value'] = get_parameter('period2'); - $values['text'] = get_parameter('text'); - $good_format = true; - }else if ($values['type'] == 'prediction_date'){ - $values['period'] = get_parameter('period1'); - $values['top_n'] = get_parameter('radiobutton_max_min_avg'); - $values['top_n_value'] = get_parameter('quantity'); - $interval_max = get_parameter('max_interval'); - $interval_min = get_parameter('min_interval'); - // Checks intervals fields - if (preg_match('/^(\-)*[0-9]*\.?[0-9]+$/', $interval_max) and preg_match('/^(\-)*[0-9]*\.?[0-9]+$/', $interval_min)){ + switch ($values['type']) { + case 'projection_graph': + $values['period'] = get_parameter('period1'); + $values['top_n_value'] = get_parameter('period2'); + $values['text'] = get_parameter('text'); + $good_format = true; + break; + case 'prediction_date': + $values['period'] = get_parameter('period1'); + $values['top_n'] = get_parameter('radiobutton_max_min_avg'); + $values['top_n_value'] = get_parameter('quantity'); + $interval_max = get_parameter('max_interval'); + $interval_min = get_parameter('min_interval'); + // Checks intervals fields + if (preg_match('/^(\-)*[0-9]*\.?[0-9]+$/', $interval_max) and preg_match('/^(\-)*[0-9]*\.?[0-9]+$/', $interval_min)){ + $good_format = true; + } + $intervals = get_parameter('max_interval') . ';' . get_parameter('min_interval'); + $values['text'] = $intervals; + break; + case 'SLA': + $values['period'] = get_parameter('period'); + $values['top_n'] = get_parameter('combo_sla_sort_options',0); + $values['top_n_value'] = get_parameter('quantity'); + $values['text'] = get_parameter('text'); + $good_format = true; + break; + case 'inventory': + $values['period'] = 0; + $es['id_agents'] = get_parameter('id_agents'); + $es['inventory_modules'] = get_parameter('inventory_modules'); + $es['date'] = get_parameter('date'); + $description = get_parameter('description'); + $values['external_source'] = json_encode($es); + $good_format = true; + break; + default: + $values['period'] = get_parameter('period'); + $values['top_n'] = get_parameter('radiobutton_max_min_avg',0); + $values['top_n_value'] = get_parameter('quantity'); + $values['text'] = get_parameter('text'); $good_format = true; - } - $intervals = get_parameter('max_interval') . ';' . get_parameter('min_interval'); - $values['text'] = $intervals; - }else if ($values['type'] == 'SLA'){ - $values['period'] = get_parameter('period'); - $values['top_n'] = get_parameter('combo_sla_sort_options', 0); - $values['top_n_value'] = get_parameter('quantity'); - $values['text'] = get_parameter('text'); - $good_format = true; - } - else { - $values['period'] = get_parameter('period'); - $values['top_n'] = get_parameter('radiobutton_max_min_avg'); - $values['top_n_value'] = get_parameter('quantity'); - $values['text'] = get_parameter('text'); - $good_format = true; } + $values['id_agent'] = get_parameter('id_agent'); $values['id_gs'] = get_parameter('id_custom_graph'); $values['id_agent_module'] = get_parameter('id_agent_module'); @@ -422,39 +435,49 @@ switch ($action) { $values['description'] = get_parameter('description'); // Support for projection graph, prediction date and SLA reports // 'top_n_value', 'top_n' and 'text' fields will be reused for these types of report - if ($values['type'] == 'projection_graph') { - $values['period'] = get_parameter('period1'); - $values['top_n_value'] = get_parameter('period2'); - $values['text'] = get_parameter('text'); - $good_format = true; - } - else if ($values['type'] == 'prediction_date') { - $values['period'] = get_parameter('period1'); - $values['top_n'] = get_parameter('radiobutton_max_min_avg'); - $values['top_n_value'] = get_parameter('quantity'); - $interval_max = get_parameter('max_interval'); - $interval_min = get_parameter('min_interval'); - // Checks intervals fields - if (preg_match('/^(\-)*[0-9]*\.?[0-9]+$/', $interval_max) and preg_match('/^(\-)*[0-9]*\.?[0-9]+$/', $interval_min)){ + switch ($values['type']) { + case 'projection_graph': + $values['period'] = get_parameter('period1'); + $values['top_n_value'] = get_parameter('period2'); + $values['text'] = get_parameter('text'); + $good_format = true; + break; + case 'prediction_date': + $values['period'] = get_parameter('period1'); + $values['top_n'] = get_parameter('radiobutton_max_min_avg'); + $values['top_n_value'] = get_parameter('quantity'); + $interval_max = get_parameter('max_interval'); + $interval_min = get_parameter('min_interval'); + // Checks intervals fields + if (preg_match('/^(\-)*[0-9]*\.?[0-9]+$/', $interval_max) and preg_match('/^(\-)*[0-9]*\.?[0-9]+$/', $interval_min)){ + $good_format = true; + } + $intervals = get_parameter('max_interval') . ';' . get_parameter('min_interval'); + $values['text'] = $intervals; + break; + case 'SLA': + $values['period'] = get_parameter('period'); + $values['top_n'] = get_parameter('combo_sla_sort_options',0); + $values['top_n_value'] = get_parameter('quantity'); + $values['text'] = get_parameter('text'); + $good_format = true; + break; + case 'inventory': + $values['period'] = 0; + $es['id_agents'] = get_parameter('id_agents'); + $es['inventory_modules'] = get_parameter('inventory_modules'); + $es['date'] = get_parameter('date'); + $values['external_source'] = json_encode($es); + $good_format = true; + break; + default: + $values['period'] = get_parameter('period'); + $values['top_n'] = get_parameter('radiobutton_max_min_avg',0); + $values['top_n_value'] = get_parameter('quantity'); + $values['text'] = get_parameter('text'); $good_format = true; - } - $intervals = get_parameter('max_interval') . ';' . get_parameter('min_interval'); - $values['text'] = $intervals; - } - else if ($values['type'] == 'SLA') { - $values['period'] = get_parameter('period'); - $values['top_n'] = get_parameter('combo_sla_sort_options',0); - $values['top_n_value'] = get_parameter('quantity'); - $values['text'] = get_parameter('text'); - $good_format = true; - } - else { - $values['period'] = get_parameter('period'); - $values['top_n'] = get_parameter('radiobutton_max_min_avg',0); - $values['top_n_value'] = get_parameter('quantity'); - $values['text'] = get_parameter('text'); - $good_format = true; } + $values['id_agent'] = get_parameter('id_agent'); $values['id_gs'] = get_parameter('id_custom_graph'); $values['id_agent_module'] = get_parameter('id_agent_module'); diff --git a/pandora_console/include/constants.php b/pandora_console/include/constants.php index cafe2bc2a3..071830d349 100644 --- a/pandora_console/include/constants.php +++ b/pandora_console/include/constants.php @@ -37,6 +37,7 @@ define ('ERR_INCOMPLETE', -30000); define ('ERR_DB', -40000); define ('ERR_FILE', -50000); define ('ERR_NOCHANGES', -60000); +define ('ERR_NODATA', -70000); /* Visual console constants */ define('MIN_WIDTH',300); @@ -60,4 +61,10 @@ define('SECONDS_1YEAR',31104000); define('SECONDS_2YEARS',62208000); define('SECONDS_3YEARS',93312000); +/* Separator constats */ +define('SEPARATOR_COLUMN', ';'); +define('SEPARATOR_ROW', chr(10)); //chr(10) = '\n' +define('SEPARATOR_COLUMN_CSV', "#"); +define('SEPARATOR_ROW_CSV', "@\n"); + ?> diff --git a/pandora_console/include/functions.php b/pandora_console/include/functions.php index f9c662c93a..5de48f71ac 100644 --- a/pandora_console/include/functions.php +++ b/pandora_console/include/functions.php @@ -730,181 +730,6 @@ function get_alert_times ($row2) { return substr ($time_from_table, 0, 5)." - ".substr ($time_to_table, 0, 5); } -/** - * Get report types in an array. - * - * @return array An array with all the possible reports in Pandora where the array index is the report id. - */ -function get_report_types () { - global $config; - - $types = array (); - - $types['simple_graph'] = array('optgroup' => __('Graphs'), - 'name' => __('Simple graph')); - if($config['enterprise_installed']) { - $types['simple_baseline_graph'] = array('optgroup' => __('Graphs'), - 'name' => __('Simple baseline graph')); - } - $types['custom_graph'] = array('optgroup' => __('Graphs'), - 'name' => __('Custom graph')); - # Only pandora managers have access to the whole database - if (check_acl ($config['id_user'], 0, "PM")) { - $types['sql_graph_vbar'] = array('optgroup' => __('Graphs'), - 'name' => __('SQL vertical bar graph')); - $types['sql_graph_pie'] = array('optgroup' => __('Graphs'), - 'name' => __('SQL pie graph')); - $types['sql_graph_hbar'] = array('optgroup' => __('Graphs'), - 'name' => __('SQL horizonal bar graph')); - } - - - - $types['TTRT'] = array('optgroup' => __('ITIL'), - 'name' => __('TTRT')); - $types['TTO'] = array('optgroup' => __('ITIL'), - 'name' => __('TTO')); - $types['MTBF'] = array('optgroup' => __('ITIL'), - 'name' => __('MTBF')); - $types['MTTR'] = array('optgroup' => __('ITIL'), - 'name' => __('MTTR')); - - - - $types['SLA'] = array('optgroup' => __('SLA'), - 'name' => __('S.L.A.')); - - - - $types['prediction_date'] = array('optgroup' => __('Forecating'), - 'name' => __('Prediction date')); - $types['projection_graph'] = array('optgroup' => __('Forecating'), - 'name' => __('Projection graph')); - - - - $types['avg_value'] = array('optgroup' => __('Modules'), - 'name' => __('Avg. Value')); - $types['max_value'] = array('optgroup' => __('Modules'), - 'name' => __('Max. Value')); - $types['min_value'] = array('optgroup' => __('Modules'), - 'name' => __('Min. Value')); - $types['monitor_report'] = array('optgroup' => __('Modules'), - 'name' => __('Monitor report')); - $types['database_serialized'] = array('optgroup' => __('Modules'), - 'name' => __('Serialize data')); - $types['sumatory'] = array('optgroup' => __('Modules'), - 'name' => __('Summatory')); - - - - $types['general'] = array('optgroup' => __('Grouped'), - 'name' => __('General')); - $types['group_report'] = array('optgroup' => __('Grouped'), - 'name' => __('Group report')); - $types['exception'] = array('optgroup' => __('Grouped'), - 'name' => __('Exception')); - if ($config['metaconsole'] != 1) - $types['agent_module'] = array('optgroup' => __('Grouped'), - 'name' => __('Agents/Modules')); - # Only pandora managers have access to the whole database - if (check_acl ($config['id_user'], 0, "PM")) { - $types['sql'] = array('optgroup' => __('Grouped'), - 'name' => __('SQL query')); - } - $types['top_n'] = array('optgroup' => __('Grouped'), - 'name' => __('Top n')); - - - - $types['text'] = array('optgroup' => __('Text/HTML '), - 'name' => __ ('Text')); - $types['url'] = array('optgroup' => __('Text/HTML '), - 'name' => __('Import text from URL')); - - - - $types['alert_report_module'] = array('optgroup' => __('Alerts'), - 'name' => __('Alert report module')); - $types['alert_report_agent'] = array('optgroup' => __('Alerts'), - 'name' => __('Alert report agent')); - - - - $types['event_report_agent'] = array('optgroup' => __('Events'), - 'name' => __('Event report agent')); - $types['event_report_module'] = array('optgroup' => __('Events'), - 'name' => __('Event report module')); - $types['event_report_group'] = array('optgroup' => __('Events'), - 'name' => __('Event report group')); - - return $types; -} - -/** - * Get report type name from type id. - * - * @param int $type Type id of the report. - * - * @return string Report type name. - */ -function get_report_name ($type) { - $types = get_report_types (); - if (! isset ($types[$type])) - return __('Unknown'); - - return $types[$type]['name']; -} - -/** - * Get report type data source from type id. - * - * TODO: Better documentation as to what this function does - * - * @param mixed $type Type id or type name of the report. - * - * @return string Report type name. - */ -function get_report_type_data_source ($type) { - switch ($type) { - case 1: - case 'simple_graph': - case 6: - case 'monitor_report': - case 7: - case 'avg_value': - case 8: - case 'max_value': - case 9: - case 'min_value': - case 10: - case 'sumatory': - case 'agent_detailed_event': - return 'module'; - break; - case 2: - case 'custom_graph': - return 'custom-graph'; - break; - case 3: - case 'SLA': - case 4: - case 'event_report': - case 5: - case 'alert_report': - case 11: - case 'general_group_report': - case 12: - case 'monitor_health': - case 13: - case 'agents_detailed': - return 'agent-group'; - break; - } - - return 'unknown'; -} - /** * Checks if a module is of type "data" * diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index 0bea19f2bf..2e4151b6b8 100644 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -32,6 +32,7 @@ include_once($config['homedir'] . "/include/functions_events.php"); include_once($config['homedir'] . "/include/functions_alerts.php"); include_once($config['homedir'] . '/include/functions_users.php'); enterprise_include_once ('include/functions_metaconsole.php'); +enterprise_include_once ('include/functions_inventory.php'); include_once($config['homedir'] . "/include/functions_forecast.php"); include_once($config['homedir'] . "/include/functions_ui.php"); @@ -3760,11 +3761,13 @@ function reporting_render_report_html_item ($content, $table, $report, $mini = f $data_top_values['agent_name'] = $agent_name; $data_top_values['module_name'] = $module_name; $data_top_values['id_agent_module'] = $id_agent_module; + $data_top_values['units'] = $units; array_splice ($data_top, $top_n_value); array_splice ($agent_name, $top_n_value); array_splice ($module_name, $top_n_value); array_splice ($id_agent_module, $top_n_value); + array_splice ($units, $top_n_value); switch ($order_uptodown) { //Descending @@ -4387,6 +4390,34 @@ function reporting_render_report_html_item ($content, $table, $report, $mini = f $data[0] = $table_data; array_push ($table->data, $data); break; + case 'inventory': + reporting_header_content($mini, $content, $report, $table, __('Inventory')); + + $es = json_decode($content['external_source'], true); + + $id_agent = $es['id_agents']; + $module_name = $es['inventory_modules']; + $date = $es['date']; + $description = $content['description']; + + $data = array (); + $table->colspan[1][0] = 2; + $table->colspan[2][0] = 2; + if($description != '') { + $data[0] = $description; + array_push ($table->data, $data); + } + + $inventory_data = inventory_get_data((array)$id_agent,0,$date,'',false,(array)$module_name); + + if ($inventory_data == ERR_NODATA) { + $inventory_data = "
".__('No data found.')."
"; + $inventory_data .= " "; + } + + $data[0] = $inventory_data; + array_push ($table->data, $data); + break; } //Restore dbconnection if (($config ['metaconsole'] == 1) && $server_name != '') { diff --git a/pandora_console/include/functions_reports.php b/pandora_console/include/functions_reports.php index e499304193..bb152c18cb 100644 --- a/pandora_console/include/functions_reports.php +++ b/pandora_console/include/functions_reports.php @@ -379,4 +379,185 @@ function reports_delete_content ($id_report_content) { return (@db_process_sql_delete ('treport_content', array ('id_rc' => $id_report_content))) !== false; } + +/** + * Get report type name from type id. + * + * @param int $type Type id of the report. + * + * @return string Report type name. + */ +function get_report_name ($type) { + $types = get_report_types (); + if (! isset ($types[$type])) + return __('Unknown'); + + return $types[$type]['name']; +} + + +/** + * Get report type data source from type id. + * + * TODO: Better documentation as to what this function does + * + * @param mixed $type Type id or type name of the report. + * + * @return string Report type name. + */ +function get_report_type_data_source ($type) { + switch ($type) { + case 1: + case 'simple_graph': + case 6: + case 'monitor_report': + case 7: + case 'avg_value': + case 8: + case 'max_value': + case 9: + case 'min_value': + case 10: + case 'sumatory': + case 'agent_detailed_event': + return 'module'; + break; + case 2: + case 'custom_graph': + return 'custom-graph'; + break; + case 3: + case 'SLA': + case 4: + case 'event_report': + case 5: + case 'alert_report': + case 11: + case 'general_group_report': + case 12: + case 'monitor_health': + case 13: + case 'agents_detailed': + return 'agent-group'; + break; + } + + return 'unknown'; +} + +/** + * Get report types in an array. + * + * @return array An array with all the possible reports in Pandora where the array index is the report id. + */ +function get_report_types () { + global $config; + + $types = array (); + + $types['simple_graph'] = array('optgroup' => __('Graphs'), + 'name' => __('Simple graph')); + $types['simple_baseline_graph'] = array('optgroup' => __('Graphs'), + 'name' => __('Simple baseline graph')); + $types['custom_graph'] = array('optgroup' => __('Graphs'), + 'name' => __('Custom graph')); + # Only pandora managers have access to the whole database + if (check_acl ($config['id_user'], 0, "PM")) { + $types['sql_graph_vbar'] = array('optgroup' => __('Graphs'), + 'name' => __('SQL vertical bar graph')); + $types['sql_graph_pie'] = array('optgroup' => __('Graphs'), + 'name' => __('SQL pie graph')); + $types['sql_graph_hbar'] = array('optgroup' => __('Graphs'), + 'name' => __('SQL horizonal bar graph')); + } + + + + $types['TTRT'] = array('optgroup' => __('ITIL'), + 'name' => __('TTRT')); + $types['TTO'] = array('optgroup' => __('ITIL'), + 'name' => __('TTO')); + $types['MTBF'] = array('optgroup' => __('ITIL'), + 'name' => __('MTBF')); + $types['MTTR'] = array('optgroup' => __('ITIL'), + 'name' => __('MTTR')); + + + + $types['SLA'] = array('optgroup' => __('SLA'), + 'name' => __('S.L.A.')); + + + + $types['prediction_date'] = array('optgroup' => __('Forecating'), + 'name' => __('Prediction date')); + $types['projection_graph'] = array('optgroup' => __('Forecating'), + 'name' => __('Projection graph')); + + + + $types['avg_value'] = array('optgroup' => __('Modules'), + 'name' => __('Avg. Value')); + $types['max_value'] = array('optgroup' => __('Modules'), + 'name' => __('Max. Value')); + $types['min_value'] = array('optgroup' => __('Modules'), + 'name' => __('Min. Value')); + $types['monitor_report'] = array('optgroup' => __('Modules'), + 'name' => __('Monitor report')); + $types['database_serialized'] = array('optgroup' => __('Modules'), + 'name' => __('Serialize data')); + $types['sumatory'] = array('optgroup' => __('Modules'), + 'name' => __('Summatory')); + + + + $types['general'] = array('optgroup' => __('Grouped'), + 'name' => __('General')); + $types['group_report'] = array('optgroup' => __('Grouped'), + 'name' => __('Group report')); + $types['exception'] = array('optgroup' => __('Grouped'), + 'name' => __('Exception')); + if ($config['metaconsole'] != 1) + $types['agent_module'] = array('optgroup' => __('Grouped'), + 'name' => __('Agents/Modules')); + # Only pandora managers have access to the whole database + if (check_acl ($config['id_user'], 0, "PM")) { + $types['sql'] = array('optgroup' => __('Grouped'), + 'name' => __('SQL query')); + } + $types['top_n'] = array('optgroup' => __('Grouped'), + 'name' => __('Top n')); + + + + $types['text'] = array('optgroup' => __('Text/HTML '), + 'name' => __ ('Text')); + $types['url'] = array('optgroup' => __('Text/HTML '), + 'name' => __('Import text from URL')); + + + + $types['alert_report_module'] = array('optgroup' => __('Alerts'), + 'name' => __('Alert report module')); + $types['alert_report_agent'] = array('optgroup' => __('Alerts'), + 'name' => __('Alert report agent')); + + + + $types['event_report_agent'] = array('optgroup' => __('Events'), + 'name' => __('Event report agent')); + $types['event_report_module'] = array('optgroup' => __('Events'), + 'name' => __('Event report module')); + $types['event_report_group'] = array('optgroup' => __('Events'), + 'name' => __('Event report group')); + + if($config['enterprise_installed']) { + $types['inventory'] = array('optgroup' => __('Inventory'), + 'name' => __('Inventory')); + $types['inventory_changes'] = array('optgroup' => __('Inventory'), + 'name' => __('Inventory changes')); + } + + return $types; +} ?> diff --git a/pandora_console/include/styles/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/pandora_console/include/styles/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100644 index 0000000000..f1273672d2 Binary files /dev/null and b/pandora_console/include/styles/images/ui-bg_highlight-soft_100_eeeeee_1x100.png differ