'; echo $text; echo ''; echo ''; } function visual_map_print_user_line_handles($layoutData) { $id = $layoutData['id']; $start_x = $layoutData['pos_x']; $start_y = $layoutData['pos_y']; $end_x = $layoutData['width']; $end_y = $layoutData['height']; $z_index = 2; $sizeStyle = ''; $radious_handle = (12 / 2); // Handle of start echo '
'; html_print_image('images/dot_red.png'); echo '
'; // Handle of end echo '
'; html_print_image('images/dot_green.png'); echo '
'; } function visual_map_print_item( $mode='read', $layoutData, $proportion=null, $show_links=true, $isExternalLink=false, $graph_javascript=true ) { global $config; include_once $config['homedir'].'/include/functions_graph.php'; include_once $config['homedir'].'/include/functions_custom_graphs.php'; // add 60 px for visual console map $width = $layoutData['width']; $height = $layoutData['height']; $max_percentile = $layoutData['height']; $top = $layoutData['pos_y']; $left = $layoutData['pos_x']; $id = $layoutData['id']; $label = io_safe_output($layoutData['label']); $id_module = $layoutData['id_agente_modulo']; $type = $layoutData['type']; $period = $layoutData['period']; $type_graph = $layoutData['type_graph']; $border_width = $layoutData['border_width']; $border_color = $layoutData['border_color']; $fill_color = $layoutData['fill_color']; $label_position = $layoutData['label_position']; $show_on_top = $layoutData['show_on_top']; $clock_animation = $layoutData['clock_animation']; $time_format = $layoutData['time_format']; $timezone = $layoutData['timezone']; if ($show_on_top) { $show_on_top_index = 10; } else { $show_on_top_index = ''; } $sizeStyle = ''; $borderStyle = ''; $imageSize = ''; if (!empty($proportion)) { $top = ($top * $proportion['proportion_height']); $left = ($left * $proportion['proportion_width']); } $text = ''.$label.''; if ($height == 0) { switch ($type) { case 0: case 11: $tableheight0 = '70'; break; case 3: $tableheight0 = '30'; break; case 9: $tableheight0 = '130'; break; case 1: $tableheight0 = '180'; break; case SERVICE: $tableheight0 = '50'; break; } } else { $tableheight0 = $height; } if ($layoutData['width'] == 0) { switch ($type) { case 19: if ($layoutData['clock_animation'] == 'analogic_1') { $himg = '200'; $wimg = '200'; } else { $himg = '60'; $wimg = '200'; } break; } } else { switch ($type) { case 19: if ($layoutData['clock_animation'] == 'analogic_1') { $himg = $width; $wimg = $width; } else { $himg = ($width / 3.9); $wimg = $width; } break; } } if ($layoutData['width'] == 0 || $layoutData['height'] == 0) { switch ($type) { case 0: case 11: $himg = '70'; $wimg = '70'; break; case 3: case 14: if (get_parameter('action') == 'edit') { $himg = '30'; $wimg = '150'; } else { $himg = '15'; $wimg = '150'; } break; case 9: $himg = '130'; $wimg = '130'; break; case 1: $himg = '180'; $wimg = '300'; break; case SERVICE: $himg = '50'; $wimg = '150'; break; } } else { $wimg = $layoutData['width']; $himg = $layoutData['height']; if ($type == 3) { if (get_parameter('action') == 'edit') { $himg = '30'; } else { $himg = '15'; } } if ($type == 9) { $himg = $wimg; } } if ($label_position == 'left') { $text = '
'.$label.'
'; } else if ($label_position == 'right') { $text = '
'.$label.'
'; } else { $text = '
'.$label.'
'; } if (!isset($layoutData['status_calculated'])) { $layoutData['status_calculated'] = visual_map_get_status_element($layoutData); } $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; } $element_enterprise = []; if (enterprise_installed()) { $element_enterprise = enterprise_visual_map_print_item( $mode, $layoutData, $proportion, $show_links, $isExternalLink ); } $link = false; $url = '#'; if ($show_links && ($mode == 'read')) { switch ($type) { case STATIC_GRAPH: case GROUP_ITEM: if ($layoutData['enable_link'] && can_user_access_node() ) { $link = true; } break; case LABEL: if ($layoutData['id_layout_linked'] != 0) { $link = true; } break; case ICON: if ($layoutData['id_layout_linked'] > 0) { $link = true; } else if (preg_match('//', $layoutData['label'], $matches)) { // Link to an URL if ($layoutData['enable_link']) { $link = true; } } else if (preg_match('/^.*(http:\/\/)((.)+).*$/i', $layoutData['label'])) { // Link to an URL if ($layoutData['enable_link']) { $link = true; } } break; case SIMPLE_VALUE: case SIMPLE_VALUE_MAX: case SIMPLE_VALUE_MIN: case SIMPLE_VALUE_AVG: // Extract id service if it is a prediction module. $id_service = db_get_value_filter( 'custom_integer_1', 'tagente_modulo', [ 'id_agente_modulo' => $layoutData['id_agente_modulo'], 'prediction_module' => 1, ] ); if (!empty($id_service) && can_user_access_node()) { if ($layoutData['enable_link']) { $link = true; } } else if ($layoutData['id_layout_linked'] > 0) { $link = true; } else if ($layoutData['enable_link'] && can_user_access_node()) { $link = true; } break; case PERCENTILE_BAR: case PERCENTILE_BUBBLE: case CIRCULAR_PROGRESS_BAR: case CIRCULAR_INTERIOR_PROGRESS_BAR: if (!empty($layoutData['id_agent']) && empty($layoutData['id_layout_linked']) ) { if ($layoutData['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', [ 'id_agente_modulo' => $layoutData['id_agente_modulo'], 'prediction_module' => 1, ] ); if (!empty($id_service)) { // Link to an service page $link = true; } else if ($layoutData['id_agente_modulo'] != 0) { // Link to an module $link = true; } else { // Link to an agent $link = true; } } } else if ($layoutData['id_layout_linked'] > 0) { // Link to a map $link = true; } break; case MODULE_GRAPH: if ((($layoutData['id_layout_linked'] == '') || ($layoutData['id_layout_linked'] == 0)) && can_user_access_node() ) { if ($layoutData['enable_link']) { // Extract id service if it is a prediction module. $id_service = db_get_value_filter( 'custom_integer_1', 'tagente_modulo', [ 'id_agente_modulo' => $layoutData['id_agente_modulo'], 'prediction_module' => 1, ] ); if ($id_service === false) { $id_service = 0; } if ($id_service != 0) { // Link to an service page if (!empty($layoutData['id_metaconsole'])) { $link = true; } else { $link = true; } } else { $link = true; } } } else { // Link to a map $link = true; } break; case BARS_GRAPH: $link = true; break; case AUTO_SLA_GRAPH: $link = true; break; case DONUT_GRAPH: $link = true; break; default: if (!empty($element_enterprise)) { $link = $element_enterprise['link']; } break; } } if ($link) { switch ($type) { case STATIC_GRAPH: $is_a_service = false; $is_a_link_to_other_visualconsole = false; if (enterprise_installed()) { $id_service = services_service_from_module($layoutData['id_agente_modulo']); if (!empty($id_service)) { $is_a_service = true; } } if ($layoutData['id_layout_linked'] != 0) { $is_a_link_to_other_visualconsole = true; } if ($is_a_service) { if (empty($layoutData['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', $layoutData['id_metaconsole'] ); $url = $server['server_url'].'/'.'index.php?sec=services&sec2=enterprise/operation/services/services&id_service='.$id_service.'&offset=0'; } } else if ($is_a_link_to_other_visualconsole) { if (!is_metaconsole()) { $url = $config['homeurl'].'index.php?sec=network&sec2=operation/visual_console/render_view&pure='.$config['pure'].'&id='.$layoutData['id_layout_linked']; } else { $url = 'index.php?sec=screen&sec2=screens/screens&action=visualmap&pure=0&id_visualmap='.$layoutData['id_layout_linked'].'&refr=0'; } } else { if ($layoutData['id_agente_modulo'] != 0) { // Link to an module if (empty($layoutData['id_metaconsole'])) { $url = $config['homeurl'].'index.php?sec=view&sec2=operation/agentes/status_monitor&id_module='.$layoutData['id_agente_modulo']; } else { $url = ui_meta_get_url_console_child( $layoutData['id_metaconsole'], 'view', 'operation/agentes/status_monitor&id_module='.$layoutData['id_agente_modulo'], null, null, null, $isExternalLink ); } } else { // Link to an agent if (empty($layoutData['id_metaconsole'])) { $url = $config['homeurl'].'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$layoutData['id_agent']; } else { $url = ui_meta_get_url_console_child( $layoutData['id_metaconsole'], 'estado', 'operation/agentes/ver_agente&id_agente='.$layoutData['id_agent'], null, null, null, $isExternalLink ); } } } break; case AUTO_SLA_GRAPH: $e_period = $layoutData['period']; $date = get_system_time(); $datelimit = ($date - $e_period); $time_format = 'Y/m/d H:i:s'; $timestamp_init = date($time_format, $datelimit); $timestamp_end = date($time_format, $date); $timestamp_init_aux = explode(' ', $timestamp_init); $timestamp_end_aux = explode(' ', $timestamp_end); $date_from = $timestamp_init_aux[0]; $time_from = $timestamp_init_aux[1]; $date_to = $timestamp_end_aux[0]; $time_to = $timestamp_end_aux[1]; if (empty($layout_data['id_metaconsole'])) { $url = $config['homeurl'].'index.php?sec=eventos&sec2=operation/events/events&id_agent='.$layoutData['id_agent'].'&module_search_hidden='.$layoutData['id_agente_modulo'].'&date_from='.$date_from.'&time_from='.$time_from.'&date_to='.$date_to.'&time_to='.$time_to.'&status=-1'; } else { $url = 'index.php?sec=eventos&sec2=operation/events/events&id_agent='.$layoutData['id_agent'].'&module_search_hidden='.$layoutData['id_agente_modulo'].'&date_from='.$date_from.'&time_from='.$time_from.'&date_to='.$date_to.'&time_to='.$time_to.'&status=-1'; } break; case DONUT_GRAPH: if (empty($layout_data['id_metaconsole'])) { $url = $config['homeurl'].'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$layoutData['id_agent'].'&tab=module&edit_module=1&id_agent_module='.$layoutData['id_agente_modulo']; } else { $url = 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$layoutData['id_agent'].'&tab=module&edit_module=1&id_agent_module='.$layoutData['id_agente_modulo']; } break; case BARS_GRAPH: if (empty($layout_data['id_metaconsole'])) { $url = $config['homeurl'].'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$layoutData['id_agent'].'&tab=module&edit_module=1&id_agent_module='.$layoutData['id_agente_modulo']; } else { $url = 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$layoutData['id_agent'].'&tab=module&edit_module=1&id_agent_module='.$layoutData['id_agente_modulo']; } break; case GROUP_ITEM: $is_a_link_to_other_visualconsole = false; if ($layoutData['id_layout_linked'] != 0) { $is_a_link_to_other_visualconsole = true; } if ($is_a_link_to_other_visualconsole) { if (is_metaconsole() === true) { $url = $config['homeurl'].'index.php?sec=screen&sec2=screens/screens&action=visualmap&pure=0&id_visualmap='.$layoutData['id_layout_linked'].'&refr=300'; } else { $url = $config['homeurl'].'index.php?sec=network&sec2=operation/visual_console/render_view&pure='.$config['pure'].'&id='.$layoutData['id_layout_linked']; } } else { if (is_metaconsole() === true) { $url = $config['homeurl'].'index.php?sec=estado&sec2=operation/agentes/status_monitor&refr=0&ag_group='.$layoutData['id_group'].'&ag_freestring=&module_option=1&ag_modulename=&moduletype=&datatype=&status=-1&sort_field=&sort=none&pure='; } else { $url = $config['homeurl'].'index.php?sec=estado&sec2=operation/agentes/estado_agente&group_id='.$layoutData['id_group']; } } break; case LABEL: if ($layoutData['id_layout_linked'] != 0) { // Link to a map $url = $config['homeurl'].'index.php?sec=network&sec2=operation/visual_console/render_view&pure='.$config['pure'].'&id='.$layoutData['id_layout_linked']; } break; case ICON: $url_icon = ''; if ($layoutData['id_layout_linked'] != 0) { // Link to a map if (empty($layoutData['id_metaconsole'])) { $url = 'index.php?sec=network&sec2=operation/visual_console/render_view&pure='.$config['pure'].'&id='.$layoutData['id_layout_linked']; } else { $pure = get_parameter('pure', 0); $url = 'index.php?sec=screen&sec2=screens/screens&action=visualmap&pure='.$pure.'&id_visualmap='.$layoutData['id_layout_linked'].'&refr=0'; } } else if (preg_match('//', $layoutData['label'], $matches)) { // Link to an URL if ($layoutData['enable_link']) { $url = strip_tags($matches[1]); } } else if (preg_match('/^.*(http:\/\/)((.)+).*$/i', $layoutData['label'])) { // Link to an URL if ($layoutData['enable_link']) { $url = strip_tags($layoutData['label']); } } break; case SIMPLE_VALUE: case SIMPLE_VALUE_MAX: case SIMPLE_VALUE_MIN: case SIMPLE_VALUE_AVG: // Extract id service if it is a prediction module. $id_service = db_get_value_filter( 'custom_integer_1', 'tagente_modulo', [ 'id_agente_modulo' => $layoutData['id_agente_modulo'], 'prediction_module' => 1, ] ); if (!empty($id_service) && can_user_access_node()) { // Link to an service page if (!empty($layoutData['id_metaconsole'])) { $server = db_get_row( 'tmetaconsole_setup', 'id', $layoutData['id_metaconsole'] ); $url = $server['server_url'].'/'.'index.php?sec=services&sec2=enterprise/operation/services/services&id_service='.$id_service.'&offset=0'; } else { $url = 'index.php?sec=services&sec2=enterprise/operation/services/services&id_service='.$id_service.'&offset=0'; } } else if ($layoutData['id_layout_linked'] > 0) { // Link to a map if (empty($layoutData['id_metaconsole'])) { $url = 'index.php?sec=network&sec2=operation/visual_console/render_view&pure='.$config['pure'].'&id='.$layoutData['id_layout_linked']; } else { $pure = get_parameter('pure', 0); $url = 'index.php?sec=screen&sec2=screens/screens&action=visualmap&pure='.$pure.'&id_visualmap='.$layoutData['id_layout_linked'].'&refr=0'; } } else if ($layoutData['id_agente_modulo'] != 0) { // Link to an module if (empty($layoutData['id_metaconsole'])) { $url = $config['homeurl'].'index.php?sec=view&sec2=operation/agentes/status_monitor&id_module='.$layoutData['id_agente_modulo']; } else { $url = ui_meta_get_url_console_child( $layoutData['id_metaconsole'], 'estado', 'operation/agentes/ver_agente&id_agente='.$layoutData['id_agent'], null, null, null, $isExternalLink ); } } break; case PERCENTILE_BAR: case PERCENTILE_BUBBLE: case CIRCULAR_PROGRESS_BAR: case CIRCULAR_INTERIOR_PROGRESS_BAR: if (!empty($layoutData['id_agent'])) { // Extract id service if it is a prediction module. $id_service = db_get_value_filter( 'custom_integer_1', 'tagente_modulo', [ 'id_agente_modulo' => $layoutData['id_agente_modulo'], 'prediction_module' => 1, ] ); if (!empty($id_service)) { // Link to an service page if (!empty($layoutData['id_metaconsole'])) { $server = db_get_row( 'tmetaconsole_setup', 'id', $layoutData['id_metaconsole'] ); $url = $server['server_url'].'/'.'index.php?sec=services&sec2=enterprise/operation/services/services&id_service='.$id_service.'&offset=0'; } else { $url = 'index.php?sec=services&sec2=enterprise/operation/services/services&id_service='.$id_service.'&offset=0'; } } else if ($layoutData['id_agente_modulo'] != 0) { // Link to an module if (!empty($layoutData['id_metaconsole'])) { $server = db_get_row( 'tmetaconsole_setup', 'id', $layoutData['id_metaconsole'] ); $url = $server['server_url'].'/index.php?sec=view&sec2=operation/agentes/status_monitor&id_module='.$layoutData['id_agente_modulo']; } else { $url = $config['homeurl'].'/index.php?sec=view&sec2=operation/agentes/status_monitor&id_module='.$layoutData['id_agente_modulo']; } } else { // Link to an agent if (empty($layoutData['id_metaconsole'])) { $url = $config['homeurl'].'index.php?'.'sec=estado&'.'sec2=operation/agentes/ver_agente&id_agente='.$layoutData['id_agent']; } else { $url = ui_meta_get_url_console_child( $layoutData['id_metaconsole'], 'estado', 'operation/agentes/ver_agente&id_agente='.$layoutData['id_agent'], null, null, null, $isExternalLink ); } } } else if ($layoutData['id_layout_linked'] > 0) { // Link to a map if (empty($layoutData['id_metaconsole'])) { $url = 'index.php?sec=reporting&sec2=operation/visual_console/render_view&pure='.$config['pure'].'&id='.$layoutData['id_layout_linked']; } else { $pure = get_parameter('pure', 0); $url = 'index.php?sec=screen&sec2=screens/screens&action=visualmap&pure='.$pure.'&id_visualmap='.$layoutData['id_layout_linked'].'&refr=0'; } } break; case MODULE_GRAPH: if ((($layoutData['id_layout_linked'] == '') || ($layoutData['id_layout_linked'] == 0)) && can_user_access_node() ) { if ($layoutData['enable_link']) { // Extract id service if it is a prediction module. $id_service = db_get_value_filter( 'custom_integer_1', 'tagente_modulo', [ 'id_agente_modulo' => $layoutData['id_agente_modulo'], 'prediction_module' => 1, ] ); if (!empty($id_service)) { // Link to an service page if (!empty($layoutData['id_metaconsole'])) { $server = db_get_row( 'tmetaconsole_setup', 'id', $layoutData['id_metaconsole'] ); $url = $server['server_url'].'/index.php?sec=services&sec2=enterprise/operation/services/services&id_service='.$id_service.'&offset=0'; } else { $url = $config['homeurl'].'/index.php?sec=services&sec2=enterprise/operation/services/services&id_service='.$id_service.'&offset=0'; } } else { if (empty($layoutData['id_metaconsole'])) { $url = $config['homeurl'].'/index.php?sec=view&sec2=operation/agentes/status_monitor&id_module='.$layoutData['id_agente_modulo']; } else { $url = ui_meta_get_url_console_child( $layoutData['id_metaconsole'], 'estado', 'operation/agentes/ver_agente&id_agente='.$layoutData['id_agent'].'&tab=data', null, null, null, $isExternalLink ); } } } } else { // Link to a map if (empty($layoutData['id_metaconsole'])) { $url = $config['homeurl'].'/index.php?sec=reporting&sec2=operation/visual_console/render_view&pure='.$config['pure'].'&id='.$layoutData['id_layout_linked']; } else { $pure = get_parameter('pure', 0); $url = $config['homeurl'].'/index.php?sec=screen&sec2=screens/screens&action=visualmap&pure='.$pure.'&id_visualmap='.$layoutData['id_layout_linked'].'&refr=0'; } } break; default: if (!empty($element_enterprise)) { $url = $element_enterprise['url']; } break; } // Override url if (is_metaconsole() && !empty($layoutData['id_layout_linked']) && !empty($layoutData['linked_layout_node_id']) ) { $url = ui_meta_get_url_console_child( $layoutData['linked_layout_node_id'], 'network', 'operation/visual_console/render_view&id='.(int) $layoutData['id_layout_linked'] ); } } // + 1 for to avoid the box and lines items are on the top of // others $z_index = (1 + 1); switch ($type) { case STATIC_GRAPH: 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 ($status == VISUAL_MAP_STATUS_CRITICAL_BAD) { $z_index = (3 + 1); } else if ($status == VISUAL_MAP_STATUS_WARNING) { $z_index = (2 + 1); } else if ($status == VISUAL_MAP_STATUS_CRITICAL_ALERT) { $z_index = (4 + 1); } else { $z_index = (1 + 1); } 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.'"'; } $z_index = (4 + 1); break; case PERCENTILE_BAR: case PERCENTILE_BUBBLE: case CIRCULAR_PROGRESS_BAR: case CIRCULAR_INTERIOR_PROGRESS_BAR: // Metaconsole db connection if ($layoutData['id_metaconsole'] != 0) { $connection = db_get_row_filter( 'tmetaconsole_setup', ['id' => $layoutData['id_metaconsole']] ); if (metaconsole_load_external_db($connection) != NOERR) { // ui_print_error_message ("Error connecting to ".$server_name); continue; } } // data $module_value = db_get_sql( 'SELECT datos FROM tagente_estado WHERE id_agente_modulo = '.$id_module ); // state $module_status = db_get_sql( 'SELECT estado FROM tagente_estado WHERE id_agente_modulo = '.$id_module ); if (empty($module_value) || $module_value == 0) { $colorStatus = COL_UNKNOWN; } else { switch ($module_status) { case 0: // Normal $colorStatus = COL_NORMAL; break; case 1: // Critical $colorStatus = COL_CRITICAL; break; case 2: // Warning $colorStatus = COL_WARNING; break; case 4: // Not_INIT $colorStatus = COL_NOTINIT; break; case 3: // Unknown default: $colorStatus = COL_UNKNOWN; break; } } $value_text = false; if ($layoutData['image'] == 'percent') { $value_text = false; } else if ($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 ($value_text <= 0) { $value_text = remove_right_zeros(number_format($module_value, $config['graph_precision'])); } 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; } break; case MODULE_GRAPH: $imgpos = ''; if ($layoutData['label_position'] == 'left') { $imgpos = 'float:right'; } else if ($layoutData['label_position'] == 'right') { $imgpos = 'float:left'; } if (!empty($proportion)) { $width = ((integer) ($proportion['proportion_width'] * $width)); $height = ((integer) ($proportion['proportion_height'] * $height)); } // Metaconsole db connection if ($layoutData['id_metaconsole'] != 0) { $connection = db_get_row_filter( 'tmetaconsole_setup', ['id' => $layoutData['id_metaconsole']] ); if (metaconsole_load_external_db($connection) != NOERR) { // ui_print_error_message ("Error connecting to ".$server_name); continue; } } $only_image = !$graph_javascript && $isExternalLink; if ($layoutData['id_custom_graph'] != 0) { // Show only avg on the visual console if (get_parameter('action') == 'edit') { if ($width == 0 || $height == 0) { $img = ''; } else { $img = ''; } } else { if ($width == 0) { $width = 180; } if ($height == 0) { $height = 480; } $graphs = db_get_all_rows_field_filter('tgraph', 'id_graph', $layoutData['id_custom_graph']); $params = [ 'period' => $period, 'width' => $width, 'height' => $height, 'title' => '', 'unit_name' => null, 'show_alerts' => false, 'only_image' => $only_image, 'vconsole' => true, 'backgroundColor' => $layoutData['image'], ]; $params_combined = [ 'id_graph' => $layoutData['id_custom_graph'], 'stacked' => $graphs[0]['stacked'], 'summatory' => $graphs[0]['summatory_series'], 'average' => $graphs[0]['average_series'], 'modules_series' => $graphs[0]['modules_series'], ]; if ($layoutData['label_position'] == 'left') { $img = '
'.graphic_combined_module( false, $params, $params_combined ).'
'; } else if ($layoutData['label_position'] == 'right') { $img = '
'.graphic_combined_module( false, $params, $params_combined ).'
'; } else { $img = '
'; $img .= graphic_combined_module( false, $params, $params_combined ); $img .= '
'; } } } else { if ($isExternalLink) { $homeurl = $config['homeurl']; } else { $homeurl = ''; } if ((get_parameter('action') == 'edit') || (get_parameter('operation') == 'edit_visualmap')) { if ($width == 0 || $height == 0) { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } else { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } } else { if ($width == 0 || $height == 0) { $width = 300; $height = 180; } $params = [ 'agent_module_id' => $id_module, 'period' => $period, 'show_events' => false, 'width' => $width, 'height' => $height, 'title' => modules_get_agentmodule_name($id_module), 'unit' => modules_get_unit($id_module), 'only_image' => $only_image, 'menu' => false, 'backgroundColor' => $layoutData['image'], 'type_graph' => $type_graph, 'vconsole' => true, ]; if ($layoutData['label_position'] == 'left') { $img = '
'.grafico_modulo_sparse($params).'
'; } else if ($layoutData['label_position'] == 'right') { $img = '
'.grafico_modulo_sparse($params).'
'; } else { $img = grafico_modulo_sparse($params); } } } // Restore db connection if ($layoutData['id_metaconsole'] != 0) { metaconsole_restore_db(); } break; case BARS_GRAPH: $imgpos = ''; if ($layoutData['label_position'] == 'left') { $imgpos = 'float:right'; } else if ($layoutData['label_position'] == 'right') { $imgpos = 'float:left'; } if (!empty($proportion)) { $width = ((integer) ($proportion['proportion_width'] * $width)); $height = ((integer) ($proportion['proportion_height'] * $height)); } // Metaconsole db connection if ($layoutData['id_metaconsole'] != 0) { $connection = db_get_row_filter( 'tmetaconsole_setup', ['id' => $layoutData['id_metaconsole']] ); if (metaconsole_load_external_db($connection) != NOERR) { continue; } } if ($isExternalLink) { $homeurl = $config['homeurl']; } else { $homeurl = ''; } $is_string = db_get_value_filter( 'id_tipo_modulo', 'tagente_modulo', [ 'id_agente' => $layoutData['id_agent'], 'id_agente_modulo' => $id_module, ] ); if ((get_parameter('action') == 'edit') || (get_parameter('operation') == 'edit_visualmap')) { if ($width == 0) { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } else { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } } else { $color = []; $color[0] = [ 'border' => '#000000', 'color' => $config['graph_color1'], 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[1] = [ 'border' => '#000000', 'color' => $config['graph_color2'], 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[2] = [ 'border' => '#000000', 'color' => $config['graph_color3'], 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[3] = [ 'border' => '#000000', 'color' => $config['graph_color4'], 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[4] = [ 'border' => '#000000', 'color' => $config['graph_color5'], 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[5] = [ 'border' => '#000000', 'color' => $config['graph_color6'], 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[6] = [ 'border' => '#000000', 'color' => $config['graph_color7'], 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[7] = [ 'border' => '#000000', 'color' => $config['graph_color8'], 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[8] = [ 'border' => '#000000', 'color' => $config['graph_color9'], 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[9] = [ 'border' => '#000000', 'color' => $config['graph_color10'], 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[11] = [ 'border' => '#000000', 'color' => COL_GRAPH9, 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[12] = [ 'border' => '#000000', 'color' => COL_GRAPH10, 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[13] = [ 'border' => '#000000', 'color' => COL_GRAPH11, 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[14] = [ 'border' => '#000000', 'color' => COL_GRAPH12, 'alpha' => CHART_DEFAULT_ALPHA, ]; $color[15] = [ 'border' => '#000000', 'color' => COL_GRAPH13, 'alpha' => CHART_DEFAULT_ALPHA, ]; $module_data = get_bars_module_data( $id_module, ($layoutData['type_graph'] !== 'horizontal') ); $options = []; $options['generals']['rotate'] = true; $options['generals']['forceTicks'] = true; $options['generals']['arrayColors'] = $color; $options['x']['labelWidth'] = 60; $water_mark = [ 'file' => '/var/www/html/pandora_console/images/logo_vertical_water.png', 'url' => 'http://localhost/pandora_console/images/logo_vertical_water.png', ]; if ($width == 0 && $height == 0) { if ($layoutData['label_position'] == 'left') { if ($layoutData['type_graph'] == 'horizontal') { $img = '
'.hbar_graph( $module_data, 400, 400, $color, [], [], ui_get_full_url('images/image_problem_area.png', false, false, false), '', '', $water_mark, $config['fontpath'], 6, '', 0, $config['homeurl'], $layoutData['image'], $layoutData['border_color'] ).'
'; } else { $img = '
'; $img .= vbar_graph($module_data, $options, 1); $img .= '
'; } } else if ($layoutData['label_position'] == 'right') { if ($layoutData['type_graph'] == 'horizontal') { $img = '
'.hbar_graph( $module_data, 400, 400, $color, [], [], ui_get_full_url('images/image_problem_area.png', false, false, false), '', '', $water_mark, $config['fontpath'], 6, '', 0, $config['homeurl'], $layoutData['image'], $layoutData['border_color'] ).'
'; } else { $img = '
'; $img .= vbar_graph($module_data, $options, 1); $img .= '
'; } } else { if ($layoutData['type_graph'] == 'horizontal') { $img = hbar_graph( $module_data, 400, 400, $color, [], [], ui_get_full_url('images/image_problem_area.png', false, false, false), '', '', $water_mark, $config['fontpath'], 6, '', 0, $config['homeurl'], $layoutData['image'], $layoutData['border_color'] ); } else { $img = vbar_graph($module_data, $options, 1); } } } else { if ($layoutData['label_position'] == 'left') { if ($layoutData['type_graph'] == 'horizontal') { $img = '
'.hbar_graph( $module_data, $width, $height, $color, [], [], ui_get_full_url('images/image_problem_area.png', false, false, false), '', '', $water_mark, $config['fontpath'], 6, '', 0, $config['homeurl'], $layoutData['image'], $layoutData['border_color'] ).'
'; } else { $img = '
'; $img .= vbar_graph($module_data, $options, 1); $img .= '
'; } } else if ($layoutData['label_position'] == 'right') { if ($layoutData['type_graph'] == 'horizontal') { $img = '
'.hbar_graph( $module_data, $width, $height, $color, [], [], ui_get_full_url('images/image_problem_area.png', false, false, false), '', '', $water_mark, $config['fontpath'], 6, '', 0, $config['homeurl'], $layoutData['image'], $layoutData['border_color'] ).'
'; } else { $img = '
'; $img .= vbar_graph($module_data, $options, 1); $img .= '
'; } } else { if ($layoutData['type_graph'] == 'horizontal') { $img = hbar_graph( $module_data, $width, $height, $color, [], [], ui_get_full_url('images/image_problem_area.png', false, false, false), '', '', $water_mark, $config['fontpath'], 6, '', 0, $config['homeurl'], $layoutData['image'], $layoutData['border_color'] ); } else { $img = '
'; $img .= vbar_graph($module_data, $options, 1); $img .= '
'; } } } } // Restore db connection if ($layoutData['id_metaconsole'] != 0) { metaconsole_restore_db(); } break; case DONUT_GRAPH: if (!empty($id_metaconsole)) { $connection = db_get_row_filter('tmetaconsole_setup', $id_metaconsole); if (metaconsole_load_external_db($connection) != NOERR) { continue; } } $is_string = db_get_value_filter( 'id_tipo_modulo', 'tagente_modulo', [ 'id_agente' => $layoutData['id_agent'], 'id_agente_modulo' => $id_module, ] ); if (!empty($id_metaconsole)) { metaconsole_restore_db(); } if (($is_string == 17) || ($is_string == 23) || ($is_string == 3) || ($is_string == 10) || ($is_string == 33) ) { $no_data = false; } else { $no_data = true; } if ($no_data) { if ($width == 0) { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } else { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } } else { $donut_data = get_donut_module_data($layoutData['id_agente_modulo']); if ((get_parameter('action') == 'edit') || (get_parameter('operation') == 'edit_visualmap')) { if ($width == 0) { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } else { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } } else { if ($width == 0) { $img = d3_donut_graph($layoutData['id'], 300, 300, $donut_data, $layoutData['border_color']); } else { $img = d3_donut_graph($layoutData['id'], $width, $width, $donut_data, $layoutData['border_color']); } } } // Restore db connection if ($layoutData['id_metaconsole'] != 0) { metaconsole_restore_db(); } $z_index = (2 + 1); break; case LABEL: $z_index = (4 + 1); break; case BOX_ITEM: $z_index = 1; break; case CLOCK: if ((get_parameter('action') == 'edit') || (get_parameter('operation') == 'edit_visualmap')) { $image_prefix = (is_metaconsole()) ? '../../' : ''; if ($width == 0) { if ($layoutData['id_metaconsole'] != 0) { if ($layoutData['clock_animation'] == 'analogic_1') { $img = ''; } else { if ($layoutData['time_format'] = 'time') { $img = ''; } else { $img = ''; } } } else { if ($layoutData['clock_animation'] == 'analogic_1') { $img = ''; } else { if ($layoutData['time_format'] == 'time') { $img = ''; } else { $img = ''; } } } } else { if ($layoutData['clock_animation'] == 'analogic_1') { $img = ''; } else { $height_offset = ($layoutData['time_format'] == 'time') ? 20 : 40; $img = ''; } } } else { if ($layoutData['clock_animation'] == 'analogic_1') { if ($layoutData['label_position'] == 'left') { $img = '
'.print_clock_analogic_1($layoutData['time_format'], $layoutData['timezone'], $layoutData['clock_animation'], $layoutData['width'], $layoutData['height'], $layoutData['id'], $layoutData['fill_color']).'
'; } else if ($layoutData['label_position'] == 'right') { $img = '
'.print_clock_analogic_1($layoutData['time_format'], $layoutData['timezone'], $layoutData['clock_animation'], $layoutData['width'], $layoutData['height'], $layoutData['id'], $layoutData['fill_color']).'
'; } else { $img = '
'.print_clock_analogic_1($layoutData['time_format'], $layoutData['timezone'], $layoutData['clock_animation'], $layoutData['width'], $layoutData['height'], $layoutData['id'], $layoutData['fill_color']).'
'; } } else if ($layoutData['clock_animation'] == 'digital_1') { if ($layoutData['label_position'] == 'left') { $img = '
'.print_clock_digital_1($layoutData['time_format'], $layoutData['timezone'], $layoutData['clock_animation'], $layoutData['width'], $layoutData['height'], $layoutData['id'], $layoutData['fill_color']).'
'; } else if ($layoutData['label_position'] == 'right') { $img = '
'.print_clock_digital_1($layoutData['time_format'], $layoutData['timezone'], $layoutData['clock_animation'], $layoutData['width'], $layoutData['height'], $layoutData['id'], $layoutData['fill_color']).'
'; } else { $img = '
'.print_clock_digital_1($layoutData['time_format'], $layoutData['timezone'], $layoutData['clock_animation'], $layoutData['width'], $layoutData['height'], $layoutData['id'], $layoutData['fill_color']).'
'; } } } break; case AUTO_SLA_GRAPH: if ((get_parameter('action') == 'edit') || (get_parameter('operation') == 'edit_visualmap')) { if ($width == 0 || $height == 0) { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } else { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } } else { if ($width == 0 || $height == 0) { if ($layoutData['label_position'] == 'left') { $img = '
'.graph_graphic_moduleevents($layoutData['id_agent'], $layoutData['id_agente_modulo'], 500, 50, $layoutData['period'], '', true).'
'; } else if ($layoutData['label_position'] == 'right') { $img = '
'.graph_graphic_moduleevents($layoutData['id_agent'], $layoutData['id_agente_modulo'], 500, 50, $layoutData['period'], '', true).'
'; } else { $img = '
'.graph_graphic_moduleevents($layoutData['id_agent'], $layoutData['id_agente_modulo'], 500, 50, $layoutData['period'], '', true).'
'; } } else { if ($layoutData['label_position'] == 'left') { $img = '
'.graph_graphic_moduleevents($layoutData['id_agent'], $layoutData['id_agente_modulo'], $width, $height, $layoutData['period'], '', true).'
'; } else if ($layoutData['label_position'] == 'right') { $img = '
'.graph_graphic_moduleevents($layoutData['id_agent'], $layoutData['id_agente_modulo'], $width, $height, $layoutData['period'], '', true).'
'; } else { $img = '
'.graph_graphic_moduleevents($layoutData['id_agent'], $layoutData['id_agente_modulo'], $width, $height, $layoutData['period'], '', true).'
'; } } } // Restore db connection if ($layoutData['id_metaconsole'] != 0) { metaconsole_restore_db(); } $z_index = (2 + 1); break; } $class = 'item '; switch ($type) { case STATIC_GRAPH: $class .= 'static_graph'; break; case AUTO_SLA_GRAPH: $class .= 'auto_sla_graph'; break; case GROUP_ITEM: $class .= 'group_item'; break; case DONUT_GRAPH: $class .= 'donut_graph'; break; case PERCENTILE_BAR: case PERCENTILE_BUBBLE: case CIRCULAR_PROGRESS_BAR: case CIRCULAR_INTERIOR_PROGRESS_BAR: $class .= 'percentile_item'; break; case MODULE_GRAPH: $class .= 'module_graph'; break; case BARS_GRAPH: $class .= 'bars_graph'; break; case SIMPLE_VALUE: case SIMPLE_VALUE_MAX: case SIMPLE_VALUE_MIN: case SIMPLE_VALUE_AVG: $class .= 'simple_value'; break; case LABEL: $class .= 'label'; break; case ICON: $class .= 'icon'; break; case CLOCK: $class .= 'clock'; break; case BOX_ITEM: $class .= 'box_item'; break; case COLOR_CLOUD: $class .= 'color_cloud'; break; default: if (!empty($element_enterprise)) { $class .= $element_enterprise['class']; } break; } if ($show_on_top) { $z_index = 10; } echo '
'; if ($link) { echo ""; } // for clean link text from bbdd only edit_visualmap if (get_parameter('action') == 'edit' || get_parameter('operation') == 'edit_visualmap') { $text = preg_replace('/<\/*a.*?>/', '', $text); } switch ($type) { case BOX_ITEM: if ($width == 0 || $width == 0) { $style = ''; $style .= 'width: 300px; '; $style .= 'height: 180px; '; $style .= 'border-style: solid; '; $style .= 'border-width: '.$border_width.'px; '; $style .= 'border-color: '.$border_color.'; '; $style .= 'background-color: '.$fill_color.'; '; echo "
"; } else { if (!empty($proportion)) { $style = ''; $style .= 'width: '.($width * $proportion['proportion_width']).'px; '; $style .= 'height: '.($height * $proportion['proportion_height']).'px; '; $style .= 'border-style: solid; '; $style .= 'border-width: '.$border_width.'px; '; $style .= 'border-color: '.$border_color.'; '; $style .= 'background-color: '.$fill_color.'; '; echo "
"; } else { $style = ''; $style .= 'width: '.$width.'px; '; $style .= 'height: '.$height.'px; '; $style .= 'border-style: solid; '; $style .= 'border-width: '.$border_width.'px; '; $style .= 'border-color: '.$border_color.'; '; $style .= 'background-color: '.$fill_color.'; '; echo "
"; } } break; case STATIC_GRAPH: case GROUP_ITEM: if (($layoutData['image'] != null && $layoutData['image'] != 'none') || $layoutData['show_statistics'] == 1) { $img_style_title = strip_tags($label); if ($layoutData['type'] == STATIC_GRAPH) { if ($layoutData['id_agente_modulo'] != 0) { if (is_metaconsole() && $layoutData['id_metaconsole'] != 0) { // Metaconsole db connection $connection = db_get_row_filter( 'tmetaconsole_setup', ['id' => $layoutData['id_metaconsole']] ); if (metaconsole_load_external_db($connection) != NOERR) { continue; } } $unit_text = trim( io_safe_output( modules_get_unit($layoutData['id_agente_modulo']) ) ); $value = modules_get_last_value( $layoutData['id_agente_modulo'] ); if (!is_string($value)) { $value = format_for_graph($value, 2); } // Hide value on boolean modules if ($layoutData['show_last_value'] != 2) { if ((!modules_is_boolean($layoutData['id_agente_modulo'])) || (modules_is_boolean($layoutData['id_agente_modulo']) && $layoutData['show_last_value'] != 0) ) { if (is_numeric($value)) { $img_style_title .= '
'.__('Last value: ').remove_right_zeros(number_format($value, $config['graph_precision'])); } else { $img_style_title .= '
'.__('Last value: ').$value; } } } if (!empty($unit_text)) { $img_style_title .= ' '.$unit_text; } if ($layoutData['id_metaconsole'] != 0) { // Restore db connection metaconsole_restore_db(); } } if (get_parameter('action') == 'edit') { $img_style_title = ''; } } if (!empty($proportion)) { if (is_file($config['homedir'].'/'.$img)) { $infoImage = getimagesize($config['homedir'].'/'.$img); } if ($height == 0 || $height == 0) { $height = '70px'; $width = '70px'; } else { $height = (integer) ($proportion['proportion_height'] * $height); $width = (integer) ($proportion['proportion_width'] * $width); } } $imgpos = ''; if ($layoutData['label_position'] == 'up') { echo io_safe_output($text); } if ($layoutData['label_position'] == 'left') { $imgpos = 'float:right'; } else if ($layoutData['label_position'] == 'right') { $imgpos = 'float:left'; } $varsize = getimagesize($config['homedir'].'/'.$img); if ($layoutData['show_statistics'] == 1) { if (get_parameter('action') == 'edit') { if ($width == 0 || $height == 0) { echo ''; } else { echo ''; } } else { $is_meta = is_metaconsole(); $agents_critical = agents_get_agents( [ 'disabled' => 0, 'id_grupo' => $layoutData['id_group'], 'status' => AGENT_STATUS_CRITICAL, ], ['COUNT(*) as total'], 'AR', false, false, 0, $is_meta ); $agents_warning = agents_get_agents( [ 'disabled' => 0, 'id_grupo' => $layoutData['id_group'], 'status' => AGENT_STATUS_WARNING, ], ['COUNT(*) as total'], 'AR', false, false, 0, $is_meta ); $agents_unknown = agents_get_agents( [ 'disabled' => 0, 'id_grupo' => $layoutData['id_group'], 'status' => AGENT_STATUS_UNKNOWN, ], ['COUNT(*) as total'], 'AR', false, false, 0, $is_meta ); $agents_ok = agents_get_agents( [ 'disabled' => 0, 'id_grupo' => $layoutData['id_group'], 'status' => AGENT_STATUS_OK, ], ['COUNT(*) as total'], 'AR', false, false, 0, $is_meta ); $total_agents = ($agents_critical[0]['total'] + $agents_warning[0]['total'] + $agents_unknown[0]['total'] + $agents_ok[0]['total']); $stat_agent_ok = ($agents_ok[0]['total'] / $total_agents * 100); $stat_agent_wa = ($agents_warning[0]['total'] / $total_agents * 100); $stat_agent_cr = ($agents_critical[0]['total'] / $total_agents * 100); $stat_agent_un = ($agents_unknown[0]['total'] / $total_agents * 100); if ($width == 0 || $height == 0) { $dyn_width = 520; $dyn_height = 80; } else { $dyn_width = $width; $dyn_height = $height; } echo ''; echo ""; echo "'; echo ''; echo ""; echo ''; echo ''; echo '
".groups_get_name($layoutData['id_group'], true).'
'; echo "
".remove_right_zeros(number_format($stat_agent_cr, 2)).'%
'; echo "
Critical
"; echo "
".remove_right_zeros(number_format($stat_agent_wa, 2)).'%
'; echo "
Warning
"; echo "
".remove_right_zeros(number_format($stat_agent_ok, 2)).'%
'; echo "
Normal
"; echo "
".remove_right_zeros(number_format($stat_agent_un, 2)).'%
'; echo "
Unknown
"; echo '
'; } } else { $options = [ 'class' => 'image', 'id' => 'image_'.$id, 'title' => $img_style_title, 'style' => $borderStyle.$imgpos, ]; if ($width == 0 || $height == 0) { if ($varsize[0] > 150 || $varsize[1] > 150) { $options['width'] = '70px'; $options['height'] = '70px'; } } else { $options['width'] = $width; $options['height'] = $height; } echo html_print_image( $img, true, $options, false, false, false, $isExternalLink ); } } if ($layoutData['label_position'] != 'up') { echo io_safe_output($text); } if (is_metaconsole()) { metaconsole_restore_db(); } break; case PERCENTILE_BAR: if (($layoutData['image'] == 'value') && ($value_text !== false)) { $unit_text = db_get_sql( 'SELECT unit FROM tagente_modulo WHERE id_agente_modulo = '.$id_module ); $unit_text = trim(io_safe_output($unit_text)); $percentile = $value_text; } else { $unit_text = '%'; } if (get_parameter('action') == 'edit' || (get_parameter('operation') == 'edit_visualmap')) { if ($width == 0) { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } else { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } } else { $img = d3_progress_bar($id, $percentile, $width, 50, $border_color, $unit_text, io_safe_output($label), $fill_color); } echo $img; if (get_parameter('tab') == 'editor') { echo "".io_safe_output($text).''; } break; case PERCENTILE_BUBBLE: if (($layoutData['image'] == 'value') && ($value_text !== false)) { $unit_text = db_get_sql( 'SELECT unit FROM tagente_modulo WHERE id_agente_modulo = '.$id_module ); $unit_text = trim(io_safe_output($unit_text)); $percentile = $value_text; } else { $unit_text = '%'; } if (get_parameter('action') == 'edit' || (get_parameter('operation') == 'edit_visualmap')) { if ($width == 0) { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } else { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } } else { if ($width == 0) { $img = d3_progress_bubble($id, $percentile, 200, 200, $border_color, $unit_text, io_safe_output($label), $fill_color); } else { $img = d3_progress_bubble($id, $percentile, $width, $width, $border_color, $unit_text, io_safe_output($label), $fill_color); } } echo $img; if (get_parameter('tab') == 'editor') { echo "".io_safe_output($text).''; } break; case CIRCULAR_PROGRESS_BAR: if (get_parameter('action') == 'edit' || (get_parameter('operation') == 'edit_visualmap')) { if ($width == 0) { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } else { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } } else { if (($layoutData['image'] == 'value') && ($value_text !== false)) { $unit_text = db_get_sql( 'SELECT unit FROM tagente_modulo WHERE id_agente_modulo = '.$id_module ); $unit_text = trim(io_safe_output($unit_text)); $percentile = $value_text; } else { $unit_text = '%'; } if ($width == 0) { $img = progress_circular_bar($id, $percentile, 200, 200, $border_color, $unit_text, io_safe_output($label), $fill_color); } else { $img = progress_circular_bar($id, $percentile, $width, $width, $border_color, $unit_text, io_safe_output($label), $fill_color); } } echo $img; if (get_parameter('tab') == 'editor') { echo "".io_safe_output($text).''; } break; case CIRCULAR_INTERIOR_PROGRESS_BAR: if (get_parameter('action') == 'edit' || (get_parameter('operation') == 'edit_visualmap')) { if ($width == 0) { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } else { if ($layoutData['id_metaconsole'] != 0) { $img = ''; } else { $img = ''; } } } else { if (($layoutData['image'] == 'value') && ($value_text !== false)) { $unit_text = db_get_sql( 'SELECT unit FROM tagente_modulo WHERE id_agente_modulo = '.$id_module ); $unit_text = trim(io_safe_output($unit_text)); $percentile = $value_text; } else { $unit_text = '%'; } if ($width == 0) { $img = progress_circular_bar_interior($id, $percentile, 200, 200, $border_color, $unit_text, io_safe_output($label), $fill_color); } else { $img = progress_circular_bar_interior($id, $percentile, $width, $width, $border_color, $unit_text, io_safe_output($label), $fill_color); } } echo $img; if (get_parameter('tab') == 'editor') { echo "".io_safe_output($text).''; } break; case MODULE_GRAPH: if ($layoutData['label_position'] == 'up') { echo io_safe_output($text); } echo $img; if ($layoutData['label_position'] == 'down') { echo io_safe_output($text); } else if ($layoutData['label_position'] == 'left' || $layoutData['label_position'] == 'right') { echo io_safe_output($text); } break; case CLOCK: if ($layoutData['label_position'] == 'up') { echo io_safe_output($text); } echo $img; if ($layoutData['label_position'] == 'down') { echo io_safe_output($text); } else if ($layoutData['label_position'] == 'left' || $layoutData['label_position'] == 'right') { echo io_safe_output($text); } break; case BARS_GRAPH: if ($layoutData['label_position'] == 'up') { echo io_safe_output($text); } echo $img; if ($layoutData['label_position'] == 'down') { echo io_safe_output($text); } else if ($layoutData['label_position'] == 'left' || $layoutData['label_position'] == 'right') { echo io_safe_output($text); } break; case AUTO_SLA_GRAPH: if ($layoutData['label_position'] == 'up') { echo io_safe_output($text); } echo $img; if ($layoutData['label_position'] == 'down') { echo io_safe_output($text); } else if ($layoutData['label_position'] == 'left' || $layoutData['label_position'] == 'right') { echo io_safe_output($text); } break; case DONUT_GRAPH: echo $img; break; case SIMPLE_VALUE: case SIMPLE_VALUE_MAX: case SIMPLE_VALUE_MIN: case SIMPLE_VALUE_AVG: $io_safe_output_text = io_safe_output($text); // Metaconsole db connection if ($layoutData['id_metaconsole'] != 0) { $connection = db_get_row_filter( 'tmetaconsole_setup', ['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']); $value = visual_map_get_simple_value( $type, $layoutData['id_agente_modulo'], $period ); global $config; $is_image = get_if_module_is_image($layoutData['id_agente_modulo']); if (get_parameter('action') == 'edit') { if (!$is_image) { echo $io_safe_output_text; } else { echo ""; } } else { if (!$is_image) { $new_text = str_replace(['(_VALUE_)', '(_value_)'], $value, $io_safe_output_text); $new_text = str_replace(['_VALUE_', '_value_'], $value, $new_text); echo $new_text; } else { $simple_value_img = str_replace('>', ' style="width:'.$layoutData['width'].'px">', $value); echo $simple_value_img; } } // Restore db connection if ($layoutData['id_metaconsole'] != 0) { metaconsole_restore_db(); } break; case LABEL: echo io_safe_output($text); break; case ICON: if ($layoutData['image'] != null) { // If match with protocol://direction if (preg_match('/^(http:\/\/)((.)+)$/i', $text)) { echo '
'.''.'
'; } if (!empty($proportion)) { if (is_file($config['homedir'].'/'.$img)) { $infoImage = getimagesize($config['homedir'].'/'.$img); } if ($width != 0) { $width = (integer) ($proportion['proportion_width'] * $width); } else { $width = (integer) ($proportion['proportion_width'] * $infoImage[0]); } if ($height != 0) { $height = (integer) ($proportion['proportion_height'] * $height); } else { $height = (integer) ($proportion['proportion_height'] * $infoImage[1]); } } $varsize = getimagesize($img); if (($width != 0) && ($height != 0)) { echo html_print_image( $img, true, [ 'class' => 'image', 'id' => 'image_'.$id, 'width' => "$width", 'height' => "$height", ], false, false, false, $isExternalLink ); } else { if ($varsize[0] > 150 || $varsize[0] > 150) { echo html_print_image( $img, true, [ 'class' => 'image', 'id' => 'image_'.$id, 'width' => '70px', '70px' => "$height", ], false, false, false, $isExternalLink ); } else { echo html_print_image( $img, true, [ 'class' => 'image', 'id' => 'image_'.$id, ], false, false, false, $isExternalLink ); } } } break; case COLOR_CLOUD: echo visual_map_get_color_cloud_element($layoutData); break; default: if (!empty($element_enterprise)) { echo $element_enterprise['item']; } break; } if ($link) { echo ''; } echo '
'; // Add the line between elements. if ($layoutData['parent_item'] != 0) { $parent = db_get_row_filter( 'tlayout_data', ['id' => $layoutData['parent_item']] ); echo ''; } } function get_if_module_is_image($id_module) { $sql = 'SELECT datos FROM tagente_estado WHERE id_agente_modulo = '.$id_module; $result = db_get_sql($sql); $image = strpos($result, 'data:image'); if ($image === false) { return false; } else { return true; } } function get_bars_module_data($id_module, $vBars=false) { // This charts is only serialize graphs. // In other string show image no data to show. $mod_values = db_get_value_filter( 'datos', 'tagente_estado', ['id_agente_modulo' => $id_module] ); $values = false; // avoid showing the image type modules. WUX if (strpos($mod_values, 'data:image/png;base64') !== 0) { if (preg_match("/\r\n/", $mod_values)) { $values = explode("\r\n", $mod_values); } else if (preg_match("/\n/", $mod_values)) { $values = explode("\n", $mod_values); } } $values_to_return = []; $index = 0; $color_index = 0; $total = 0; if (!$values) { return false; } if ($vBars === false) { foreach ($values as $val) { $data = explode(',', $val); $values_to_return[$data[0]] = ['g' => $data[1]]; } } else { foreach ($values as $val) { $data = explode(',', $val); $values_to_return[] = [ 'tick' => $data[0], 'data' => $data[1], ]; } } return $values_to_return; } /** * The function to get simple value type from the value of process type in the form * * @param int process simple value from form * * @return integer 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) { global $config; $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 ); if ($value === false) { $value = __('Unknown'); $value = preg_replace('/\n/i', '
', $value); $value = preg_replace('/\s/i', ' ', $value); } else { if (strpos($value, 'data:image') !== false) { $value = ''; } else { if (is_numeric($value)) { if ($config['simple_module_value']) { $value = remove_right_zeros(number_format($value, $config['graph_precision'])); } } if (!empty($unit_text)) { $value .= ' '.$unit_text; } $value = preg_replace('/\n/i', '
', $value); $value = preg_replace('/\s/i', ' ', $value); } } return $value; break; case SIMPLE_VALUE_MAX: $value = reporting_get_agentmodule_data_max($id_module, $period, 0); if ($value === false) { $value = __('Unknown'); } else { if (is_numeric($value)) { if ($config['simple_module_value']) { $value = format_for_graph($value, $config['graph_precision']); } } 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 { if (is_numeric($value)) { if ($config['simple_module_value']) { $value = format_for_graph($value, $config['graph_precision']); } } 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 { if (is_numeric($value)) { if ($config['simple_module_value']) { $value = format_for_graph($value, $config['graph_precision']); } } 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: case CIRCULAR_PROGRESS_BAR: case CIRCULAR_INTERIOR_PROGRESS_BAR: $value_height = $max_value; $value_image = $value_show; if ($type_percentile == 'percentile') { $value_type = PERCENTILE_BAR; } else if ($type_percentile == 'interior_circular_progress_bar') { $value_type = CIRCULAR_INTERIOR_PROGRESS_BAR; } else if ($type_percentile == 'circular_progress_bar') { $value_type = CIRCULAR_PROGRESS_BAR; } else { $value_type = PERCENTILE_BUBBLE; } break; case SIMPLE_VALUE: $value_type = $process_value; break; } $label = agents_get_alias($id_agent); $value_label = '(_VALUE_)'; if ($type === SIMPLE_VALUE) { $label .= ' '.$value_label; } $values = [ 'type' => $value_type, 'id_layout' => $id_layout, 'pos_x' => $pos_x, 'pos_y' => $pos_y, 'label' => $label, 'image' => $value_image, 'id_agent' => $id_agent, 'width' => $width, 'period' => $period, 'height' => $value_height, ]; 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, $fontf='arial', $fonts='12pt' ) { 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', ['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 = agents_get_alias($id_agent); $module_label = modules_get_agentmodule_name($id_module); $label = '

'.$agent_label.' - '.$module_label.'

'; break; case 'module': $module_label = modules_get_agentmodule_name($id_module); $label = '

'.$module_label.'

'; break; case 'agent': $agent_label = agents_get_alias($id_agent); $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: case CIRCULAR_PROGRESS_BAR: case CIRCULAR_INTERIOR_PROGRESS_BAR: $value_height = $max_value; $value_width = $percentileitem_width; $value_image = $value_show; if ($type_percentile == 'percentile') { $value_type = PERCENTILE_BAR; } else if ($type_percentile == 'interior_circular_progress_bar') { $value_type = CIRCULAR_INTERIOR_PROGRESS_BAR; } else if ($type_percentile == 'circular_progress_bar') { $value_type = CIRCULAR_PROGRESS_BAR; } else { $value_type = PERCENTILE_BUBBLE; } break; case SIMPLE_VALUE: $label = !empty($label) ? $label.' (_VALUE_)' : '(_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 = [ '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, '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; } function get_donut_module_data($id_module) { $mod_values = db_get_value_filter('datos', 'tagente_estado', ['id_agente_modulo' => $id_module]); $no_data_to_show = false; if (preg_match("/\r\n/", $mod_values)) { $values = explode("\r\n", $mod_values); } else if (preg_match("/\n/", $mod_values)) { $values = explode("\n", $mod_values); } else { $values = [__('No data to show').',1']; $no_data_to_show = true; } $colors = []; $colors[] = '#aa3333'; $colors[] = '#045FB4'; $colors[] = '#8181F7'; $colors[] = '#F78181'; $colors[] = '#D0A9F5'; $colors[] = '#BDBDBD'; $colors[] = '#6AB277'; $max_elements = 6; $values_to_return = []; $index = 0; $total = 0; foreach ($values as $val) { if ($index < $max_elements) { $data = explode(',', $val); if ($data[1] == 0) { $data[1] = __('No data'); } if ($no_data_to_show) { $values_to_return[$index]['tag_name'] = $data[0]; } else { $values_to_return[$index]['tag_name'] = $data[0].': '.$data[1]; } $values_to_return[$index]['color'] = $colors[$index]; $values_to_return[$index]['value'] = (int) $data[1]; $total += (int) $data[1]; $index++; } else { if ($data[1] == 0) { $data[1] = __('No data'); } $data = explode(',', $val); $values_to_return[$index]['tag_name'] = __('Others').': '.$data[1]; $values_to_return[$index]['color'] = $colors[$index]; $values_to_return[$index]['value'] += (int) $data[1]; $total += (int) $data[1]; } } foreach ($values_to_return as $ind => $donut_data) { $values_to_return[$ind]['percent'] = (($donut_data['value'] * 100) / $total); } $new_values_to_return = []; while (!empty($values_to_return)) { $first = true; $max_elem = 0; $max_elem_array = []; $index_to_del = 0; foreach ($values_to_return as $i => $val) { if ($first) { $max_elem = $val['value']; $max_elem_array = $val; $index_to_del = $i; $first = false; } else { if ($val['value'] > $max_elem) { $max_elem = $val['value']; $max_elem_array = $val; $index_to_del = $i; } } } $new_values_to_return[] = $max_elem_array; unset($values_to_return[$index_to_del]); } $values_to_return = $new_values_to_return; return $values_to_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, $fontf='arial', $fonts='12pt' ) { 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 = []; // 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 (is_array($id_agent)) { $id_a = $id_agent['id_agent']; $id_server = $id_agent['id_server']; $id_agent = $id_a; } 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: case CIRCULAR_PROGRESS_BAR: case CIRCULAR_INTERIOR_PROGRESS_BAR: $value_height = $max_value; $value_width = $percentileitem_width; $value_image = $value_show; if ($type_percentile == 'percentile') { $value_type = PERCENTILE_BAR; } else if ($type_percentile == 'interior_circular_progress_bar') { $value_type = CIRCULAR_INTERIOR_PROGRESS_BAR; } else if ($type_percentile == 'circular_progress_bar') { $value_type = CIRCULAR_PROGRESS_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', ['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': $label = agents_get_alias($id_agent); break; case 'none': $label = ''; break; } $label = io_safe_input($label); if ($type === SIMPLE_VALUE) { $label = !empty($label) ? $label.' (_VALUE_)' : '(_VALUE_)'; } // 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 = [ '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, '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'] = []; } 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] = []; $relationships_agents[$agent_id_parent]['id_layout_data_parent'] = null; $relationships_agents[$agent_id_parent]['id_layout_data_children'] = []; $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', ['parent_item' => $relationship_item['id_layout_data_parent']], ['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. * @param boolean $status Status. * * @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 (empty($layoutData['image'])) { return false; } if ($layoutData['type'] == 5) { // ICON ELEMENT. $img .= '.png'; } else { if ($status === false) { $status = visual_map_get_status_element($layoutData); } switch ($status) { case 1: case 4: // Critical or critical alert (BAD). $img .= '_bad.png'; break; case 0: // Normal (OK). $img .= '_ok.png'; break; case 2: case 10: // Warning or warning alert. $img .= '_warning.png'; break; case 3: // Unknown. default: $img .= '.png'; // Default is Grey (Other). break; } } 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) { global $config; 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 (!empty($layoutData['id_layout_linked'])) { if (!empty($layoutData['linked_layout_node_id'])) { // Metaconsole db connection $connection = db_get_row_filter( 'tmetaconsole_setup', ['id' => $layoutData['linked_layout_node_id']] ); if (metaconsole_load_external_db($connection) != NOERR) { return VISUAL_MAP_STATUS_UNKNOWN; } } $status = visual_map_get_layout_status($layoutData['id_layout_linked'], $layoutData); if (!empty($layoutData['linked_layout_node_id'])) { // Restore db connection metaconsole_restore_db(); } return $status; } else { switch ($layoutData['type']) { case STATIC_GRAPH: // Open metaconsole connection if ($layoutData['id_metaconsole'] != 0) { // Metaconsole db connection $connection = db_get_row_filter( 'tmetaconsole_setup', ['id' => $layoutData['id_metaconsole']] ); if (metaconsole_load_external_db($connection) != NOERR) { // ui_print_error_message ("Error connecting to ".$server_name); continue; } } // Enter the correct img if the graph has a module selected or not // Module if ($layoutData['id_agente_modulo'] != 0) { $module_status = db_get_sql( 'SELECT estado FROM tagente_estado WHERE id_agente_modulo = '.$layoutData['id_agente_modulo'] ); switch ($module_status) { case AGENT_STATUS_NORMAL: case AGENT_MODULE_STATUS_NORMAL_ALERT: $layoutData['status_calculated'] = VISUAL_MAP_STATUS_NORMAL; break; case AGENT_MODULE_STATUS_WARNING: case AGENT_MODULE_STATUS_WARNING_ALERT: $layoutData['status_calculated'] = VISUAL_MAP_STATUS_WARNING; break; case AGENT_STATUS_CRITICAL: case AGENT_MODULE_STATUS_CRITICAL_ALERT: $layoutData['status_calculated'] = VISUAL_MAP_STATUS_CRITICAL_BAD; break; case AGENT_MODULE_STATUS_NO_DATA: default: $layoutData['status_calculated'] = VISUAL_MAP_STATUS_UNKNOWN; break; } } // No module else if ($layoutData['id_agent'] != 0) { $agent = db_get_row('tagente', 'id_agente', $layoutData['id_agent']); if ($agent['total_count'] == 0 || $agent['total_count'] == $agent['notinit_count']) { $layoutData['status_calculated'] = VISUAL_MAP_STATUS_UNKNOWN; } else if ($agent['critical_count'] > 0) { $layoutData['status_calculated'] = VISUAL_MAP_STATUS_CRITICAL_BAD; } else if ($agent['warning_count'] > 0) { $layoutData['status_calculated'] = VISUAL_MAP_STATUS_WARNING; } else if ($agent['unknown_count'] > 0) { $layoutData['status_calculated'] = VISUAL_MAP_STATUS_UNKNOWN; } else { $layoutData['status_calculated'] = VISUAL_MAP_STATUS_NORMAL; } } // In other case else { $layoutData['status_calculated'] = VISUAL_MAP_STATUS_UNKNOWN; } $status = $layoutData['status_calculated']; // Close metaconsole connection if ($layoutData['id_metaconsole'] != 0) { // Restore db connection metaconsole_restore_db(); } break; case PERCENTILE_BAR: case PERCENTILE_BUBBLE: case CIRCULAR_PROGRESS_BAR: case CIRCULAR_INTERIOR_PROGRESS_BAR: $module_value = db_get_sql( 'SELECT datos FROM tagente_estado WHERE id_agente_modulo = '.$layoutData['id_agente_modulo'] ); if (empty($module_value) || $module_value == '') { return VISUAL_MAP_STATUS_UNKNOWN; } if ($layoutData['id_metaconsole'] != 0) { // Metaconsole db connection $connection = db_get_row_filter( 'tmetaconsole_setup', ['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; } function visual_map_print_user_lines($layout_data, $proportion=null) { if (empty($proportion)) { $line = []; $line['id'] = $layout_data['id']; $line['start_x'] = $layout_data['pos_x']; $line['start_y'] = $layout_data['pos_y']; $line['end_x'] = $layout_data['width']; $line['end_y'] = $layout_data['height']; $line['line_width'] = $layout_data['border_width']; $line['line_color'] = $layout_data['border_color']; } else { $proportion_width = $proportion['proportion_width']; $proportion_height = $proportion['proportion_height']; $proportion_line = $proportion_height; if ($proportion_width > $proportion_height) { $proportion_line = $proportion_width; } $line = []; $line['id'] = $layout_data['id']; $line['start_x'] = ($layout_data['pos_x'] * $proportion_width); $line['start_y'] = ($layout_data['pos_y'] * $proportion_height); $line['end_x'] = ($layout_data['width'] * $proportion_width); $line['end_y'] = ($layout_data['height'] * $proportion_height); $line['line_width'] = ($layout_data['border_width'] * $proportion_line); $line['line_color'] = $layout_data['border_color']; } echo ''; } /** * Prints visual map * * @param integer $id_layout Layout id * @param boolean $show_links * @param boolean $draw_lines */ function visual_map_print_visual_map( $id_layout, $show_links=true, $draw_lines=true, $width=null, $height=null, $home_url='', $isExternalLink=false, $graph_javascript=true, $keep_aspect_ratio=false ) { enterprise_include_once('include/functions_visual_map.php'); global $config; enterprise_include_once('meta/include/functions_ui_meta.php'); include_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; } ?> "; } echo '
'; if ($layout['background'] != 'None.png') { echo ""; } $layout_datas = db_get_all_rows_field_filter( 'tlayout_data', 'id_layout', $id_layout ); if (empty($layout_datas)) { $layout_datas = []; } $lines = []; foreach ($layout_datas as $layout_data) { $layout_group = $layout_data['element_group']; if (!check_acl($config['id_user'], $layout_group, 'VR')) { continue; } // 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; } } if (($dif_height === 0) && ($dif_width === 0)) { $proportion = null; } else { $proportion = [ 'dif_height' => $dif_height, 'dif_width' => $dif_width, 'proportion_height' => $proportion_height, 'proportion_width' => $proportion_width, ]; } $layout_data['label'] = visual_map_macro($layout_data['label'], $layout_data['id_agente_modulo']); switch ($layout_data['type']) { case NETWORK_LINK: case LINE_ITEM: visual_map_print_user_lines($layout_data, $proportion); break; default: visual_map_print_item( 'read', $layout_data, $proportion, $show_links, $isExternalLink, $graph_javascript ); break; } } // End main div echo '
'; if (is_metaconsole()) { echo ''; } } // 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, $favourite=false, $check_user_groups=true ) { if (! is_array($filter)) { $filter = []; } else { if (!empty($filter['name'])) { $where .= sprintf( "name LIKE '%%%s%%'", db_escape_string_sql(io_safe_output($filter['name'])) ); unset($filter['name']); } } if ($favourite) { if (empty($where)) { $where = ''; } if ($where != '') { $where .= ' AND '; } $where .= 'is_favourite = 1'; } if ($returnAllGroup) { $groups = users_get_groups($id_user, 'VR', true, true); } else { if (!empty($filter['group'])) { $permissions_group = users_get_groups($id_user, 'VR', false, true); if (empty($permissions_group)) { $permissions_group = users_get_groups($id_user, 'VM', false, true); } $groups = array_intersect_key($filter['group'], $permissions_group); } else { $groups = users_get_groups($id_user, 'VR', true, true); if (empty($groups)) { $groups = users_get_groups($id_user, 'VM', true, true); } } unset($filter['group']); } $return_all_group = false; if (users_can_manage_group_all()) { $return_all_group = true; } if (isset($filter['can_manage_group_all'])) { if ($filter['can_manage_group_all'] === false) { unset($groups[0]); } unset($filter['can_manage_group_all']); } if ($check_user_groups === true && !empty($groups)) { if (empty($where)) { $where = ''; } if ($where != '') { $where .= ' AND '; } $where .= sprintf('id_group IN (%s)', implode(',', array_keys($groups))); } $where .= db_format_array_where_clause_sql($filter); if ($where == '') { $where = []; } $layouts = db_get_all_rows_filter('tlayout', $where); if ($layouts == false) { return []; } $retval = []; foreach ($layouts as $layout) { if ($only_names) { $retval[$layout['id']] = $layout['name']; } else { $retval[$layout['id']] = $layout; } // add_perms if (isset($groups[$layout['id_group']]['vconsole_view'])) { $retval[$layout['id']]['vr'] = $groups[$layout['id_group']]['vconsole_view']; } if (isset($groups[$layout['id_group']]['vconsole_edit'])) { $retval[$layout['id']]['vw'] = $groups[$layout['id_group']]['vconsole_edit']; } if (isset($groups[$layout['id_group']]['vconsole_management'])) { $retval[$layout['id']]['vm'] = $groups[$layout['id_group']]['vconsole_management']; } } return $retval; } function visual_map_translate_agent_status($agent_status) { switch ($agent_status) { case AGENT_STATUS_NORMAL: case AGENT_MODULE_STATUS_NORMAL_ALERT: default: return VISUAL_MAP_STATUS_NORMAL; case AGENT_STATUS_CRITICAL: case AGENT_MODULE_STATUS_CRITICAL_ALERT: return VISUAL_MAP_STATUS_CRITICAL_BAD; case AGENT_STATUS_WARNING: case AGENT_MODULE_STATUS_WARNING_ALERT: return VISUAL_MAP_STATUS_WARNING; case AGENT_STATUS_NOT_INIT: case AGENT_STATUS_UNKNOWN: case -1: return VISUAL_MAP_STATUS_UNKNOWN; case AGENT_STATUS_ALERT_FIRED: return VISUAL_MAP_STATUS_CRITICAL_ALERT; } } function visual_map_translate_module_status($module_status) { switch ($module_status) { case AGENT_MODULE_STATUS_NORMAL: case AGENT_MODULE_STATUS_NORMAL_ALERT: default: return VISUAL_MAP_STATUS_NORMAL; case AGENT_MODULE_STATUS_CRITICAL_BAD: return VISUAL_MAP_STATUS_CRITICAL_BAD; case AGENT_MODULE_STATUS_WARNING: return VISUAL_MAP_STATUS_WARNING; case AGENT_MODULE_STATUS_UNKNOWN: case AGENT_MODULE_STATUS_NOT_INIT: case AGENT_MODULE_STATUS_NO_DATA: case -1: return VISUAL_MAP_STATUS_UNKNOWN; case AGENT_MODULE_STATUS_CRITICAL_ALERT: return VISUAL_MAP_STATUS_CRITICAL_ALERT; case AGENT_MODULE_STATUS_WARNING_ALERT: return VISUAL_MAP_STATUS_WARNING_ALERT; } } /** * 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 integer $layout_id Id of the layout. * @param array $status_data Information about the status calculation of the * item. * @param integer $depth Depth (for recursion control). * * @return integer The status of the given layout. */ function visual_map_get_layout_status($layout_id, $status_data=[], $depth=0) { global $config; // TODO: Implement this limit into the setup. if ($depth > 10) { return VISUAL_MAP_STATUS_UNKNOWN; } $layout_items = db_get_all_rows_sql( sprintf( 'SELECT tld.* FROM tlayout_data tld LEFT JOIN tagente ta ON ta.id_agente=tld.id_agent LEFT JOIN tagente_modulo tam ON tam.id_agente_modulo = tld.id_agente_modulo WHERE tld.id_layout = %d AND (ta.disabled = 0 OR ta.disabled is null) AND (tam.disabled = 0 OR tam.disabled is null)', $layout_id ) ); if ($layout_items === false) { return VISUAL_MAP_STATUS_UNKNOWN; } // Check for valid items to retrieve the status for. $valid_layout_items = []; foreach ($layout_items as $layout_item_data) { if (($layout_item_data['type'] == GROUP_ITEM && !empty($layout_item_data['id_group']) && check_acl( $config['id_user'], $layout_item_data['id_group'], 'VR' ) && check_acl( $config['id_user'], $layout_item_data['element_group'], 'VR' )) || ((!empty($layout_item_data['id_layout_linked']) || !empty($layout_item_data['id_agente_modulo']) || !empty($layout_item_data['id_agent'])) && check_acl( $config['id_user'], $layout_item_data['element_group'], 'VR' )) ) { $valid_layout_items[] = $layout_item_data; } } if (empty($valid_layout_items)) { return VISUAL_MAP_STATUS_UNKNOWN; } // Sort by node id to reduce the number of connections. if (is_metaconsole()) { sort_by_column($valid_layout_items, 'id_metaconsole'); } $num_elements_by_status = []; $meta_connected_to = null; foreach ($valid_layout_items as $layout_item_data) { $node_id = null; if (is_metaconsole()) { $node_id = ( !empty($layout_item_data['id_layout_linked']) && !empty($layout_item_data['linked_layout_node_id']) ) ? $layout_item_data['linked_layout_node_id'] : $layout_item_data['id_metaconsole']; if (empty($node_id) && $meta_connected_to) { metaconsole_restore_db(); // Restore db connection. $meta_connected_to = null; } else if (!empty($node_id) && (empty($meta_connected_to) || $meta_connected_to != $node_id) ) { if (!empty($meta_connected_to)) { metaconsole_restore_db(); // Restore db connection. } $connection = metaconsole_get_connection_by_id($node_id); if (metaconsole_load_external_db($connection) != NOERR) { continue; } $meta_connected_to = $node_id; } } $status = VISUAL_MAP_STATUS_NORMAL; $ent_element_status = enterprise_hook( 'enterprise_visual_map_get_status_element', [$layoutData] ); if ($ent_element_status === ENTERPRISE_NOT_HOOK) { $ent_element_status = false; } if ($ent_element_status !== false) { // Enterprise element. $status = $ent_element_status; } else { // Other. switch ($layout_item_data['type']) { case STATIC_GRAPH: case PERCENTILE_BAR: case PERCENTILE_BUBBLE: case CIRCULAR_PROGRESS_BAR: case CIRCULAR_INTERIOR_PROGRESS_BAR: if (!empty($layout_item_data['id_layout_linked'])) { // Linked layout. $status = visual_map_get_layout_status( $layout_item_data['id_layout_linked'], $layout_item_data, ($depth + 1) ); } else if (!empty($layout_item_data['id_agente_modulo'])) { // Module. $module_status = modules_get_agentmodule_status( $layout_item_data['id_agente_modulo'] ); $status = visual_map_translate_module_status( $module_status ); } else if (!empty($layout_item_data['id_agent'])) { // Agent. $agent = db_get_row('tagente', 'id_agente', $layout_item_data['id_agent']); $agent_status = agents_get_status_from_counts($agent); $status = visual_map_translate_agent_status( $agent_status ); } else { // Unknown. $status = VISUAL_MAP_STATUS_UNKNOWN; } break; case GROUP_ITEM: $group_status = groups_get_status( $layout_item_data['id_group'] ); $status = visual_map_translate_agent_status($group_status); 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; } } // When the status calculation type is 'default', only one critical // element is required to set the layout status as critical, so we can // return the critical status right now. if ($status_data['linked_layout_status_type'] === 'default' && ($status == VISUAL_MAP_STATUS_CRITICAL_BAD || $status == VISUAL_MAP_STATUS_CRITICAL_ALERT) ) { if (is_metaconsole() && $meta_connected_to) { // Restore db connection. metaconsole_restore_db(); } return $status; } else { if (!isset($num_elements_by_status[$status])) { $num_elements_by_status[$status] = 0; } $num_elements_by_status[$status]++; } } if (is_metaconsole() && $meta_connected_to) { // Restore db connection. metaconsole_restore_db(); } // Status calculation. switch ($status_data['linked_layout_status_type']) { default: case 'default': $num_items_critical_alert = $num_elements_by_status[VISUAL_MAP_STATUS_CRITICAL_ALERT]; $num_items_critical = $num_elements_by_status[VISUAL_MAP_STATUS_CRITICAL_BAD]; $num_items_warning_alert = $num_elements_by_status[VISUAL_MAP_STATUS_WARNING_ALERT]; $num_items_warning = $num_elements_by_status[VISUAL_MAP_STATUS_WARNING]; $num_items_unknown = $num_elements_by_status[VISUAL_MAP_STATUS_UNKNOWN]; if ($num_items_critical_alert > 0) { return VISUAL_MAP_STATUS_CRITICAL_ALERT; } else if ($num_items_critical > 0) { return VISUAL_MAP_STATUS_CRITICAL_BAD; } else if ($num_items_warning_alert > 0) { return VISUAL_MAP_STATUS_WARNING_ALERT; } else if ($num_items_warning > 0) { return VISUAL_MAP_STATUS_WARNING; } else if ($num_items_unknown > 0) { return VISUAL_MAP_STATUS_UNKNOWN; } else { return VISUAL_MAP_STATUS_NORMAL; } break; case 'weight': $weight = $status_data['id_layout_linked_weight']; $num_items = count($valid_layout_items); $num_items_critical_alert = $num_elements_by_status[VISUAL_MAP_STATUS_CRITICAL_ALERT]; $num_items_critical = $num_elements_by_status[VISUAL_MAP_STATUS_CRITICAL_BAD]; $num_items_warning_alert = $num_elements_by_status[VISUAL_MAP_STATUS_WARNING_ALERT]; $num_items_warning = $num_elements_by_status[VISUAL_MAP_STATUS_WARNING]; $num_items_unknown = $num_elements_by_status[VISUAL_MAP_STATUS_UNKNOWN]; if (($num_items_critical > 0 || $num_items_critical_alert > 0) && ((($num_items_critical_alert + $num_items_critical) * 100) / $num_items) >= $weight ) { return ($num_items_critical_alert > 0) ? VISUAL_MAP_STATUS_CRITICAL_ALERT : VISUAL_MAP_STATUS_CRITICAL_BAD; } else if (($num_items_warning > 0 || $num_items_warning_alert > 0) && (($num_items_warning_alert + $num_items_warning * 100) / $num_items) >= $weight ) { return ($num_items_warning_alert > 0) ? VISUAL_MAP_STATUS_WARNING_ALERT : VISUAL_MAP_STATUS_WARNING; } else if ($num_items_unknown > 0 && (($num_items_unknown * 100) / $num_items) >= $weight ) { return VISUAL_MAP_STATUS_UNKNOWN; } else { return VISUAL_MAP_STATUS_NORMAL; } break; case 'service': $num_items_critical = ($num_elements_by_status[VISUAL_MAP_STATUS_CRITICAL_BAD] + $num_elements_by_status[VISUAL_MAP_STATUS_CRITICAL_ALERT]); $critical_percentage = (($num_items_critical * 100) / count($valid_layout_items)); $num_items_warning = ($num_elements_by_status[VISUAL_MAP_STATUS_WARNING] + $num_elements_by_status[VISUAL_MAP_STATUS_WARNING_ALERT]); $warning_percentage = (($num_items_warning * 100) / count($valid_layout_items)); if ($critical_percentage >= $status_data['linked_layout_status_as_service_critical'] && $critical_percentage !== 0) { return VISUAL_MAP_STATUS_CRITICAL_BAD; } else if ($critical_percentage >= $status_data['linked_layout_status_as_service_warning'] && $warning_percentage !== 0) { return VISUAL_MAP_STATUS_WARNING; } else { return VISUAL_MAP_STATUS_NORMAL; } break; } } /** * 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 * () - ( - ) () * * @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 integer $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 'box_item': case BOX_ITEM: $text = __('Box'); break; case 'module_graph': case MODULE_GRAPH: $text = __('Module graph'); break; case 'clock': case CLOCK: $text = __('Clock'); break; case 'bars_graph': case BARS_GRAPH: $text = __('Bars graph'); break; case 'auto_sla_graph': case AUTO_SLA_GRAPH: $text = __('Event history graph'); break; case 'percentile_bar': case PERCENTILE_BAR: $text = __('Percentile bar'); break; case 'circular_progress_bar': case CIRCULAR_PROGRESS_BAR: $text = __('Circular progress bar'); break; case 'interior_circular_progress_bar': case CIRCULAR_INTERIOR_PROGRESS_BAR: $text = __('Circular progress bar (interior)'); break; case 'static_graph': case STATIC_GRAPH: $text = __('Static Image').' - '.$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 COLOR_CLOUD: case 'color_cloud': $text = __('Color cloud').' - '; 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) { // Avoid the sort by 'label' in the query cause oracle cannot sort by columns with CLOB type $items = db_get_all_rows_filter('tlayout_data', ['id_layout' => $idVisual]); if ($items == false) { $items = []; } else { // Sort by label sort_by_column($items, 'label'); } $return = []; foreach ($items as $item) { $agent = null; if ($item['id_agent'] != 0) { $agent = io_safe_output(agents_get_alias($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 integer 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 integer 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 ); } function visual_map_type_in_js($type) { switch ($type) { case STATIC_GRAPH: return 'static_graph'; break; case PERCENTILE_BAR: return 'percentile_item'; break; case CIRCULAR_PROGRESS_BAR: return 'percentile_item'; break; case CIRCULAR_INTERIOR_PROGRESS_BAR: return 'percentile_item'; break; case MODULE_GRAPH: return 'module_graph'; break; case BARS_GRAPH: return 'bars_graph'; break; case AUTO_SLA_GRAPH: return 'auto_sla_graph'; break; case SIMPLE_VALUE: return 'simple_value'; break; case LABEL: return 'label'; break; case ICON: return 'icon'; break; case CLOCK: return 'clock'; break; case SIMPLE_VALUE_MAX: return 'simple_value'; break; case SIMPLE_VALUE_MIN: return 'simple_value'; break; case SIMPLE_VALUE_AVG: return 'simple_value'; break; case PERCENTILE_BUBBLE: return 'percentile_item'; break; case SERVICE: return 'service'; break; case GROUP_ITEM: return 'group_item'; break; case BOX_ITEM: return 'box_item'; break; case LINE_ITEM: return 'line_item'; case NETWORK_LINK: return 'network_link'; case COLOR_CLOUD: return 'color_cloud'; break; } } function visual_map_macro($label, $module) { $label = str_replace('_date_', strftime('%x'), $label); $label = str_replace('_time_', strftime('%T'), $label); $label = str_replace('_agent_', agents_get_alias(modules_get_agentmodule_agent($module)), $label); $label = str_replace('_module_', modules_get_agentmodule_name($module), $label); $label = str_replace('_agentdescription_', agents_get_description(modules_get_agentmodule_agent($module)), $label); $label = str_replace('_address_', agents_get_address(modules_get_agentmodule_agent($module)), $label); $label = str_replace('_moduledescription_', modules_get_agentmodule_descripcion($module), $label); return $label; } function visual_map_get_color_cloud_element($data) { $id = (int) $data['id']; $diameter = (int) $data['width']; $dynamic_fields = []; try { // Yes, the dynamic fields object is stored into the label field. ¯\_(ツ)_/¯ if (!empty($data['label'])) { $dynamic_fields = json_decode($data['label'], true); } } catch (Exception $ex) { } $default_color = !empty($dynamic_fields['default_color']) ? $dynamic_fields['default_color'] : '#FFFFFF'; $color = $default_color; // The svg gradient needs a unique identifier $gradient_id = 'grad_'.$id; // Color ranges if (!empty($dynamic_fields['color_ranges']) && !empty($data['id_agente_modulo']) ) { $node_id = null; $node_connected = false; // Connect to node if (is_metaconsole() && !empty($data['id_metaconsole'])) { $node_id = (int) $data['id_metaconsole']; if (metaconsole_connect(null, $node_id) === NOERR) { $node_connected = true; } } // Fetch module value $value = (!$node_id || ($node_id && $node_connected)) ? modules_get_last_value($data['id_agente_modulo']) : false; // Restore connection if ($node_connected) { metaconsole_restore_db(); } if ($value !== false) { /* TODO: It would be ok to give support to string values in the future? * It can be done by matching the range value with the value if it is a * string. I think the function to retrieve the value only supports * numeric values. */ $value = (float) $value; foreach ($dynamic_fields['color_ranges'] as $range) { if ($range['from_value'] <= $value && $range['to_value'] >= $value) { $color = $range['color']; break; } } } } ob_start(); ?> '; continue; } preg_match('/.*.css$/', $file, $match, PREG_OFFSET_CAPTURE); if (empty($match) === false) { $url = $baseUrl.$vcClientPath.'/'.$match[0][0]; echo ''; } } closedir($dh); } } }