mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-09-26 11:29:12 +02:00
NOTE: this fix must be ported to 6.0 code (has not been ported here because the code in 6.0 is completely different)
2354 lines
73 KiB
PHP
2354 lines
73 KiB
PHP
<?php
|
|
|
|
// Pandora FMS - http://pandorafms.com
|
|
// ==================================================
|
|
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
|
// Please see http://pandorafms.org for full contribution list
|
|
|
|
// This program is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU Lesser General Public License
|
|
// as published by the Free Software Foundation; version 2
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
/**
|
|
* @package Include
|
|
* @subpackage Reporting
|
|
*/
|
|
|
|
global $config;
|
|
|
|
//Fix ajax include this file.
|
|
global $ajax;
|
|
|
|
if (!isset($ajax)) {
|
|
require_once ('functions_graph.php');
|
|
}
|
|
require_once ($config['homedir'].'/include/functions_agents.php');
|
|
require_once ($config['homedir'].'/include/functions_modules.php');
|
|
require_once ($config['homedir'].'/include/functions_users.php');
|
|
|
|
function visual_map_print_item_toolbox($idDiv, $text, $float) {
|
|
if ($float == 'left') {
|
|
$margin = 'margin-right';
|
|
}
|
|
else {
|
|
$margin = 'margin-left';
|
|
}
|
|
|
|
echo '<div class="button_toolbox" id="' . $idDiv . '"
|
|
style="font-weight: bolder; text-align: center; float: ' . $float . ';'
|
|
. $margin . ': 5px;">';
|
|
echo $text;
|
|
echo '</span>';
|
|
echo '</div>';
|
|
}
|
|
|
|
function visual_map_print_item($layoutData) {
|
|
global $config;
|
|
|
|
require_once ($config["homedir"] . '/include/functions_graph.php');
|
|
require_once ($config["homedir"] . '/include/functions_custom_graphs.php');
|
|
|
|
$width = $layoutData['width'];
|
|
$height = $max_percentile = $layoutData['height'];
|
|
$top = $layoutData['pos_y'];
|
|
$left = $layoutData['pos_x'];
|
|
$id = $layoutData['id'];
|
|
$color = $layoutData['label_color'];
|
|
$label = $layoutData['label'];
|
|
$id_module = $layoutData['id_agente_modulo'];
|
|
$type = $layoutData['type'];
|
|
$period = $layoutData['period'];
|
|
|
|
$sizeStyle = '';
|
|
$borderStyle = '';
|
|
$imageSize = '';
|
|
|
|
$text = '<span id="text_' . $id . '" class="text">' . $label . '</span>';
|
|
|
|
$status = $layoutData['status_calculated'];
|
|
|
|
switch ($status) {
|
|
case VISUAL_MAP_STATUS_CRITICAL_BAD:
|
|
//Critical (BAD)
|
|
$colorStatus = COL_CRITICAL;
|
|
break;
|
|
case VISUAL_MAP_STATUS_CRITICAL_ALERT:
|
|
//Critical (ALERT)
|
|
$colorStatus = COL_ALERTFIRED;
|
|
break;
|
|
case VISUAL_MAP_STATUS_NORMAL:
|
|
//Normal (OK)
|
|
$colorStatus = COL_NORMAL;
|
|
break;
|
|
case VISUAL_MAP_STATUS_WARNING:
|
|
//Warning
|
|
$colorStatus = COL_WARNING;
|
|
break;
|
|
case VISUAL_MAP_STATUS_UNKNOWN:
|
|
default:
|
|
//Unknown
|
|
// Default is Blue (Other)
|
|
$colorStatus = COL_UNKNOWN;
|
|
break;
|
|
}
|
|
|
|
switch ($type) {
|
|
case STATIC_GRAPH:
|
|
if ($layoutData['image'] != null) {
|
|
$img = visual_map_get_image_status_element($layoutData,
|
|
$layoutData['status_calculated']);
|
|
if (substr($img,0,1) == '4') {
|
|
$borderStyle ='border: 2px solid ' . COL_ALERTFIRED . ';';
|
|
$img = substr_replace($img, '', 0,1);
|
|
}
|
|
}
|
|
|
|
if (($width != 0) && ($height != 0)) {
|
|
$sizeStyle = 'width: ' . $width . 'px; height: ' . $height . 'px;';
|
|
$imageSize = 'width="' . $width . '" height="' . $height . '"';
|
|
}
|
|
echo '<div id="' . $id . '" class="item static_graph" style="z-index: 1; text-align: center; color: ' . $color . '; position: absolute; display: inline-block; ' . $sizeStyle . ' top: ' . $top . 'px; left: ' . $left . 'px;">';
|
|
if ($layoutData['image'] != null) {
|
|
if (($width != 0) && ($height != 0))
|
|
echo html_print_image($img, true,
|
|
array("class" => "image", "id" => "image_" . $id, "width" => "$width", "height" => "$height", "style" => $borderStyle));
|
|
else
|
|
echo html_print_image($img, true,
|
|
array("class" => "image", "id" => "image_" . $id, "style" => $borderStyle));
|
|
echo '<br />';
|
|
}
|
|
echo io_safe_output($text);
|
|
echo "</div>";
|
|
break;
|
|
|
|
case GROUP_ITEM:
|
|
if ($layoutData['image'] != null) {
|
|
$img = visual_map_get_image_status_element($layoutData,
|
|
$layoutData['status_calculated']);
|
|
if (substr($img,0,1) == '4') {
|
|
$borderStyle ='border: 2px solid ' . COL_ALERTFIRED . ';';
|
|
$img = substr_replace($img, '', 0,1);
|
|
}
|
|
}
|
|
|
|
if (($width != 0) && ($height != 0)) {
|
|
$sizeStyle = 'width: ' . $width . 'px; height: ' . $height . 'px;';
|
|
$imageSize = 'width="' . $width . '" height="' . $height . '"';
|
|
}
|
|
echo '<div id="' . $id . '" class="item group_item" style="z-index: 1; text-align: center; color: ' . $color . '; position: absolute; display: inline-block; ' . $sizeStyle . ' top: ' . $top . 'px; left: ' . $left . 'px;">';
|
|
if ($layoutData['image'] != null) {
|
|
if (($width != 0) && ($height != 0))
|
|
echo html_print_image($img, true, array("class" => "image", "id" => "image_" . $id, "width" => "$width", "height" => "$height", "style" => $borderStyle));
|
|
else
|
|
echo html_print_image($img, true, array("class" => "image", "id" => "image_" . $id, "style" => $borderStyle));
|
|
echo '<br />';
|
|
}
|
|
echo io_safe_output($text);
|
|
echo "</div>";
|
|
break;
|
|
|
|
case PERCENTILE_BAR:
|
|
case PERCENTILE_BUBBLE:
|
|
//Metaconsole db connection
|
|
if ($layoutData['id_metaconsole'] != 0) {
|
|
$connection = db_get_row_filter ('tmetaconsole_setup',
|
|
array('id' => $layoutData['id_metaconsole']));
|
|
if (metaconsole_load_external_db($connection) != NOERR) {
|
|
//ui_print_error_message ("Error connecting to ".$server_name);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$module_value = db_get_sql ('SELECT datos
|
|
FROM tagente_estado
|
|
WHERE id_agente_modulo = ' . $id_module);
|
|
$value_text = false;
|
|
if ($layoutData['image'] == 'percent') {
|
|
$value_text = false;
|
|
}
|
|
elseif ($layoutData['image'] == 'value') {
|
|
$unit_text = db_get_sql ('SELECT unit
|
|
FROM tagente_modulo
|
|
WHERE id_agente_modulo = ' . $id_module);
|
|
$unit_text = trim(io_safe_output($unit_text));
|
|
|
|
$value_text = format_for_graph($module_value, 2);
|
|
if (!empty($unit_text))
|
|
$value_text .= " " . $unit_text;
|
|
}
|
|
|
|
//Restore db connection
|
|
if ($layoutData['id_metaconsole'] != 0) {
|
|
metaconsole_restore_db();
|
|
}
|
|
|
|
if ( $max_percentile > 0)
|
|
$percentile = format_numeric($module_value / $max_percentile * 100, 0);
|
|
else
|
|
$percentile = 100;
|
|
|
|
echo '<div id="' . $id . '" class="item percentile_item" style="z-index: 1; color: ' . $color . '; text-align: center; position: absolute; display: inline-block; ' . $sizeStyle . ' top: ' . $top . 'px; left: ' . $left . 'px;">';
|
|
echo io_safe_output($text) . '<br />';
|
|
|
|
ob_start();
|
|
if ($type == PERCENTILE_BUBBLE) {
|
|
echo progress_bubble($percentile, $width, $width, '', 1, $value_text, $colorStatus);
|
|
}
|
|
else {
|
|
echo progress_bar($percentile, $width, 15, '', 1, $value_text, $colorStatus);
|
|
}
|
|
$img = ob_get_clean();
|
|
$img = str_replace('>', 'class="image" id="image_' . $id . '" />', $img);
|
|
echo $img;
|
|
echo '</div>';
|
|
|
|
break;
|
|
|
|
case MODULE_GRAPH:
|
|
//Metaconsole db connection
|
|
if ($layoutData['id_metaconsole'] != 0) {
|
|
$connection = db_get_row_filter ('tmetaconsole_setup',
|
|
array('id' => $layoutData['id_metaconsole']));
|
|
if (metaconsole_load_external_db($connection) != NOERR) {
|
|
//ui_print_error_message ("Error connecting to ".$server_name);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if ($layoutData['id_custom_graph'] != 0) {
|
|
$img = custom_graphs_print(
|
|
$layoutData['id_custom_graph'], $height, $width,
|
|
$period, null, true, 0, true, $layoutData['image']);
|
|
}
|
|
else {
|
|
$img = grafico_modulo_sparse($id_module, $period, 0, $width,
|
|
$height, '', null, false, 1, false, 0, '', 0, 0, true, true,
|
|
'', 1, false, '', false, false, true, $layoutData['image']);
|
|
}
|
|
|
|
//Restore db connection
|
|
if ($layoutData['id_metaconsole'] != 0) {
|
|
metaconsole_restore_db();
|
|
}
|
|
|
|
$img = str_replace('>', 'class="image" id="image_' . $id . '" />', $img);
|
|
|
|
echo '<div id="' . $id . '" class="item module_graph" style="z-index: 1; color: ' . $color . '; text-align: center; position: absolute; display: inline-block; ' . $sizeStyle . ' top: ' . $top . 'px; left: ' . $left . 'px;">';
|
|
echo io_safe_output($text) . '<br />';
|
|
echo $img;
|
|
echo '</div>';
|
|
break;
|
|
case SIMPLE_VALUE:
|
|
case SIMPLE_VALUE_MAX:
|
|
case SIMPLE_VALUE_MIN:
|
|
case SIMPLE_VALUE_AVG:
|
|
$io_safe_output_text = io_safe_output($text);
|
|
echo '<div id="' . $id . '" class="item simple_value" style="z-index: 1; left: 0px; top: 0px; color: ' . $color . '; text-align: center; position: absolute; ' . $sizeStyle . ' top: ' . $top . 'px; left: ' . $left . 'px;">';
|
|
echo $io_safe_output_text;
|
|
|
|
//Metaconsole db connection
|
|
if ($layoutData['id_metaconsole'] != 0) {
|
|
$connection = db_get_row_filter ('tmetaconsole_setup',
|
|
array('id' => $layoutData['id_metaconsole']));
|
|
if (metaconsole_load_external_db($connection) != NOERR) {
|
|
//ui_print_error_message ("Error connecting to ".$server_name);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$unit_text = db_get_sql ('SELECT unit
|
|
FROM tagente_modulo
|
|
WHERE id_agente_modulo = ' . $layoutData['id_agente_modulo']);
|
|
$unit_text = trim(io_safe_output($unit_text));
|
|
|
|
|
|
$value = db_get_value ('datos',
|
|
'tagente_estado', 'id_agente_modulo', $layoutData['id_agente_modulo']);
|
|
|
|
// If the value is a string, dont format it
|
|
if (!is_string($value)) {
|
|
$value = format_for_graph($value, 2);
|
|
}
|
|
|
|
if (!empty($unit_text))
|
|
$value .= " " . $unit_text;
|
|
|
|
if (strstr($io_safe_output_text, "(_VALUE_)") === false) {
|
|
echo ' <span id="simplevalue_' . $id . '" style="font-weight:bold;">' . $value . '</span>';
|
|
}
|
|
|
|
//Restore db connection
|
|
if ($layoutData['id_metaconsole'] != 0) {
|
|
metaconsole_restore_db();
|
|
}
|
|
|
|
echo '</div>';
|
|
break;
|
|
case LABEL:
|
|
echo '<div id="' . $id . '" class="item label" style="z-index: 1; left: 0px; top: 0px; color: ' . $color . '; position: absolute; display: inline-block; ' . $sizeStyle . ' top: ' . $top . 'px; left: ' . $left . 'px;">';
|
|
echo io_safe_output($text);
|
|
echo "</div>";
|
|
break;
|
|
case ICON:
|
|
if ($layoutData['image'] != null) {
|
|
$img = visual_map_get_image_status_element($layoutData,
|
|
$layoutData['status_calculated']);
|
|
}
|
|
|
|
if (($width != 0) && ($height != 0)) {
|
|
$sizeStyle = 'width: ' . $width . 'px; height: ' . $height . 'px;';
|
|
$imageSize = 'width="' . $width . '" height="' . $height . '"';
|
|
}
|
|
echo '<div id="' . $id . '" class="item icon" style="z-index: 1; left: 0px; top: 0px; text-align: center; color: ' . $color . '; position: absolute; display: inline-block; ' . $sizeStyle . ' top: ' . $top . 'px; left: ' . $left . 'px;">';
|
|
if ($layoutData['image'] != null) {
|
|
// If match with protocol://direction
|
|
if (preg_match('/^(http:\/\/)((.)+)$/i', $text)) {
|
|
echo '<a href="' . $label . '">' . '</a>' . '<br />';
|
|
}
|
|
|
|
if (($width != 0) && ($height != 0))
|
|
echo html_print_image($img, true,
|
|
array("class" => "image",
|
|
"id" => "image_" . $id,
|
|
"width" => "$width",
|
|
"height" => "$height"));
|
|
else
|
|
echo html_print_image($img, true,
|
|
array("class" => "image", "id" => "image_" . $id));
|
|
echo '<br />';
|
|
}
|
|
echo "</div>";
|
|
break;
|
|
default:
|
|
enterprise_hook("enterprise_visual_map_print_item",
|
|
array($layoutData, $status, $colorStatus));
|
|
break;
|
|
}
|
|
|
|
//Add the line between elements.
|
|
if ($layoutData['parent_item'] != 0) {
|
|
$parent = db_get_row_filter('tlayout_data', array('id' => $layoutData['parent_item']));
|
|
|
|
echo '<script type="text/javascript">';
|
|
echo '$(document).ready (function() {
|
|
lines.push({"id": "' . $id . '" , "node_begin":"' . $layoutData['parent_item'] . '","node_end":"' . $id . '","color":"' . visual_map_get_color_line_status($parent) . '","thickness":"' . (empty($config["vc_line_thickness"]) ? 2 : $config["vc_line_thickness"]) . '"});
|
|
});';
|
|
echo '</script>';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The function to get simple value type from the value of process type in the form
|
|
*
|
|
* @param int process simple value from form
|
|
*
|
|
* @return int type among the constants:
|
|
* SIMPLE_VALUE, SIMPLE_VALUE_MAX, SIMPLE_VALUE_MIN, SIMPLE_VALUE_AVG
|
|
*/
|
|
function visual_map_get_simple_value_type($process_simple_value) {
|
|
switch ($process_simple_value) {
|
|
case PROCESS_VALUE_NONE:
|
|
return SIMPLE_VALUE;
|
|
break;
|
|
case PROCESS_VALUE_MIN:
|
|
return SIMPLE_VALUE_MIN;
|
|
break;
|
|
case PROCESS_VALUE_MAX:
|
|
return SIMPLE_VALUE_MAX;
|
|
break;
|
|
case PROCESS_VALUE_AVG:
|
|
return SIMPLE_VALUE_AVG;
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The function to get the simple value of a module
|
|
*
|
|
* @param int type of the retrieving choosed among the constants:
|
|
* SIMPLE_VALUE, SIMPLE_VALUE_MAX, SIMPLE_VALUE_MIN, SIMPLE_VALUE_AVG
|
|
* @param int id agent module
|
|
* @param int period The period in seconds for calculate the avg or min or max value.
|
|
*
|
|
* @return string value retrieved with units
|
|
*/
|
|
function visual_map_get_simple_value($type, $id_module, $period = SECONDS_1DAY) {
|
|
$unit_text = db_get_sql ('SELECT unit
|
|
FROM tagente_modulo WHERE id_agente_modulo = ' . $id_module);
|
|
$unit_text = trim(io_safe_output($unit_text));
|
|
|
|
switch ($type) {
|
|
case SIMPLE_VALUE:
|
|
$value = db_get_value ('datos', 'tagente_estado',
|
|
'id_agente_modulo', $id_module);
|
|
$value = format_for_graph($value, 2);
|
|
if (!empty($unit_text))
|
|
$value .= " " . $unit_text;
|
|
return $value;
|
|
break;
|
|
case SIMPLE_VALUE_MAX:
|
|
$value = reporting_get_agentmodule_data_max ($id_module, $period, 0);
|
|
if ($value === false) {
|
|
$value = __('Unknown');
|
|
}
|
|
else {
|
|
$value = format_for_graph($value, 2);
|
|
if (!empty($unit_text))
|
|
$value .= " " . $unit_text;
|
|
}
|
|
return $value;
|
|
break;
|
|
case SIMPLE_VALUE_MIN:
|
|
$value = reporting_get_agentmodule_data_min ($id_module, $period, 0);
|
|
if ($value === false) {
|
|
$value = __('Unknown');
|
|
}
|
|
else {
|
|
$value = format_for_graph($value, 2);
|
|
if (!empty($unit_text))
|
|
$value .= " " . $unit_text;
|
|
}
|
|
return $value;
|
|
break;
|
|
case SIMPLE_VALUE_AVG:
|
|
$value = reporting_get_agentmodule_data_average ($id_module, $period, 0);
|
|
if ($value === false) {
|
|
$value = __('Unknown');
|
|
}
|
|
else {
|
|
$value = format_for_graph($value, 2);
|
|
if (!empty($unit_text))
|
|
$value .= " " . $unit_text;
|
|
}
|
|
return $value;
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The function to save the new elements of agents make as wizard.
|
|
*
|
|
* @param array $id_agents The list of id of agents.
|
|
* @param string $image The image to set the elements.
|
|
* @param integer $id_layout The id of visual console to insert the elements.
|
|
* @param integer $range The distance between elements.
|
|
* @param integer $width Width of image.
|
|
* @param integer $height Height of image.
|
|
*
|
|
* @return string Return the message status to insert DB.
|
|
*/
|
|
function visual_map_process_wizard_add ($id_agents, $image, $id_layout, $range,
|
|
$width = 0, $height = 0, $period, $process_value, $percentileitem_width,
|
|
$max_value, $type_percentile, $value_show, $type) {
|
|
if (empty ($id_agents)) {
|
|
print_error_message (__('No agents selected'));
|
|
return false;
|
|
}
|
|
|
|
$id_agents = (array) $id_agents;
|
|
|
|
$error = false;
|
|
$pos_y = 10;
|
|
$pos_x = 10;
|
|
foreach ($id_agents as $id_agent) {
|
|
if ($pos_x > 600) {
|
|
$pos_x = 10;
|
|
$pos_y = $pos_y + $range;
|
|
}
|
|
|
|
$value_height = $height;
|
|
$value_image = $image;
|
|
$value_type = $type;
|
|
switch ($type) {
|
|
case PERCENTILE_BAR:
|
|
case PERCENTILE_BUBBLE:
|
|
$value_height = $max_value;
|
|
$value_image = $value_show;
|
|
if ($type_percentile == 'percentile') {
|
|
$value_type = PERCENTILE_BAR;
|
|
}
|
|
else {
|
|
$value_type = PERCENTILE_BUBBLE;
|
|
}
|
|
break;
|
|
case SIMPLE_VALUE:
|
|
$value_type = $process_value;
|
|
break;
|
|
}
|
|
|
|
$values = array ('type' => $value_type,
|
|
'id_layout' => $id_layout,
|
|
'pos_x' => $pos_x,
|
|
'pos_y' => $pos_y,
|
|
'label' => agents_get_name ($id_agent),
|
|
'image' => $value_image,
|
|
'id_agent' => $id_agent,
|
|
'width' => $width,
|
|
'period' => $period,
|
|
'height' => $value_height,
|
|
'label_color' => '#000000');
|
|
|
|
db_process_sql_insert ('tlayout_data', $values);
|
|
|
|
$pos_x = $pos_x + $range;
|
|
}
|
|
|
|
$return = ui_print_success_message (__('Agent successfully added to layout'), '', true);
|
|
|
|
return $return;
|
|
}
|
|
|
|
/**
|
|
* The function to save the new elements of modules make as wizard.
|
|
*
|
|
* @param array $id_modules The list of id of modules.
|
|
* @param string $image The image to set the elements.
|
|
* @param integer $id_layout The id of visual console to insert the elements.
|
|
* @param integer $range The distance between elements.
|
|
* @param integer $width Width of image.
|
|
* @param integer $height Height of image.
|
|
*
|
|
* @return string Return the message status to insert DB.
|
|
*/
|
|
function visual_map_process_wizard_add_modules ($id_modules, $image, $id_layout,
|
|
$range, $width = 0, $height = 0, $period, $process_value, $percentileitem_width,
|
|
$max_value, $type_percentile, $value_show, $label_type, $type, $enable_link = true,
|
|
$id_server = 0, $kind_relationship = VISUAL_MAP_WIZARD_PARENTS_NONE,
|
|
$item_in_the_map = 0) {
|
|
|
|
if (empty ($id_modules)) {
|
|
$return = ui_print_error_message (__('No modules selected'), '', true);
|
|
return $return;
|
|
}
|
|
|
|
$id_modules = (array) $id_modules;
|
|
|
|
$error = false;
|
|
$pos_y = 10;
|
|
$pos_x = 10;
|
|
|
|
foreach ($id_modules as $id_module) {
|
|
if ($pos_x > 600) {
|
|
$pos_x = 10;
|
|
$pos_y = $pos_y + $range;
|
|
}
|
|
|
|
if ($id_server != 0) {
|
|
$connection = db_get_row_filter('tmetaconsole_setup',
|
|
array('id' => $id_server));
|
|
if (metaconsole_load_external_db($connection) != NOERR) {
|
|
$return = ui_print_error_message(
|
|
"Error connecting to " . $server_name, '', true);
|
|
|
|
return $return;
|
|
}
|
|
}
|
|
|
|
$id_agent = modules_get_agentmodule_agent ($id_module);
|
|
|
|
switch ($label_type) {
|
|
case 'agent_module':
|
|
default:
|
|
$agent_label = ui_print_truncate_text(agents_get_name ($id_agent), 'agent_small', false, true, false, '…', false);
|
|
$module_label = ui_print_truncate_text(modules_get_agentmodule_name($id_module), 'module_small', false, true, false, '…', false);
|
|
$label = $agent_label . " - " . $module_label;
|
|
break;
|
|
case 'module':
|
|
$module_label = ui_print_truncate_text(modules_get_agentmodule_name($id_module), 'module_small', false, true, false, '…', false);
|
|
$label = $module_label;
|
|
break;
|
|
case 'agent':
|
|
$agent_label = ui_print_truncate_text(agents_get_name ($id_agent), 'agent_small', false, true, false, '…', false);
|
|
$label = $agent_label;
|
|
break;
|
|
case 'none':
|
|
$label = '';
|
|
break;
|
|
}
|
|
$label = io_safe_input($label);
|
|
|
|
//Restore db connection
|
|
if ($id_server != 0) {
|
|
metaconsole_restore_db();
|
|
}
|
|
|
|
$value_height = $height;
|
|
$value_image = $image;
|
|
$value_type = $type;
|
|
$value_width = $width;
|
|
switch ($type) {
|
|
case PERCENTILE_BAR:
|
|
case PERCENTILE_BUBBLE:
|
|
$value_height = $max_value;
|
|
$value_width = $percentileitem_width;
|
|
$value_image = $value_show;
|
|
if ($type_percentile == 'percentile') {
|
|
$value_type = PERCENTILE_BAR;
|
|
}
|
|
else {
|
|
$value_type = PERCENTILE_BUBBLE;
|
|
}
|
|
break;
|
|
case SIMPLE_VALUE:
|
|
$value_image = '';
|
|
switch ($process_value) {
|
|
case PROCESS_VALUE_NONE:
|
|
$value_type = SIMPLE_VALUE;
|
|
break;
|
|
case PROCESS_VALUE_MIN:
|
|
$value_type = SIMPLE_VALUE_MIN;
|
|
break;
|
|
case PROCESS_VALUE_MAX:
|
|
$value_type = SIMPLE_VALUE_MAX;
|
|
break;
|
|
case PROCESS_VALUE_AVG:
|
|
$value_type = SIMPLE_VALUE_AVG;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
|
|
$parent_item = 0;
|
|
switch ($kind_relationship) {
|
|
case VISUAL_MAP_WIZARD_PARENTS_ITEM_MAP:
|
|
$parent_item = $item_in_the_map;
|
|
break;
|
|
}
|
|
|
|
|
|
$values = array ('type' => $value_type,
|
|
'id_layout' => $id_layout,
|
|
'pos_x' => $pos_x,
|
|
'pos_y' => $pos_y,
|
|
'label' => $label,
|
|
'image' => $value_image,
|
|
'id_agent' => $id_agent,
|
|
'id_agente_modulo' => $id_module,
|
|
'width' => $value_width,
|
|
'period' => $period,
|
|
'height' => $value_height,
|
|
'label_color' => '#000000',
|
|
'enable_link' => $enable_link,
|
|
'id_metaconsole' => $id_server,
|
|
'parent_item' => $parent_item);
|
|
|
|
db_process_sql_insert ('tlayout_data', $values);
|
|
|
|
$pos_x = $pos_x + $range;
|
|
}
|
|
|
|
$return = ui_print_success_message (__('Modules successfully added to layout'), '', true);
|
|
|
|
return $return;
|
|
}
|
|
|
|
/**
|
|
* The function to save the new elements of agents make as wizard.
|
|
*
|
|
* @param array $id_agents The list of id of agents.
|
|
* @param string $image The image to set the elements.
|
|
* @param integer $id_layout The id of visual console to insert the elements.
|
|
* @param integer $range The distance between elements.
|
|
* @param integer $width Width of image.
|
|
* @param integer $height Height of image.
|
|
*
|
|
* @return string Return the message status to insert DB.
|
|
*/
|
|
function visual_map_process_wizard_add_agents ($id_agents, $image, $id_layout,
|
|
$range, $width = 0, $height = 0, $period, $process_value, $percentileitem_width,
|
|
$max_value, $type_percentile, $value_show, $label_type, $type, $enable_link = 1,
|
|
$id_server = 0, $kind_relationship = VISUAL_MAP_WIZARD_PARENTS_NONE,
|
|
$item_in_the_map = 0) {
|
|
|
|
global $config;
|
|
|
|
if (empty ($id_agents)) {
|
|
$return = ui_print_error_message (__('No agents selected'), '', true);
|
|
return $return;
|
|
}
|
|
|
|
$id_agents = (array) $id_agents;
|
|
|
|
$error = false;
|
|
$pos_y = 10;
|
|
$pos_x = 10;
|
|
|
|
$relationship = true;
|
|
$relationships_agents = array();
|
|
//Check if the set a none relationship
|
|
if (($kind_relationship == VISUAL_MAP_WIZARD_PARENTS_NONE) ||
|
|
($kind_relationship == VISUAL_MAP_WIZARD_PARENTS_AGENT_RELANTIONSHIP &&
|
|
$item_in_the_map = 0)) {
|
|
|
|
$relationship = false;
|
|
}
|
|
|
|
foreach ($id_agents as $id_agent) {
|
|
if ($pos_x > 600) {
|
|
$pos_x = 10;
|
|
$pos_y = $pos_y + $range;
|
|
}
|
|
|
|
$value_height = $height;
|
|
$value_image = $image;
|
|
$value_type = $type;
|
|
$value_width = $width;
|
|
|
|
switch ($type) {
|
|
case PERCENTILE_BAR:
|
|
case PERCENTILE_BUBBLE:
|
|
$value_height = $max_value;
|
|
$value_width = $percentileitem_width;
|
|
$value_image = $value_show;
|
|
if ($type_percentile == 'percentile') {
|
|
$value_type = PERCENTILE_BAR;
|
|
}
|
|
else {
|
|
$value_type = PERCENTILE_BUBBLE;
|
|
}
|
|
break;
|
|
case SIMPLE_VALUE:
|
|
$value_image = '';
|
|
switch ($process_value) {
|
|
case PROCESS_VALUE_NONE:
|
|
$value_type = SIMPLE_VALUE;
|
|
break;
|
|
case PROCESS_VALUE_MIN:
|
|
$value_type = SIMPLE_VALUE_MIN;
|
|
break;
|
|
case PROCESS_VALUE_MAX:
|
|
$value_type = SIMPLE_VALUE_MAX;
|
|
break;
|
|
case PROCESS_VALUE_AVG:
|
|
$value_type = SIMPLE_VALUE_AVG;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if ($id_server != 0) {
|
|
$connection = db_get_row_filter('tmetaconsole_setup',
|
|
array('id' => $id_server));
|
|
if (metaconsole_load_external_db($connection) != NOERR) {
|
|
$return = ui_print_error_message(
|
|
"Error connecting to " . $server_name, '', true);
|
|
|
|
return $return;
|
|
}
|
|
}
|
|
|
|
|
|
switch ($label_type) {
|
|
case 'agent':
|
|
$agent_label = ui_print_truncate_text(
|
|
agents_get_name($id_agent),
|
|
'agent_small', false, true, false, '…', false);
|
|
$label = $agent_label;
|
|
break;
|
|
case 'none':
|
|
$label = '';
|
|
break;
|
|
}
|
|
$label = io_safe_input($label);
|
|
|
|
//Restore db connection
|
|
if ($id_server != 0) {
|
|
metaconsole_restore_db();
|
|
}
|
|
|
|
$parent_item = 0;
|
|
if ($relationship) {
|
|
switch ($kind_relationship) {
|
|
case VISUAL_MAP_WIZARD_PARENTS_ITEM_MAP:
|
|
$parent_item = $item_in_the_map;
|
|
break;
|
|
}
|
|
}
|
|
|
|
$values = array ('type' => $value_type,
|
|
'id_layout' => $id_layout,
|
|
'pos_x' => $pos_x,
|
|
'pos_y' => $pos_y,
|
|
'label' => $label,
|
|
'image' => $value_image,
|
|
'id_agent' => $id_agent,
|
|
'id_agente_modulo' => 0,
|
|
'width' => $value_width,
|
|
'period' => $period,
|
|
'height' => $value_height,
|
|
'label_color' => '#000000',
|
|
'enable_link' => $enable_link,
|
|
'id_metaconsole' => $id_server,
|
|
'parent_item' => $parent_item);
|
|
|
|
$id_item = db_process_sql_insert ('tlayout_data', $values);
|
|
|
|
if ($relationship) {
|
|
switch ($kind_relationship) {
|
|
case VISUAL_MAP_WIZARD_PARENTS_AGENT_RELANTIONSHIP:
|
|
|
|
if (!isset($relationships_agents[$id_agent])) {
|
|
$relationships_agents[$id_agent]['id_layout_data_parent'] = $id_item;
|
|
$relationships_agents[$id_agent]['id_layout_data_children'] = array();
|
|
}
|
|
else {
|
|
$relationships_agents[$id_agent]['id_layout_data_parent'] = $id_item;
|
|
}
|
|
|
|
$agent_id_parent = db_get_value('id_parent', 'tagente',
|
|
'id_agente', $id_agent);
|
|
|
|
//Check in the group of new items is the father
|
|
if (array_search($agent_id_parent, $id_agents) !== false) {
|
|
if (isset($relationships_agents[$agent_id_parent])) {
|
|
$relationships_agents[$agent_id_parent]['id_layout_data_children'][] = $id_item;
|
|
}
|
|
else {
|
|
$relationships_agents[$agent_id_parent] = array();
|
|
$relationships_agents[$agent_id_parent]['id_layout_data_parent'] = null;
|
|
$relationships_agents[$agent_id_parent]['id_layout_data_children'] = array();
|
|
$relationships_agents[$agent_id_parent]['id_layout_data_children'][] = $id_item;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
$pos_x = $pos_x + $range;
|
|
}
|
|
|
|
foreach ($relationships_agents as $relationship_item) {
|
|
foreach ($relationship_item['id_layout_data_children'] as $children) {
|
|
db_process_sql_update('tlayout_data',
|
|
array('parent_item' => $relationship_item['id_layout_data_parent']),
|
|
array('id' => $children));
|
|
}
|
|
}
|
|
|
|
$return = ui_print_success_message(
|
|
__('Agents successfully added to layout'), '', true);
|
|
|
|
return $return;
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the color of line between elements in the visual map.
|
|
*
|
|
* @param array $layoutData The row of element in DB.
|
|
*
|
|
* @return string The color as hexadecimal color in html.
|
|
*/
|
|
function visual_map_get_color_line_status($layoutData) {
|
|
if (($layoutData['type'] == 5) || ($layoutData['type'] == 4)) {
|
|
//ICON ELEMENT OR LABEL ELEMENT
|
|
$color = "#cccccc";
|
|
}
|
|
else {
|
|
switch (visual_map_get_status_element($layoutData)) {
|
|
case 3:
|
|
$color = "#cccccc"; // Gray
|
|
break;
|
|
case 2:
|
|
$color = "#20f6f6"; // Yellow
|
|
break;
|
|
case 0:
|
|
$color = "#00ff00"; // Green
|
|
break;
|
|
case 4:
|
|
case 1:
|
|
$color = "#ff0000"; // Red
|
|
break;
|
|
}
|
|
}
|
|
|
|
return $color;
|
|
}
|
|
|
|
/**
|
|
* Get image of element in the visual console with status.
|
|
*
|
|
* @param array $layoutData The row of element in DB.
|
|
*
|
|
* @return string The image with the relative path to pandora console directory.
|
|
*/
|
|
function visual_map_get_image_status_element($layoutData, $status = false) {
|
|
$img = "images/console/icons/" . $layoutData["image"];
|
|
|
|
if ($layoutData['type'] == 5) {
|
|
//ICON ELEMENT
|
|
$img .= ".png";
|
|
}
|
|
else {
|
|
if ($status === false) {
|
|
$status = visual_map_get_status_element($layoutData);
|
|
}
|
|
|
|
switch ($status) {
|
|
case 1:
|
|
//Critical (BAD)
|
|
$img .= "_bad.png";
|
|
break;
|
|
case 4:
|
|
//Critical (ALERT)
|
|
$img = "4" . $img . "_bad.png";
|
|
break;
|
|
case 0:
|
|
//Normal (OK)
|
|
$img .= "_ok.png";
|
|
break;
|
|
case 2:
|
|
//Warning
|
|
$img .= "_warning.png";
|
|
break;
|
|
case 10:
|
|
//Warning (ALERT)
|
|
$img = "4" . $img . "_warning.png";
|
|
break;
|
|
case 3:
|
|
//Unknown
|
|
default:
|
|
$img .= ".png";
|
|
// Default is Grey (Other)
|
|
}
|
|
}
|
|
|
|
return $img;
|
|
}
|
|
|
|
/**
|
|
* Get the status of element in visual console. Check the agent state or
|
|
* module or layout linked.
|
|
*
|
|
* @param array $layoutData The row of element in DB.
|
|
*
|
|
* @return integer
|
|
*/
|
|
function visual_map_get_status_element($layoutData) {
|
|
enterprise_include_once('include/functions_visual_map.php');
|
|
|
|
if (enterprise_installed()) {
|
|
$status = enterprise_visual_map_get_status_element($layoutData);
|
|
|
|
//The function return value.
|
|
if ($status !== false) {
|
|
//Return this value as call of open function.
|
|
return $status;
|
|
}
|
|
}
|
|
|
|
//Linked to other layout ?? - Only if not module defined
|
|
if ($layoutData['id_layout_linked'] != 0) {
|
|
$status = visual_map_get_layout_status ($layoutData['id_layout_linked']);
|
|
}
|
|
else {
|
|
switch ($layoutData["type"]) {
|
|
case STATIC_GRAPH:
|
|
case PERCENTILE_BAR:
|
|
case PERCENTILE_BUBBLE:
|
|
if ($layoutData['id_metaconsole'] != 0) {
|
|
//Metaconsole db connection
|
|
$connection = db_get_row_filter ('tmetaconsole_setup',
|
|
array('id' => $layoutData['id_metaconsole']));
|
|
if (metaconsole_load_external_db($connection) != NOERR) {
|
|
//ui_print_error_message ("Error connecting to ".$server_name);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//Status for a simple module
|
|
if ($layoutData['id_agente_modulo'] != 0) {
|
|
$status = modules_get_agentmodule_status ($layoutData['id_agente_modulo']);
|
|
|
|
//We need to get the diference between warning and critical alerts!!!
|
|
$real_status = db_get_row ("tagente_estado", "id_agente_modulo", $layoutData["id_agente_modulo"]);
|
|
|
|
//Status for a whole agent, if agente_modulo was == 0
|
|
}
|
|
else if ($layoutData['id_agent'] != 0) {
|
|
|
|
//--------------------------------------------------
|
|
// ADDED NO CHECK ACL FOR AVOID CHECK TAGS THAT
|
|
// MAKE VERY SLOW THE VISUALMAPS WITH ACL TAGS
|
|
//--------------------------------------------------
|
|
$status = agents_get_status ($layoutData["id_agent"], true);
|
|
|
|
if ($status == -1) // agents_get_status return -1 for unknown!
|
|
$status = VISUAL_MAP_STATUS_UNKNOWN;
|
|
}
|
|
else {
|
|
$status = VISUAL_MAP_STATUS_UNKNOWN;
|
|
$id_agent = 0;
|
|
}
|
|
|
|
if ($layoutData['id_metaconsole'] != 0) {
|
|
//Restore db connection
|
|
metaconsole_restore_db();
|
|
}
|
|
break;
|
|
|
|
case GROUP_ITEM:
|
|
$group_status = groups_get_status($layoutData['id_group']);
|
|
|
|
switch ($group_status) {
|
|
case AGENT_STATUS_ALERT_FIRED:
|
|
return VISUAL_MAP_STATUS_CRITICAL_ALERT;
|
|
break;
|
|
case AGENT_STATUS_CRITICAL:
|
|
return VISUAL_MAP_STATUS_CRITICAL_BAD;
|
|
break;
|
|
case AGENT_STATUS_WARNING:
|
|
return VISUAL_MAP_STATUS_WARNING;
|
|
break;
|
|
case AGENT_STATUS_UNKNOWN:
|
|
return VISUAL_MAP_STATUS_UNKNOWN;
|
|
break;
|
|
case AGENT_STATUS_NORMAL:
|
|
default:
|
|
return VISUAL_MAP_STATUS_NORMAL;
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
//If it's a graph, a progress bar or a data tag, ALWAYS report status OK
|
|
//(=0) to avoid confussions here.
|
|
$status = VISUAL_MAP_STATUS_NORMAL;
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
switch ($status) {
|
|
case AGENT_MODULE_STATUS_CRITICAL_ALERT:
|
|
$status = VISUAL_MAP_STATUS_CRITICAL_ALERT;
|
|
break;
|
|
case AGENT_MODULE_STATUS_WARNING_ALERT:
|
|
$status = VISUAL_MAP_STATUS_WARNING_ALERT;
|
|
break;
|
|
}
|
|
|
|
return $status;
|
|
}
|
|
|
|
/**
|
|
* Prints visual map
|
|
*
|
|
* @param int $id_layout Layout id
|
|
* @param bool $show_links
|
|
* @param bool $draw_lines
|
|
*/
|
|
function visual_map_print_visual_map ($id_layout, $show_links = true,
|
|
$draw_lines = true, $width = null, $height = null, $home_url = '') {
|
|
|
|
enterprise_include_once('include/functions_visual_map.php');
|
|
|
|
//TODO: USE THE SAME CODE THAT THE VISUAL MAP EDITOR
|
|
global $config;
|
|
|
|
$metaconsole_hack = '/';
|
|
if (defined('METACONSOLE')) {
|
|
$metaconsole_hack = '../../';
|
|
}
|
|
|
|
enterprise_include_once("meta/include/functions_ui_meta.php");
|
|
|
|
require_once ($config["homedir"] . '/include/functions_custom_graphs.php');
|
|
|
|
$layout = db_get_row ('tlayout', 'id', $id_layout);
|
|
|
|
if (empty($layout)) {
|
|
ui_print_error_message(__('Cannot load the visualmap'));
|
|
return;
|
|
}
|
|
|
|
$resizedMap = false;
|
|
$proportion = 1;
|
|
if (!is_null($width)) {
|
|
$resizedMap = true;
|
|
if (!is_null($height)) {
|
|
$mapWidth = $width;
|
|
$mapHeight = $height;
|
|
}
|
|
else {
|
|
$mapWidth = $width;
|
|
$proportion = $width / $layout["width"];
|
|
$mapHeight = $proportion * $layout["height"];
|
|
}
|
|
|
|
if (defined('METACONSOLE')) {
|
|
$backgroundImage =
|
|
'/include/Image/image_functions.php?getFile=1&thumb=1&thumb_size=' . $mapWidth . 'x' . $mapHeight . '&file=' .
|
|
$config['homeurl'] . 'images/console/background/' .
|
|
io_safe_input ($layout["background"]);
|
|
}
|
|
else {
|
|
$backgroundImage =
|
|
'/include/Image/image_functions.php?getFile=1&thumb=1&thumb_size=' . $mapWidth . 'x' . $mapHeight . '&file=' .
|
|
$config['homedir'] . '/images/console/background/' .
|
|
io_safe_input ($layout["background"]);
|
|
}
|
|
}
|
|
else {
|
|
$mapWidth = $layout["width"];
|
|
$mapHeight = $layout["height"];
|
|
$backgroundImage = $metaconsole_hack . 'images/console/background/' .
|
|
io_safe_input ($layout["background"]);
|
|
}
|
|
|
|
if (defined('METACONSOLE')) {
|
|
echo "<div style='width: 920px; overflow:auto; margin: 0 auto;'>";
|
|
}
|
|
|
|
echo '<div id="layout_map"
|
|
style="margin:0px auto;
|
|
text-align:center;
|
|
z-index: 0;
|
|
position:relative;
|
|
width:' . $mapWidth . 'px;
|
|
height:' . $mapHeight . 'px;">';
|
|
echo "<img src='" .
|
|
ui_get_full_url($backgroundImage) . "' width='100%' height='100%' />";
|
|
|
|
|
|
$layout_datas = db_get_all_rows_field_filter('tlayout_data',
|
|
'id_layout', $id_layout);
|
|
if (empty($layout_datas))
|
|
$layout_datas = array();
|
|
|
|
$lines = array ();
|
|
|
|
foreach ($layout_datas as $layout_data) {
|
|
if ($resizedMap) {
|
|
//Hack to resize the text
|
|
$layout_data["label"] = str_replace(
|
|
'visual_font_size', 'resize_visual_font_size', $layout_data["label"]);
|
|
}
|
|
|
|
//Check the items are from disabled or pending delete modules
|
|
if ($layout_data['id_agente_modulo'] != 0 &&
|
|
(($layout_data['type'] != LABEL)
|
|
|| ($layout_data['type'] != ICON)
|
|
|| ($layout_data['type'] != SERVICE))) {
|
|
|
|
$delete_pending_module = db_get_value ("delete_pending",
|
|
"tagente_modulo", "id_agente_modulo",
|
|
$layout_data["id_agente_modulo"]);
|
|
$disabled_module = db_get_value ("disabled", "tagente_modulo",
|
|
"id_agente_modulo", $layout_data["id_agente_modulo"]);
|
|
|
|
if ($delete_pending_module == 1 || $disabled_module == 1)
|
|
continue;
|
|
}
|
|
|
|
$layout_data['label'] = io_safe_output($layout_data['label']);
|
|
|
|
|
|
|
|
// *************************************************************
|
|
// Get parent status (Could be an agent, module, map,
|
|
// others doesnt have parent info)
|
|
// *************************************************************
|
|
|
|
|
|
if ($layout_data["parent_item"] != 0) {
|
|
$layout_data_parent = db_get_row_filter('tlayout_data',
|
|
array('id' => $layout_data["parent_item"]));
|
|
|
|
$status_parent =
|
|
visual_map_get_status_element($layout_data_parent);
|
|
|
|
$line['id'] = $layout_data['id'];
|
|
$line['node_begin'] = 'layout-data-' . $layout_data["parent_item"];
|
|
$line['node_end'] = 'layout-data-' . $layout_data["id"];
|
|
$line['thickness'] = empty($config["vc_line_thickness"]) ? 2 : $config["vc_line_thickness"];
|
|
switch ($status_parent) {
|
|
default:
|
|
case VISUAL_MAP_STATUS_UNKNOWN:
|
|
$line["color"] = COL_UNKNOWN; // Gray
|
|
break;
|
|
case VISUAL_MAP_STATUS_WARNING:
|
|
$line["color"] = COL_WARNING; // Yellow
|
|
break;
|
|
case VISUAL_MAP_STATUS_NORMAL:
|
|
$line["color"] = COL_NORMAL; // Green
|
|
break;
|
|
case VISUAL_MAP_STATUS_CRITICAL_ALERT:
|
|
case VISUAL_MAP_STATUS_CRITICAL_BAD:
|
|
$line["color"] = COL_CRITICAL; // Red
|
|
break;
|
|
}
|
|
array_push ($lines, $line);
|
|
}
|
|
|
|
// *************************************************************
|
|
// Get STATUS of current object
|
|
// *************************************************************
|
|
$status = visual_map_get_status_element($layout_data);
|
|
|
|
|
|
switch ($status) {
|
|
case VISUAL_MAP_STATUS_CRITICAL_BAD:
|
|
//Critical (BAD)
|
|
$colorStatus = COL_CRITICAL;
|
|
break;
|
|
case VISUAL_MAP_STATUS_CRITICAL_ALERT:
|
|
//Critical (ALERT)
|
|
$colorStatus = COL_ALERTFIRED;
|
|
break;
|
|
case VISUAL_MAP_STATUS_NORMAL:
|
|
//Normal (OK)
|
|
$colorStatus = COL_NORMAL;
|
|
break;
|
|
case VISUAL_MAP_STATUS_WARNING:
|
|
//Warning
|
|
$colorStatus = COL_WARNING;
|
|
break;
|
|
case VISUAL_MAP_STATUS_UNKNOWN:
|
|
default:
|
|
//Unknown
|
|
$colorStatus = COL_UNKNOWN;
|
|
// Default is Grey (Other)
|
|
break;
|
|
}
|
|
|
|
switch ($layout_data['type']) {
|
|
case GROUP_ITEM:
|
|
case STATIC_GRAPH:
|
|
if ($status == VISUAL_MAP_STATUS_CRITICAL_BAD)
|
|
$z_index = 3;
|
|
elseif ($status == VISUAL_MAP_STATUS_WARNING)
|
|
$z_index = 2;
|
|
elseif ($status == VISUAL_MAP_STATUS_CRITICAL_ALERT)
|
|
$z_index = 4;
|
|
else
|
|
$z_index = 1;
|
|
|
|
// Draw image
|
|
if ($resizedMap)
|
|
echo '<div style="left: 0px; top: 0px; text-align: center; z-index: '.$z_index.'; '.($layout_data['label_color'][0] == '#' ? 'color: '.$layout_data['label_color'].';' : '').' position: absolute; margin-left: '.((integer)($proportion * $layout_data['pos_x'])).'px; margin-top:'.((integer)($proportion * $layout_data['pos_y'])).'px;" id="layout-data-'.$layout_data['id'].'" class="layout-data">';
|
|
else
|
|
echo '<div style="left: 0px; top: 0px; text-align: center; z-index: '.$z_index.'; '.($layout_data['label_color'][0] == '#' ? 'color: '.$layout_data['label_color'].';' : '').' position: absolute; margin-left: '.$layout_data['pos_x'].'px; margin-top:'.$layout_data['pos_y'].'px;" id="layout-data-'.$layout_data['id'].'" class="layout-data">';
|
|
|
|
if ($show_links) {
|
|
if ((!empty($layout_data['id_agent'])
|
|
&& empty($layout_data['id_layout_linked']))
|
|
|| ($layout_data['type'] == GROUP_ITEM)) {
|
|
|
|
if ($layout_data['enable_link']
|
|
&& can_user_access_node()) {
|
|
|
|
$id_service = false;
|
|
if (!defined('METACONSOLE')) {
|
|
//Extract id service if it is a prediction module.
|
|
$id_service = db_get_value_filter(
|
|
'custom_integer_1',
|
|
'tagente_modulo',
|
|
array('id_agente_modulo' => $layout_data['id_agente_modulo'],
|
|
'prediction_module' => 1));
|
|
}
|
|
|
|
if ($layout_data['type'] == GROUP_ITEM) {
|
|
$url = $config['homeurl'] .
|
|
'index.php?sec=estado&sec2=operation/agentes/estado_agente&group_id=' .
|
|
$layout_data['id_group'];
|
|
}
|
|
else if (!empty($id_service)) {
|
|
//Link to an service page
|
|
if (empty($layout_data['id_metaconsole'])) {
|
|
$url = $config['homeurl'] .
|
|
'index.php?sec=services&sec2=enterprise/operation/services/services&id_service=' .
|
|
$id_service . '&offset=0';
|
|
}
|
|
else {
|
|
$server = db_get_row('tmetaconsole_setup',
|
|
'id', $layout_data['id_metaconsole']);
|
|
|
|
$url = $server["server_url"] . "/" .
|
|
'index.php?sec=services&sec2=enterprise/operation/services/services&id_service=' .
|
|
$id_service . '&offset=0';
|
|
}
|
|
}
|
|
else if ($layout_data['id_agente_modulo'] != 0) {
|
|
// Link to an module
|
|
if (empty($layout_data['id_metaconsole'])) {
|
|
$url = $config['homeurl'] .
|
|
'index.php?sec=estado&sec2=operation/agentes/status_monitor&id_module=' . $layout_data['id_agente_modulo'];
|
|
}
|
|
else {
|
|
$url = ui_meta_get_url_console_child(
|
|
$layout_data['id_metaconsole'],
|
|
"estado", "operation/agentes/ver_agente&id_agente=" . $layout_data['id_agent']);
|
|
}
|
|
}
|
|
else {
|
|
// Link to an agent
|
|
if (empty($layout_data['id_metaconsole'])) {
|
|
$url = $config['homeurl'] .
|
|
'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=' . $layout_data['id_agent'];
|
|
}
|
|
else {
|
|
$url = ui_meta_get_url_console_child(
|
|
$layout_data['id_metaconsole'],
|
|
"estado", "operation/agentes/ver_agente&id_agente=" . $layout_data['id_agent']);
|
|
}
|
|
}
|
|
|
|
echo '<a href="' . $url . '">';
|
|
}
|
|
}
|
|
elseif ($layout_data['id_layout_linked'] > 0) {
|
|
// Link to a map
|
|
if (empty($layout_data['id_metaconsole'])) {
|
|
$url_vc = $config['homeurl'] . "index.php?sec=reporting&sec2=operation/visual_console/render_view&pure=" . $config["pure"] . "&id=" . $layout_data["id_layout_linked"];
|
|
}
|
|
else {
|
|
$url_vc = "index.php?sec=screen&sec2=screens/screens&action=visualmap&pure=1&id_visualmap=" . $layout_data["id_layout_linked"] . "&refr=0";
|
|
}
|
|
|
|
echo "<a href=\"$url_vc\">";
|
|
}
|
|
else {
|
|
// A void object
|
|
echo '<a href="#">';
|
|
}
|
|
}
|
|
|
|
$img_style = array ();
|
|
|
|
$img_style["title"] = strip_tags($layout_data["label"]);
|
|
if ($layout_data['type'] == STATIC_GRAPH) {
|
|
if ($layout_data['id_agente_modulo'] != 0) {
|
|
$unit_text = trim(io_safe_output(
|
|
modules_get_unit($layout_data['id_agente_modulo'])));
|
|
|
|
$value = modules_get_last_value($layout_data['id_agente_modulo']);
|
|
|
|
if (!is_string($value)) {
|
|
$value = format_for_graph($value, 2);
|
|
}
|
|
|
|
if (!empty($unit_text))
|
|
$value .= " " . $unit_text;
|
|
|
|
$img_style["title"] .= " <br>" . __("Last value: ") .
|
|
$value;
|
|
}
|
|
}
|
|
|
|
|
|
if (!empty ($layout_data["width"])) {
|
|
$img_style["width"] = $layout_data["width"];
|
|
}
|
|
if (!empty ($layout_data["height"])) {
|
|
$img_style["height"] = $layout_data["height"];
|
|
}
|
|
|
|
$img = "images/console/icons/" . $layout_data["image"];
|
|
|
|
switch ($status) {
|
|
case VISUAL_MAP_STATUS_CRITICAL_BAD:
|
|
$img .= "_bad.png";
|
|
break;
|
|
case VISUAL_MAP_STATUS_CRITICAL_ALERT:
|
|
$img = "4" . $img . "_bad.png";
|
|
break;
|
|
case VISUAL_MAP_STATUS_WARNING_ALERT:
|
|
$img = "4" . $img . "_warning.png";
|
|
break;
|
|
case VISUAL_MAP_STATUS_NORMAL:
|
|
$img .= "_ok.png";
|
|
break;
|
|
case VISUAL_MAP_STATUS_WARNING:
|
|
$img .= "_warning.png";
|
|
break;
|
|
case VISUAL_MAP_STATUS_UNKNOWN:
|
|
default:
|
|
// Default is Grey (Other)
|
|
$img .= ".png";
|
|
break;
|
|
}
|
|
|
|
$borderStyle = '';
|
|
if (substr($img,0,1) == '4') {
|
|
$img_style['border'] = '2px solid ' . COL_ALERTFIRED .';';
|
|
$img = substr_replace($img, '', 0,1);
|
|
}
|
|
|
|
if (is_file($config['homedir'] . '/' . $img))
|
|
$infoImage = getimagesize($config['homedir'] . '/' . $img);
|
|
|
|
if (!empty ($layout_data["width"])) {
|
|
if ($resizedMap)
|
|
$img_style["width"] = (integer)($proportion * $layout_data["width"]);
|
|
else
|
|
$img_style["width"] = $layout_data["width"];
|
|
}
|
|
else
|
|
$img_style["width"] = (integer)($proportion * $infoImage[0]);
|
|
|
|
if (!empty ($layout_data["height"])) {
|
|
if ($resizedMap)
|
|
$img_style["height"] = (integer)($proportion * $img_style["height"]);
|
|
else
|
|
$img_style["height"] = $layout_data["height"];
|
|
}
|
|
else
|
|
$img_style["height"] = (integer)($proportion * $infoImage[1]);
|
|
|
|
html_print_image ($metaconsole_hack . $img, false, $img_style);
|
|
|
|
// Print label if valid label_color (only testing for starting with #) otherwise print nothing
|
|
if ($layout_data['label_color'][0] == '#') {
|
|
echo "<br />";
|
|
echo io_safe_output($layout_data['label']);
|
|
}
|
|
echo "</div>";
|
|
|
|
echo "</a>";
|
|
break;
|
|
|
|
|
|
|
|
case LABEL:
|
|
$z_index = 4;
|
|
if ($resizedMap)
|
|
echo '<div style="left: 0px; top: 0px; text-align: left; z-index: '.$z_index.'; '.($layout_data['label_color'][0] == '#' ? 'color: '.$layout_data['label_color'].';' : '').' position: absolute; margin-left: '.((integer)($proportion * $layout_data['pos_x'])).'px; margin-top:'.((integer)($proportion * $layout_data['pos_y'])).'px;" id="layout-data-'.$layout_data['id'].'" class="layout-data">';
|
|
else
|
|
echo '<div style="left: 0px; top: 0px; text-align: left; z-index: '.$z_index.'; '.($layout_data['label_color'][0] == '#' ? 'color: '.$layout_data['label_color'].';' : '').' position: absolute; margin-left: '.$layout_data['pos_x'].'px; margin-top:'.$layout_data['pos_y'].'px;" id="layout-data-'.$layout_data['id'].'" class="layout-data">';
|
|
|
|
$endTagA = false;
|
|
if ($show_links) {
|
|
if ($layout_data['id_layout_linked'] > 0) {
|
|
// Link to a map
|
|
echo '<a style="' .
|
|
(
|
|
$layout_data['label_color'][0] == '#' ?
|
|
'color: '.$layout_data['label_color'].';'
|
|
:
|
|
''
|
|
) . '" href="index.php?sec=reporting&sec2=operation/visual_console/render_view&pure='.$config["pure"].'&id='.$layout_data["id_layout_linked"].'">';
|
|
$endTagA = true;
|
|
}
|
|
}
|
|
if ($layout_data['label_color'][0] == '#') {
|
|
echo "<br />";
|
|
echo io_safe_output($layout_data['label']);
|
|
}
|
|
if ($endTagA) echo "</a>";
|
|
echo "</div>";
|
|
break;
|
|
|
|
|
|
|
|
case ICON:
|
|
$z_index = 4;
|
|
if ($resizedMap)
|
|
echo '<div style="left: 0px; top: 0px; text-align: center; z-index: '.$z_index.'; '.($layout_data['label_color'][0] == '#' ? 'color: '.$layout_data['label_color'].';' : '').' position: absolute; margin-left: '.((integer)($proportion * $layout_data['pos_x'])).'px; margin-top:'.((integer)($proportion * $layout_data['pos_y'])).'px;" id="layout-data-'.$layout_data['id'].'" class="layout-data">';
|
|
else
|
|
echo '<div style="left: 0px; top: 0px; text-align: center; z-index: '.$z_index.'; '.($layout_data['label_color'][0] == '#' ? 'color: '.$layout_data['label_color'].';' : '').' position: absolute; margin-left: '.$layout_data['pos_x'].'px; margin-top:'.$layout_data['pos_y'].'px;" id="layout-data-'.$layout_data['id'].'" class="layout-data">';
|
|
|
|
$endTagA = false;
|
|
if ($show_links) {
|
|
$url_icon = "";
|
|
if ($layout_data['id_layout_linked'] > 0) {
|
|
// Link to a map
|
|
if (empty($layout_data['id_metaconsole'])) {
|
|
echo '<a href="index.php?sec=reporting&sec2=operation/visual_console/render_view&pure='.$config["pure"].'&id='.$layout_data["id_layout_linked"].'">';
|
|
}
|
|
else {
|
|
$pure = get_parameter('pure', 0);
|
|
echo '<a href="index.php?sec=screen&sec2=screens/screens&action=visualmap&pure=' . $pure . '&id_visualmap=' . $layout_data["id_layout_linked"] . '&refr=0">';
|
|
}
|
|
$endTagA = true;
|
|
}
|
|
elseif (preg_match('/<a.*href=["\'](.*)["\']>/', $layout_data['label'], $matches)) {
|
|
// Link to an URL
|
|
if ($layout_data['enable_link']) {
|
|
$url_icon = strip_tags($matches[1]);
|
|
|
|
echo '<a style="' . ($layout_data['label_color'][0] == '#' ? 'color: '.$layout_data['label_color'].';' : '') . '" href="' . $url_icon .'">';
|
|
$endTagA = true;
|
|
}
|
|
}
|
|
elseif (preg_match('/^.*(http:\/\/)((.)+).*$/i', $layout_data['label'])) {
|
|
// Link to an URL
|
|
if ($layout_data['enable_link']) {
|
|
$url_icon = strip_tags($layout_data['label']);
|
|
|
|
echo '<a style="' . ($layout_data['label_color'][0] == '#' ? 'color: '.$layout_data['label_color'].';' : '') . '" href="' . $url_icon .'">';
|
|
$endTagA = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
$img_style = array ();
|
|
$img_style["title"] = strip_tags($layout_data["label"]);
|
|
|
|
if (!empty ($layout_data["width"])) {
|
|
$img_style["width"] = $layout_data["width"];
|
|
}
|
|
if (!empty ($layout_data["height"])) {
|
|
$img_style["height"] = $layout_data["height"];
|
|
}
|
|
|
|
$img = "images/console/icons/".$layout_data["image"] . ".png";
|
|
|
|
if (is_file($config['homedir'] . '/' . $img))
|
|
$infoImage = getimagesize($config['homedir'] . '/' . $img);
|
|
|
|
if (!empty ($layout_data["width"])) {
|
|
if ($resizedMap)
|
|
$img_style["width"] = (integer)($proportion * $layout_data["width"]);
|
|
else
|
|
$img_style["width"] = $layout_data["width"];
|
|
}
|
|
else
|
|
$img_style["width"] = (integer)($proportion * $infoImage[0]);
|
|
|
|
if (!empty ($layout_data["height"])) {
|
|
if ($resizedMap)
|
|
$img_style["height"] = (integer)($proportion * $img_style["height"]);
|
|
else
|
|
$img_style["height"] = $layout_data["height"];
|
|
}
|
|
else
|
|
$img_style["height"] = (integer)($proportion * $infoImage[1]);
|
|
|
|
html_print_image ($metaconsole_hack . $img, false, $img_style);
|
|
|
|
if ($endTagA) echo "</a>";
|
|
|
|
echo "</div>";
|
|
break;
|
|
|
|
|
|
|
|
case SIMPLE_VALUE:
|
|
case SIMPLE_VALUE_MAX:
|
|
case SIMPLE_VALUE_MIN:
|
|
case SIMPLE_VALUE_AVG:
|
|
|
|
|
|
//Metaconsole db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
$connection = db_get_row_filter ('tmetaconsole_setup',
|
|
array('id' => $layout_data['id_metaconsole']));
|
|
if (metaconsole_load_external_db($connection) != NOERR) {
|
|
//ui_print_error_message ("Error connecting to ".$server_name);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$unit_text = db_get_sql ('SELECT unit
|
|
FROM tagente_modulo
|
|
WHERE id_agente_modulo = ' . $layout_data['id_agente_modulo']);
|
|
|
|
//Restore db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
metaconsole_restore_db();
|
|
}
|
|
|
|
|
|
$unit_text = trim(io_safe_output($unit_text));
|
|
|
|
if ($resizedMap)
|
|
echo '<div style="left: 0px; top: 0px; z-index: 1; color: '.$layout_data['label_color'].'; position: absolute; margin-left: '.((integer)($proportion *$layout_data['pos_x'])).'px; margin-top:'.((integer)($proportion *$layout_data['pos_y'])).'px;" id="layout-data-'.$layout_data['id'].'" class="layout-data">';
|
|
else
|
|
echo '<div style="left: 0px; top: 0px; z-index: 1; color: '.$layout_data['label_color'].'; position: absolute; margin-left: '.$layout_data['pos_x'].'px; margin-top:'.$layout_data['pos_y'].'px;" id="layout-data-'.$layout_data['id'].'" class="layout-data">';
|
|
|
|
$endTagA = false;
|
|
|
|
|
|
if ($show_links) {
|
|
//Extract id service if it is a prediction module.
|
|
$id_service = db_get_value_filter('custom_integer_1',
|
|
'tagente_modulo',
|
|
array('id_agente_modulo' => $layout_data['id_agente_modulo'],
|
|
'prediction_module' => 1));
|
|
|
|
if (!empty($id_service) && can_user_access_node()) {
|
|
|
|
if ($layout_data['enable_link']) {
|
|
//Link to an service page
|
|
if (!empty($layout_data['id_metaconsole'])) {
|
|
$server = db_get_row('tmetaconsole_setup',
|
|
'id', $layout_data['id_metaconsole']);
|
|
|
|
echo '<a href="' .
|
|
$server["server_url"] . "/" .
|
|
'index.php?sec=services&sec2=enterprise/operation/services/services&id_service=' .
|
|
$id_service . '&offset=0">';
|
|
}
|
|
else {
|
|
echo '<a href="index.php?sec=services&sec2=enterprise/operation/services/services&id_service=' .
|
|
$id_service . '&offset=0">';
|
|
}
|
|
|
|
|
|
$endTagA = true;
|
|
}
|
|
|
|
}
|
|
elseif ($layout_data['id_layout_linked'] > 0) {
|
|
|
|
// Link to a map
|
|
if (empty($layout_data['id_metaconsole'])) {
|
|
echo '<a href="index.php?sec=reporting&sec2=operation/visual_console/render_view&pure='.$config["pure"].'&id='.$layout_data["id_layout_linked"].'">';
|
|
}
|
|
else {
|
|
$pure = get_parameter('pure', 0);
|
|
echo '<a href="index.php?sec=screen&sec2=screens/screens&action=visualmap&pure=' . $pure . '&id_visualmap=' . $layout_data["id_layout_linked"] . '&refr=0">';
|
|
}
|
|
$endTagA = true;
|
|
}
|
|
}
|
|
|
|
$label_simple_value = io_safe_output($layout_data['label']);
|
|
if (strstr($label_simple_value, '(_VALUE_)') === false) {
|
|
//OLD MODE
|
|
$label_simple_value = '<strong>' . $label_simple_value . ' ';
|
|
}
|
|
else {
|
|
//NEW MODE WITH MACRO (_VALUE_)
|
|
}
|
|
|
|
|
|
//TODO: change interface to add a period parameter, now is set to 1 day
|
|
switch ($layout_data['type']) {
|
|
case SIMPLE_VALUE:
|
|
//Metaconsole db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
$connection = db_get_row_filter ('tmetaconsole_setup',
|
|
array('id' => $layout_data['id_metaconsole']));
|
|
if (metaconsole_load_external_db($connection) != NOERR) {
|
|
//ui_print_error_message ("Error connecting to ".$server_name);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$value = db_get_value ('datos',
|
|
'tagente_estado', 'id_agente_modulo', $layout_data['id_agente_modulo']);
|
|
|
|
//Restore db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
metaconsole_restore_db();
|
|
}
|
|
|
|
// If the value is a string, dont format it
|
|
if (!is_string($value)) {
|
|
$value = format_for_graph($value, 2);
|
|
}
|
|
|
|
if (!empty($unit_text))
|
|
$value .= " " . $unit_text;
|
|
break;
|
|
case SIMPLE_VALUE_MAX:
|
|
|
|
|
|
//Metaconsole db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
$connection = db_get_row_filter ('tmetaconsole_setup',
|
|
array('id' => $layout_data['id_metaconsole']));
|
|
if (metaconsole_load_external_db($connection) != NOERR) {
|
|
//ui_print_error_message ("Error connecting to ".$server_name);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$value = reporting_get_agentmodule_data_max(
|
|
$layout_data['id_agente_modulo'],
|
|
$layout_data['period'], 0);
|
|
|
|
//Restore db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
metaconsole_restore_db();
|
|
}
|
|
|
|
|
|
if ($value === false) {
|
|
$value = __('Unknown');
|
|
}
|
|
else {
|
|
$value = format_for_graph($value, 2);
|
|
if (!empty($unit_text))
|
|
$value .= " " . $unit_text;
|
|
}
|
|
break;
|
|
case SIMPLE_VALUE_MIN:
|
|
|
|
|
|
//Metaconsole db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
$connection = db_get_row_filter ('tmetaconsole_setup',
|
|
array('id' => $layout_data['id_metaconsole']));
|
|
if (metaconsole_load_external_db($connection) != NOERR) {
|
|
//ui_print_error_message ("Error connecting to ".$server_name);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$value = reporting_get_agentmodule_data_min(
|
|
$layout_data['id_agente_modulo'],
|
|
$layout_data['period'], 0);
|
|
|
|
//Restore db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
metaconsole_restore_db();
|
|
}
|
|
|
|
|
|
if ($value === false) {
|
|
$value = __('Unknown');
|
|
}
|
|
else {
|
|
$value = format_for_graph($value, 2);
|
|
if (!empty($unit_text))
|
|
$value .= " " . $unit_text;
|
|
}
|
|
break;
|
|
case SIMPLE_VALUE_AVG:
|
|
|
|
|
|
//Metaconsole db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
$connection = db_get_row_filter ('tmetaconsole_setup',
|
|
array('id' => $layout_data['id_metaconsole']));
|
|
if (metaconsole_load_external_db($connection) != NOERR) {
|
|
//ui_print_error_message ("Error connecting to ".$server_name);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$value = reporting_get_agentmodule_data_average(
|
|
$layout_data['id_agente_modulo'],
|
|
$layout_data['period'], 0);
|
|
|
|
//Restore db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
metaconsole_restore_db();
|
|
}
|
|
|
|
|
|
|
|
if ($value === false) {
|
|
$value = __('Unknown');
|
|
}
|
|
else {
|
|
$value = format_for_graph($value, 2);
|
|
if (!empty($unit_text))
|
|
$value .= " " . $unit_text;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (strstr($label_simple_value, '(_VALUE_)') === false) {
|
|
//OLD MODE
|
|
$label_simple_value .= $value . '</strong>';
|
|
}
|
|
else {
|
|
//NEW MODE WITH MACRO (_VALUE_)
|
|
|
|
$label_simple_value = str_replace('(_VALUE_)',
|
|
$value, $label_simple_value);
|
|
}
|
|
|
|
echo $label_simple_value;
|
|
|
|
if ($endTagA) echo '</a>';
|
|
|
|
echo '</div>';
|
|
break;
|
|
|
|
|
|
|
|
case PERCENTILE_BAR:
|
|
case PERCENTILE_BUBBLE:
|
|
|
|
|
|
if ($resizedMap)
|
|
echo '<div style="left: 0px; top: 0px; text-align: center; z-index: 1; color: '.$layout_data['label_color'].'; position: absolute; margin-left: '.((integer)($proportion *$layout_data['pos_x'])).'px; margin-top:'.((integer)($proportion *$layout_data['pos_y'])).'px;" id="layout-data-'.$layout_data['id'].'" class="layout-data">';
|
|
else
|
|
echo '<div style="left: 0px; top: 0px; text-align: center; z-index: 1; color: '.$layout_data['label_color'].'; position: absolute; margin-left: '.$layout_data['pos_x'].'px; margin-top:'.$layout_data['pos_y'].'px;" id="layout-data-'.$layout_data['id'].'" class="layout-data">';
|
|
|
|
|
|
//Metaconsole db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
$connection = db_get_row_filter ('tmetaconsole_setup',
|
|
array('id' => $layout_data['id_metaconsole']));
|
|
if (metaconsole_load_external_db($connection) != NOERR) {
|
|
//ui_print_error_message ("Error connecting to ".$server_name);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$valor = db_get_sql ('SELECT datos
|
|
FROM tagente_estado
|
|
WHERE id_agente_modulo = '.$layout_data['id_agente_modulo']);
|
|
|
|
$unit_text = db_get_sql ('SELECT unit
|
|
FROM tagente_modulo
|
|
WHERE id_agente_modulo = ' . $layout_data['id_agente_modulo']);
|
|
|
|
//Restore db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
metaconsole_restore_db();
|
|
}
|
|
|
|
|
|
$width = $layout_data['width'];
|
|
if ( $layout_data['height'] > 0)
|
|
$percentile = $valor / $layout_data['height'] * 100;
|
|
else
|
|
$percentile = 100;
|
|
|
|
$percentile = round($percentile);
|
|
|
|
$endTagA = false;
|
|
|
|
echo io_safe_output($layout_data['label']);
|
|
echo "<br>";
|
|
|
|
if ($show_links) {
|
|
if (!empty($layout_data['id_agent'])
|
|
&& empty($layout_data['id_layout_linked'])) {
|
|
|
|
|
|
if ($layout_data['enable_link']
|
|
&& can_user_access_node()) {
|
|
|
|
//Extract id service if it is a prediction module.
|
|
$id_service = db_get_value_filter('custom_integer_1',
|
|
'tagente_modulo',
|
|
array(
|
|
'id_agente_modulo' => $layout_data['id_agente_modulo'],
|
|
'prediction_module' => 1));
|
|
|
|
if ($id_service === false) {
|
|
$id_service = 0;
|
|
}
|
|
|
|
if ($id_service != 0) {
|
|
//Link to an service page
|
|
|
|
if (!empty($layout_data['id_metaconsole'])) {
|
|
$server = db_get_row('tmetaconsole_setup',
|
|
'id', $layout_data['id_metaconsole']);
|
|
|
|
echo '<a href="' .
|
|
$server["server_url"] . "/" .
|
|
'index.php?sec=services&sec2=enterprise/operation/services/services&id_service=' .
|
|
$id_service . '&offset=0">';
|
|
}
|
|
else {
|
|
echo '<a href="index.php?sec=services&sec2=enterprise/operation/services/services&id_service=' .
|
|
$id_service . '&offset=0">';
|
|
}
|
|
$endTagA = true;
|
|
}
|
|
else if ($layout_data['id_agente_modulo'] != 0) {
|
|
// Link to an module
|
|
if (!empty($layout_data['id_metaconsole'])) {
|
|
$server = db_get_row('tmetaconsole_setup',
|
|
'id', $layout_data['id_metaconsole']);
|
|
|
|
echo '<a href="' .
|
|
$server["server_url"] .
|
|
'/index.php?sec=estado&sec2=operation/agentes/status_monitor&id_module=' . $layout_data['id_agente_modulo'] . '">';
|
|
}
|
|
else {
|
|
echo '<a href="'.$config['homeurl'].'/index.php?sec=estado&sec2=operation/agentes/status_monitor&id_module=' . $layout_data['id_agente_modulo'] . '">';
|
|
}
|
|
$endTagA = true;
|
|
}
|
|
else {
|
|
// Link to an agent
|
|
if (empty($layout_data['id_metaconsole'])) {
|
|
$url = $config['homeurl'] .
|
|
'index.php?' .
|
|
'sec=estado&' .
|
|
'sec2=operation/agentes/ver_agente&id_agente='.$layout_data['id_agent'];
|
|
}
|
|
else {
|
|
$url = ui_meta_get_url_console_child(
|
|
$layout_data['id_metaconsole'],
|
|
"estado", 'operation/agentes/ver_agente&id_agente='.$layout_data['id_agent']);
|
|
}
|
|
echo '<a href="' . $url .'">';
|
|
$endTagA = true;
|
|
}
|
|
}
|
|
}
|
|
elseif ($layout_data['id_layout_linked'] > 0) {
|
|
|
|
// Link to a map
|
|
if (empty($layout_data['id_metaconsole'])) {
|
|
echo '<a href="index.php?sec=reporting&sec2=operation/visual_console/render_view&pure='.$config["pure"].'&id='.$layout_data["id_layout_linked"].'">';
|
|
}
|
|
else {
|
|
$pure = get_parameter('pure', 0);
|
|
echo '<a href="index.php?sec=screen&sec2=screens/screens&action=visualmap&pure=' . $pure . '&id_visualmap=' . $layout_data["id_layout_linked"] . '&refr=0">';
|
|
}
|
|
$endTagA = true;
|
|
|
|
}
|
|
else {
|
|
// A void object
|
|
echo '<a href="#">';
|
|
$endTagA = true;
|
|
}
|
|
}
|
|
|
|
$value_text = false;
|
|
if ($layout_data['image'] == 'percent') {
|
|
$value_text = false;
|
|
}
|
|
elseif ($layout_data['image'] == 'value') {
|
|
$unit_text = trim(io_safe_output($unit_text));
|
|
|
|
$value_text = format_for_graph($valor, 2);
|
|
if (!empty($unit_text))
|
|
$value_text .= " " . $unit_text;
|
|
}
|
|
|
|
if ($layout_data['type'] == 9) {
|
|
if ($resizedMap)
|
|
echo progress_bubble($percentile, ((integer)($proportion * $width)), $width, '', 1, $value_text, $colorStatus);
|
|
else
|
|
echo progress_bubble($percentile, $width, $width, '', 1, $value_text, $colorStatus);
|
|
}
|
|
else {
|
|
if ($resizedMap)
|
|
echo progress_bar($percentile, ((integer)($proportion * $width)), 15, '', 1, $value_text, $colorStatus);
|
|
else
|
|
echo progress_bar($percentile, $width, 15, '', 1, $value_text, $colorStatus);
|
|
}
|
|
|
|
if ($endTagA) echo '</a>';
|
|
|
|
echo '</div>';
|
|
break;
|
|
|
|
|
|
|
|
case MODULE_GRAPH:
|
|
if ($resizedMap) {
|
|
$layout_data['width'] =
|
|
((integer)($proportion * $layout_data['width']));
|
|
$layout_data['height'] =
|
|
((integer)($proportion * $layout_data['height']));
|
|
$layout_data['pos_x'] =
|
|
((integer)($proportion * $layout_data['pos_x']));
|
|
$layout_data['pos_y'] =
|
|
((integer)($proportion * $layout_data['pos_y']));
|
|
}
|
|
|
|
echo '<div style="left: 0px; top: 0px; text-align: center; z-index: 1; color: '.$layout_data['label_color'].'; position: absolute; margin-left: '.$layout_data['pos_x'].'px; margin-top:'.$layout_data['pos_y'].'px;" id="layout-data-'.$layout_data['id'].'" class="layout-data">';
|
|
|
|
echo io_safe_output($layout_data['label']);
|
|
echo "<br>";
|
|
|
|
$endTagA = false;
|
|
|
|
if ($show_links) {
|
|
if ((
|
|
($layout_data['id_layout_linked'] == "")
|
|
|| ($layout_data['id_layout_linked'] == 0))
|
|
&& can_user_access_node()) {
|
|
|
|
if ($layout_data['enable_link']) {
|
|
|
|
//Extract id service if it is a prediction module.
|
|
$id_service = db_get_value_filter('custom_integer_1',
|
|
'tagente_modulo',
|
|
array('id_agente_modulo' => $layout_data['id_agente_modulo'],
|
|
'prediction_module' => 1));
|
|
|
|
if ($id_service === false) {
|
|
$id_service = 0;
|
|
}
|
|
|
|
if ($id_service != 0) {
|
|
//Link to an service page
|
|
if (!empty($layout_data['id_metaconsole'])) {
|
|
$server = db_get_row('tmetaconsole_setup',
|
|
'id', $layout_data['id_metaconsole']);
|
|
|
|
echo '<a href="' .
|
|
$server["server_url"] .
|
|
'/index.php?sec=services&sec2=enterprise/operation/services/services&id_service=' .
|
|
$id_service . '&offset=0">';
|
|
}
|
|
else {
|
|
echo '<a href="'.$config['homeurl'].'/index.php?sec=services&sec2=enterprise/operation/services/services&id_service=' .
|
|
$id_service . '&offset=0">';
|
|
}
|
|
}
|
|
else {
|
|
if (empty($layout_data['id_metaconsole'])) {
|
|
echo '<a href="'.$config['homeurl'].'/index.php?sec=estado&sec2=operation/agentes/status_monitor&id_module=' . $layout_data['id_agente_modulo'] . '">';
|
|
}
|
|
else {
|
|
$url = ui_meta_get_url_console_child(
|
|
$layout_data['id_metaconsole'],
|
|
"estado", 'operation/agentes/ver_agente&id_agente='.$layout_data["id_agent"].'&tab=data');
|
|
echo '<a href="' . $url . '">';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
// Link to a map
|
|
if (empty($layout_data['id_metaconsole'])) {
|
|
echo '<a href="'.$config['homeurl'].'/index.php?sec=reporting&sec2=operation/visual_console/render_view&pure='.$config["pure"].'&id='.$layout_data["id_layout_linked"].'">';
|
|
}
|
|
else {
|
|
$pure = get_parameter('pure', 0);
|
|
echo '<a href="'.$config['homeurl'].'/index.php?sec=screen&sec2=screens/screens&action=visualmap&pure=' . $pure . '&id_visualmap=' . $layout_data["id_layout_linked"] . '&refr=0">';
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//Metaconsole db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
$connection = db_get_row_filter ('tmetaconsole_setup',
|
|
array('id' => $layout_data['id_metaconsole']));
|
|
if (metaconsole_load_external_db($connection) != NOERR) {
|
|
//ui_print_error_message ("Error connecting to ".$server_name);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
// ATTENTION: DO NOT USE & here because is bad-translated and doesnt work
|
|
// resulting fault image links :(
|
|
|
|
if ($layout_data['id_custom_graph'] != 0) {
|
|
custom_graphs_print(
|
|
$layout_data['id_custom_graph'],
|
|
$layout_data['height'],
|
|
$layout_data['width'],
|
|
$layout_data['period'], null, false,
|
|
0, true, $layout_data['image']);
|
|
}
|
|
else {
|
|
echo grafico_modulo_sparse ($layout_data['id_agente_modulo'], $layout_data['period'],
|
|
false, $layout_data['width'], $layout_data['height'],
|
|
'', null, false, 1, false, 0, '', 0, 0, true, true, $home_url, 1, false, '', false,
|
|
false, true, $layout_data['image']);
|
|
}
|
|
//Restore db connection
|
|
if ($layout_data['id_metaconsole'] != 0) {
|
|
metaconsole_restore_db();
|
|
}
|
|
|
|
|
|
echo "</a>";
|
|
echo "</div>";
|
|
break;
|
|
default:
|
|
enterprise_hook("enterprise_visual_map_print_item",
|
|
array($layout_data, $status, $colorStatus,
|
|
'operation', $resizedMap, $proportion));
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ($draw_lines) {
|
|
/* If you want lines in the map, call using Javascript:
|
|
draw_lines (lines, id_div);
|
|
on body load, where id_div is the id of the div which holds the map */
|
|
echo '<script type="text/javascript">/* <![CDATA[ */'."\n";
|
|
|
|
if ($resizedMap) {
|
|
echo 'var resize_map = 1;'."\n";
|
|
}
|
|
else {
|
|
echo 'var resize_map = 0;'."\n";
|
|
}
|
|
|
|
echo 'var lines = Array ();'."\n";
|
|
|
|
foreach ($lines as $line) {
|
|
echo 'lines.push (eval (' . json_encode ($line) . '));' . "\n";
|
|
}
|
|
echo '/* ]]> */</script>';
|
|
}
|
|
// End main div
|
|
echo "</div>";
|
|
|
|
|
|
|
|
if (defined('METACONSOLE')) {
|
|
echo "</div>";
|
|
}
|
|
|
|
}
|
|
//End function
|
|
|
|
|
|
|
|
//Start function
|
|
/**
|
|
* Get a list with the layouts for a user.
|
|
*
|
|
* @param int User id.
|
|
* @param bool Wheter to return all the fields or only the name (to use in
|
|
* html_print_select() directly)
|
|
* @param array Additional filters to filter the layouts.
|
|
* @param bool Whether to return All group or not.
|
|
*
|
|
* @return array A list of layouts the user can see.
|
|
*/
|
|
function visual_map_get_user_layouts ($id_user = 0, $only_names = false, $filter = false, $returnAllGroup = true) {
|
|
if (! is_array ($filter))
|
|
$filter = array ();
|
|
|
|
$where = db_format_array_where_clause_sql ($filter);
|
|
|
|
if ($returnAllGroup)
|
|
$groups = users_get_groups ($id_user, 'RR');
|
|
else
|
|
$groups = users_get_groups ($id_user, 'RR', false);
|
|
|
|
if (!empty($groups)) {
|
|
if ($where != '') {
|
|
$where .= ' AND ';
|
|
}
|
|
$where .= sprintf ('id_group IN (%s)', implode (",", array_keys ($groups)));
|
|
}
|
|
|
|
if ($where == '') {
|
|
$where = array();
|
|
}
|
|
|
|
$layouts = db_get_all_rows_filter ('tlayout', $where);
|
|
|
|
if ($layouts == false)
|
|
return array ();
|
|
|
|
$retval = array ();
|
|
foreach ($layouts as $layout) {
|
|
if ($only_names)
|
|
$retval[$layout['id']] = $layout['name'];
|
|
else
|
|
$retval[$layout['id']] = $layout;
|
|
}
|
|
|
|
return $retval;
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the status of a layout.
|
|
*
|
|
* It gets all the data of the contained elements (including nested
|
|
* layouts), and makes an AND operation to be sure that all the items
|
|
* are OK. If any of them is down, then result is down (0)
|
|
*
|
|
* @param int Id of the layout
|
|
* @param int Depth (for recursion control)
|
|
*
|
|
* @return bool The status of the given layout. True if it's OK, false if not.
|
|
*/
|
|
function visual_map_get_layout_status ($id_layout = 0, $depth = 0) {
|
|
$temp_status = VISUAL_MAP_STATUS_NORMAL;
|
|
$temp_total = VISUAL_MAP_STATUS_NORMAL;
|
|
$depth++; // For recursion depth checking
|
|
|
|
// TODO: Implement this limit as a configurable item in setup
|
|
if ($depth > 10) {
|
|
return VISUAL_MAP_STATUS_UNKNOWN; // No status data if we need to exit by a excesive recursion
|
|
}
|
|
|
|
$id_layout = (int) $id_layout;
|
|
|
|
$result = db_get_all_rows_filter ('tlayout_data', array ('id_layout' => $id_layout),
|
|
array ('id_agente_modulo', 'parent_item', 'id_layout_linked', 'id_agent', 'type', 'id_group'));
|
|
if ($result === false)
|
|
return VISUAL_MAP_STATUS_NORMAL;
|
|
|
|
foreach ($result as $rownum => $data) {
|
|
if (($data["id_layout_linked"] == 0 && $data["type"] != 11 && $data["id_agente_modulo"] == 0 && $data["id_agent"] == 0) || ($data["type"] != 0 && $data["type"] !=11 ))
|
|
continue;
|
|
|
|
|
|
// Groups (slerena, 30 Dec 2014)
|
|
if (($data["id_layout_linked"] == 0) && ($data["type"] == 11)){
|
|
|
|
$group_status = groups_get_status($data['id_group']);
|
|
switch ($group_status) {
|
|
case AGENT_STATUS_ALERT_FIRED:
|
|
$status = VISUAL_MAP_STATUS_CRITICAL_ALERT;
|
|
break;
|
|
case AGENT_STATUS_CRITICAL:
|
|
$status = VISUAL_MAP_STATUS_CRITICAL_BAD;
|
|
break;
|
|
case AGENT_STATUS_WARNING:
|
|
$status = VISUAL_MAP_STATUS_WARNING;
|
|
break;
|
|
case AGENT_STATUS_UNKNOWN:
|
|
$status = VISUAL_MAP_STATUS_UNKNOWN;
|
|
break;
|
|
case AGENT_STATUS_NORMAL:
|
|
default:
|
|
$status = VISUAL_MAP_STATUS_NORMAL;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Other Layout (Recursive!)
|
|
if (($data["id_layout_linked"] != 0) && ($data["id_agente_modulo"] == 0)) {
|
|
$status = visual_map_get_layout_status ($data["id_layout_linked"], $depth);
|
|
}
|
|
// Module
|
|
elseif ($data["id_agente_modulo"] != 0) {
|
|
$status = modules_get_agentmodule_status ($data["id_agente_modulo"]);
|
|
|
|
}
|
|
// Agent
|
|
elseif ($data["type"]!=11) {
|
|
//--------------------------------------------------
|
|
// ADDED NO CHECK ACL FOR AVOID CHECK TAGS THAT
|
|
// MAKE VERY SLOW THE VISUALMAPS WITH ACL TAGS
|
|
//--------------------------------------------------
|
|
|
|
$status = agents_get_status ($data["id_agent"], true);
|
|
}
|
|
if ($status == VISUAL_MAP_STATUS_CRITICAL_BAD)
|
|
return VISUAL_MAP_STATUS_CRITICAL_BAD;
|
|
if ($status > $temp_total)
|
|
$temp_total = $status;
|
|
|
|
}
|
|
|
|
return $temp_total;
|
|
}
|
|
|
|
/**
|
|
* Make a text for the parent select, when the label is not empty put this for
|
|
* the return text. Instead for the empty labels make the text with next form
|
|
* (<Type>) - <name_image> ( <agent_name> - <module_name> ) (<id item>)
|
|
*
|
|
* @param string $label The label of item in visual map.
|
|
* @param string $type The label of type in visual map.
|
|
* @param string $image The image of item in visual map.
|
|
* @param string $agent The agent name of item in visual map.
|
|
* @param string $id_module The module name of item in visual map.
|
|
* @param int $idData The id of item in visual map.
|
|
*
|
|
* @return string The text for the parent.
|
|
*/
|
|
function visual_map_create_internal_name_item($label = null, $type, $image, $agent = null, $id_module, $idData) {
|
|
$text = '';
|
|
|
|
if (empty($label))
|
|
{
|
|
switch ($type) {
|
|
case 'module_graph':
|
|
case MODULE_GRAPH:
|
|
$text = __('Module graph');
|
|
break;
|
|
case 'percentile_bar':
|
|
case PERCENTILE_BAR:
|
|
$text = __('Percentile bar');
|
|
break;
|
|
case 'static_graph':
|
|
case STATIC_GRAPH:
|
|
$text = __('Static graph') . " - " .
|
|
$image;
|
|
break;
|
|
case 'simple_value':
|
|
case SIMPLE_VALUE:
|
|
$text = __('Simple Value');
|
|
break;
|
|
case 'label':
|
|
case LABEL:
|
|
$text = __('Label');
|
|
break;
|
|
case GROUP_ITEM:
|
|
case 'group_item':
|
|
$text = __('Group') . " - ";
|
|
break;
|
|
case 'icon':
|
|
case ICON:
|
|
$text = __('Icon') . " - " .
|
|
$image;
|
|
break;
|
|
}
|
|
|
|
if (!empty($agent)) {
|
|
$text .= " (" . ui_print_truncate_text($agent, 'agent_small', false);
|
|
|
|
$moduleName = io_safe_output(db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $id_module));
|
|
if (!empty($moduleName)) {
|
|
$text .= " - " . ui_print_truncate_text($moduleName, 'module_small', false);
|
|
}
|
|
|
|
$text .= ")";
|
|
}
|
|
$text .= ' (' . $idData . ')';
|
|
}
|
|
else {
|
|
$text = $label;
|
|
}
|
|
|
|
return io_safe_output($text);
|
|
}
|
|
|
|
function visual_map_get_items_parents($idVisual) {
|
|
$items = db_get_all_rows_filter('tlayout_data',array('id_layout' => $idVisual));
|
|
if ($items == false) {
|
|
$items = array();
|
|
}
|
|
|
|
$return = array();
|
|
foreach ($items as $item) {
|
|
$agent = null;
|
|
if ($item['id_agent'] != 0) {
|
|
$agent = io_safe_output(agents_get_name($item['id_agent']));
|
|
}
|
|
|
|
$return[$item['id']] = visual_map_create_internal_name_item(
|
|
$item['label'],
|
|
$item['type'],
|
|
$item['image'],
|
|
$agent,
|
|
$item['id_agente_modulo'],
|
|
$item['id']);
|
|
}
|
|
|
|
return $return;
|
|
}
|
|
|
|
/**
|
|
* Get the X axis coordinate of a layout item
|
|
*
|
|
* @param int Id of the layout to get.
|
|
*
|
|
* @return int The X axis coordinate value.
|
|
*/
|
|
function visual_map_get_layoutdata_x ($id_layoutdata) {
|
|
return (float) db_get_value ('pos_x', 'tlayout_data', 'id', (int) $id_layoutdata);
|
|
}
|
|
|
|
/**
|
|
* Get the Y axis coordinate of a layout item
|
|
*
|
|
* @param int Id of the layout to get.
|
|
*
|
|
* @return int The Y axis coordinate value.
|
|
*/
|
|
function visual_map_get_layoutdata_y ($id_layoutdata){
|
|
return (float) db_get_value ('pos_y', 'tlayout_data', 'id', (int) $id_layoutdata);
|
|
}
|
|
|
|
?>
|