'; $sizhfin = ''; } $date_text = ""; if (!empty($date)) { $date_text = date($config["date_format"], $date); } else if (!empty($from) && !empty($to)) { $date_text = "(" . human_time_description_raw ($period) . ") " . __("From:") . " " . date($config["date_format"], $from) . "
" . __("To:") . " " . date($config["date_format"], $to); } else if ($period > 0) { $date_text = human_time_description_raw($period); } else if ($period === 0) { $date_text = __('Last data'); } $data = array(); if (empty($subtitle) && (empty($date_text))) { $title = $sizh . $title . $sizhfin; $data[] = $title; $table->colspan[0][0] = 3; } else if (empty($subtitle)) { $data[] = $sizh . $title . $sizhfin; $data[] = "
" . $sizh . $date_text . $sizhfin . "
"; $table->colspan[0][1] = 2; } else if (empty($date_text)) { $data[] = $sizh . $title . $sizhfin; $data[] = $sizh . $subtitle . $sizhfin; $table->colspan[0][1] = 2; } else { $title = $sizh . $title; if ($label != '') { $title .= '
' . __('Label: ') . $label; } $data[] = $title . $sizhfin; $data[] = $sizh . $subtitle . $sizhfin; $data[] = "
" . $sizh . $date_text . $sizhfin . "
"; } array_push ($table->data, $data); } function html_do_report_info($report) { global $config; $date_today = date ($config["date_format"]); $html = '
' . ''; if (isset($report['period'])) { $html .= ''; } $html .= '
' . __('Generated') . ': ' . $date_today . '
' . __('Report date') . ': ' . date($config["date_format"], ($report['datetime'] - $report['period'])); } else { $html .= '' . __('Items period before') . ' ' . date($config["date_format"], $report['datetime']) . '
' . __('Description') . ': ' . io_safe_output($report['description']) . '
' . '
'; echo $html; } function reporting_html_print_report($report, $mini = false, $report_info = 1) { if($report_info == 1){ html_do_report_info($report); } foreach ($report['contents'] as $key => $item) { $table = new stdClass(); $table->size = array (); $table->style = array (); $table->width = '100%'; $table->class = 'databox filters'; $table->rowclass = array (); $table->rowclass[0] = 'datos3'; $table->data = array (); $table->head = array (); $table->colspan = array (); $table->rowstyle = array (); if (isset($item['label']) && $item['label'] != '') { $label = reporting_label_macro($item, $item['label']); } else $label = ''; //$aux = explode("-",$item['subtitle']); //$item['subtitle'] = db_get_value ("alias","tagente","nombre",$item['agent_name']) .' -'. $aux[1]; reporting_html_header($table, $mini, $item['title'], $item['subtitle'], $item['date']['period'], $item['date']['date'], $item['date']['from'], $item['date']['to'], $label); $table->data['description_row']['description'] = $item['description']; if($item['type']=='event_report_agent' || $item['type']=='event_report_group' || $item['type']=='event_report_module'){ $table->data['count_row']['count'] = "Total events: ".$item["total_events"]; } $table->colspan['description_row']['description'] = 3; switch ($item['type']) { case 'availability': reporting_html_availability($table, $item); break; case 'event_report_log': reporting_html_log($table, $item); break; case 'availability_graph': reporting_html_availability_graph($table, $item); break; case 'general': reporting_html_general($table, $item); break; case 'sql': reporting_html_sql($table, $item); break; case 'simple_graph': reporting_html_graph($table, $item); break; case 'custom_graph': reporting_html_graph($table, $item); break; case 'text': reporting_html_text($table, $item); break; case 'url': reporting_html_url($table, $item, $key); break; case 'max_value': reporting_html_max_value($table, $item, $mini); break; case 'avg_value': reporting_html_avg_value($table, $item, $mini); break; case 'increment': reporting_html_increment($table, $item); break; case 'min_value': reporting_html_min_value($table, $item, $mini); break; case 'sumatory': reporting_html_sum_value($table, $item, $mini); break; case 'MTTR': reporting_html_MTTR_value($table, $item, $mini, true, true); break; case 'MTBF': reporting_html_MTBF_value($table, $item, $mini, true, true); break; case 'TTO': reporting_html_TTO_value($table, $item, $mini, false, true); break; case 'TTRT': reporting_html_TTRT_value($table, $item, $mini, false, true); break; case 'agent_configuration': reporting_html_agent_configuration($table, $item); break; case 'projection_graph': reporting_html_graph($table, $item); break; case 'prediction_date': reporting_html_prediction_date($table, $item, $mini); break; case 'simple_baseline_graph': reporting_html_graph($table, $item); break; case 'netflow_area': reporting_html_graph($table, $item); break; case 'netflow_pie': reporting_html_graph($table, $item); break; case 'netflow_data': reporting_html_graph($table, $item); break; case 'netflow_statistics': reporting_html_graph($table, $item); break; case 'netflow_summary': reporting_html_graph($table, $item); break; case 'monitor_report': reporting_html_monitor_report($table, $item, $mini); break; case 'sql_graph_vbar': reporting_html_sql_graph($table, $item); break; case 'sql_graph_hbar': reporting_html_sql_graph($table, $item); break; case 'sql_graph_pie': reporting_html_sql_graph($table, $item); break; case 'alert_report_group': case 'alert_report_module': case 'alert_report_agent': reporting_html_alert_report($table, $item); break; case 'network_interfaces_report': reporting_html_network_interfaces_report($table, $item); break; case 'group_configuration': reporting_html_group_configuration($table, $item); break; case 'historical_data': reporting_html_historical_data($table, $item); break; case 'database_serialized': reporting_html_database_serialized($table, $item); break; case 'group_report': reporting_html_group_report($table, $item); break; case 'exception': reporting_html_exception($table, $item); break; case 'agent_module': reporting_html_agent_module($table, $item); break; case 'inventory': reporting_html_inventory($table, $item); break; case 'inventory_changes': reporting_html_inventory_changes($table, $item); break; case 'agent_detailed_event': case 'event_report_agent': reporting_html_event_report_agent($table, $item); break; case 'event_report_module': reporting_html_event_report_module($table, $item); break; case 'event_report_group': reporting_html_event_report_group($table, $item); break; case 'top_n': reporting_html_top_n($table, $item); break; case 'SLA': reporting_html_SLA($table, $item, $mini); break; case 'SLA_monthly': reporting_enterprise_html_SLA_monthly($table, $item, $mini); break; case 'SLA_weekly': reporting_enterprise_html_SLA_weekly($table, $item, $mini); break; case 'SLA_hourly': reporting_enterprise_html_SLA_hourly($table, $item, $mini); break; case 'SLA_services': reporting_enterprise_html_SLA_services($table, $item, $mini); break; case 'module_histogram_graph': reporting_enterprise_html_module_histogram_graph($table, $item, $mini); break; } if ($item['type'] == 'agent_module') echo '
'; html_print_table($table); if ($item['type'] == 'agent_module') echo '
'; } } function reporting_html_SLA($table, $item, $mini) { $style = db_get_value('style', 'treport_content', 'id_rc', $item['id_rc']); $style = json_decode(io_safe_output($style), true); $hide_notinit_agent = $style['hide_notinit_agents']; $same_agent_in_resume = ""; global $config; if ($mini) { $font_size = '1.5'; } else { $font_size = '3'; } $metaconsole_on = is_metaconsole(); if($metaconsole_on){ $src= '../../'; } else{ $src=$config['homeurl']; } if (!empty($item['failed'])) { $table->colspan['sla']['cell'] = 3; $table->data['sla']['cell'] = $item['failed']; } else { if (!empty($item['planned_downtimes'])) { $downtimes_table = reporting_html_planned_downtimes_table($item['planned_downtimes']); if (!empty($downtimes_table)) { $table->colspan['planned_downtime']['cell'] = 3; $table->data['planned_downtime']['cell'] = $downtimes_table; } } if(isset($item['data'])){ $table1 = new stdClass(); $table1->width = '99%'; $table1->align = array(); $table1->align[0] = 'left'; $table1->align[1] = 'left'; $table1->align[2] = 'right'; $table1->align[3] = 'right'; $table1->align[4] = 'right'; $table1->align[5] = 'right'; $table1->data = array (); $table1->head = array (); $table1->head[0] = __('Agent'); $table1->head[1] = __('Module'); $table1->head[2] = __('Max/Min Values'); $table1->head[3] = __('SLA Limit'); $table1->head[4] = __('SLA Compliance'); $table1->head[5] = __('Status'); $table1->headstyle = array(); $table1->headstyle[2] = 'text-align: right'; $table1->headstyle[3] = 'text-align: right'; $table1->headstyle[4] = 'text-align: right'; $table1->headstyle[5] = 'text-align: right'; //second_table for time globals $table2 = new stdClass(); $table2->width = '99%'; $table2->align = array(); $table2->align[0] = 'left'; $table2->align[1] = 'left'; $table2->align[2] = 'right'; $table2->align[3] = 'right'; $table2->align[4] = 'right'; $table2->align[5] = 'right'; $table2->align[6] = 'right'; $table2->data = array (); $table2->head = array (); $table2->head[0] = __('Global Time'); $table2->head[1] = __('Time Total'); $table2->head[2] = __('Time Failed'); $table2->head[3] = __('Time OK'); $table2->head[4] = __('Time Unknown'); $table2->head[5] = __('Time Not Init'); $table2->head[6] = __('Downtime'); $table2->headstyle = array(); $table2->headstyle[2] = 'text-align: right'; $table2->headstyle[3] = 'text-align: right'; $table2->headstyle[4] = 'text-align: right'; $table2->headstyle[5] = 'text-align: right'; $table2->headstyle[6] = 'text-align: right'; //third_table for time globals $table3 = new stdClass(); $table3->width = '99%'; $table3->align = array(); $table3->align[0] = 'left'; $table3->align[1] = 'left'; $table3->align[2] = 'right'; $table3->align[3] = 'right'; $table3->align[4] = 'right'; $table3->align[5] = 'right'; $table3->align[6] = 'right'; $table3->data = array (); $table3->head = array (); $table3->head[0] = __('Checks Time'); $table3->head[1] = __('Checks Total'); $table3->head[2] = __('Checks Failed'); $table3->head[3] = __('Checks OK'); $table3->head[4] = __('Checks Unknown'); $table3->headstyle = array(); $table3->headstyle[2] = 'text-align: right'; $table3->headstyle[3] = 'text-align: right'; $table3->headstyle[4] = 'text-align: right'; $table3->headstyle[5] = 'text-align: right'; foreach ($item['data'] as $sla) { if(isset($sla)){ $the_first_men_time = get_agent_first_time(io_safe_output($sla['agent'])); if (!$hide_notinit_agent) { //first_table $row = array(); $row[] = $sla['agent']; $row[] = $sla['module']; if(is_numeric($sla['dinamic_text'])){ $row[] = remove_right_zeros(number_format($sla['max'], $config['graph_precision'])) . " / " . remove_right_zeros(number_format($sla['min'], $config['graph_precision'])); } else{ $row[] = $sla['dinamic_text']; } $row[] = round($sla['sla_limit'], 2) . "%"; if ($sla['sla_value_unknown']) { $row[] = '' . __('N/A') . ''; $row[] = '' . __('Unknown') . ''; } elseif ($sla['sla_status']) { $row[] = '' . sla_truncate($sla['sla_value'], $config['graph_precision']) . "%" . ''; $row[] = '' . __('OK') . ''; } else { $row[] = '' . sla_truncate($sla['sla_value'], $config['graph_precision']) . "%" . ''; $row[] = '' . __('Fail') . ''; } //second table for time globals $row2 = array(); $row2[] = $sla['agent'] . ' -- [' . $sla['module'] . ']'; if($sla['time_total'] != 0) $row2[] = human_time_description_raw($sla['time_total']); else $row2[] = '--'; if($sla['time_error'] != 0) $row2[] = '' . human_time_description_raw($sla['time_error'], true) . ''; else $row2[] = '--'; if($sla['time_ok'] != 0) $row2[] = '' . human_time_description_raw($sla['time_ok'], true) . ''; else $row2[] = '--'; if($sla['time_unknown'] != 0) $row2[] = '' . human_time_description_raw($sla['time_unknown'], true) . ''; else $row2[] = '--'; if($sla['time_not_init'] != 0) $row2[] = '' . human_time_description_raw($sla['time_not_init'], true) . ''; else $row2[] = '--'; if($sla['time_downtime'] != 0) $row2[] = '' . human_time_description_raw($sla['time_downtime'], true) . ''; else $row2[] = '--'; //third table for checks globals $row3 = array(); $row3[] = $sla['agent'] . ' -- [' . $sla['module'] . ']'; $row3[] = $sla['checks_total']; $row3[] = '' . $sla['checks_error'] . ''; $row3[] = '' . $sla['checks_ok'] . ''; $row3[] = '' . $sla['checks_unknown'] . ''; } else { if ($item['date']['to'] > $the_first_men_time) { //first_table $row = array(); $row[] = $sla['agent']; $row[] = $sla['module']; if(is_numeric($sla['dinamic_text'])){ $row[] = remove_right_zeros(number_format($sla['max'], $config['graph_precision'])) . " / " . remove_right_zeros(number_format($sla['min'], $config['graph_precision'])); } else{ $row[] = $sla['dinamic_text']; } $row[] = round($sla['sla_limit'], 2) . "%"; if ($sla['sla_value_unknown']) { $row[] = '' . __('N/A') . ''; $row[] = '' . __('Unknown') . ''; } elseif ($sla['sla_status']) { $row[] = '' . sla_truncate($sla['sla_value'], $config['graph_precision']) . "%" . ''; $row[] = '' . __('OK') . ''; } else { $row[] = '' . sla_truncate($sla['sla_value'], $config['graph_precision']) . "%" . ''; $row[] = '' . __('Fail') . ''; } //second table for time globals $row2 = array(); $row2[] = $sla['agent'] . ' -- [' . $sla['module'] . ']'; if($sla['time_total'] != 0) $row2[] = human_time_description_raw($sla['time_total']); else $row2[] = '--'; if($sla['time_error'] != 0) $row2[] = '' . human_time_description_raw($sla['time_error'], true) . ''; else $row2[] = '--'; if($sla['time_ok'] != 0) $row2[] = '' . human_time_description_raw($sla['time_ok'], true) . ''; else $row2[] = '--'; if($sla['time_unknown'] != 0) $row2[] = '' . human_time_description_raw($sla['time_unknown'], true) . ''; else $row2[] = '--'; if($sla['time_not_init'] != 0) $row2[] = '' . human_time_description_raw($sla['time_not_init'], true) . ''; else $row2[] = '--'; if($sla['time_downtime'] != 0) $row2[] = ''. human_time_description_raw($sla['time_downtime'], true) . ''; else $row2[] = '--'; //third table for checks globals $row3 = array(); $row3[] = $sla['agent'] . ' -- [' . $sla['module'] . ']'; $row3[] = $sla['checks_total']; $row3[] = '' . $sla['checks_error'] . ''; $row3[] = '' . $sla['checks_ok'] . ''; $row3[] = '' . $sla['checks_unknown'] . ''; } } $table1->data[] = $row; $table2->data[] = $row2; $table3->data[] = $row3; } } $table->colspan['sla']['cell'] = 2; $table->data['sla']['cell'] = html_print_table($table1, true); $table->colspan['time_global']['cell'] = 2; $table->data['time_global']['cell'] = html_print_table($table2, true); $table->colspan['checks_global']['cell'] = 2; $table->data['checks_global']['cell'] = html_print_table($table3, true); } if (!empty($item['charts'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->data = array (); if (!$hide_notinit_agent) { foreach ($item['charts'] as $chart) { $table1->data[] = array( $chart['agent'] . "
" . $chart['module'], $chart['chart']); } } else{ foreach ($item['charts'] as $chart) { $the_first_men_time = get_agent_first_time(io_safe_output($chart['agent'])); if ($item['date']['to'] > $the_first_men_time) { $table1->data[] = array( $chart['agent'] . "
" . $chart['module'], $chart['chart']); } } } $table->colspan['charts']['cell'] = 2; $table->data['charts']['cell'] = html_print_table($table1, true); //table_legend_graphs; $table1 = new stdClass(); $table1->width = '99%'; $table1->data = array (); $table1->size = array (); $table1->size[0] = '2%'; $table1->data[0][0] = ''; $table1->size[1] = '14%'; $table1->data[0][1] = ''.__('OK') . ''; $table1->size[2] = '2%'; $table1->data[0][2] = ''; $table1->size[3] = '14%'; $table1->data[0][3] = ''.__('Critical'). ''; $table1->size[4] = '2%'; $table1->data[0][4] = ''; $table1->size[5] = '14%'; $table1->data[0][5] = ''.__('Unknow'). ''; $table1->size[6] = '2%'; $table1->data[0][6] = ''; $table1->size[7] = '14%'; $table1->data[0][7] = ''.__('Not Init'). ''; $table1->size[8] = '2%'; $table1->data[0][8] = ''; $table1->size[9] = '14%'; $table1->data[0][9] = ''.__('Downtimes'). ''; $table1->size[10] = '2%'; $table1->data[0][10] = ''; $table1->size[11] = '15%'; $table1->data[0][11] = ''.__('Ignore time'). ''; $table->colspan['legend']['cell'] = 2; $table->data['legend']['cell'] = html_print_table($table1, true); } } } function reporting_html_top_n($table, $item) { if (!empty($item['failed'])) { $table->colspan['top_n']['cell'] = 3; $table->data['top_n']['cell'] = $item['failed']; } else { $table1 = new stdClass(); $table1->width = '99%'; $table1->align = array(); $table1->align[0] = 'left'; $table1->align[1] = 'left'; $table1->align[2] = 'right'; $table1->data = array (); $table1->headstyle = array(); $table1->headstyle[0] = 'text-align: left'; $table1->headstyle[1] = 'text-align: left'; $table1->headstyle[2] = 'text-align: right'; $table1->head = array (); $table1->head[0] = __('Agent'); $table1->head[1] = __('Module'); $table1->head[2] = __('Value'); foreach ($item['data'] as $top) { $row = array(); $row[] = $top['agent']; $row[] = $top['module']; $row[] = $top['formated_value']; $table1->data[] = $row; } $table->colspan['top_n']['cell'] = 3; $table->data['top_n']['cell'] = html_print_table($table1, true); if (!empty($item['charts']['pie'])) { $table->colspan['char_pie']['cell'] = 3; $table->data['char_pie']['cell'] = $item['charts']['pie']; } if (!empty($item['charts']['bars'])) { $table->colspan['char_bars']['cell'] = 3; $table->data['char_bars']['cell'] = $item['charts']['bars']; } if (!empty($item['resume'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->align = array(); $table1->align[0] = 'center'; $table1->align[1] = 'center'; $table1->align[2] = 'center'; $table1->data = array (); $table1->headstyle = array(); $table1->headstyle[0] = 'text-align: center'; $table1->headstyle[1] = 'text-align: center'; $table1->headstyle[2] = 'text-align: center'; $table1->head = array (); $table1->head[0] = __('Min Value'); $table1->head[1] = __('Average Value'); $table1->head[2] = __('Max Value'); $row = array(); $row[] = $item['resume']['min']['formated_value']; $row[] = $item['resume']['avg']['formated_value']; $row[] = $item['resume']['max']['formated_value']; $table1->data[] = $row; $table->colspan['resume']['cell'] = 3; $table->data['resume']['cell'] = html_print_table($table1, true); } } } function reporting_html_event_report_group($table, $item, $pdf = 0) { global $config; if($item['total_events']){ $table1 = new stdClass(); $table1->width = '99%'; $table1->align = array(); $table1->align[0] = 'center'; if($item['show_summary_group']){ $table1->align[3] = 'center'; } else{ $table1->align[2] = 'center'; } $table1->data = array (); $table1->head = array (); if($item['show_summary_group']){ $table1->head[0] = __('Status'); $table1->head[1] = __('Count'); $table1->head[2] = __('Name'); $table1->head[3] = __('Type'); $table1->head[4] = __('Agent'); $table1->head[5] = __('Severity'); $table1->head[6] = __('Val. by'); $table1->head[7] = __('Timestamp'); } else{ $table1->head[0] = __('Status'); $table1->head[1] = __('Name'); $table1->head[2] = __('Type'); $table1->head[3] = __('Agent'); $table1->head[4] = __('Severity'); $table1->head[5] = __('Val. by'); $table1->head[6] = __('Timestamp'); } foreach ($item['data'] as $k => $event) { //First pass along the class of this row if($item['show_summary_group']){ $table1->cellclass[$k][1] = $table1->cellclass[$k][2] = $table1->cellclass[$k][4] = $table1->cellclass[$k][5] = $table1->cellclass[$k][6] = $table1->cellclass[$k][7] = get_priority_class ($event["criticity"]); } else{ $table1->cellclass[$k][1] = $table1->cellclass[$k][3] = $table1->cellclass[$k][4] = $table1->cellclass[$k][5] = $table1->cellclass[$k][6] = get_priority_class ($event["criticity"]); } $data = array (); // Colored box switch ($event['estado']) { case 0: $img_st = "images/star.png"; $title_st = __('New event'); break; case 1: $img_st = "images/tick.png"; $title_st = __('Event validated'); break; case 2: $img_st = "images/hourglass.png"; $title_st = __('Event in process'); break; } $data[] = html_print_image ($img_st, true, array ("class" => "image_status", "width" => 16, "title" => $title_st, "id" => 'status_img_' . $event["id_evento"])); if($item['show_summary_group']){ $data[] = $event['event_rep']; } $data[] = ui_print_truncate_text( io_safe_output($event['evento']), 140, false, true); $data[] = events_print_type_img ($event["event_type"], true); if (!empty($event['id_agente'])) $data[] = agents_get_alias($event['id_agente']); else $data[] = __('Pandora System'); $data[] = get_priority_name ($event['criticity']); if (empty($event['id_usuario']) && $event['estado'] == EVENT_VALIDATE) { $data[] = '' . __('System') . ''; } else { $user_name = db_get_value ('fullname', 'tusuario', 'id_user', $event['id_usuario']); $data[] = io_safe_output($user_name); } if($item['show_summary_group']){ $data[] = '' . date($config['date_format'], $event['timestamp_rep']) . ''; } else{ $data[] = '' . date($config['date_format'], strtotime($event['timestamp'])) . ''; } array_push ($table1->data, $data); } if($pdf){ $table0 = new stdClass(); $table0->width = '99%'; $table0->class = 'table-beauty'; $table0->data['count_row']['count'] = "Total events: ".$item["total_events"]; $pdf_export = html_print_table($table0, true); $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['events']['cell'] = 3; $table->data['events']['cell'] = html_print_table($table1, true); } if (!empty($item['chart']['by_agent'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->head = array (); $table1->head[0] = __('Events by agent'); $table1->data[0][0] = $item['chart']['by_agent']; if($pdf){ $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['chart_by_agent']['cell'] = 3; $table->cellstyle['chart_by_agent']['cell'] = 'text-align: center;'; $table->data['chart_by_agent']['cell'] = html_print_table($table1, true); } } if (!empty($item['chart']['by_user_validator'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->head = array (); $table1->head[0] = __('Events by user validator'); $table1->data[0][0] = $item['chart']['by_user_validator']; if($pdf){ $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['chart_by_user_validator']['cell'] = 3; $table->cellstyle['chart_by_user_validator']['cell'] = 'text-align: center;'; $table->data['chart_by_user_validator']['cell'] = html_print_table($table1, true); } } if (!empty($item['chart']['by_criticity'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->head = array (); $table1->head[0] = __('Events by Severity'); $table1->data[0][0] = $item['chart']['by_criticity']; if($pdf){ $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['chart_by_criticity']['cell'] = 3; $table->cellstyle['chart_by_criticity']['cell'] = 'text-align: center;'; $table->data['chart_by_criticity']['cell'] = html_print_table($table1, true); } } if (!empty($item['chart']['validated_vs_unvalidated'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->head = array (); $table1->head[0] = __('Events validated vs unvalidated'); $table1->data[0][0] = $item['chart']['validated_vs_unvalidated']; if($pdf){ $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['chart_validated_vs_unvalidated']['cell'] = 3; $table->cellstyle['chart_validated_vs_unvalidated']['cell'] = 'text-align: center;'; $table->data['chart_validated_vs_unvalidated']['cell'] = html_print_table($table1, true); } } if($pdf){ return $pdf_export; } } else { if($pdf){ $table0 = new stdClass(); $table0->width = '99%'; $table0->class = 'table-beauty'; $table0->data['count_row']['count'] = "Total events: ".$item["total_events"]; $pdf_export = html_print_table($table0, true); return $pdf_export; } } } function reporting_html_event_report_module($table, $item, $pdf = 0) { global $config; $show_summary_group = $item['show_summary_group']; if($item['total_events']){ if (!empty($item['failed'])) { $table->colspan['events']['cell'] = 3; $table->data['events']['cell'] = $item['failed']; } else { foreach ($item['data'] as $item) { $table1 = new stdClass(); $table1->width = '99%'; $table1->data = array (); $table1->head = array (); $table1->align = array(); $table1->align[2] = 'center'; if($show_summary_group){ $table1->head[0] = __('Status'); $table1->head[1] = __('Event name'); $table1->head[2] = __('Type'); $table1->head[3] = __('Severity'); $table1->head[4] = __('Count'); $table1->head[5] = __('Timestamp'); $table1->style[0] = 'text-align: center;'; } else{ $table1->head[0] = __('Status'); $table1->head[1] = __('Event name'); $table1->head[2] = __('Type'); $table1->head[3] = __('Severity'); $table1->head[4] = __('Timestamp'); $table1->style[0] = 'text-align: center;'; } if (is_array($item['data']) || is_object($item['data'])){ $item_data = array_reverse($item['data']); } if (is_array($item_data) || is_object($item_data)){ foreach ($item_data as $i => $event) { $data = array(); if($show_summary_group){ $table1->cellclass[$i][1] = $table1->cellclass[$i][2] = $table1->cellclass[$i][3] = $table1->cellclass[$i][4] = $table1->cellclass[$i][5] = get_priority_class($event["criticity"]); } else{ $table1->cellclass[$i][1] = $table1->cellclass[$i][3] = $table1->cellclass[$i][4] = get_priority_class($event["criticity"]); } // Colored box switch ($event['estado']) { case 0: $img_st = "images/star.png"; $title_st = __('New event'); break; case 1: $img_st = "images/tick.png"; $title_st = __('Event validated'); break; case 2: $img_st = "images/hourglass.png"; $title_st = __('Event in process'); break; } $data[0] = html_print_image ($img_st, true, array ("class" => "image_status", "width" => 16, "title" => $title_st, "id" => 'status_img_' . $event["id_evento"])); $data[1] = io_safe_output($event['evento']); $data[2] = events_print_type_img ($event["event_type"], true); $data[3] = get_priority_name ($event['criticity']); if($show_summary_group){ $data[4] = $event['event_rep']; $data[5] = date($config['date_format'], $event['timestamp_rep']); } else{ $data[4] = date($config['date_format'], strtotime($event['timestamp'])); } $table1->data[] = $data; } } if($pdf){ $table0 = new stdClass(); $table0->width = '99%'; $table0->class = 'table-beauty'; $table0->data['count_row']['count'] = "Total events: ".$item["total_events"]; $pdf_export = html_print_table($table0, true); $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['events']['cell'] = 3; $table->data['events']['cell'] = html_print_table($table1, true); } if (!empty($item['chart']['by_agent'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->head = array (); $table1->head[0] = __('Events by agent'); $table1->data[0][0] = $item['chart']['by_agent']; if($pdf){ $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['chart_by_agent']['cell'] = 3; $table->cellstyle['chart_by_agent']['cell'] = 'text-align: center;'; $table->data['chart_by_agent']['cell'] = html_print_table($table1, true); } } if (!empty($item['chart']['by_user_validator'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->head = array (); $table1->head[0] = __('Events by user validator'); $table1->data[0][0] = $item['chart']['by_user_validator']; if($pdf){ $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['chart_by_user_validator']['cell'] = 3; $table->cellstyle['chart_by_user_validator']['cell'] = 'text-align: center;'; $table->data['chart_by_user_validator']['cell'] = html_print_table($table1, true); } } if (!empty($item['chart']['by_criticity'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->head = array (); $table1->head[0] = __('Events by Severity'); $table1->data[0][0] = $item['chart']['by_criticity']; if($pdf){ $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['chart_by_criticity']['cell'] = 3; $table->cellstyle['chart_by_criticity']['cell'] = 'text-align: center;'; $table->data['chart_by_criticity']['cell'] = html_print_table($table1, true); } } if (!empty($item['chart']['validated_vs_unvalidated'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->head = array (); $table1->head[0] = __('Events validated vs unvalidated'); $table1->data[0][0] = $item['chart']['validated_vs_unvalidated']; if($pdf){ $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['chart_validated_vs_unvalidated']['cell'] = 3; $table->cellstyle['chart_validated_vs_unvalidated']['cell'] = 'text-align: center;'; $table->data['chart_validated_vs_unvalidated']['cell'] = html_print_table($table1, true); } } if($pdf){ return $pdf_export; } } } } else{ if($pdf){ $table0 = new stdClass(); $table0->width = '99%'; $table0->class = 'table-beauty'; $table0->data['count_row']['count'] = "Total events: ".$item["total_events"]; $pdf_export = html_print_table($table0, true); return $pdf_export; } } } function reporting_html_inventory_changes($table, $item) { if (!empty($item['failed'])) { $table->colspan['failed']['cell'] = 3; $table->cellstyle['failed']['cell'] = 'text-align: center;'; $table->data['failed']['cell'] = $item['failed']; } else { foreach ($item['data'] as $module_item) { $table1 = null; $table1->width = '99%'; $table1->cellstyle[0][0] = $table1->cellstyle[0][1] = 'background: #373737; color: #FFF;'; $table1->data[0][0] = $module_item['agent']; $table1->data[0][1] = $module_item['module']; $table1->cellstyle[1][0] = 'background: #373737; color: #FFF;'; $table1->data[1][0] = $module_item['date']; $table1->colspan[1][0] = 2; $table1->cellstyle[2][0] = 'background: #373737; color: #FFF; text-align: center;'; $table1->data[2][0] = __('Added'); $table1->colspan[2][0] = 2; if (count ($module_item['added'])) { $table1->data = array_merge($table1->data, $module_item['added']); } $table1->cellstyle[3 + count($module_item['added'])][0] = 'background: #373737; color: #FFF; text-align: center;'; $table1->data[3 + count($module_item['added'])][0] = __('Deleted'); $table1->colspan[3 + count($module_item['added'])][0] = 2; if (count ($module_item['deleted'])) { $table1->data = array_merge($table1->data, $module_item['deleted']); } $table->colspan[ $module_item['agent'] . "_" .$module_item['module']]['cell'] = 3; $table->data[ $module_item['agent'] . "_" .$module_item['module']]['cell'] = html_print_table($table1, true); } } } function reporting_html_inventory($table, $item) { if (!empty($item['failed'])) { $table->colspan['failed']['cell'] = 3; $table->cellstyle['failed']['cell'] = 'text-align: center;'; $table->data['failed']['cell'] = $item['failed']; } else { foreach ($item['data'] as $module_item) { $table1 = null; $table1->width = '99%'; $first = reset($module_item['data']); $count_columns = count($first); $table1->cellstyle[0][0] = 'background: #373737; color: #FFF;'; $table1->data[0][0] = $module_item['agent_name']; if ($count_columns == 1) $table1->colspan[0][0] = $count_columns + 1; // + columm date else $table1->colspan[0][0] = $count_columns; $table1->cellstyle[1][0] = $table1->cellstyle[1][1] = 'background: #373737; color: #FFF;'; $table1->data[1][0] = $module_item['name']; if ($count_columns - 1 > 0) $table1->colspan[1][0] = $count_columns - 1; $table1->data[1][1] = $module_item['timestamp']; $table1->cellstyle[2] = array_pad( array(), $count_columns, 'background: #373737; color: #FFF;'); $table1->data[2] = array_keys($first); if ($count_columns - 1 == 0) { $table1->colspan[2][0] = $count_columns + 1; // + columm date; } $table1->data = array_merge($table1->data, $module_item['data']); $table->colspan[ $module_item['name'] . "_" .$module_item['id_agente']]['cell'] = 3; $table->data[ $module_item['name'] . "_" .$module_item['id_agente']]['cell'] = html_print_table($table1, true); } } } function reporting_html_agent_module($table, $item) { $table->colspan['agent_module']['cell'] = 3; $table->cellstyle['agent_module']['cell'] = 'text-align: center;'; if (!empty($item['failed'])) { $table->data['agent_module']['cell'] = $item['failed']; } else { $table_data = ''; $table_data .= ""; $first = reset($item['data']); $list_modules = $first['modules']; foreach ($list_modules as $module_name => $module) { $file_name = ui_print_truncate_text($module_name, 'module_small', false, true, false, '...'); $table_data .= '"; } foreach ($item['data'] as $row) { $table_data .= ""; switch ($row['agent_status']) { case AGENT_STATUS_ALERT_FIRED: $rowcolor = COL_ALERTFIRED; $textcolor = '#000'; break; case AGENT_STATUS_CRITICAL: $rowcolor = COL_CRITICAL; $textcolor = '#FFF'; break; case AGENT_STATUS_WARNING: $rowcolor = COL_WARNING; $textcolor = '#000'; break; case AGENT_STATUS_NORMAL: $rowcolor = COL_NORMAL; $textcolor = '#FFF'; break; case AGENT_STATUS_UNKNOWN: case AGENT_STATUS_ALL: default: $rowcolor = COL_UNKNOWN; $textcolor = '#FFF'; break; } $file_name = ui_print_truncate_text($row['agent_name'], 'agent_small', false, true, false, '...'); $table_data .= ""; foreach ($row['modules'] as $module_name => $module) { if (is_null($module)) { $table_data .= ""; } else { $table_data .= ""; } } } $table_data .= "
" . __("Agents") . " / " . __("Modules") . "' . $file_name . "
" . $file_name . ""; switch ($module) { case AGENT_STATUS_NORMAL: $table_data .= ui_print_status_image( 'module_ok.png', __("%s in %s : NORMAL", $module_name, $row['agent_name']), true, array('width' => '20px', 'height' => '20px'), 'images/status_sets/default/'); break; case AGENT_STATUS_CRITICAL: $table_data .= ui_print_status_image( 'module_critical.png', __("%s in %s : CRITICAL", $module_name, $row['agent_name']), true, array('width' => '20px', 'height' => '20px'), 'images/status_sets/default/'); break; case AGENT_STATUS_WARNING: $table_data .= ui_print_status_image( 'module_warning.png', __("%s in %s : WARNING", $module_name, $row['agent_name']), true, array('width' => '20px', 'height' => '20px'), 'images/status_sets/default/'); break; case AGENT_STATUS_UNKNOWN: $table_data .= ui_print_status_image( 'module_unknown.png', __("%s in %s : UNKNOWN", $module_name, $row['agent_name']), true, array('width' => '20px', 'height' => '20px'), 'images/status_sets/default/'); break; case AGENT_MODULE_STATUS_NORMAL_ALERT: case AGENT_MODULE_STATUS_WARNING_ALERT: case AGENT_MODULE_STATUS_CRITICAL_ALERT: $table_data .= ui_print_status_image( 'module_alertsfired.png', __("%s in %s : ALERTS FIRED", $module_name, $row['agent_name']), true, array('width' => '20px', 'height' => '20px'), 'images/status_sets/default/'); break; case 4: $table_data .= ui_print_status_image( 'module_no_data.png', __("%s in %s : Not initialize", $module_name, $row['agent_name']), true, array('width' => '20px', 'height' => '20px'), 'images/status_sets/default/'); break; } $table_data .= "
"; $table_data .= "
"; $table_data .= ""; $table_data .= ""; $table_data .= ""; $table_data .= ""; $table_data .= ""; $table_data .= ""; $table_data .= ""; $table_data .= ""; $table_data .= "
" . __('Legend') . "
" . __("Orange cell when the module has fired alerts") . "
" . __("Red cell when the module has a critical status") . "
" . __("Yellow cell when the module has a warning status") . "
" . __("Green cell when the module has a normal status") . "
" . __("Grey cell when the module has an unknown status") . "
" . __("Cell turns grey when the module is in 'not initialize' status") . "
"; $table_data .= "
"; $table->data['agent_module']['cell'] = $table_data; } } function reporting_html_exception($table, $item) { if (!empty($item['failed'])) { $table->colspan['group_report']['cell'] = 3; $table->cellstyle['group_report']['cell'] = 'text-align: center;'; $table->data['group_report']['cell'] = $item['failed']; } else { $table1 = new stdClass(); $table1->width = '99%'; $table1->align = array(); $table1->align['agent'] = 'left'; $table1->align['module'] = 'left'; $table1->align['operation'] = 'left'; $table1->align['value'] = 'right'; $table1->data = array (); $table1->headstyle = array(); $table1->headstyle['agent'] = 'text-align: left'; $table1->headstyle['module'] = 'text-align: left'; $table1->headstyle['operation'] = 'text-align: left'; $table1->headstyle['value'] = 'text-align: right'; $table1->head = array (); $table1->head['agent'] = __('Agent'); $table1->head['module'] = __('Module'); $table1->head['operation'] = __('Operation'); $table1->head['value'] = __('Value'); foreach ($item['data'] as $data) { $row = array(); $row['agent'] = $data['agent']; $row['module'] = $data['module']; $row['operation'] = $data['operation']; $row['value'] = $data['formated_value']; $table1->data[] = $row; } $table->colspan['data']['cell'] = 3; $table->cellstyle['data']['cell'] = 'text-align: center;'; $table->data['data']['cell'] = html_print_table($table1, true); if (!empty($item['chart'])) { $table->colspan['chart_pie']['cell'] = 3; $table->cellstyle['chart_pie']['cell'] = 'text-align: center;'; $table->data['chart_pie']['cell'] = $item["chart"]["pie"]; $table->colspan['chart_hbar']['cell'] = 3; $table->cellstyle['chart_hbar']['cell'] = 'text-align: center;'; $table->data['chart_hbar']['cell'] = $item["chart"]["hbar"]; } if (!empty($item['resume'])) { $table1 = null; $table1->width = '99%'; $table1->align = array(); $table1->align['min'] = 'right'; $table1->align['avg'] = 'right'; $table1->align['max'] = 'right'; $table1->headstyle = array(); $table1->headstyle['min'] = 'text-align: right'; $table1->headstyle['avg'] = 'text-align: right'; $table1->headstyle['max'] = 'text-align: right'; $table1->head = array (); $table1->head['min'] = __('Min Value'); $table1->head['avg'] = __('Average Value'); $table1->head['max'] = __('Max Value'); $table1->data = array (); $table1->data[] = array( 'min' => $item['resume']['min']['formated_value'], 'avg' => $item['resume']['avg']['formated_value'], 'max' => $item['resume']['max']['formated_value']); $table->colspan['resume']['cell'] = 3; $table->cellstyle['resume']['cell'] = 'text-align: center;'; $table->data['resume']['cell'] = html_print_table($table1, true); } } } function reporting_html_group_report($table, $item) { global $config; $table->colspan['group_report']['cell'] = 3; $table->cellstyle['group_report']['cell'] = 'text-align: center;'; $table->data['group_report']['cell'] = "
" . __('Total') . "
" . __('Unknown') . "
" . __('Agents') . "
" . $item["data"]['group_stats']['total_agents'] . "
" . $item["data"]['group_stats']['agents_unknown'] . "
" . __('Total') . "
" . __('Normal') . "
" . __('Critical') . "
" . __('Warning') . "
" . __('Unknown') . "
" . __('Not init') . "
" . __('Monitors') . "
" . $item["data"]['group_stats']['monitor_checks'] . "
" . $item["data"]['group_stats']['monitor_ok'] ."
" . $item["data"]['group_stats']['monitor_critical'] . "
" . $item["data"]['group_stats']['monitor_warning'] . "
" . $item["data"]['group_stats']['monitor_unknown'] . "
" . $item["data"]['group_stats']['monitor_not_init'] . "
" . __('Defined') . "
" . __('Fired') . "
" . __('Alerts') . "
" . $item["data"]['group_stats']['monitor_alerts'] . "
" . $item["data"]['group_stats']['monitor_alerts_fired'] . "
" . __('Last %s', human_time_description_raw($item['date']['period'])) . "
" . __('Events') . "
" . $item["data"]["count_events"] . "
"; } function reporting_html_event_report_agent($table, $item, $pdf = 0) { global $config; if($item['total_events'] != 0){ $table1 = new stdClass(); $table1->width = '99%'; $table1->align = array(); $table1->align[0] = 'center'; $table1->align[1] = 'center'; $table1->align[3] = 'center'; $table1->data = array (); $table1->head = array (); $table1->head[0] = __('Status'); if($item['show_summary_group']){ $table1->head[1] = __('Count'); } $table1->head[2] = __('Name'); $table1->head[3] = __('Type'); $table1->head[4] = __('Severity'); $table1->head[5] = __('Val. by'); $table1->head[6] = __('Timestamp'); foreach ($item['data'] as $i => $event) { if($item['show_summary_group']){ $table1->cellclass[$i][1] = $table1->cellclass[$i][2] = $table1->cellclass[$i][4] = $table1->cellclass[$i][5] = $table1->cellclass[$i][6] = get_priority_class ($event["criticity"]); } else{ $table1->cellclass[$i][1] = $table1->cellclass[$i][3] = $table1->cellclass[$i][4] = $table1->cellclass[$i][5] = get_priority_class ($event["criticity"]); } $data = array (); // Colored box switch ($event['status']) { case 0: $img_st = "images/star.png"; $title_st = __('New event'); break; case 1: $img_st = "images/tick.png"; $title_st = __('Event validated'); break; case 2: $img_st = "images/hourglass.png"; $title_st = __('Event in process'); break; } $data[] = html_print_image ($img_st, true, array ("class" => "image_status", "width" => 16, "title" => $title_st)); if($item['show_summary_group']){ $data[] = $event['count']; } $data[] = ui_print_truncate_text( io_safe_output($event['name']), 140, false, true); //$data[] = $event['event_type']; $data[] = events_print_type_img ($event["type"], true); $data[] = get_priority_name ($event['criticity']); if (empty($event['validated_by']) && $event['status'] == EVENT_VALIDATE) { $data[] = '' . __('System') . ''; } else { $user_name = db_get_value ('fullname', 'tusuario', 'id_user', $event['validated_by']); $data[] = io_safe_output($user_name); } if($item['show_summary_group']){ $data[] = '' . date($config['date_format'], $event['timestamp']) . ''; } else{ $data[] = '' . date($config['date_format'], strtotime($event['timestamp'])) . ''; } array_push ($table1->data, $data); } if($pdf){ $table0 = new stdClass(); $table0->width = '99%'; $table0->class = 'table-beauty'; $table0->data['count_row']['count'] = "Total events: ".$item["total_events"]; $pdf_export = html_print_table($table0, true); $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['event_list']['cell'] = 3; $table->cellstyle['event_list']['cell'] = 'text-align: center;'; $table->data['event_list']['cell'] = html_print_table($table1, true); } if (!empty($item['chart']['by_user_validator'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->head = array (); $table1->head[0] = __('Events validated by user'); $table1->data[0][0] = $item['chart']['by_user_validator']; if($pdf){ $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['chart_by_user_validator']['cell'] = 3; $table->cellstyle['chart_by_user_validator']['cell'] = 'text-align: center;'; $table->data['chart_by_user_validator']['cell'] = html_print_table($table1, true); } } if (!empty($item['chart']['by_criticity'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->head = array (); $table1->head[0] = __('Events by severity'); $table1->data[0][0] = $item['chart']['by_criticity']; if($pdf){ $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['chart_by_criticity']['cell'] = 3; $table->cellstyle['chart_by_criticity']['cell'] = 'text-align: center;'; $table->data['chart_by_criticity']['cell'] = html_print_table($table1, true); } } if (!empty($item['chart']['validated_vs_unvalidated'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->head = array (); $table1->head[0] = __('Amount events validated'); $table1->data[0][0] = $item['chart']['validated_vs_unvalidated']; if($pdf){ $table1->class = 'table-beauty'; $pdf_export .= html_print_table($table1, true); $pdf_export .= '
'; } else{ $table->colspan['chart_validated_vs_unvalidated']['cell'] = 3; $table->cellstyle['chart_validated_vs_unvalidated']['cell'] = 'text-align: center;'; $table->data['chart_validated_vs_unvalidated']['cell'] = html_print_table($table1, true); } } if($pdf){ return $pdf_export; } } else{ if($pdf){ $table0 = new stdClass(); $table0->width = '99%'; $table0->class = 'table-beauty'; $table0->data['count_row']['count'] = "Total events: ".$item["total_events"]; $pdf_export = html_print_table($table0, true); return $pdf_export; } } } function reporting_html_historical_data($table, $item) { global $config; $table1 = new stdClass(); $table1->width = '100%'; $table1->head = array (__('Date'), __('Data')); $table1->data = array (); foreach ($item['data'] as $data) { if (!is_numeric($data[__('Data')])) { $row = array($data[__('Date')], $data[__('Data')]); } else { $row = array($data[__('Date')], remove_right_zeros(number_format($data[__('Data')], $config['graph_precision']))); } $table1->data[] = $row; } $table->colspan['database_serialized']['cell'] = 3; $table->cellstyle['database_serialized']['cell'] = 'text-align: center;'; $table->data['database_serialized']['cell'] = html_print_table($table1, true); } function reporting_html_database_serialized($table, $item) { $table1 = new stdClass(); $table1->width = '100%'; $table1->head = array (__('Date')); if (!empty($item['keys'])) { $table1->head = array_merge($table1->head, $item['keys']); } $table1->style[0] = 'text-align: left'; $table1->data = array (); foreach ($item['data'] as $data) { foreach ($data['data'] as $data_unserialied) { $row = array($data['date']); $row = array_merge($row, $data_unserialied); $table1->data[] = $row; } } $table->colspan['database_serialized']['cell'] = 3; $table->cellstyle['database_serialized']['cell'] = 'text-align: center;'; $table->data['database_serialized']['cell'] = html_print_table($table1, true); } function reporting_html_group_configuration($table, $item) { $table1 = new stdClass(); $table1->width = '100%'; $table1->head = array (); $table1->data = array (); $cell = ""; foreach ($item['data'] as $agent) { $table2 = new stdClass(); $table2->width = '100%'; $table2->data = array (); reporting_html_agent_configuration($table2, array('data' => $agent)); $cell .= html_print_table($table2, true); } $table->colspan['group_configuration']['cell'] = 3; $table->cellstyle['group_configuration']['cell'] = 'text-align: center;'; $table->data['group_configuration']['cell'] = $cell; } function reporting_html_network_interfaces_report($table, $item, $pdf= false) { if (!empty($item['failed'])) { $table->colspan['interfaces']['cell'] = 3; $table->cellstyle['interfaces']['cell'] = 'text-align: left;'; $table->data['interfaces']['cell'] = $item['failed']; } else { foreach ($item['data'] as $agent) { $table_agent = new StdCLass(); $table_agent->width = '100%'; $table_agent->data = array(); $table_agent->head = array(); $table_agent->head[0] = __("Agent") . " " . $agent['agent']; $table_agent->headstyle = array(); $table_agent->headstyle[0] = 'font-size: 16px;'; $table_agent->style[0] = 'text-align: center'; $table_agent->data['interfaces'] = ""; if($pdf){ $return_pdf .= __("Agent") . " " . $agent['agent']; } foreach ($agent['interfaces'] as $interface) { $table_interface = new StdClass(); $table_interface->width = '100%'; $table_interface->data = array(); $table_interface->rowstyle = array(); $table_interface->head = array(); $table_interface->cellstyle = array(); $table_interface->title = sprintf(__("Interface '%s' throughput graph"), $interface['name']); $table_interface->head['ip'] = __('IP'); $table_interface->head['mac'] = __('Mac'); $table_interface->head['status'] = __('Actual status'); $table_interface->style['ip'] = 'text-align: center'; $table_interface->style['mac'] = 'text-align: center'; $table_interface->style['status'] = 'width: 150px; text-align: center'; $data = array(); $data['ip'] = !empty($interface['ip']) ? $interface['ip'] : "--"; $data['mac'] = !empty($interface['mac']) ? $interface['mac'] : "--"; $data['status'] = $interface['status_image']; $table_interface->data['data'] = $data; if (!empty($interface['chart'])) { $table_interface->data['graph'] = $interface['chart']; $table_interface->colspan['graph'][0] = 3; $table_interface->cellstyle['graph'][0] = 'text-align: center;'; } if($pdf){ $table_interface->class = 'table-beauty'; $return_pdf .= html_print_table($table_interface, true); } $table_agent->data['interfaces'] .= html_print_table($table_interface, true); $table_agent->colspan[$interface_name][0] = 3; } $id = uniqid(); $table->colspan[$id][0] = 3; $table->data[$id] = html_print_table($table_agent, true); } } if($pdf){ return $return_pdf; } } /** * Unified alert report HTML */ function reporting_html_alert_report($table, $item, $pdf = 0) { $table->colspan['alerts']['cell'] = 3; $table->cellstyle['alerts']['cell'] = 'text-align: left;'; $table1->width = '99%'; $table1->head = array (); $table1->data = array (); $table1->rowspan = array(); $table1->valign = array(); $table1->head['agent'] = __('Agent'); $table1->head['module'] = __('Module'); $table1->head['template'] = __('Template'); $table1->head['actions'] = __('Actions'); $table1->head['fired'] = __('Action') . " " . __('Fired'); $table1->head['tfired'] = __('Template') . " " . __('Fired'); $table1->valign["agent"] = "top"; $table1->valign["module"] = "top"; $table1->valign["template"] = "top"; $table1->valign["actions"] = "top"; $table1->valign["fired"] = "top"; $table1->valign["tfired"] = "top"; $td = 0; foreach ($item['data'] as $information) { $row = array(); $td = count($information["alerts"]); $row['agent'] = $information['agent']; $row['module'] = $information['module']; foreach ($information["alerts"] as $alert) { $row['template'] = $alert["template"]; $row['actions'] = ''; $row['fired'] = ''; foreach ($alert['actions'] as $action) { if ($action['name'] == "" ) { // Removed from retrieved hash continue; } $row['actions'] .= '
' . $action['name'] . '
'; if (is_numeric($action['fired'])){ $row['fired'] .= '
' . date("Y-m-d H:i:s", $action['fired']) . '
'; } else { $row['fired'] .= '
' . $action['fired'] . '
'; } } $row['tfired'] = ''; foreach ($alert['template_fired'] as $fired) { $row['tfired'] .= '
' . $fired . '
' . "\n"; } // Skip first td's to avoid repeat the agent and module names $table1->data[] = $row; if($td > 1){ for($i=0; $i<$td;$i++) { $row['agent'] = ""; $row['module'] = ""; } } } } $table->data['alerts']['cell'] = html_print_table($table1, true); if($pdf){ $table1->class = 'table-beauty pdf_alert_table'; return html_print_table($table1, true); } } function reporting_html_sql_graph($table, $item) { $table->colspan['chart']['cell'] = 3; $table->cellstyle['chart']['cell'] = 'text-align: center;'; $table->data['chart']['cell'] = $item['chart']; } function reporting_html_monitor_report($table, $item, $mini) { global $config; if ($mini) { $font_size = '1.5'; } else { $font_size = '3'; } $table->colspan['module']['cell'] = 3; $table->cellstyle['module']['cell'] = 'text-align: center;'; $table1 = new stdClass(); $table1->width = '99%'; $table1->head = array (); $table1->data = array (); if ($item['data']['unknown'] == 1) { $table1->data['data']['unknown'] = '

'; $table1->data['data']['unknown'] .= __('Unknown') . "

"; } else { $table1->data['data']['ok'] = '

'; $table1->data['data']['ok'] .= html_print_image("images/module_ok.png", true) . ' ' . __('OK') . ': ' . remove_right_zeros(number_format($item['data']["ok"]["formated_value"], $config['graph_precision'])).' %

'; $table1->data['data']['fail'] = '

'; $table1->data['data']['fail'] .= html_print_image("images/module_critical.png", true) . ' ' . __('Not OK') . ': ' . remove_right_zeros(number_format($item['data']["fail"]["formated_value"], $config['graph_precision'])) . ' % ' . '

'; } $table->data['module']['cell'] = html_print_table($table1, true); } function reporting_html_graph($table, $item) { $table->colspan['chart']['cell'] = 3; $table->cellstyle['chart']['cell'] = 'text-align: center;'; $table->data['chart']['cell'] = $item['chart'].'



'; } function reporting_html_prediction_date($table, $item, $mini) { reporting_html_value($table, $item, $mini, true); } function reporting_html_agent_configuration(&$table, $item) { $table->colspan['agent']['cell'] = 3; $table->cellstyle['agent']['cell'] = 'text-align: left;'; $table1 = new stdClass(); $table1->width = '99%'; $table1->head = array (); $table1->head['name'] = __('Agent name'); $table1->head['group'] = __('Group'); $table1->head['os'] = __('OS'); $table1->head['address'] = __('IP'); $table1->head['description'] = __('Description'); $table1->head['status'] = __('Status'); $table1->data = array (); $row = array(); $row['name'] = $item['data']['name']; $row['group'] = $item['data']['group_icon']; $row['address'] = $item['data']['os_icon']; $row['os'] = $item['data']['address']; $row['description'] = $item['data']['description']; if ($item['data']['enabled']) { $row['status'] = __('Enabled'); } else { $row['status'] = __('Disabled'); } $table1->data[] = $row; $table->data['agent']['cell'] = html_print_table($table1, true); $table->colspan['modules']['cell'] = 3; $table->cellstyle['modules']['cell'] = 'text-align: left;'; if (empty($item['data']['modules'])) { $table->data['modules']['cell'] = __('Empty modules'); } else { $table1->width = '99%'; $table1->head = array (); $table1->head['name'] = __('Name'); $table1->head['type'] = __('Type'); $table1->head['warning_critical'] = __('Warning
Critical'); $table1->head['threshold'] = __('Threshold'); $table1->head['group_icon'] = __('Group'); $table1->head['description'] = __('Description'); $table1->head['interval'] = __('Interval'); $table1->head['unit'] = __('Unit'); $table1->head['status'] = __('Status'); $table1->head['tags'] = __('Tags'); $table1->align = array(); $table1->align['name'] = 'left'; $table1->align['type'] = 'center'; $table1->align['warning_critical'] = 'right'; $table1->align['threshold'] = 'right'; $table1->align['group_icon'] = 'center'; $table1->align['description'] = 'left'; $table1->align['interval'] = 'right'; $table1->align['unit'] = 'left'; $table1->align['status'] = 'center'; $table1->align['tags'] = 'left'; $table1->data = array (); foreach ($item['data']['modules'] as $module) { $row = array(); $row['name'] = $module['name']; $row['type'] = $module['type_icon']; $row['warning_critical'] = $module['max_warning'] . " / " . $module['min_warning'] . "
" . $module['max_critical'] . " / " . $module['min_critical']; $row['threshold'] = $module['threshold']; $row['group_icon'] = ui_print_group_icon($item['data']['group'], true); $row['description'] = $module['description']; $row['interval'] = $module['interval']; $row['unit'] = $module['unit']; $row['status'] = $module['status_icon']; $row['tags'] = implode(",", $module['tags']); $table1->data[] = $row; } $table->data['modules']['cell'] = html_print_table($table1, true); } } function reporting_html_TTRT_value(&$table, $item, $mini, $only_value = false, $check_empty = false) { reporting_html_value($table, $item, $mini, $only_value, $check_empty); } function reporting_html_TTO_value(&$table, $item, $mini, $only_value = false, $check_empty = false) { reporting_html_value($table, $item, $mini, $only_value, $check_empty); } function reporting_html_MTBF_value(&$table, $item, $mini, $only_value = false, $check_empty = false) { reporting_html_value($table, $item, $mini, $only_value, $check_empty); } function reporting_html_MTTR_value(&$table, $item, $mini, $only_value = false, $check_empty = false) { reporting_html_value($table, $item, $mini, $only_value, $check_empty); } function reporting_html_sum_value(&$table, $item, $mini) { reporting_html_value($table, $item, $mini); } function reporting_html_avg_value(&$table, $item, $mini) { reporting_html_value($table, $item, $mini); } function reporting_html_max_value(&$table, $item, $mini) { reporting_html_value($table, $item, $mini); } function reporting_html_min_value(&$table, $item, $mini) { reporting_html_value($table, $item, $mini); } function reporting_html_value(&$table, $item, $mini, $only_value = false, $check_empty = false) { if ($mini) { $font_size = '1.5'; } else { $font_size = '3'; } $table->colspan['data']['cell'] = 3; $table->cellstyle['data']['cell'] = 'text-align: left;'; $table->data['data']['cell'] = '

'; if ($check_empty && empty($item['data']['value'])) { $table->data['data']['cell'] .= __('Unknown'); } elseif ($only_value) { $table->data['data']['cell'] .= $item['data']['value']; } else { $table->data['data']['cell'] .= $item['data']['formated_value']; } $table->data['data']['cell'] .= '

'; } function reporting_html_increment(&$table, $item) { global $config; if (isset($item["data"]['error'])) { $table->colspan['error']['cell'] = 3; $table->data['error']['cell'] = $item["data"]['message']; } else { $table1 = new stdClass(); $table1->width = '99%'; $table1->data = array (); $table1->head = array (); $table1->head[0] = __('Agent'); $table1->head[1] = __('Module'); $table1->head[2] = __('From'); $table1->head[3] = __('To'); $table1->head[4] = __('From data'); $table1->head[5] = __('To data'); $table1->head[6] = __('Increment'); $table1->headstyle = array(); $table1->headstyle[0] = 'text-align: left'; $table1->headstyle[1] = 'text-align: left'; $table1->headstyle[2] = 'text-align: left'; $table1->headstyle[3] = 'text-align: left'; $table1->headstyle[4] = 'text-align: right'; $table1->headstyle[5] = 'text-align: right'; $table1->headstyle[6] = 'text-align: right'; $table1->style[0] = 'text-align: left'; $table1->style[1] = 'text-align: left'; $table1->style[2] = 'text-align: left'; $table1->style[3] = 'text-align: left'; $table1->style[4] = 'text-align: right'; $table1->style[5] = 'text-align: right'; $table1->style[6] = 'text-align: right'; $table1_row = array(); $table1_row[0] = agents_get_alias($item['id_agent']); $table1_row[1] = modules_get_agentmodule_name($item['id_agent_module']); $table1_row[2] = date("F j, Y, G:i", $item['from']); $table1_row[3] = date("F j, Y, G:i", $item['to']); $table1_row[4] = $item["data"]['old']; $table1_row[5] = $item["data"]['now']; if ($item["data"]['inc'] == 'negative') { $table1_row[6] = __('Negative increase: ') . $item["data"]["inc_data"]; } else if ($item["data"]['inc'] == 'positive') { $table1_row[6] = __('Positive increase: ') . $item["data"]["inc_data"]; } else { $table1_row[6] = __('Neutral increase: ') . $item["data"]["inc_data"]; } $table1->data[] = $table1_row; $data = array(); $data[0] = html_print_table($table1, true); array_push ($table->data, $data); } } function reporting_html_url(&$table, $item, $key) { $table->colspan['data']['cell'] = 3; $table->cellstyle['data']['cell'] = 'text-align: left;'; $table->data['data']['cell'] = ' '; // TODO: make this dynamic and get the height if the iframe to resize this item $table->data['data']['cell'] .= ' '; } function reporting_html_text(&$table, $item) { $table->colspan['data']['cell'] = 3; $table->cellstyle['data']['cell'] = 'text-align: left;'; $table->data['data']['cell'] = $item['data']; } function reporting_html_availability(&$table, $item) { $style = db_get_value('style', 'treport_content', 'id_rc', $item['id_rc']); $style = json_decode(io_safe_output($style), true); $hide_notinit_agent = $style['hide_notinit_agents']; $same_agent_in_resume = ""; global $config; if (!empty($item["data"])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->data = array (); $table1->head = array (); $table1->head[0] = __('Agent'); // HACK it is saved in show_graph field. // Show interfaces instead the modules if ($item['kind_availability'] == 'address') { $table1->head[1] = __('IP Address'); } else { $table1->head[1] = __('Module'); } $table1->head[2] = __('Total time'); $table1->head[3] = __('Time failed'); $table1->head[4] = __('Time OK'); $table1->head[5] = __('Time Uknown'); $table1->head[6] = __('Time Not Init Module'); $table1->head[7] = __('Time Downtime'); $table1->head[8] = __('% Ok'); $table1->headstyle = array(); $table1->headstyle[0] = 'text-align: left'; $table1->headstyle[1] = 'text-align: left'; $table1->headstyle[2] = 'text-align: right'; $table1->headstyle[3] = 'text-align: right'; $table1->headstyle[4] = 'text-align: right'; $table1->headstyle[5] = 'text-align: right'; $table1->headstyle[6] = 'text-align: right'; $table1->headstyle[7] = 'text-align: right'; $table1->headstyle[8] = 'text-align: right'; $table1->style[0] = 'text-align: left'; $table1->style[1] = 'text-align: left'; $table1->style[2] = 'text-align: right'; $table1->style[3] = 'text-align: right'; $table1->style[4] = 'text-align: right'; $table1->style[5] = 'text-align: right'; $table1->style[6] = 'text-align: right'; $table1->style[7] = 'text-align: right'; $table1->style[8] = 'text-align: right'; $table2 = new stdClass(); $table2->width = '99%'; $table2->data = array (); $table2->head = array (); $table2->head[0] = __('Agent'); // HACK it is saved in show_graph field. // Show interfaces instead the modules if ($item['kind_availability'] == 'address') { $table2->head[1] = __('IP Address'); } else { $table2->head[1] = __('Module'); } $table2->head[2] = __('Total checks'); $table2->head[3] = __('Checks failed'); $table2->head[4] = __('Checks OK'); $table2->head[5] = __('Checks Uknown'); //$table2->head[6] = __('% Ok'); $table2->headstyle = array(); $table2->headstyle[0] = 'text-align: left'; $table2->headstyle[1] = 'text-align: left'; $table2->headstyle[2] = 'text-align: right'; $table2->headstyle[3] = 'text-align: right'; $table2->headstyle[4] = 'text-align: right'; $table2->headstyle[5] = 'text-align: right'; //$table2->headstyle[6] = 'text-align: right'; $table2->style[0] = 'text-align: left'; $table2->style[1] = 'text-align: left'; $table2->style[2] = 'text-align: right'; $table2->style[3] = 'text-align: right'; $table2->style[4] = 'text-align: right'; $table2->style[5] = 'text-align: right'; //$table2->style[6] = 'text-align: right'; foreach ($item['data'] as $row) { $the_first_men_time = get_agent_first_time(io_safe_output($row['agent'])); if (!$hide_notinit_agent) { $table_row = array(); $table_row[] = $row['agent']; $table_row[] = $row['availability_item']; if($row['time_total'] != 0) $table_row[] = human_time_description_raw($row['time_total'], true); else $table_row[] = '--'; if($row['time_error'] != 0) $table_row[] = human_time_description_raw($row['time_error'], true); else $table_row[] = '--'; if($row['time_ok'] != 0) $table_row[] = human_time_description_raw($row['time_ok'], true); else $table_row[] = '--'; if($row['time_unknown'] != 0) $table_row[] = human_time_description_raw($row['time_unknown'], true); else $table_row[] = '--'; if($row['time_not_init'] != 0) $table_row[] = human_time_description_raw($row['time_not_init'], true); else $table_row[] = '--'; if($row['time_downtime'] != 0) $table_row[] = human_time_description_raw($row['time_downtime'], true); else $table_row[] = '--'; $table_row[] = '' . sla_truncate($row['SLA'], $config['graph_precision']). '%'; $table_row2 = array(); $table_row2[] = $row['agent']; $table_row2[] = $row['availability_item']; $table_row2[] = $row['checks_total']; $table_row2[] = $row['checks_error']; $table_row2[] = $row['checks_ok']; $table_row2[] = $row['checks_unknown']; } else { if ($item['date']['to'] > $the_first_men_time) { $table_row = array(); $table_row[] = $row['agent']; $table_row[] = $row['availability_item']; if($row['time_total'] != 0) $table_row[] = human_time_description_raw($row['time_total'], true); else $table_row[] = '--'; if($row['time_error'] != 0) $table_row[] = human_time_description_raw($row['time_error'], true); else $table_row[] = '--'; if($row['time_ok'] != 0) $table_row[] = human_time_description_raw($row['time_ok'], true); else $table_row[] = '--'; if($row['time_unknown'] != 0) $table_row[] = human_time_description_raw($row['time_unknown'], true); else $table_row[] = '--'; if($row['time_not_init'] != 0) $table_row[] = human_time_description_raw($row['time_not_init'], true); else $table_row[] = '--'; if($row['time_downtime'] != 0) $table_row[] = human_time_description_raw($row['time_downtime'], true); else $table_row[] = '--'; $table_row[] = '' . sla_truncate($row['SLA'], $config['graph_precision']). '%'; $table_row2 = array(); $table_row2[] = $row['agent']; $table_row2[] = $row['availability_item']; $table_row2[] = $row['checks_total']; $table_row2[] = $row['checks_error']; $table_row2[] = $row['checks_ok']; $table_row2[] = $row['checks_unknown']; } else { $same_agent_in_resume = $item['data']['agent']; } } $table1->data[] = $table_row; $table2->data[] = $table_row2; } } else { $table->colspan['error']['cell'] = 3; $table->data['error']['cell'] = __('There are no Agent/Modules defined'); } $table->colspan[1][0] = 2; $table->colspan[2][0] = 2; $data = array(); $data[0] = html_print_table($table1, true); array_push ($table->data, $data); if ($item['resume']['resume']){ $data2 = array(); $data2[0] = html_print_table($table2, true); array_push ($table->data, $data2); } if ($item['resume']['resume'] && !empty($item["data"])) { $table1->width = '99%'; $table1->data = array (); if ((strpos($item['resume']['min_text'], $same_agent_in_resume) === false)) { $table1->head = array (); $table1->head['max_text'] = __('Agent max value'); $table1->head['max'] = __('Max Value'); $table1->head['min_text'] = __('Agent min value'); $table1->head['min'] = __('Min Value'); $table1->head['avg'] = __('Average Value'); $table1->headstyle = array(); $table1->headstyle['min_text'] = 'text-align: left'; $table1->headstyle['min'] = 'text-align: right'; $table1->headstyle['max_text'] = 'text-align: left'; $table1->headstyle['max'] = 'text-align: right'; $table1->headstyle['avg'] = 'text-align: right'; $table1->style = array(); $table1->style['min_text'] = 'text-align: left'; $table1->style['min'] = 'text-align: right'; $table1->style['max_text'] = 'text-align: left'; $table1->style['max'] = 'text-align: right'; $table1->style['avg'] = 'text-align: right'; $table1->data[] = array( 'max_text' => $item['resume']['max_text'], 'max' => sla_truncate($item['resume']['max'], $config['graph_precision']) . "%", 'min_text' => $item['resume']['min_text'], 'min' => sla_truncate($item['resume']['min'], $config['graph_precision']) . "%", 'avg' => '' .remove_right_zeros(number_format($item['resume']['avg'], $config['graph_precision'])) . "%" ); $table->colspan[3][0] = 3; $data = array(); $data[0] = html_print_table($table1, true); array_push ($table->data, $data); } } } function reporting_html_availability_graph(&$table, $item, $pdf=0) { global $config; $metaconsole_on = is_metaconsole(); if($metaconsole_on && $pdf==0){ $src= '../../'; } else{ $src=$config['homeurl']; } $table1 = new stdClass(); $table1->width = '99%'; $table1->data = array (); foreach ($item['charts'] as $chart) { switch ($chart['sla_status']) { case REPORT_STATUS_ERR: $color = COL_CRITICAL; break; case REPORT_STATUS_OK: $color = COL_NORMAL; break; default: $color = COL_UNKNOWN; break; } $table1->data[] = array( $chart['agent'] . "
" . $chart['module'], $chart['chart'], "" . sla_truncate($chart['sla_value'], $config['graph_precision']) . '%' . '', "(" . $chart['checks_ok'] . "/" . $chart['checks_total'] . ")" ); } if($item['type'] == 'availability_graph'){ //table_legend_graphs; $table2 = new stdClass(); $table2->width = '99%'; $table2->data = array (); $table2->size = array (); $table2->size[0] = '2%'; $table2->data[0][0] = ''; $table2->size[1] = '14%'; $table2->data[0][1] = ''.__('OK') . ''; $table2->size[2] = '2%'; $table2->data[0][2] = ''; $table2->size[3] = '14%'; $table2->data[0][3] = ''.__('Critical'). ''; $table2->size[4] = '2%'; $table2->data[0][4] = ''; $table2->size[5] = '14%'; $table2->data[0][5] = ''.__('Unknow'). ''; $table2->size[6] = '2%'; $table2->data[0][6] = ''; $table2->size[7] = '14%'; $table2->data[0][7] = ''.__('Not Init'). ''; $table2->size[8] = '2%'; $table2->data[0][8] = ''; $table2->size[9] = '14%'; $table2->data[0][9] = ''.__('Downtimes'). ''; $table2->size[10] = '2%'; $table2->data[0][10] = ''; $table2->size[11] = '15%'; $table2->data[0][11] = ''.__('Ignore time'). ''; } $table->colspan['charts']['cell'] = 2; $table->data['charts']['cell'] = html_print_table($table1, true); $table->colspan['legend']['cell'] = 2; $table->data['legend']['cell'] = html_print_table($table2, true); if($pdf){ return html_print_table($table, true); } } function get_agent_first_time ($agent_name) { $id = agents_get_agent_id($agent_name, true); $utimestamp = db_get_all_rows_sql("SELECT utimestamp FROM tagente_datos WHERE id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE id_agente = " . $id . ") ORDER BY utimestamp ASC LIMIT 1"); $utimestamp = $utimestamp[0]['utimestamp']; return $utimestamp; } function reporting_html_general(&$table, $item) { if (!empty($item["data"])) { $data_in_same_row = $item['show_in_same_row']; switch ($item['subtype']) { case REPORT_GENERAL_NOT_GROUP_BY_AGENT: if (!$data_in_same_row) { $table1 = new stdClass(); $table1->width = '99%'; $table1->data = array (); $table1->head = array (); $table1->head[0] = __('Agent'); $table1->head[1] = __('Module'); if ($item['date']['period'] != 0) { $table1->head[2] = __('Operation'); } $table1->head[3] = __('Value'); $table1->style[0] = 'text-align: left'; $table1->style[1] = 'text-align: left'; $table1->style[2] = 'text-align: left'; $table1->style[3] = 'text-align: left'; /* Begin - Order by agent */ foreach ($item['data'] as $key => $row) { $aux[$key] = $row['agent']; } array_multisort($aux, SORT_ASC, $item['data']); /* End - Order by agent */ foreach ($item['data'] as $row) { if ($item['date']['period'] != 0) { $table1->data[] = array( $row['agent'], $row['module'], $row['operator'], $row['formated_value']); } else { $table1->data[] = array( $row['agent'], $row['module'], $row['formated_value']); } } } else { $order_data = array(); foreach ($item['data'] as $row) { $order_data[$row['id_agent']][$row['id_agent_module']][$row['operator']] = $row['formated_value']; } $table1 = new stdClass(); $table1->width = '99%'; $table1->data = array (); $table1->head = array (); $table1->head[0] = __('Agent'); $table1->head[1] = __('Module'); $table1->head[2] = __('Avg'); $table1->head[3] = __('Max'); $table1->head[4] = __('Min'); $table1->head[5] = __('Sum'); $table1->style[0] = 'text-align: center'; $table1->style[1] = 'text-align: center'; $table1->style[2] = 'text-align: center'; $table1->style[3] = 'text-align: center'; $table1->style[4] = 'text-align: center'; $table1->style[4] = 'text-align: center'; foreach ($order_data as $id_agent => $row) { foreach ($row as $id_module => $row2) { $table1->data[] = array( agents_get_alias($id_agent), modules_get_agentmodule_name($id_module), $row2['Rate'], $row2['Maximum'], $row2['Minimum'], $row2['Summatory']); } } } break; case REPORT_GENERAL_GROUP_BY_AGENT: $list_modules = array(); foreach ($item['data'] as $modules) { foreach ($modules as $name => $value) { $list_modules[$name] = null; } } $list_modules = array_keys($list_modules); $table1->width = '99%'; $table1->data = array (); $table1->head = array_merge(array(__('Agent')), $list_modules); foreach ($item['data'] as $agent => $modules) { $row = array(); $row['agent'] = $agent; $table1->style['agent'] = 'text-align: center;'; foreach ($list_modules as $name) { $table1->style[$name] = 'text-align: center;'; if (isset($modules[$name])) { $row[$name] = $modules[$name]; } else { $row[$name] = "--"; } } $table1->data[] = $row; } break; } $table->colspan['data']['cell'] = 3; $table->cellstyle['data']['cell'] = 'text-align: center;'; $table->data['data']['cell'] = html_print_table($table1, true); } else { $table->colspan['error']['cell'] = 3; $table->data['error']['cell'] = __('There are no Agent/Modules defined'); } if ($item['resume'] && !empty($item["data"])) { $table_summary = new stdClass(); $table_summary->width = '99%'; $table_summary->data = array (); $table_summary->head = array (); $table_summary->head_colspan = array (); $table_summary->align = array(); $table_summary->align[0] = 'left'; $table_summary->align[1] = 'right'; $table_summary->align[2] = 'right'; $table_summary->align[3] = 'left'; $table_summary->align[4] = 'right'; $table_summary->head_colspan[0] = 2; $table_summary->head[0] = __('Min Value'); $table_summary->head[1] = __('Average Value'); $table_summary->head_colspan[2] = 2; $table_summary->head[2] = __('Max Value'); $table_summary->data[0][0] = $item['min']['agent'] . ' - ' . $item['min']['module']; $table_summary->data[0][1] = $item['min']['formated_value']; $table_summary->data[0][2] = format_for_graph($item['avg_value'], 2); $table_summary->data[0][3] = $item['max']['agent'] . ' - ' . $item['max']['module']; $table_summary->data[0][4] = $item['max']['formated_value']; $table->colspan['summary_title']['cell'] = 3; $table->data['summary_title']['cell'] = '' . __('Summary') . ''; $table->colspan['summary_table']['cell'] = 3; $table->data['summary_table']['cell'] = html_print_table($table_summary, true); } } function reporting_html_sql(&$table, $item) { if (!$item['correct']) { $table->colspan['error']['cell'] = 3; $table->data['error']['cell'] = $item['error']; } else { $first = true; $table2 = new stdClass(); $table2->class = 'databox'; $table2->width = '100%'; foreach ($item['data'] as $row) { if ($first) { $first = false; // Print the header foreach ($row as $key => $value) { $table2->head[] = $key; } } $table2->data[] = $row; } $table->colspan['data']['cell'] = 3; $table->cellstyle['data']['cell'] = 'text-align: center;'; $table->data['data']['cell'] = html_print_table($table2, true); } } function reporting_get_stats_summary($data, $graph_width, $graph_height) { global $config; // Alerts table $table_sum = html_get_predefined_table(); $tdata = array(); $table_sum->colspan[count($table_sum->data)][0] = 2; $table_sum->colspan[count($table_sum->data)][2] = 2; $table_sum->cellstyle[count($table_sum->data)][0] = 'text-align: center;'; $table_sum->cellstyle[count($table_sum->data)][2] = 'text-align: center;'; $tdata[0] = '' . __('Module status') . ''; $tdata[2] = '' . __('Alert level') . ''; $table_sum->rowclass[] = ''; $table_sum->data[] = $tdata; $tdata = array(); $table_sum->colspan[count($table_sum->data)][0] = 2; $table_sum->colspan[count($table_sum->data)][2] = 2; $table_sum->cellstyle[count($table_sum->data)][0] = 'text-align: center;'; $table_sum->cellstyle[count($table_sum->data)][2] = 'text-align: center;'; if ($data["monitor_checks"] > 0) { // Fixed width non interactive charts $status_chart_width = $config["flash_charts"] == false ? 100 : $graph_width; $tdata[0] = '
' . '
' . graph_agent_status (false, $graph_width, $graph_height, true, true) . '
' . '
'; } else { $tdata[2] = html_print_image('images/image_problem_area_small.png', true, array('width' => $graph_width)); } if ($data["monitor_alerts"] > 0) { $tdata[2] = '
' . graph_alert_status ($data["monitor_alerts"], $data["monitor_alerts_fired"], $graph_width, $graph_height, true, true) . '
'; } else { $tdata[2] = html_print_image('images/image_problem_area_small.png', true, array('width' => $graph_width)); } $table_sum->rowclass[] = ''; $table_sum->data[] = $tdata; $output = '
' . __('Summary') . '' . html_print_table($table_sum, true) . '
'; return $output; } /** * Get an event reporting table. * * It construct a table object with all the events happened in a group * during a period of time. * * @param int Group id to get the report. * @param int Period of time to get the report. * @param int Beginning date of the report * @param int Flag to return or echo the report table (echo by default). * * @return object A table object */ function reporting_event_reporting ($id_group, $period, $date = 0, $return = false) { if (empty ($date)) { $date = get_system_time (); } elseif (!is_numeric ($date)) { $date = strtotime ($date); } $table->data = array (); $table->head = array (); $table->head[0] = __('Status'); $table->head[1] = __('Event name'); $table->head[2] = __('User ID'); $table->head[3] = __('Timestamp'); $events = events_get_group_events ($id_group, $period, $date); if (empty ($events)) { $events = array (); } foreach ($events as $event) { $data = array (); if ($event["estado"] == 0) $data[0] = html_print_image("images/dot_red.png", true); else $data[0] = html_print_image("images/dot_green.png", true); $data[1] = $event['evento']; $data[2] = $event['id_usuario'] != '0' ? $event['id_usuario'] : ''; $data[3] = $event["timestamp"]; array_push ($table->data, $data); } if (empty ($return)) html_print_table ($table); return $table; } /** * Get a table report from a alerts fired array. * * @param array Alerts fired array. * @see function get_alerts_fired () * * @return object A table object with a report of the fired alerts. */ function reporting_get_fired_alerts_table ($alerts_fired) { $agents = array (); global $config; require_once ($config["homedir"].'/include/functions_alerts.php'); foreach (array_keys ($alerts_fired) as $id_alert) { $alert_module = alerts_get_alert_agent_module ($id_alert); $template = alerts_get_alert_template ($id_alert); /* Add alerts fired to $agents_fired_alerts indexed by id_agent */ $id_agent = db_get_value ('id_agente', 'tagente_modulo', 'id_agente_modulo', $alert_module['id_agent_module']); if (!isset ($agents[$id_agent])) { $agents[$id_agent] = array (); } array_push ($agents[$id_agent], array ($alert_module, $template)); } $table->data = array (); $table->head = array (); $table->head[0] = __('Agent'); $table->head[1] = __('Alert description'); $table->head[2] = __('Times fired'); $table->head[3] = __('Priority'); foreach ($agents as $id_agent => $alerts) { $data = array (); foreach ($alerts as $tuple) { $alert_module = $tuple[0]; $template = $tuple[1]; if (! isset ($data[0])) $data[0] = agents_get_alias($id_agent); else $data[0] = ''; $data[1] = $template['name']; $data[2] = $alerts_fired[$alert_module['id']]; $data[3] = get_alert_priority ($alert_module['priority']); array_push ($table->data, $data); } } return $table; } /** * Get a report for alerts in a group of agents. * * It prints the numbers of alerts defined, fired and not fired in a group. * It also prints all the alerts that were fired grouped by agents. * * @param int $id_group Group to get info of the alerts. * @param int $period Period of time of the desired alert report. * @param int $date Beggining date of the report (current date by default). * @param bool $return Flag to return or echo the report (echo by default). * * @return string */ function reporting_alert_reporting ($id_group, $period = 0, $date = 0, $return = false) { global $config; $output = ''; $alerts = get_group_alerts ($id_group); $alerts_fired = get_alerts_fired ($alerts, $period, $date); $fired_percentage = 0; if (sizeof ($alerts) > 0) $fired_percentage = round (sizeof ($alerts_fired) / sizeof ($alerts) * 100, 2); $not_fired_percentage = 100 - $fired_percentage; $data = array (); $data[__('Alerts fired')] = $fired_percentage; $data[__('Alerts not fired')] = $not_fired_percentage; $output .= pie3d_graph(false, $data, 280, 150, __("other"), ui_get_full_url(false, false, false, false) . '/', ui_get_full_url(false, false, false, false) . "/images/logo_vertical_water.png", $config['fontpath'], $config['font_size']); $output .= ''.__('Alerts fired').': '.sizeof ($alerts_fired).'
'; $output .= ''.__('Total alerts monitored').': '.sizeof ($alerts).'
'; if (! sizeof ($alerts_fired)) { if (!$return) echo $output; return $output; } $table = reporting_get_fired_alerts_table ($alerts_fired); $table->width = '100%'; $table->class = 'databox'; $table->size = array (); $table->size[0] = '100px'; $table->style = array (); $table->style[0] = 'font-weight: bold'; $output .= html_print_table ($table, true); if (!$return) echo $output; return $output; } /** * Get a report for monitors modules in a group of agents. * * It prints the numbers of monitors defined, showing those which went up and down, in a group. * It also prints all the down monitors in the group. * * @param int $id_group Group to get info of the monitors. * @param int $period Period of time of the desired monitor report. * @param int $date Beginning date of the report in UNIX time (current date by default). * @param bool $return Flag to return or echo the report (by default). * * @return string */ function reporting_monitor_health ($id_group, $period = 0, $date = 0, $return = false) { if (empty ($date)) //If date is 0, false or empty $date = get_system_time (); $datelimit = $date - $period; $output = ''; $monitors = modules_get_monitors_in_group ($id_group); if (empty ($monitors)) //If monitors has returned false or an empty array return; $monitors_down = modules_get_monitors_down ($monitors, $period, $date); $down_percentage = round (count ($monitors_down) / count ($monitors) * 100, 2); $not_down_percentage = 100 - $down_percentage; $output .= ''.__('Total monitors').': '.count ($monitors).'
'; $output .= ''.__('Monitors down on period').': '.count ($monitors_down).'
'; $table = reporting_get_monitors_down_table ($monitors_down); $table->width = '100%'; $table->class = 'databox'; $table->size = array (); $table->size[0] = '100px'; $table->style = array (); $table->style[0] = 'font-weight: bold'; $table->size = array (); $table->size[0] = '100px'; $output .= html_print_table ($table, true); $data = array(); $data[__('Monitors OK')] = $down_percentage; $data[__('Monitors BAD')] = $not_down_percentage; $output .= pie3d_graph(false, $data, 280, 150, __("other"), ui_get_full_url(false, false, false, false) . '/', ui_get_full_url(false, false, false, false) . "/images/logo_vertical_water.png", $config['fontpath'], $config['font_size']); if (!$return) echo $output; return $output; } /** * Get a report table with all the monitors down. * * @param array An array with all the monitors down * @see function modules_get_monitors_down() * * @return object A table object with a monitors down report. */ function reporting_get_monitors_down_table ($monitors_down) { $table->data = array (); $table->head = array (); $table->head[0] = __('Agent'); $table->head[1] = __('Monitor'); $agents = array (); if ($monitors_down) { foreach ($monitors_down as $monitor) { /* Add monitors fired to $agents_fired_alerts indexed by id_agent */ $id_agent = $monitor['id_agente']; if (!isset ($agents[$id_agent])) { $agents[$id_agent] = array (); } array_push ($agents[$id_agent], $monitor); $monitors_down++; } foreach ($agents as $id_agent => $monitors) { $data = array (); foreach ($monitors as $monitor) { if (! isset ($data[0])) $data[0] = agents_get_alias($id_agent); else $data[0] = ''; if ($monitor['descripcion'] != '') { $data[1] = $monitor['descripcion']; } else { $data[1] = $monitor['nombre']; } array_push ($table->data, $data); } } } return $table; } /** * Get a general report of a group of agents. * * It shows the number of agents and no more things right now. * * @param int Group to get the report * @param bool Flag to return or echo the report (by default). * * @return HTML string with group report */ function reporting_print_group_reporting ($id_group, $return = false) { $agents = agents_get_group_agents ($id_group, false, "none"); $output = '' . sprintf(__('Agents in group: %s'), count($agents)) . '
'; if ($return === false) echo $output; return $output; } /** * Get a report table of the fired alerts group by agents. * * @param int Agent id to generate the report. * @param int Period of time of the report. * @param int Beginning date of the report in UNIX time (current date by default). * * @return object A table object with the alert reporting.. */ function reporting_get_agent_alerts_table ($id_agent, $period = 0, $date = 0) { global $config; $table->data = array (); $table->head = array (); $table->head[0] = __('Type'); $table->head[1] = __('Description'); $table->head[2] = __('Value'); $table->head[3] = __('Threshold'); $table->head[4] = __('Last fired'); $table->head[5] = __('Times fired'); require_once ($config["homedir"].'/include/functions_alerts.php'); $alerts = agents_get_alerts ($id_agent); foreach ($alerts['simple'] as $alert) { $fires = get_alert_fires_in_period ($alert['id'], $period, $date); if (! $fires) { continue; } $template = alerts_get_alert_template ($alert['id_alert_template']); $data = array (); $data[0] = alerts_get_alert_templates_type_name ($template['type']); $data[1] = $template['name']; switch ($template['type']) { case 'regex': if ($template['matches_value']) $data[2] = '≃ "'.$template['value'].'"'; else $data[2] = '≄ "'.$template['value'].'"'; break; case 'equal': case 'not_equal': $data[2] = $template['value']; break; case 'max-min': $data[2] = __('Min.').': '.$template['min_value']. ' '; $data[2] .= __('Max.').': '.$template['max_value']. ' '; break; case 'max': $data[2] = $template['max_value']; break; case 'min': $data[2] = $template['min_value']; break; } $data[3] = $template['time_threshold']; $data[4] = ui_print_timestamp (get_alert_last_fire_timestamp_in_period ($alert['id'], $period, $date), true); $data[5] = $fires; array_push ($table->data, $data); } return $table; } /** * Get a report of monitors in an agent. * * @param int Agent id to get the report * @param int Period of time of the report. * @param int Beginning date of the report in UNIX time (current date by default). * * @return object A table object with the report. */ function reporting_get_agent_monitors_table ($id_agent, $period = 0, $date = 0) { $n_a_string = __('N/A').'(*)'; $table->head = array (); $table->head[0] = __('Monitor'); $table->head[1] = __('Last failure'); $table->data = array (); $monitors = modules_get_monitors_in_agent ($id_agent); if ($monitors === false) { return $table; } foreach ($monitors as $monitor) { $downs = modules_get_monitor_downs_in_period ($monitor['id_agente_modulo'], $period, $date); if (! $downs) { continue; } $data = array (); if ($monitor['descripcion'] != $n_a_string && $monitor['descripcion'] != '') $data[0] = $monitor['descripcion']; else $data[0] = $monitor['nombre']; $data[1] = modules_get_last_down_timestamp_in_period ($monitor['id_agente_modulo'], $period, $date); array_push ($table->data, $data); } return $table; } /** * Get a report of all the modules in an agent. * * @param int Agent id to get the report. * @param int Period of time of the report * @param int Beginning date of the report in UNIX time (current date by default). * * @return object */ function reporting_get_agent_modules_table ($id_agent, $period = 0, $date = 0) { $table->data = array (); $n_a_string = __('N/A').'(*)'; $modules = agents_get_modules ($id_agent, array ("nombre", "descripcion")); if ($modules === false) $modules = array(); $data = array (); foreach ($modules as $module) { if ($module['descripcion'] != $n_a_string && $module['descripcion'] != '') $data[0] = $module['descripcion']; else $data[0] = $module['nombre']; array_push ($table->data, $data); } return $table; } /** * Get a detailed report of an agent * * @param int Agent to get the report. * @param int Period of time of the desired report. * @param int Beginning date of the report in UNIX time (current date by default). * @param bool Flag to return or echo the report (by default). * * @return string */ function reporting_get_agent_detailed ($id_agent, $period = 0, $date = 0, $return = false) { $output = ''; $n_a_string = __('N/A(*)'); /* Show modules in agent */ $output .= '
'; $output .= '

' . __('Agent') . ' - ' . agents_get_alias($id_agent) . '

'; $output .= '

'.__('Modules').'

'; $table_modules = reporting_get_agent_modules_table ($id_agent, $period, $date); $table_modules->width = '99%'; $output .= html_print_table ($table_modules, true); /* Show alerts in agent */ $table_alerts = reporting_get_agent_alerts_table ($id_agent, $period, $date); $table_alerts->width = '99%'; if (sizeof ($table_alerts->data)) { $output .= '

'.__('Alerts').'

'; $output .= html_print_table ($table_alerts, true); } /* Show monitor status in agent (if any) */ $table_monitors = reporting_get_agent_monitors_table ($id_agent, $period, $date); if (sizeof ($table_monitors->data) == 0) { $output .= '
'; if (! $return) echo $output; return $output; } $table_monitors->width = '99%'; $table_monitors->align = array (); $table_monitors->align[1] = 'right'; $table_monitors->size = array (); $table_monitors->align[1] = '10%'; $output .= '

'.__('Monitors').'

'; $output .= html_print_table ($table_monitors, true); $output .= ''; if (! $return) echo $output; return $output; } /** * Get a detailed report of agents in a group. * * @param mixed Group(s) to get the report * @param int Period * @param int Timestamp to start from * @param bool Flag to return or echo the report (by default). * * @return string */ function reporting_agents_get_group_agents_detailed ($id_group, $period = 0, $date = 0, $return = false) { $agents = agents_get_group_agents ($id_group, false, "none"); $output = ''; foreach ($agents as $agent_id => $agent_name) { $output .= reporting_get_agent_detailed ($agent_id, $period, $date, true); } if ($return === false) echo $output; return $output; } /** * This is the callback sorting function for SLA values descending * * @param array $a Array element 1 to compare * @param array $b Array element 2 to compare * */ function sla_value_desc_cmp($a, $b) { // This makes 'Unknown' values the lastest if (preg_match('/^(.)*Unknown(.)*$/', $a[5])) $a[6] = -1; if (preg_match('/^(.)*Unknown(.)*$/', $b[5])) $b[6] = -1; return ($a[6] < $b[6])? 1 : 0; } /** * This is the callback sorting function for SLA values ascending * * @param array $a Array element 1 to compare * @param array $b Array element 2 to compare * */ function sla_value_asc_cmp($a, $b) { // This makes 'Unknown' values the lastest if (preg_match('/^(.)*Unknown(.)*$/', $a[5])) $a[6] = -1; if (preg_match('/^(.)*Unknown(.)*$/', $b[5])) $b[6] = -1; return ($a[6] > $b[6])? 1 : 0; } /** * Make the header for each content. */ function reporting_header_content($mini, $content, $report, &$table, $title = false, $name = false, $period = false) { global $config; if ($mini) { $sizh = ''; $sizhfin = ''; } else { $sizh = '

'; $sizhfin = '

'; } $data = array(); $count_empty = 0; if ($title !== false) { $data[] = $sizh . $title . $sizhfin; } else $count_empty++; if ($name !== false) { $data[] = $sizh . $name . $sizhfin; } else $count_empty++; if ($period !== false && $content['period'] > 0) { $data[] = $sizh . $period . $sizhfin; } else if ($content['period'] == 0) { $es = json_decode($content['external_source'], true); if ($es['date'] == 0) { $date = __('Last data'); } else { $date = date($config["date_format"], $es['date']); } $data[] = "
" . $sizh . $date . $sizhfin . "
"; } else { $data[] = "
" . $sizh . "(" . human_time_description_raw ($content['period']) . ") " . __("From:") . " " . date($config["date_format"], $report["datetime"] - $content['period']) . "
" . __("To:") . " " . date($config["date_format"], $report["datetime"]) . "
" . $sizhfin . "
"; } $table->colspan[0][2 - $count_empty] = 1 + $count_empty; array_push ($table->data, $data); } function reporting_get_agents_by_status ($data, $graph_width = 250, $graph_height = 150, $links = false) { global $config; if ($links == false) { $links = array(); } $table_agent = html_get_predefined_table(); $agent_data = array(); $agent_data[0] = html_print_image('images/agent_critical.png', true, array('title' => __('Agents critical'))); $agent_data[1] = "".format_numeric($data['agent_critical']).""; $agent_data[2] = html_print_image('images/agent_warning.png', true, array('title' => __('Agents warning'))); $agent_data[3] = "".format_numeric($data['agent_warning']).""; $table_agent->data[] = $agent_data; $agent_data = array(); $agent_data[0] = html_print_image('images/agent_ok.png', true, array('title' => __('Agents ok'))); $agent_data[1] = "".format_numeric($data['agent_ok']).""; $agent_data[2] = html_print_image('images/agent_unknown.png', true, array('title' => __('Agents unknown'))); $agent_data[3] = "".format_numeric($data['agent_unknown']).""; $table_agent->data[] = $agent_data; $agent_data = array(); $agent_data[0] = html_print_image('images/agent_notinit.png', true, array('title' => __('Agents not init'))); $agent_data[1] = "".format_numeric($data['agent_not_init']).""; $agent_data[2] = ""; $agent_data[3] = ""; $table_agent->data[] = $agent_data; if (!defined('METACONSOLE')) { $agents_data = '
' . __('Agents by status') . '' . html_print_table($table_agent, true) . '
'; } else { $table_agent->style=array(); $table_agent->class = "tactical_view"; $agents_data = '
' . __('Agents by status') . '' . html_print_table($table_agent, true) . '
'; } return $agents_data; } function reporting_get_total_agents_and_monitors ($data, $graph_width = 250, $graph_height = 150) { global $config; $total_agent = $data['agent_ok'] + $data['agent_warning'] + $data['agent_critical'] + $data['gent_unknown'] + $data['agent_not_init']; $total_module = $data['monitor_ok'] + $data['monitor_warning'] + $data['monitor_critical'] + $data['monitor_unknown'] + $data['monitor_not_init']; $table_total = html_get_predefined_table(); $total_data = array(); $total_data[0] = html_print_image('images/agent.png', true, array('title' => __('Total agents'))); $total_data[1] = $total_agent <= 0 ? '-' : $total_agent; $total_data[2] = html_print_image('images/module.png', true, array('title' => __('Monitor checks'))); $total_data[3] = $total_module <= 0 ? '-' : $total_module; $table_total->data[] = $total_data; $total_agent_module = '
' . __('Total agents and monitors') . '' . html_print_table($table_total, true) . '
'; return $total_agent_module; } function reporting_get_total_servers ($num_servers) { global $config; $table_node = html_get_predefined_table(); $node_data = array(); $node_data[0] = html_print_image('images/server_export.png', true, array('title' => __('Nodes'))); $node_data[1] = "".format_numeric($num_servers).""; $table_node->data[] = $node_data; if (!defined('METACONSOLE')) { $node_overview = '
' . __('Node overview') . '' . html_print_table($table_node, true) . '
'; } else { $table_node->style = array(); $table_node->class = "tactical_view"; $node_overview = '
' . __('Node overview') . '' . html_print_table($table_node, true) . '
'; } return $node_overview; } function reporting_get_events ($data, $links = false) { global $config; $table_events = new stdClass(); $table_events->width = "100%"; if (defined('METACONSOLE')) $style = " vertical-align:middle;"; else $style = ""; if (defined('METACONSOLE')) { $table_events->style[0] = "background-color:#FC4444"; $table_events->data[0][0] = html_print_image('images/module_event_critical.png', true, array('title' => __('Critical events'))); $table_events->data[0][0] .= "   " . "" . format_numeric($data['critical']).""; $table_events->style[1] = "background-color:#FAD403"; $table_events->data[0][1] = html_print_image('images/module_event_warning.png', true, array('title' => __('Warning events'))); $table_events->data[0][1] .= "   " . "" . format_numeric($data['warning']).""; $table_events->style[2] = "background-color:#80BA27"; $table_events->data[0][2] = html_print_image('images/module_event_ok.png', true, array('title' => __('OK events'))); $table_events->data[0][2] .= "   " . "" . format_numeric($data['normal']).""; $table_events->style[3] = "background-color:#B2B2B2"; $table_events->data[0][3] = html_print_image('images/module_event_unknown.png', true, array('title' => __('Unknown events'))); $table_events->data[0][3] .= "   " . "" . format_numeric($data['unknown']).""; } else { $table_events->data[0][0] = html_print_image('images/module_critical.png', true, array('title' => __('Critical events'))); $table_events->data[0][0] .= "   " . "". format_numeric($data['critical']).""; $table_events->data[0][1] = html_print_image('images/module_warning.png', true, array('title' => __('Warning events'))); $table_events->data[0][1] .= "   " . "". format_numeric($data['warning']).""; $table_events->data[0][2] = html_print_image('images/module_ok.png', true, array('title' => __('OK events'))); $table_events->data[0][2] .= "   " . "". format_numeric($data['normal']).""; $table_events->data[0][3] = html_print_image('images/module_unknown.png', true, array('title' => __('Unknown events'))); $table_events->data[0][3] .= "   " . "". format_numeric($data['unknown']).""; } if (!defined('METACONSOLE')) { $event_view = '
' . __('Events by severity') . '' . html_print_table($table_events, true) . '
'; } else { $table_events->class="tactical_view"; $table_events->styleTable="text-align:center;"; $table_events->size[0]="10%"; $table_events->size[1]="10%"; $table_events->size[2]="10%"; $table_events->size[3]="10%"; $event_view = '
' . __('Important Events by Criticity') . '' . html_print_table($table_events, true) . '
'; } return $event_view; } function reporting_get_last_activity() { global $config; // Show last activity from this user $table = new stdClass(); $table->width = '100%'; $table->data = array (); $table->size = array (); $table->size[2] = '150px'; $table->size[3] = '130px'; $table->size[5] = '200px'; $table->head = array (); $table->head[0] = __('User'); $table->head[1] = ''; $table->head[2] = __('Action'); $table->head[3] = __('Date'); $table->head[4] = __('Source IP'); $table->head[5] = __('Comments'); $table->title = '' . __('Last activity in Pandora FMS console') . ''; switch ($config["dbtype"]) { case "mysql": $sql = sprintf ("SELECT id_usuario,accion,fecha,ip_origen,descripcion,utimestamp FROM tsesion WHERE (`utimestamp` > UNIX_TIMESTAMP(NOW()) - " . SECONDS_1WEEK . ") AND `id_usuario` = '%s' ORDER BY `utimestamp` DESC LIMIT 5", $config["id_user"]); break; case "postgresql": $sql = sprintf ("SELECT \"id_usuario\", accion, fecha, \"ip_origen\", descripcion, utimestamp FROM tsesion WHERE (\"utimestamp\" > ceil(date_part('epoch', CURRENT_TIMESTAMP)) - " . SECONDS_1WEEK . ") AND \"id_usuario\" = '%s' ORDER BY \"utimestamp\" DESC LIMIT 5", $config["id_user"]); break; case "oracle": $sql = sprintf ("SELECT id_usuario, accion, fecha, ip_origen, descripcion, utimestamp FROM tsesion WHERE ((utimestamp > ceil((sysdate - to_date('19700101000000','YYYYMMDDHH24MISS')) * (" . SECONDS_1DAY . ")) - " . SECONDS_1WEEK . ") AND id_usuario = '%s') AND rownum <= 10 ORDER BY utimestamp DESC", $config["id_user"]); break; } $sessions = db_get_all_rows_sql ($sql); if ($sessions === false) $sessions = array (); foreach ($sessions as $session) { $data = array (); switch ($config["dbtype"]) { case "mysql": case "oracle": $session_id_usuario = $session['id_usuario']; $session_ip_origen = $session['ip_origen']; break; case "postgresql": $session_id_usuario = $session['id_usuario']; $session_ip_origen = $session['ip_origen']; break; } $data[0] = '' . $session_id_usuario . ''; $data[1] = ui_print_session_action_icon ($session['accion'], true); $data[2] = $session['accion']; $data[3] = ui_print_help_tip($session['fecha'], true) . human_time_comparation($session['utimestamp'], 'tiny'); $data[4] = $session_ip_origen; $data[5] = io_safe_output ($session['descripcion']); array_push ($table->data, $data); } if(defined("METACONSOLE")) $table->class="databox_tactical"; return html_print_table ($table, true); } function reporting_get_event_histogram ($events, $text_header_event = false) { global $config; if (!defined("METACONSOLE")) { include_once ($config['homedir'] .'/include/graphs/functions_gd.php'); } else { include_once ('../../include/graphs/functions_gd.php'); } $max_value = count($events); if (defined("METACONSOLE")) $max_value = SECONDS_1HOUR; if (!$text_header_event) { $text_header_event = __('Events info (1hr.)'); } $ttl = 1; $urlImage = ui_get_full_url(false, true, false, false); $colors = array( EVENT_CRIT_MAINTENANCE => COL_MAINTENANCE, EVENT_CRIT_INFORMATIONAL => COL_INFORMATIONAL, EVENT_CRIT_NORMAL => COL_NORMAL, EVENT_CRIT_MINOR => COL_MINOR, EVENT_CRIT_WARNING => COL_WARNING, EVENT_CRIT_MAJOR => COL_MAJOR, EVENT_CRIT_CRITICAL => COL_CRITICAL ); if (defined("METACONSOLE")) { $full_legend = array(); $cont = 0; } foreach ($events as $data) { switch ($data['criticity']) { case 0: $color = EVENT_CRIT_MAINTENANCE; break; case 1: $color = EVENT_CRIT_INFORMATIONAL; break; case 2: $color = EVENT_CRIT_NORMAL; break; case 3: $color = EVENT_CRIT_WARNING; break; case 4: $color = EVENT_CRIT_CRITICAL; break; case 5: $color = EVENT_CRIT_MINOR; break; case 6: $color = EVENT_CRIT_MAJOR; break; case 20: $color = EVENT_CRIT_NOT_NORMAL; break; case 34: $color = EVENT_CRIT_WARNING_OR_CRITICAL; break; } if (defined("METACONSOLE")) { $full_legend[$cont] = $data['timestamp']; $graph_data[] = array( 'data' => $color, 'utimestamp' => $data['utimestamp'] - get_system_time () ); $cont++; } else { $graph_data[] = array( 'data' => $color, 'utimestamp' => 1 ); } } $table = new stdClass(); if (!$text_header_event) { $table->width = '100%'; } else { if (defined("METACONSOLE")) { $table->width = '100%'; } else { $table->width = '70%'; } } $table->data = array (); $table->size = array (); $table->head = array (); $table->title = '' . $text_header_event . ''; $table->data[0][0] = "" ; if (!empty($graph_data)) { if (defined("METACONSOLE")) $slicebar = flot_slicesbar_graph($graph_data, $max_value, "100%", 35, $full_legend, $colors, $config['fontpath'], $config['round_corner'], $url); else { if (!$text_header_event) { $slicebar = slicesbar_graph($graph_data, $max_value, 700, 25, $colors, $config['fontpath'], $config['round_corner'], $urlImage, $ttl); } else { $slicebar = slicesbar_graph($graph_data, $max_value, 350, 18, $colors, $config['fontpath'], $config['round_corner'], $urlImage, $ttl); } } $table->data[0][0] = $slicebar; } else { $table->data[0][0] = __('No events'); } if (!defined('METACONSOLE')) { if (!$text_header_event) { $event_graph = '
' . $text_header_event . '' . html_print_table($table, true) . '
'; } else { $table->class = 'noclass'; $event_graph = html_print_table($table, true); } } else { $table->class='tactical_view'; $event_graph = '
' . html_print_table($table, true) . '
'; } return $event_graph; } function reporting_get_event_histogram_meta ($width) { global $config; if (!defined("METACONSOLE")) { include_once ($config['homedir'] .'/include/graphs/functions_gd.php'); } else { include_once ('../../include/graphs/functions_gd.php'); } $period = SECONDS_1HOUR; if (!$text_header_event) { $text_header_event = __('Events info (1hr.)'); } $ttl = 1; $urlImage = ui_get_full_url(false, true, false, false); $data = array (); $resolution = $config['graph_res'] * ($period * 2 / $width); // Number of "slices" we want in graph $interval = (int) ($period / $resolution); $date = get_system_time (); $datelimit = $date - $period; $periodtime = floor ($period / $interval); $time = array (); $data = array (); $legend = array(); $full_legend = array(); $full_legend_date = array(); $colors = array( EVENT_CRIT_MAINTENANCE => COL_MAINTENANCE, EVENT_CRIT_INFORMATIONAL => COL_INFORMATIONAL, EVENT_CRIT_NORMAL => COL_NORMAL, EVENT_CRIT_MINOR => COL_MINOR, EVENT_CRIT_WARNING => COL_WARNING, EVENT_CRIT_MAJOR => COL_MAJOR, EVENT_CRIT_CRITICAL => COL_CRITICAL ); $user_groups = users_get_groups($config['id_user'], 'ER'); $user_groups_ids = array_keys($user_groups); if (empty($user_groups)) { $groups_condition = ' AND 1 = 0 '; } else { $groups_condition = ' AND id_grupo IN (' . implode(',', $user_groups_ids) . ') '; } if (!check_acl ($config['id_user'], 0, "PM")) { $groups_condition .= " AND id_grupo != 0"; } $status_condition = " AND estado = 0 "; $cont = 0; for ($i = 0; $i < $interval; $i++) { $bottom = $datelimit + ($periodtime * $i); if (! $graphic_type) { if ($config['flash_charts']) { $name = date('H:i:s', $bottom); } else { $name = date('H\h', $bottom); } } else { $name = $bottom; } // Show less values in legend if ($cont == 0 or $cont % 2) $legend[$cont] = $name; if ($from_agent_view) { $full_date = date('Y/m/d', $bottom); $full_legend_date[$cont] = $full_date; } $full_legend[$cont] = $name; $top = $datelimit + ($periodtime * ($i + 1)); $time_condition = 'utimestamp > '.$bottom . ' AND utimestamp < '.$top; $sql = sprintf('SELECT criticity,utimestamp FROM tmetaconsole_event WHERE %s %s %s ORDER BY criticity DESC', $time_condition, $groups_condition, $status_condition); $events = db_get_all_rows_sql($sql); $events_criticity = array(); if(is_array($events)){ foreach ($events as $key => $value) { array_push($events_criticity,$value['criticity']); } } if (!empty($events)) { if(array_search('4',$events_criticity) !== false){ $data[$cont]['data'] = EVENT_CRIT_CRITICAL; }else if (array_search('3',$events_criticity) !== false){ $data[$cont]['data'] = EVENT_CRIT_WARNING; }else if(array_search('6',$events_criticity) !== false){ $data[$cont]['data'] = EVENT_CRIT_MAJOR; }else if(array_search('5',$events_criticity) !== false){ $data[$cont]['data'] = EVENT_CRIT_MINOR; }else if(array_search('20',$events_criticity) !== false){ $data[$cont]['data'] = EVENT_CRIT_NOT_NORMAL; }else if(array_search('34',$events_criticity) !== false){ $data[$cont]['data'] = EVENT_CRIT_WARNING_OR_CRITICAL; }else if(array_search('2',$events_criticity) !== false){ $data[$cont]['data'] = EVENT_CRIT_NORMAL; }else if(array_search('0',$events_criticity) !== false){ $data[$cont]['data'] = EVENT_CRIT_MAINTENANCE; }else { $data[$cont]['data'] = EVENT_CRIT_INFORMATIONAL; } $data[$cont]['utimestamp'] = $periodtime; } else { $data[$cont]['utimestamp'] = $periodtime; $data[$cont]['data'] = 1; } $cont++; } $table = new stdClass(); $table->width = '100%'; $table->data = array (); $table->size = array (); $table->head = array (); $table->title = '' . $text_header_event . ''; $table->data[0][0] = "" ; if (!empty($data)) { $slicebar = flot_slicesbar_graph($data, $period, "100%", 30, $full_legend, $colors, $config['fontpath'], $config['round_corner'], $url, '', '', false, 0, $full_legend_date); $table->data[0][0] = $slicebar; } else { $table->data[0][0] = __('No events'); } if (!$text_header_event) { $event_graph = '
' . $text_header_event . '' . html_print_table($table, true) . '
'; } else { $table->class = 'noclass'; $event_graph = html_print_table($table, true); } return $event_graph; } function reporting_html_planned_downtimes_table ($planned_downtimes) { global $config; if (empty($planned_downtimes)) return false; require_once ($config['homedir'] . '/include/functions_planned_downtimes.php'); $downtime_malformed = false; $malformed_planned_downtimes = planned_downtimes_get_malformed(); $table = new StdClass(); $table->width = '99%'; $table->title = __('This SLA has been affected by the following planned downtimes'); $table->head = array(); $table->head[0] = __('Name'); $table->head[1] = __('Description'); $table->head[2] = __('Execution'); $table->head[3] = __('Dates'); $table->headstyle = array(); $table->style = array(); $table->data = array(); if ($for_pdf) { $table->titlestyle = 'background: #373737; color: #FFF; display: table-cell; font-size: 12px; border: 1px solid grey'; $table->class = 'table_sla table_beauty'; for ($i = 0; $i < count($table->head); $i++) { $table->headstyle[$i] = 'background: #666; color: #FFF; display: table-cell; font-size: 11px; border: 1px solid grey'; } for ($i = 0; $i < count($table->head); $i++) { $table->style[$i] = 'display: table-cell; font-size: 10px;'; } } foreach ($planned_downtimes as $planned_downtime) { $data = array(); $data[0] = $planned_downtime['name']; $data[1] = $planned_downtime['description']; $data[2] = $planned_downtime['execution']; $data[3] = $planned_downtime['dates']; if (!empty($malformed_planned_downtimes) && isset($malformed_planned_downtimes[$planned_downtime['id']])) { $next_row_num = count($table->data); $table->cellstyle[$next_row_num][0] = 'color: red'; $table->cellstyle[$next_row_num][1] = 'color: red'; $table->cellstyle[$next_row_num][2] = 'color: red'; $table->cellstyle[$next_row_num][3] = 'color: red'; if (!$downtime_malformed) $downtime_malformed = true; } $table->data[] = $data; } $downtimes_table = ''; if ($downtime_malformed) { $info_malformed = ui_print_error_message(__('This item is affected by a malformed planned downtime') . ". " . __('Go to the planned downtimes section to solve this') . ".", '', true); $downtimes_table .= $info_malformed; } $downtimes_table .= html_print_table($table, true); return $downtimes_table; } ?>