$module['id_agente_modulo'], 'interval' => $module['current_interval'], 'module_name' => $module['nombre'], ] ); $value = ui_get_snapshot_image($link, $is_snapshot).'  '; } else { $value = ui_print_module_string_value( $module_value, $module['id_agente_modulo'], $module['current_interval'], $module['module_name'] ); } } echo json_encode($value); return; } return; } ob_end_clean(); // Take some parameters (GET). $group_id = (int) get_parameter('group_id', 0); $search = trim(get_parameter('search', '')); $search_custom = trim(get_parameter('search_custom', '')); $offset = (int) get_parameter('offset', 0); $refr = get_parameter('refr', 0); $recursion = get_parameter('recursion', 0); $status = (int) get_parameter('status', -1); $strict_user = db_get_value('strict_acl', 'tusuario', 'id_user', $config['id_user']); $agent_a = (bool) check_acl($config['id_user'], 0, 'AR'); $agent_w = (bool) check_acl($config['id_user'], 0, 'AW'); $access = ($agent_a === true) ? 'AR' : (($agent_w === true) ? 'AW' : 'AR'); $onheader = []; if (check_acl($config['id_user'], 0, 'AW')) { // Prepare the tab system to the future. $tab = 'setup'; // Setup tab. $setuptab['text'] = ''.html_print_image( 'images/setup.png', true, [ 'title' => __('Setup'), 'class' => 'invert_filter', ] ).''; $setuptab['godmode'] = true; $setuptab['active'] = false; $onheader = ['setup' => $setuptab]; } // Header. ui_print_standard_header( __('Agent detail'), 'images/agent.png', false, '', false, $onheader, [ [ 'link' => '', 'label' => __('Monitoring'), ], [ 'link' => '', 'label' => __('Views'), ], ] ); if (!$strict_user) { if (tags_has_user_acl_tags()) { ui_print_tags_warning(); } } // User is deleting agent. if (isset($result_delete)) { if ($result_delete) { ui_print_success_message(__('Sucessfully deleted agent')); } else { ui_print_error_message(__('There was an error message deleting the agent')); } } echo '
'; echo ''; echo ''; echo '
'; echo __('Group').' '; $groups = users_get_groups(false, $access); html_print_select_groups(false, $access, true, 'group_id', $group_id, 'this.form.submit()', '', '', false, false, true, '', false); echo ''; echo __('Recursion').' '; html_print_checkbox('recursion', 1, $recursion, false, false, 'this.form.submit()'); echo ''; echo __('Search').' '; html_print_input_text('search', $search, '', 15); echo ''; $fields = []; $fields[AGENT_STATUS_NORMAL] = __('Normal'); $fields[AGENT_STATUS_WARNING] = __('Warning'); $fields[AGENT_STATUS_CRITICAL] = __('Critical'); $fields[AGENT_STATUS_UNKNOWN] = __('Unknown'); $fields[AGENT_STATUS_NOT_NORMAL] = __('Not normal'); $fields[AGENT_STATUS_NOT_INIT] = __('Not init'); echo __('Status').' '; html_print_select($fields, 'status', $status, 'this.form.submit()', __('All'), AGENT_STATUS_ALL, false, false, true, '', false, 'width: 90px;'); echo ''; echo __('Search in custom fields').' '; html_print_input_text('search_custom', $search_custom, '', 15); echo ''; html_print_submit_button( __('Search'), 'srcbutton', '', ['class' => 'sub search'] ); echo '
'; if ($search != '') { $filter = ['string' => '%'.$search.'%']; } else { $filter = []; } $sortField = get_parameter('sort_field'); $sort = get_parameter('sort', 'none'); $selected = true; $selectNameUp = false; $selectNameDown = false; $selectOsUp = false; $selectOsDown = false; $selectIntervalUp = false; $selectIntervalDown = false; $selectGroupUp = false; $selectGroupDown = false; $selectDescriptionUp = false; $selectDescriptionDown = false; $selectLastContactUp = false; $selectLastContactDown = false; $order = null; $order_collation = ''; switch ($config['dbtype']) { case 'mysql': // $order_collation = " COLLATE utf8_general_ci";. $order_collation = ''; break; case 'postgresql': case 'oracle': $order_collation = ''; break; } switch ($sortField) { case 'remote': switch ($sort) { case 'up': $selectRemoteUp = $selected; $order = [ 'field' => 'remote'.$order_collation, 'field2' => 'nombre'.$order_collation, 'order' => 'ASC', ]; break; case 'down': $selectRemoteDown = $selected; $order = [ 'field' => 'remote'.$order_collation, 'field2' => 'nombre'.$order_collation, 'order' => 'DESC', ]; break; default: // Default. break; } break; case 'name': switch ($sort) { case 'up': $selectNameUp = $selected; $order = [ 'field' => 'alias'.$order_collation, 'field2' => 'alias'.$order_collation, 'order' => 'ASC', ]; break; case 'down': $selectNameDown = $selected; $order = [ 'field' => 'alias'.$order_collation, 'field2' => 'alias'.$order_collation, 'order' => 'DESC', ]; break; default: // Default. break; } break; case 'os': switch ($sort) { case 'up': $selectOsUp = $selected; $order = [ 'field' => 'id_os', 'field2' => 'alias'.$order_collation, 'order' => 'ASC', ]; break; case 'down': $selectOsDown = $selected; $order = [ 'field' => 'id_os', 'field2' => 'alias'.$order_collation, 'order' => 'DESC', ]; break; default: // Default. break; } break; case 'interval': switch ($sort) { case 'up': $selectIntervalUp = $selected; $order = [ 'field' => 'intervalo', 'field2' => 'alias'.$order_collation, 'order' => 'ASC', ]; break; case 'down': $selectIntervalDown = $selected; $order = [ 'field' => 'intervalo', 'field2' => 'alias'.$order_collation, 'order' => 'DESC', ]; break; default: // Default. break; } break; case 'group': switch ($sort) { case 'up': $selectGroupUp = $selected; $order = [ 'field' => 'id_grupo', 'field2' => 'alias'.$order_collation, 'order' => 'ASC', ]; break; case 'down': $selectGroupDown = $selected; $order = [ 'field' => 'id_grupo', 'field2' => 'alias'.$order_collation, 'order' => 'DESC', ]; break; default: // Default. break; } break; case 'last_contact': switch ($sort) { case 'up': $selectLastContactUp = $selected; $order = [ 'field' => 'ultimo_contacto', 'field2' => 'alias'.$order_collation, 'order' => 'DESC', ]; break; case 'down': $selectLastContactDown = $selected; $order = [ 'field' => 'ultimo_contacto', 'field2' => 'alias'.$order_collation, 'order' => 'ASC', ]; break; default: // Default. break; } break; case 'description': switch ($sort) { case 'up': $selectDescriptionUp = $selected; $order = [ 'field' => 'comentarios', 'field2' => 'alias'.$order_collation, 'order' => 'DESC', ]; break; case 'down': $selectDescriptionDown = $selected; $order = [ 'field' => 'comentarios', 'field2' => 'alias'.$order_collation, 'order' => 'ASC', ]; break; default: // Default. break; } break; default: $selectNameUp = $selected; $selectNameDown = false; $selectOsUp = false; $selectOsDown = false; $selectIntervalUp = false; $selectIntervalDown = false; $selectGroupUp = false; $selectGroupDown = false; $selectDescriptionUp = false; $selectDescriptionDown = false; $selectLastContactUp = false; $selectLastContactDown = false; $order = [ 'field' => 'alias'.$order_collation, 'field2' => 'alias'.$order_collation, 'order' => 'ASC', ]; break; } $search_sql = ''; if ($search != '') { $sql = "SELECT DISTINCT taddress_agent.id_agent FROM taddress INNER JOIN taddress_agent ON taddress.id_a = taddress_agent.id_a WHERE taddress.ip LIKE '%$search%'"; $id = db_get_all_rows_sql($sql); if ($id != '') { $aux = $id[0]['id_agent']; $search_sql = ' AND ( nombre '.$order_collation." COLLATE utf8_general_ci LIKE '%$search%' OR alias ".$order_collation." COLLATE utf8_general_ci LIKE '%$search%' OR tagente.id_agente = $aux"; if (count($id) >= 2) { for ($i = 1; $i < count($id); $i++) { $aux = $id[$i]['id_agent']; $search_sql .= " OR tagente.id_agente = $aux"; } } $search_sql .= ')'; } else { $search_sql = ' AND ( nombre '.$order_collation." COLLATE utf8_general_ci LIKE '%$search%' OR comentarios ".$order_collation." COLLATE utf8_general_ci LIKE '%$search%' OR alias ".$order_collation." COLLATE utf8_general_ci LIKE '%$search%') "; } } if (!empty($search_custom)) { $search_sql_custom = " AND EXISTS (SELECT * FROM tagent_custom_data WHERE id_agent = id_agente AND description LIKE '%$search_custom%')"; } else { $search_sql_custom = ''; } // Show only selected groups. if ($group_id > 0) { $groups = [$group_id]; if ($recursion) { $groups = groups_get_children_ids($group_id, true); } } else { $groups = []; $user_groups = users_get_groups($config['id_user'], $access); $groups = array_keys($user_groups); } if ($strict_user) { $count_filter = [ // 'order' => 'tagente.nombre COLLATE utf8_general_ci ASC', 'order' => 'tagente.nombre ASC', 'disabled' => 0, 'status' => $status, 'search' => $search, ]; $filter = [ // 'order' => 'tagente.nombre COLLATE utf8_general_ci ASC', 'order' => 'tagente.nombre ASC', 'disabled' => 0, 'status' => $status, 'search' => $search, 'offset' => (int) get_parameter('offset'), 'limit' => (int) $config['block_size'], ]; if ($group_id > 0) { $groups = [$group_id]; if ($recursion) { $groups = groups_get_children_ids($group_id, true); } $filter['id_group'] = implode(',', $groups); $count_filter['id_group'] = $filter['id_group']; } $fields = [ 'tagente.id_agente', 'tagente.id_grupo', 'tagente.id_os', 'tagente.ultimo_contacto', 'tagente.intervalo', 'tagente.comentarios description', 'tagente.quiet', 'tagente.normal_count', 'tagente.warning_count', 'tagente.critical_count', 'tagente.unknown_count', 'tagente.notinit_count', 'tagente.total_count', 'tagente.fired_count', 'tagente.nombre', 'tagente.alias', ]; $acltags = tags_get_user_groups_and_tags($config['id_user'], $access, $strict_user); $total_agents = tags_get_all_user_agents(false, $config['id_user'], $acltags, $count_filter, $fields, false, $strict_user, true); $total_agents = count($total_agents); $agents = tags_get_all_user_agents(false, $config['id_user'], $acltags, $filter, $fields, false, $strict_user, true); } else { $total_agents = agents_count_agents_filter( [ 'disabled' => 0, 'id_grupo' => $groups, 'search' => $search_sql, 'search_custom' => $search_sql_custom, 'status' => $status, ], $access ); $agents = agents_get_agents( [ 'order' => 'nombre '.$order_collation.' ASC', 'id_grupo' => $groups, 'disabled' => 0, 'status' => $status, 'search_custom' => $search_sql_custom, 'search' => $search_sql, 'offset' => (int) get_parameter('offset'), 'limit' => (int) $config['block_size'], ], [ 'id_agente', 'id_grupo', 'nombre', 'alias', 'id_os', 'ultimo_contacto', 'intervalo', 'comentarios description', 'quiet', 'normal_count', 'warning_count', 'critical_count', 'unknown_count', 'notinit_count', 'total_count', 'fired_count', 'ultimo_contacto_remoto', 'remote', 'agent_version', ], $access, $order ); } if (empty($agents)) { $agents = []; } if ($config['language'] == 'ja' || $config['language'] == 'zh_CN' || $own_info['language'] == 'ja' || $own_info['language'] == 'zh_CN' ) { // Adds a custom font size for Japanese and Chinese language. $custom_font_size = 'custom_font_size'; } // Urls to sort the table. $url_up_agente = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=name&sort=up'; $url_down_agente = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=name&sort=down'; $url_up_description = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=description&sort=up'; $url_down_description = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=description&sort=down'; $url_up_remote = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=remote&sort=up'; $url_down_remote = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=remote&sort=down'; $url_up_os = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=os&sort=up'; $url_down_os = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=os&sort=down'; $url_up_interval = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=interval&sort=up'; $url_down_interval = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=interval&sort=down'; $url_up_group = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=group&sort=up'; $url_down_group = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=group&sort=down'; $url_up_last = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=last_contact&sort=up'; $url_down_last = 'index.php?sec=view&sec2=operation/agentes/estado_agente&refr='.$refr.'&offset='.$offset.'&group_id='.$group_id.'&recursion='.$recursion.'&search='.$search.'&status='.$status.'&sort_field=last_contact&sort=down'; // Prepare pagination. ui_pagination( $total_agents, ui_get_url_refresh(['group_id' => $group_id, 'recursion' => $recursion, 'search' => $search, 'sort_field' => $sortField, 'sort' => $sort, 'status' => $status]) ); // Show data. $table = new stdClass(); $table->cellpadding = 0; $table->cellspacing = 0; $table->width = '100%'; $table->class = 'info_table'; $table->head = []; $table->head[0] = __('Agent').ui_get_sorting_arrows($url_up_agente, $url_down_agente, $selectNameUp, $selectNameDown); $table->size[0] = '12%'; $table->head[1] = __('Description').ui_get_sorting_arrows($url_up_description, $url_down_description, $selectDescriptionUp, $selectDescriptionDown); $table->size[1] = '16%'; $table->head[10] = __('Remote').ui_get_sorting_arrows($url_up_remote, $url_down_remote, $selectRemoteUp, $selectRemoteDown); $table->size[10] = '9%'; $table->head[2] = __('OS').ui_get_sorting_arrows($url_up_os, $url_down_os, $selectOsUp, $selectOsDown); $table->size[2] = '8%'; $table->head[3] = __('Interval').ui_get_sorting_arrows($url_up_interval, $url_down_interval, $selectIntervalUp, $selectIntervalDown); $table->size[3] = '10%'; $table->head[4] = __('Group').ui_get_sorting_arrows($url_up_group, $url_down_group, $selectGroupUp, $selectGroupDown); $table->size[4] = '8%'; $table->head[5] = __('Type'); $table->size[5] = '8%'; $table->head[6] = __('Modules'); $table->size[6] = '10%'; $table->head[7] = __('Status'); $table->size[7] = '4%'; $table->head[8] = __('Alerts'); $table->size[8] = '4%'; $table->head[9] = __('Last contact').ui_get_sorting_arrows($url_up_last, $url_down_last, $selectLastContactUp, $selectLastContactDown); $table->size[9] = '15%'; $table->align = []; $table->align[2] = 'left'; $table->align[3] = 'left'; $table->align[4] = 'left'; $table->align[5] = 'left'; $table->align[6] = 'left'; $table->align[7] = 'left'; $table->align[8] = 'left'; $table->align[9] = 'left'; $table->style = []; $table->data = []; $rowPair = true; $iterator = 0; foreach ($agents as $agent) { $cluster = db_get_row_sql('select id from tcluster where id_agent = '.$agent['id_agente']); if ($rowPair) { $table->rowclass[$iterator] = 'rowPair'; } else { $table->rowclass[$iterator] = 'rowOdd'; } $rowPair = !$rowPair; $iterator++; $alert_img = agents_tree_view_alert_img($agent['fired_count']); $status_img = agents_tree_view_status_img( $agent['critical_count'], $agent['warning_count'], $agent['unknown_count'], $agent['total_count'], $agent['notinit_count'] ); $in_planned_downtime = db_get_sql( 'SELECT executed FROM tplanned_downtime INNER JOIN tplanned_downtime_agents ON tplanned_downtime.id = tplanned_downtime_agents.id_downtime WHERE tplanned_downtime_agents.id_agent = '.$agent['id_agente'].' AND tplanned_downtime.executed = 1' ); $data = []; $data[0] = '
'; $data[0] .= ''.ui_print_truncate_text($agent['alias'], 'agent_medium', false, true, true).''; if ($agent['quiet']) { $data[0] .= ' '; $data[0] .= html_print_image( 'images/dot_blue.png', true, [ 'border' => '0', 'title' => __('Quiet'), 'alt' => '', ] ); } if ($in_planned_downtime) { $data[0] .= ui_print_help_tip( __('Agent in scheduled downtime'), true, 'images/minireloj-16.png' ); $data[0] .= ''; } $data[0] .= '
'; $data[1] = ''.ui_print_truncate_text($agent['description'], 'description', false, true, true, '[…]').''; $data[10] = ''; if (enterprise_installed()) { enterprise_include_once('include/functions_config_agents.php'); if (enterprise_hook('config_agents_has_remote_configuration', [$agent['id_agente']])) { $data[10] = ''.html_print_image( 'images/application_edit.png', true, [ 'align' => 'middle', 'title' => __('Remote config'), 'class' => 'invert_filter', ] ).''; } } $data[2] = ui_print_os_icon($agent['id_os'], false, true); $data[3] = ''.human_time_description_raw( $agent['intervalo'] ).''; $data[4] = ''; $data[4] .= ui_print_group_icon( $agent['id_grupo'], true, 'groups_small', '', false ); $data[4] .= ''; $agent['not_init_count'] = $agent['notinit_count']; $data[5] = ui_print_type_agent_icon( $agent['id_os'], $agent['ultimo_contacto_remoto'], $agent['ultimo_contacto'], $agent['remote'], $agent['agent_version'] ); $data[6] = reporting_tiny_stats($agent, true, 'modules', ':', $strict_user); $data[7] = $status_img; $data[8] = $alert_img; $data[9] = agents_get_interval_status($agent); // This old code was returning "never" on agents without modules, BAD !! // And does not print outdated agents in red. WRONG !!!! // $data[7] = ui_print_timestamp ($agent_info["last_contact"], true); array_push($table->data, $data); } if (!empty($table->data)) { html_print_table($table); ui_pagination( $total_agents, ui_get_url_refresh( [ 'group_id' => $group_id, 'search' => $search, 'sort_field' => $sortField, 'sort' => $sort, 'status' => $status, ] ), 0, 0, false, 'offset', true, 'pagination-bottom' ); if (check_acl($config['id_user'], 0, 'AW') || check_acl($config['id_user'], 0, 'AM')) { echo '
'; echo '
'; html_print_submit_button(__('Create agent'), 'crt', false, 'class="sub next"'); echo '
'; echo '
'; } unset($table); } else { ui_print_info_message([ 'no_close' => true, 'message' => __('There are no defined agents') ]); echo '
'; echo '
'; html_print_submit_button(__('Create agent'), 'crt', false, 'class="sub next"'); echo '
'; echo '
'; } ?>