600) {
$pos_x = 10;
$pos_y = $pos_y + $range;
}
process_sql_insert ('tlayout_data',
array ('id_layout' => $id_layout,
'pos_x' => $pos_x,
'pos_y' => $pos_y,
'label' => get_agent_name ($id_agent),
'image' => $image,
'id_agent' => $id_agent,
'width' => $width,
'height' => $height,
'label_color' => '#000000')
);
$pos_x = $pos_x + $range;
}
$return = print_success_message (__('Agent successfully added to layout'), '', true);
return $return;
}
function process_wizard_add_modules ($id_modules, $image, $id_layout, $range, $width = 0, $height = 0) {
if (empty ($id_modules)) {
print_error_message (__('No modules selected'));
return false;
}
$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;
}
$id_agent = get_agentmodule_agent ($id_module);
process_sql_insert ('tlayout_data',
array ('id_layout' => $id_layout,
'pos_x' => $pos_x,
'pos_y' => $pos_y,
'label' => get_agentmodule_name ($id_module),
'image' => $image,
'id_agent' => $id_agent,
'id_agente_modulo' => $id_module,
'width' => $width,
'height' => $height,
'label_color' => '#000000')
);
$pos_x = $pos_x + $range;
}
$return = print_success_message (__('Modules successfully added to layout'), '', true);
return $return;
}
function getColorLineStatus($layoutData) {
switch (getStatusElement($layoutData)) {
case 3:
$color = "#ccc"; // Gray
break;
case 2:
$color = "#20f6f6"; // Yellow
break;
case 0:
$color = "#00ff00"; // Green
break;
case 4:
case 1:
$color = "#ff0000"; // Red
break;
}
return $color;
}
function getImageStatusElement($layoutData) {
$img = "images/console/icons/" . $layoutData["image"];
switch (getStatusElement($layoutData)) {
case 1:
case 4:
//Critical (BAD or ALERT)
$img .= "_bad.png";
break;
case 0:
//Normal (OK)
$img .= "_ok.png";
break;
case 2:
//Warning
$img .= "_warning.png";
break;
default:
$img .= ".png";
// Default is Grey (Other)
}
return $img;
}
function getStatusElement($layoutData) {
//Linked to other layout ?? - Only if not module defined
if ($layoutData['id_layout_linked'] != 0) {
$status = get_layout_status ($layoutData['id_layout_linked']);
}
else if ($layoutData["type"] == 0) { //Single object
//Status for a simple module
if ($layoutData['id_agente_modulo'] != 0) {
$status = get_agentmodule_status ($layoutData['id_agente_modulo']);
//Status for a whole agent, if agente_modulo was == 0
}
else if ($layoutData['id_agent'] != 0) {
$status = get_agent_status ($layoutData["id_agent"]);
if ($status == -1) // get_agent_status return -1 for unknown!
$status = 3;
}
else {
$status = 3;
$id_agent = 0;
}
}
else {
//If it's a graph, a progress bar or a data tag, ALWAYS report status OK
//(=0) to avoid confussions here.
$status = 0;
}
return $status;
}
/**
* Prints visual map
*
* @param int $id_layout Layout id
* @param bool $show_links
* @param bool $draw_lines
*/
function print_pandora_visual_map ($id_layout, $show_links = true, $draw_lines = true, $width = null, $height = null) {
global $config;
$layout = get_db_row ('tlayout', 'id', $id_layout);
$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"];
}
$backgroundImage = 'include/Image/image_functions.php?getFile=1&thumb=1&thumb_size=' . $mapWidth . 'x' . $mapHeight . '&file=' .
$config['homeurl'] . '/' . 'images/console/background/'.safe_input ($layout["background"]);
}
else {
$mapWidth = $layout["width"];
$mapHeight = $layout["height"];
$backgroundImage = 'images/console/background/'.safe_input ($layout["background"]);
}
echo '
';
$layout_datas = get_db_all_rows_field_filter ('tlayout_data', 'id_layout', $id_layout);
$lines = array ();
if ($layout_datas !== false) {
foreach ($layout_datas as $layout_data) {
// ****************************************************************
// Get parent status (Could be an agent, module, map, others doesnt have parent info)
// ****************************************************************
if ($layout_data["parent_item"] != 0){
$id_agent_module_parent = get_db_value ("id_agente_modulo", "tlayout_data", "id", $layout_data["parent_item"]);
$id_agent_parent = get_db_value ("id_agent", "tlayout_data", "id", $layout_data["parent_item"]);
$id_layout_linked = get_db_value ("id_layout_linked", "tlayout_data", "id", $layout_data["parent_item"]);
// Module
if ($id_agent_module_parent != 0) {
$status_parent = get_agentmodule_status ($id_agent_module_parent);
// Agent
}
elseif ($id_agent_parent != 0) {
$status_parent = get_agent_status ($id_agent_parent);
}
// Another layout/map
elseif ($id_layout_linked != 0) {
$status_parent = get_layout_status ($id_layout_linked);
}
else {
$status_parent = 3;
}
} else {
$id_agent_module_parent = 0;
$status_parent = 3;
}
// ****************************************************************
// Get STATUS of current object
// ****************************************************************
// Linked to other layout ?? - Only if not module defined
if ($layout_data['id_layout_linked'] != 0) {
$status = get_layout_status ($layout_data['id_layout_linked']);
// Single object
} elseif ($layout_data["type"] == 0) {
// Status for a simple module
if ($layout_data['id_agente_modulo'] != 0) {
$status = get_agentmodule_status ($layout_data['id_agente_modulo']);
$id_agent = get_db_value ("id_agente", "tagente_estado", "id_agente_modulo", $layout_data['id_agente_modulo']);
// Status for a whole agent, if agente_modulo was == 0
} elseif ($layout_data['id_agent'] != 0) {
$status = get_agent_status ($layout_data["id_agent"]);
if ($status == -1) // get_agent_status return -1 for unknown!
$status = 3;
$id_agent = $layout_data["id_agent"];
} else {
$status = 3;
$id_agent = 0;
}
} else {
// If it's a graph, a progress bar or a data tag, ALWAYS report
// status OK (=0) to avoid confussions here.
$status = 0;
}
// ****************************************************************
// STATIC IMAGE (type = 0)
// ****************************************************************
if ($layout_data['type'] == 0) {
// Link image
//index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=1
if ($status == 0) // Bad monitor
$z_index = 3;
elseif ($status == 2) // Warning
$z_index = 2;
elseif ($status == 4) // Alert
$z_index = 4;
else
$z_index = 1; // Print BAD over good
// Draw image
if ($resizedMap)
echo '
';
else
echo '
";
}
// ****************************************************************
// SIMPLE DATA VALUE (type = 2)
// ****************************************************************
switch ($layout_data['type']) {
case 2:
if ($resizedMap)
echo '
';
else
echo '
';
echo ''.$layout_data['label']. ' ';
echo get_db_value ('datos', 'tagente_estado', 'id_agente_modulo', $layout_data['id_agente_modulo']);
echo '
';
break;
// ****************************************************************
// Progress bar
// ****************************************************************
case 3:
// Percentile bar (type = 3)
if ($resizedMap)
echo '
';
else
echo '
';
$valor = get_db_sql ('SELECT datos FROM tagente_estado WHERE id_agente_modulo = '.$layout_data['id_agente_modulo']);
$width = $layout_data['width'];
if ( $layout_data['height'] > 0)
$percentile = $valor / $layout_data['height'] * 100;
else
$percentile = 100;
echo $layout_data['label'];
echo "
";
if ($resizedMap)
echo "
($proportion * $width))."&mode=1&percent=$percentile)
";
else
echo "

";
echo '
';
//}
break;
// ****************************************************************
// Single module graph
// ****************************************************************
case 1;
// SINGLE GRAPH (type = 1)
if ($resizedMap)
echo '
';
else
echo '
";
break;
}
// Line, not implemented in editor
/*
} elseif ($layout_data['type'] == 2) {
$line['id'] = $layout_data['id'];
$line['x'] = $layout_data['pos_x'];
$line['y'] = $layout_data['pos_y'];
$line['width'] = $layout_data['width'];
$line['height'] = $layout_data['height'];
$line['color'] = $layout_data['label_color'];
array_push ($lines, $line);
}
*/
// ****************************************************************
// Lines joining objects
// ****************************************************************
// Get parent relationship - Create line data
if ($layout_data["parent_item"] != "" && $layout_data["parent_item"] != 0) {
$line['id'] = $layout_data['id'];
$line['node_begin'] = 'layout-data-'.$layout_data["parent_item"];
$line['node_end'] = 'layout-data-'.$layout_data["id"];
switch ($status_parent) {
case 3: $line["color"] = "#ccc"; // Gray
break;
case 2: $line["color"] = "#20f6f6"; // Yellow
break;
case 0: $line["color"] = "#00ff00"; // Green
break;
case 4:
case 1: $line["color"] = "#ff0000"; // Red
break;
}
array_push ($lines, $line);
}
}
}
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 '';
}
// End main div
echo "
";
}
/**
* @return array Layout data types
*/
function get_layout_data_types () {
$types = array ();
$types[0] = __('Static graph');
$types[1] = __('Module graph');
$types[2] = __('Simple value');
$types[3] = __('Percentile bar');
return $types;
}
/**
* 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
* print_select() directly)
* @param array Additional filters to filter the layouts.
*
* @return array A list of layouts the user can see.
*/
function get_user_layouts ($id_user = 0, $only_names = false, $filter = false) {
if (! is_array ($filter))
$filter = array ();
$where = format_array_to_where_clause_sql ($filter);
if ($where != '') {
$where .= ' AND ';
}
$groups = get_user_groups ($id_user);
$where .= sprintf ('id_group IN (%s)', implode (",", array_keys ($groups)));
$layouts = get_db_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 get_layout_status ($id_layout = 0, $depth = 0) {
$temp_status = 0;
$temp_total = 0;
$depth++; // For recursion depth checking
// TODO: Implement this limit as a configurable item in setup
if ($depth > 10){
return 3; // No status data if we need to exit by a excesive recursion
}
$id_layout = (int) $id_layout;
$sql = sprintf ('SELECT id_agente_modulo, parent_item, id_layout_linked, id_agent
FROM `tlayout_data` WHERE `id_layout` = %d', $id_layout);
$result = get_db_all_rows_filter ('tlayout_data', array ('id_layout' => $id_layout),
array ('id_agente_modulo', 'parent_item', 'id_layout_linked', 'id_agent'));
if ($result === false)
return 0;
foreach ($result as $rownum => $data) {
if ($data["id_layout_linked"] == 0 && $data["id_agente_modulo"] == 0 && $data["id_agent"] == 0)
continue;
// Other Layout (Recursive!)
if (($data["id_layout_linked"] != 0) && ($data["id_agente_modulo"] == 0)) {
$status = get_layout_status ($data["id_layout_linked"], $depth);
// Module
} elseif ($data["id_agente_modulo"] != 0) {
$status = get_agentmodule_status ($data["id_agente_modulo"]);
// Agent
} else {
$status = get_agent_status ($data["id_agent"]);
}
if ($status == 1)
return 1;
if ($status > $temp_total)
$temp_total = $status;
}
return $temp_total;
}
?>