'; $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 = []; 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'])) { if (is_numeric($report['datetime']) && is_numeric($report['period'])) { $html .= ''; } $html .= ''; } else { $html .= ''; } $html .= '
'.__('Generated').': '.$date_today.'
'.__('Report date').': '.date($config['date_format'], ($report['datetime'] - $report['period'])).''.__('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 = []; $table->style = []; $table->width = '100%'; $table->class = 'databox filters'; $table->rowclass = []; $table->rowclass[0] = 'datos3'; $table->data = []; $table->head = []; $table->colspan = []; $table->rowstyle = []; 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); $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 = []; $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 = []; $table1->head = []; $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 = []; $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 = []; $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 = []; $table2->head = []; $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 = []; $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 = []; $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 = []; $table3->head = []; $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 = []; $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'])); // first_table $row = []; $row[] = $sla['agent']; $row[] = $sla['module']; if (is_numeric($sla['dinamic_text'])) { $row[] = sla_truncate($sla['max'], $config['graph_precision']).' / '.sla_truncate($sla['min'], $config['graph_precision']); } else { $row[] = $sla['dinamic_text']; } $row[] = round($sla['sla_limit'], 2).'%'; if (reporting_sla_is_not_init_from_array($sla)) { $row[] = ''.__('N/A').''; $row[] = ''.__('Not init').''; } else if (reporting_sla_is_ignored_from_array($sla)) { $row[] = ''.__('N/A').''; $row[] = ''.__('No data').''; // Normal calculation } else if ($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 = []; $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 = []; $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); } else { $table->colspan['error']['cell'] = 3; $table->data['error']['cell'] = __('There are no Agent/Modules defined'); } if (!empty($item['charts'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->size = []; $table1->size[0] = '10%'; $table1->data = []; foreach ($item['charts'] as $chart) { $table1->data[] = [ $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 = []; $table1->size = []; $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 = []; $table1->align[0] = 'left'; $table1->align[1] = 'left'; $table1->align[2] = 'right'; $table1->data = []; $table1->headstyle = []; $table1->headstyle[0] = 'text-align: left'; $table1->headstyle[1] = 'text-align: left'; $table1->headstyle[2] = 'text-align: right'; $table1->head = []; $table1->head[0] = __('Agent'); $table1->head[1] = __('Module'); $table1->head[2] = __('Value'); foreach ($item['data'] as $top) { $row = []; $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 = []; $table1->align[0] = 'center'; $table1->align[1] = 'center'; $table1->align[2] = 'center'; $table1->data = []; $table1->headstyle = []; $table1->headstyle[0] = 'text-align: center'; $table1->headstyle[1] = 'text-align: center'; $table1->headstyle[2] = 'text-align: center'; $table1->head = []; $table1->head[0] = __('Min Value'); $table1->head[1] = __('Average Value'); $table1->head[2] = __('Max Value'); $row = []; $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 = []; $table1->align[0] = 'center'; if ($item['show_summary_group']) { $table1->align[3] = 'center'; } else { $table1->align[2] = 'center'; } $table1->data = []; $table1->head = []; 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 = []; // 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, [ '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[] = __('%s System', get_product_name()); } $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 = []; $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 = []; $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 = []; $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 = []; $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 = []; $table1->head = []; $table1->align = []; $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 = []; 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, [ '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 = []; $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 = []; $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 = []; $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 = []; $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( [], $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, [ '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, [ '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, [ '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, [ '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, [ '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, [ '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 = []; $table1->align['agent'] = 'left'; $table1->align['module'] = 'left'; $table1->align['operation'] = 'left'; $table1->align['value'] = 'right'; $table1->data = []; $table1->headstyle = []; $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 = []; $table1->head['agent'] = __('Agent'); $table1->head['module'] = __('Module'); $table1->head['operation'] = __('Operation'); $table1->head['value'] = __('Value'); foreach ($item['data'] as $data) { $row = []; $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 = []; $table1->align['min'] = 'right'; $table1->align['avg'] = 'right'; $table1->align['max'] = 'right'; $table1->headstyle = []; $table1->headstyle['min'] = 'text-align: right'; $table1->headstyle['avg'] = 'text-align: right'; $table1->headstyle['max'] = 'text-align: right'; $table1->head = []; $table1->head['min'] = __('Min Value'); $table1->head['avg'] = __('Average Value'); $table1->head['max'] = __('Max Value'); $table1->data = []; $table1->data[] = [ '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 = []; $table1->align[0] = 'center'; $table1->align[1] = 'center'; $table1->align[3] = 'center'; $table1->data = []; $table1->head = []; $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 = []; // 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, [ '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 = []; $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 = []; $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 = []; $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 = [ __('Date'), __('Data'), ]; $table1->data = []; foreach ($item['data'] as $data) { if (!is_numeric($data[__('Data')])) { $row = [ $data[__('Date')], $data[__('Data')], ]; } else { $row = [ $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 = [__('Date')]; if (!empty($item['keys'])) { $table1->head = array_merge($table1->head, $item['keys']); } $table1->style[0] = 'text-align: left'; $table1->data = []; foreach ($item['data'] as $data) { foreach ($data['data'] as $data_unserialied) { $row = [$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 = []; $table1->data = []; $cell = ''; foreach ($item['data'] as $agent) { $table2 = new stdClass(); $table2->width = '100%'; $table2->data = []; reporting_html_agent_configuration($table2, ['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 = []; $table_agent->head = []; $table_agent->head[0] = __('Agent').' '.$agent['agent']; $table_agent->headstyle = []; $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 = []; $table_interface->rowstyle = []; $table_interface->head = []; $table_interface->cellstyle = []; $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 = []; $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 = []; $table1->data = []; $table1->rowspan = []; $table1->valign = []; if ($item['data'] == null) { $table->data['alerts']['cell'] = ui_print_empty_data(__('No alerts defined'), '', true); return true; } $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 = []; $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 = []; $table1->data = []; 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 = []; $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 = []; $row = []; $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 = []; $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 = []; $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 = []; foreach ($item['data']['modules'] as $module) { $row = []; $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'); } else if ($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 = []; $table1->head = []; $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 = []; $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 = []; $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 = []; $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); $same_agent_in_resume = ''; global $config; if (!empty($item['data'])) { $table1 = new stdClass(); $table1->width = '99%'; $table1->data = []; $table1->head = []; $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 = []; $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 = []; $table2->head = []; $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 = []; $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'])); $table_row = []; $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 = []; $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']; $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 = []; $data[0] = html_print_table($table1, true); array_push($table->data, $data); if ($item['resume']['resume']) { $data2 = []; $data2[0] = html_print_table($table2, true); array_push($table->data, $data2); } if ($item['resume']['resume'] && !empty($item['data'])) { $table1->width = '99%'; $table1->data = []; if ((strpos($item['resume']['min_text'], $same_agent_in_resume) === false)) { $table1->head = []; $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 = []; $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 = []; $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[] = [ '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' => ''.sla_truncate($item['resume']['avg'], $config['graph_precision']).'%', ]; $table->colspan[3][0] = 3; $data = []; $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) { $hack_metaconsole = '../../'; } else { $hack_metaconsole = ''; } $src = ui_get_full_url(false); $tables_chart = ''; $table1 = new stdClass(); $table1->width = '99%'; $table1->data = []; $table1->size = []; $table1->size[0] = '10%'; $table1->size[1] = '80%'; $table1->size[2] = '5%'; $table1->size[3] = '5%'; foreach ($item['charts'] as $chart) { $checks_resume = ''; $sla_value = ''; if (reporting_sla_is_not_init_from_array($chart)) { $color = COL_NOTINIT; $sla_value = __('Not init'); } else if (reporting_sla_is_ignored_from_array($chart)) { $color = COL_IGNORED; $sla_value = __('No data'); } else { 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; } $sla_value = sla_truncate($chart['sla_value'], $config['graph_precision']).'%'; $checks_resume = '('.$chart['checks_ok'].'/'.$chart['checks_total'].')'; } $table1->data[0][0] = $chart['agent'].'
'.$chart['module']; $table1->data[0][1] = $chart['chart']; $table1->data[0][2] = "".$sla_value.''; $table1->data[0][3] = $checks_resume; $tables_chart .= html_print_table($table1, true); } if ($item['type'] == 'availability_graph') { // table_legend_graphs; $table2 = new stdClass(); $table2->width = '99%'; $table2->data = []; $table2->size = []; $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'] = $tables_chart; $table->colspan['legend']['cell'] = 2; $table->data['legend']['cell'] = html_print_table($table2, true); if ($pdf) { return $tables_chart.'
'.html_print_table($table2, 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 = []; $table1->head = []; $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[] = [ $row['agent'], $row['module'], $row['operator'], $row['formated_value'], ]; } else { $table1->data[] = [ $row['agent'], $row['module'], $row['formated_value'], ]; } } } else { $order_data = []; 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 = []; $table1->head = []; $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[] = [ 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 = []; 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 = []; $table1->head = array_merge([__('Agent')], $list_modules); foreach ($item['data'] as $agent => $modules) { $row = []; $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 = []; $table_summary->head = []; $table_summary->head_colspan = []; $table_summary->align = []; $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 = []; $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 = []; $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 = $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, ['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, ['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(); } else if (!is_numeric($date)) { $date = strtotime($date); } $table->data = []; $table->head = []; $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 = []; } foreach ($events as $event) { $data = []; 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 = []; global $config; include_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_push($agents[$id_agent], [$alert_module, $template]); } $table->data = []; $table->head = []; $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 = []; 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 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 = []; $table->head = []; $table->head[0] = __('Agent'); $table->head[1] = __('Monitor'); $agents = []; 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_push($agents[$id_agent], $monitor); $monitors_down++; } foreach ($agents as $id_agent => $monitors) { $data = []; 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 = []; $table->head = []; $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'); include_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 = []; $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 = []; $table->head[0] = __('Monitor'); $table->head[1] = __('Last failure'); $table->data = []; $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 = []; 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 = []; $n_a_string = __('N/A').'(*)'; $modules = agents_get_modules($id_agent, ['nombre', 'descripcion']); if ($modules === false) { $modules = []; } $data = []; 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 = []; $table_monitors->align[1] = 'right'; $table_monitors->size = []; $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 = []; $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 = []; } $table_agent = html_get_predefined_table(); $agent_data = []; $agent_data[0] = html_print_image('images/agent_critical.png', true, ['title' => __('Agents critical')]); $agent_data[1] = "".format_numeric($data['agent_critical']).''; $agent_data[2] = html_print_image('images/agent_warning.png', true, ['title' => __('Agents warning')]); $agent_data[3] = "".format_numeric($data['agent_warning']).''; $table_agent->data[] = $agent_data; $agent_data = []; $agent_data[0] = html_print_image('images/agent_ok.png', true, ['title' => __('Agents ok')]); $agent_data[1] = "".format_numeric($data['agent_ok']).''; $agent_data[2] = html_print_image('images/agent_unknown.png', true, ['title' => __('Agents unknown')]); $agent_data[3] = "".format_numeric($data['agent_unknown']).''; $table_agent->data[] = $agent_data; $agent_data = []; $agent_data[0] = html_print_image('images/agent_notinit.png', true, ['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 = []; $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 = []; $total_data[0] = html_print_image('images/agent.png', true, ['title' => __('Total agents')]); $total_data[1] = $total_agent <= 0 ? '-' : $total_agent; $total_data[2] = html_print_image('images/module.png', true, ['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 = []; $node_data[0] = html_print_image('images/server_export.png', true, ['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 = []; $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, ['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, ['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, ['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, ['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, ['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, ['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, ['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, ['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 = []; $table->size = []; $table->size[2] = '150px'; $table->size[3] = '130px'; $table->size[5] = '200px'; $table->head = []; $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 %s console', get_product_name()).''; 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 = []; } foreach ($sessions as $session) { $data = []; 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 = [ 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 = []; $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[] = [ 'data' => $color, 'utimestamp' => ($data['utimestamp'] - get_system_time()), ]; $cont++; } else { $graph_data[] = [ 'data' => $color, 'utimestamp' => 1, ]; } } $table = new stdClass(); $table->width = '100%'; $table->data = []; $table->size = []; $table->head = []; $table->title = ''.$text_header_event.''; $table->data[0][0] = ''; if (!empty($graph_data)) { $url_slice = defined('METACONSOLE') ? $url : $urlImage; $slicebar = flot_slicesbar_graph( $graph_data, $max_value, 100, 25, $full_legend, $colors, $config['fontpath'], $config['round_corner'], $url, '', '', false, 0, [], true, $ttl, false, false ); $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 = []; // $resolution = $config['graph_res'] * ($period * 2 / $width); // Number of "slices" we want in graph $resolution = (5 * ($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 = []; $data = []; $legend = []; $full_legend = []; $full_legend_date = []; $colors = [ 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) { $name = date('H:i:s', $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 = []; 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 = []; $table->size = []; $table->head = []; $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, true, 1, false, false ); $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; } include_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 = []; $table->head[0] = __('Name'); $table->head[1] = __('Description'); $table->head[2] = __('Execution'); $table->head[3] = __('Dates'); $table->headstyle = []; $table->style = []; $table->data = []; 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 = []; $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; }