Added a new report item which shows network interfaces information by agents of the selected group
* pandora_console/godmode/reporting/reporting_builder.item_editor.php: Added the item 'network_interfaces_report'. * pandora_console/include/functions_agents.php: Added the function "agents_get_network_interfaces" to get a list of network interfaces information by agent. * pandora_console/include/functions_custom_graphs.php: Added the 'ttl' parameter to the function "custom_graphs_print". * pandora_console/include/functions_reporting.php: Added the item 'network_interfaces_report' to the function "reporting_render_report_html_item". Added the function "reporting_network_interfaces_table". * pandora_console/include/functions_reports.php: Added the item 'network_interfaces_report' to the function "reports_get_report_types".
This commit is contained in:
parent
f945b8253f
commit
c73d901873
|
@ -125,6 +125,7 @@ switch ($action) {
|
||||||
case 'top_n':
|
case 'top_n':
|
||||||
case 'exception':
|
case 'exception':
|
||||||
case 'general':
|
case 'general':
|
||||||
|
case 'network_interfaces_report':
|
||||||
$get_data_editor = true;
|
$get_data_editor = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -420,6 +421,11 @@ switch ($action) {
|
||||||
$description = $item['description'];
|
$description = $item['description'];
|
||||||
$group = $item['id_group'];
|
$group = $item['id_group'];
|
||||||
break;
|
break;
|
||||||
|
case 'network_interfaces_report':
|
||||||
|
$description = $item['description'];
|
||||||
|
$group = $item['id_group'];
|
||||||
|
$period = $item['period'];
|
||||||
|
break;
|
||||||
case 'top_n':
|
case 'top_n':
|
||||||
$description = $item['description'];
|
$description = $item['description'];
|
||||||
$period = $item['period'];
|
$period = $item['period'];
|
||||||
|
@ -2147,6 +2153,11 @@ function chooseType() {
|
||||||
$("#row_servers").show();
|
$("#row_servers").show();
|
||||||
$("#row_description").show();
|
$("#row_description").show();
|
||||||
break;
|
break;
|
||||||
|
case 'network_interfaces_report':
|
||||||
|
$("#row_group").show();
|
||||||
|
$("#row_description").show();
|
||||||
|
$("#row_period").show();
|
||||||
|
break;
|
||||||
case 'top_n':
|
case 'top_n':
|
||||||
$("#row_description").show();
|
$("#row_description").show();
|
||||||
$("#row_period").show();
|
$("#row_period").show();
|
||||||
|
|
|
@ -2144,4 +2144,157 @@ function agents_update_gis($idAgente, $latitude, $longitude, $altitude,
|
||||||
|
|
||||||
return (bool)$return;
|
return (bool)$return;
|
||||||
}
|
}
|
||||||
?>
|
|
||||||
|
/**
|
||||||
|
* Returns a list with network interfaces data by agent
|
||||||
|
*
|
||||||
|
* @param array Agents with the columns 'id_agente', 'nombre' and 'id_grupo'.
|
||||||
|
* @param mixed A filter to search the agents if the first parameter is false.
|
||||||
|
*
|
||||||
|
* @return array A list of network interfaces information by agents.
|
||||||
|
*/
|
||||||
|
function agents_get_network_interfaces ($agents = false, $agents_filter = false) {
|
||||||
|
if ($agents === false) {
|
||||||
|
$filter = false;
|
||||||
|
if ($agents_filter !== false) {
|
||||||
|
$filter = $agents_filter;
|
||||||
|
}
|
||||||
|
$fields = array(
|
||||||
|
'id_agente',
|
||||||
|
'nombre',
|
||||||
|
'id_grupo'
|
||||||
|
);
|
||||||
|
$agents = agents_get_agents($filter, $fields);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ni_by_agents = array();
|
||||||
|
|
||||||
|
foreach ($agents as $agent) {
|
||||||
|
$agent_id = $agent['id_agente'];
|
||||||
|
$agent_group_id = $agent['id_grupo'];
|
||||||
|
$agent_name = $agent['nombre'];
|
||||||
|
$agent_interfaces = array();
|
||||||
|
|
||||||
|
$columns = array(
|
||||||
|
"id_agente_modulo",
|
||||||
|
"nombre",
|
||||||
|
"descripcion",
|
||||||
|
"ip_target"
|
||||||
|
);
|
||||||
|
$filter = array(
|
||||||
|
"id_agente" => $agent_id,
|
||||||
|
"id_tipo_modulo" => (int) db_get_value("id_tipo", "ttipo_modulo", "nombre", "remote_snmp_proc"),
|
||||||
|
"disabled" => 0
|
||||||
|
);
|
||||||
|
$modules = agents_get_modules($agent_id, $columns, $filter, true, false);
|
||||||
|
|
||||||
|
if (!empty($modules)) {
|
||||||
|
$interfaces = array();
|
||||||
|
|
||||||
|
foreach ($modules as $module) {
|
||||||
|
$module_name = (string) $module['nombre'];
|
||||||
|
|
||||||
|
// Trying to get the interface name from the module name
|
||||||
|
if (preg_match ("/_(.+)$/", $module_name, $matches)) {
|
||||||
|
if ($matches[1]) {
|
||||||
|
$interface_name = $matches[1];
|
||||||
|
$interface_name_escaped = str_replace("/", "\/", $interface_name);
|
||||||
|
|
||||||
|
if (!isset($interfaces[$interface_name])
|
||||||
|
|| (isset($interfaces[$interface_name])
|
||||||
|
&& preg_match ("/^ifOperStatus_$interface_name_escaped$/i", $module_name, $matches))) {
|
||||||
|
$interfaces[$interface_name] = $module;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unset($modules);
|
||||||
|
|
||||||
|
foreach ($interfaces as $interface_name => $module) {
|
||||||
|
$interface_name_escaped = str_replace("/", "\/", $interface_name);
|
||||||
|
|
||||||
|
$module_id = $module['id_agente_modulo'];
|
||||||
|
$module_name = $module['nombre'];
|
||||||
|
$module_description = $module['descripcion'];
|
||||||
|
$db_status = modules_get_agentmodule_status($module_id);
|
||||||
|
$module_value = modules_get_last_value ($module_id);
|
||||||
|
modules_get_status($module_id, $db_status, $module_value, $status, $title);
|
||||||
|
$status_image = ui_print_status_image($status, $title, true);
|
||||||
|
|
||||||
|
$ip_target = "";
|
||||||
|
if (isset($module['ip_target']) && !empty($module['ip_target'])) {
|
||||||
|
$ip_target = $module['ip_target'];
|
||||||
|
}
|
||||||
|
// Trying to get something like an IP from the description
|
||||||
|
else if (preg_match ("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/", $module_description, $matches)
|
||||||
|
|| preg_match ("/(((?=(?>.*?(::))(?!.+\3)))\3?|([\dA-F]{1,4}(\3|:?)|\2))(?4){5}((?4){2}|(25[0-5]|
|
||||||
|
(2[0-4]|1\d|[1-9])?\d)(\.(?7)){3})/i", $module_description, $matches)) {
|
||||||
|
if ($matches[0]) {
|
||||||
|
$ip_target = $matches[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$mac = "";
|
||||||
|
// Trying to get something like a mac from the description
|
||||||
|
if (preg_match ("/([0-9a-f]{1,2}[\.:-]){5}([0-9a-f]{1,2})/i", $module_description, $matches)) {
|
||||||
|
if ($matches[0]) {
|
||||||
|
$mac = $matches[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the ifInOctets and ifOutOctets modules of the interface
|
||||||
|
$columns = array(
|
||||||
|
"id_agente_modulo",
|
||||||
|
"nombre"
|
||||||
|
);
|
||||||
|
$interface_traffic_modules = agents_get_modules($agent_id, $columns, "nombre LIKE 'if%Octets_$interface_name'");
|
||||||
|
if (!empty($interface_traffic_modules) && count($interface_traffic_modules) >= 2) {
|
||||||
|
$interface_traffic_modules_aux = array('in' => '', 'out' => '');
|
||||||
|
foreach ($interface_traffic_modules as $interface_traffic_module) {
|
||||||
|
$interface_name_escaped = str_replace("/", "\/", $interface_name);
|
||||||
|
if (preg_match ("/^if(.+)Octets_$interface_name_escaped$/i", $interface_traffic_module['nombre'], $matches)) {
|
||||||
|
if (strtolower($matches[1]) == 'in') {
|
||||||
|
$interface_traffic_modules_aux['in'] = $interface_traffic_module['id_agente_modulo'];
|
||||||
|
}
|
||||||
|
elseif (strtolower($matches[1]) == 'out') {
|
||||||
|
$interface_traffic_modules_aux['out'] = $interface_traffic_module['id_agente_modulo'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!empty($interface_traffic_modules_aux['in']) && !empty($interface_traffic_modules_aux['out'])) {
|
||||||
|
$interface_traffic_modules = $interface_traffic_modules_aux;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$interface_traffic_modules = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$interface_traffic_modules = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$agent_interfaces[$interface_name] = array();
|
||||||
|
$agent_interfaces[$interface_name]['status_image'] = $status_image;
|
||||||
|
$agent_interfaces[$interface_name]['status_module_id'] = $module_id;
|
||||||
|
$agent_interfaces[$interface_name]['status_module_name'] = $module_name;
|
||||||
|
$agent_interfaces[$interface_name]['ip'] = $ip_target;
|
||||||
|
$agent_interfaces[$interface_name]['mac'] = $mac;
|
||||||
|
|
||||||
|
if ($interface_traffic_modules !== false) {
|
||||||
|
$agent_interfaces[$interface_name]['traffic'] = array();
|
||||||
|
$agent_interfaces[$interface_name]['traffic']['in'] = $interface_traffic_modules['in'];
|
||||||
|
$agent_interfaces[$interface_name]['traffic']['out'] = $interface_traffic_modules['out'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($agent_interfaces)) {
|
||||||
|
$ni_by_agents[$agent_id] = array();
|
||||||
|
$ni_by_agents[$agent_id]['name'] = $agent_name;
|
||||||
|
$ni_by_agents[$agent_id]['group'] = $agent_group_id;
|
||||||
|
$ni_by_agents[$agent_id]['interfaces'] = $agent_interfaces;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ni_by_agents;
|
||||||
|
}
|
||||||
|
?>
|
|
@ -163,7 +163,7 @@ function custom_graphs_print($id_graph, $height, $width, $period,
|
||||||
$stacked = null, $return = false, $date = 0, $only_image = false,
|
$stacked = null, $return = false, $date = 0, $only_image = false,
|
||||||
$background_color = 'white', $modules_param = array(), $homeurl = '',
|
$background_color = 'white', $modules_param = array(), $homeurl = '',
|
||||||
$name_list = array(), $unit_list = array(), $show_last = true,
|
$name_list = array(), $unit_list = array(), $show_last = true,
|
||||||
$show_max = true, $show_min = true, $show_avg = true) {
|
$show_max = true, $show_min = true, $show_avg = true, $ttl = 1) {
|
||||||
|
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
|
@ -222,7 +222,7 @@ function custom_graphs_print($id_graph, $height, $width, $period,
|
||||||
$date,
|
$date,
|
||||||
$only_image,
|
$only_image,
|
||||||
$homeurl,
|
$homeurl,
|
||||||
1,
|
$ttl,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
$background_color,
|
$background_color,
|
||||||
|
|
|
@ -5051,6 +5051,9 @@ function reporting_render_report_html_item ($content, $table, $report, $mini = f
|
||||||
</tr>
|
</tr>
|
||||||
</table>";
|
</table>";
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'network_interfaces_report':
|
||||||
|
reporting_network_interfaces_table($content, $report, $mini, $item_title, $table);
|
||||||
break;
|
break;
|
||||||
case 'general':
|
case 'general':
|
||||||
if (empty($item_title)) {
|
if (empty($item_title)) {
|
||||||
|
@ -7567,4 +7570,155 @@ function reporting_tiny_stats ($counts_info, $return = false, $type = 'agent', $
|
||||||
echo $out;
|
echo $out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
|
||||||
|
|
||||||
|
function reporting_network_interfaces_table ($content, $report, $mini, $item_title = "", &$table = null, &$pdf = null) {
|
||||||
|
global $config;
|
||||||
|
|
||||||
|
include_once($config['homedir'] . "/include/functions_custom_graphs.php");
|
||||||
|
|
||||||
|
if (empty($item_title)) {
|
||||||
|
$group_name = groups_get_name($content['id_group']);
|
||||||
|
$item_title = __('Network interfaces') . " - " . sprintf(__('Group "%s"'), $group_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
$is_html = $table !== null;
|
||||||
|
$is_pdf = $pdf !== null;
|
||||||
|
|
||||||
|
$ttl = $is_pdf ? 2 : 1;
|
||||||
|
|
||||||
|
$graph_width = 600;
|
||||||
|
$graph_height = 200;
|
||||||
|
|
||||||
|
$datetime = $report['datetime'];
|
||||||
|
$period = $content['period'];
|
||||||
|
|
||||||
|
if ($is_pdf) {
|
||||||
|
pdf_header_content($pdf, $content, $report, $item_title, false, $content["description"]);
|
||||||
|
}
|
||||||
|
else if ($is_html) {
|
||||||
|
reporting_header_content($mini, $content, $report, $table, $item_title);
|
||||||
|
|
||||||
|
//RUNNING
|
||||||
|
$table->style[1] = 'text-align: right';
|
||||||
|
|
||||||
|
// Put description at the end of the module (if exists)
|
||||||
|
$table->colspan[0][1] = 2;
|
||||||
|
$next_row = 1;
|
||||||
|
if ($content["description"] != "") {
|
||||||
|
$table->colspan[$next_row][0] = 3;
|
||||||
|
$next_row++;
|
||||||
|
$data_desc = array();
|
||||||
|
$data_desc[0] = $content["description"];
|
||||||
|
array_push ($table->data, $data_desc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$network_interfaces_by_agents = agents_get_network_interfaces(false, array('id_grupo' => $content['id_group']));
|
||||||
|
|
||||||
|
if (empty($network_interfaces_by_agents)) {
|
||||||
|
$data = array();
|
||||||
|
$table->colspan[$next_row][0] = 3;
|
||||||
|
$next_row++;
|
||||||
|
$data[0] = __('The group has no agents or none of the agents has any network interface');
|
||||||
|
array_push ($table->data, $data);
|
||||||
|
$slas = array();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
foreach ($network_interfaces_by_agents as $agent_id => $agent) {
|
||||||
|
|
||||||
|
$table_agent = new StdCLass();
|
||||||
|
$table_agent->width = '100%';
|
||||||
|
$table_agent->data = array();
|
||||||
|
$table_agent->head = array();
|
||||||
|
$table_agent->head[0] = $agent['name'];
|
||||||
|
$table_agent->headstyle = array();
|
||||||
|
$table_agent->headstyle[0] = 'font-size: 16px;';
|
||||||
|
$table_agent->style[0] = 'text-align: center';
|
||||||
|
|
||||||
|
if ($is_pdf) {
|
||||||
|
$table_agent->class = 'table_sla table_beauty';
|
||||||
|
$table_agent->headstyle[0] = 'background: #373737; color: #FFF; display: table-cell; font-size: 16px; border: 1px solid grey';
|
||||||
|
}
|
||||||
|
|
||||||
|
$table_agent->data['interfaces'] = "";
|
||||||
|
|
||||||
|
foreach ($agent['interfaces'] as $interface_name => $interface) {
|
||||||
|
$table_interface = new StdClass();
|
||||||
|
$table_interface->width = '100%';
|
||||||
|
$table_interface->data = array();
|
||||||
|
$table_interface->rowstyle = array();
|
||||||
|
$table_interface->head = array();
|
||||||
|
$table_interface->cellstyle = array();
|
||||||
|
$table_interface->title = $interface_name;
|
||||||
|
$table_interface->head['ip'] = __('IP');
|
||||||
|
$table_interface->head['mac'] = __('Mac');
|
||||||
|
$table_interface->head['status'] = __('Actual status');
|
||||||
|
$table_interface->style['ip'] = 'text-align: left';
|
||||||
|
$table_interface->style['mac'] = 'text-align: left';
|
||||||
|
$table_interface->style['status'] = 'width: 150px; text-align: center';
|
||||||
|
|
||||||
|
if ($is_pdf) {
|
||||||
|
$table_interface->class = 'table_sla table_beauty';
|
||||||
|
$table_interface->titlestyle = 'background: #373737; color: #FFF; display: table-cell; font-size: 12px; border: 1px solid grey';
|
||||||
|
|
||||||
|
$table_interface->headstyle['ip'] = 'text-align: left; background: #666; color: #FFF; display: table-cell; font-size: 11px; border: 1px solid grey';
|
||||||
|
$table_interface->headstyle['mac'] = 'text-align: left; background: #666; color: #FFF; display: table-cell; font-size: 11px; border: 1px solid grey';
|
||||||
|
$table_interface->headstyle['status'] = 'background: #666; color: #FFF; display: table-cell; font-size: 11px; border: 1px solid grey';
|
||||||
|
|
||||||
|
$table_interface->style['ip'] = 'text-align: left; display: table-cell; font-size: 10px;';
|
||||||
|
$table_interface->style['mac'] = 'text-align: left; display: table-cell; font-size: 10px;';
|
||||||
|
$table_interface->style['status'] = 'text-align: center; display: table-cell; font-size: 10px;';
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = array();
|
||||||
|
$data['ip'] = !empty($interface['ip']) ? $interface['ip'] : "--";
|
||||||
|
$data['mac'] = !empty($interface['mac']) ? $interface['mac'] : "--";
|
||||||
|
$data['status'] = $interface['status_image'];
|
||||||
|
$table_interface->data['data'] = $data;
|
||||||
|
|
||||||
|
if (!empty($interface['traffic'])) {
|
||||||
|
|
||||||
|
$only_image = !(bool)$config['flash_charts'] || $is_pdf ? true : false;
|
||||||
|
|
||||||
|
$graph = custom_graphs_print(0,
|
||||||
|
$graph_height,
|
||||||
|
$graph_width,
|
||||||
|
$period,
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
$date,
|
||||||
|
$only_image,
|
||||||
|
'white',
|
||||||
|
array_values($interface['traffic']),
|
||||||
|
$config['homeurl'],
|
||||||
|
array_keys($interface['traffic']),
|
||||||
|
array_fill(0, count($interface['traffic']),"bytes/s"),
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
$ttl);
|
||||||
|
|
||||||
|
$table_interface->data['graph'] = $graph;
|
||||||
|
$table_interface->colspan['graph'][0] = count($table_interface->head);
|
||||||
|
$table_interface->cellstyle['graph'][0] = 'text-align: center;';
|
||||||
|
}
|
||||||
|
|
||||||
|
$table_agent->data['interfaces'] .= html_print_table($table_interface, true);
|
||||||
|
$table_agent->colspan[$interface_name][0] = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($is_html) {
|
||||||
|
$table->data[$agent_id] = html_print_table($table_agent, true);
|
||||||
|
$table->colspan[$agent_id][0] = 3;
|
||||||
|
}
|
||||||
|
else if ($is_pdf) {
|
||||||
|
$html = html_print_table($table_agent, true);
|
||||||
|
$pdf->addHTML($html);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
|
@ -574,6 +574,8 @@ function reports_get_report_types ($template = false, $not_editor = false) {
|
||||||
}
|
}
|
||||||
$types['top_n'] = array('optgroup' => __('Grouped'),
|
$types['top_n'] = array('optgroup' => __('Grouped'),
|
||||||
'name' => __('Top n'));
|
'name' => __('Top n'));
|
||||||
|
$types['network_interfaces_report'] = array('optgroup' => __('Grouped'),
|
||||||
|
'name' => __('Network interfaces'));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue