' . html_print_image ("images/operation.png", true, array ("title" =>__('View'))) . ''; $viewtab['operation'] = true; $viewtab['active'] = false; $onheader = array('view' => $viewtab); // Header ui_print_page_header (__('Agents defined in Pandora'), "images/agent_mc.png", false, "", true, $onheader); // Perform actions $agent_to_delete = (int)get_parameter('borrar_agente'); $enable_agent = (int)get_parameter('enable_agent'); $disable_agent = (int)get_parameter('disable_agent'); if($disable_agent != 0){ $server_name = db_get_row_sql('select server_name from tagente where id_agente = '.$disable_agent); } elseif ($enable_agent != 0) { $server_name = db_get_row_sql('select server_name from tagente where id_agente = '.$enable_agent); } $result = null; if ($agent_to_delete) { $id_agente = $agent_to_delete; $agent_name = agents_get_name ($id_agente); $id_grupo = agents_get_agent_group($id_agente); if (check_acl ($config["id_user"], $id_grupo, "AW")) { $id_agentes[0] = $id_agente; $result = agents_delete_agent($id_agentes); } else { // NO permissions. db_pandora_audit("ACL Violation", "Trying to delete agent \'$agent_name\'"); require ("general/noaccess.php"); exit; } ui_print_result_message($result, __('Success deleted agent.'), __('Could not be deleted.')); if (enterprise_installed()) { // Check if the remote config file still exist if (isset ($config["remote_config"])) { enterprise_include_once('include/functions_config_agents.php'); if (enterprise_hook('config_agents_has_remote_configuration', array($id_agente))) { ui_print_error_message(__('Maybe the files conf or md5 could not be deleted')); } } } } if ($enable_agent) { $result = db_process_sql_update('tagente', array('disabled' => 0), array('id_agente' => $enable_agent)); $alias = agents_get_alias($enable_agent); if ($result) { // Update the agent from the metaconsole cache enterprise_include_once('include/functions_agents.php'); $values = array('disabled' => 0); enterprise_hook ('agent_update_from_cache', array($enable_agent, $values,$server_name)); db_pandora_audit("Agent management", 'Enable ' . $alias); } else { db_pandora_audit("Agent management", 'Fail to enable ' . $alias); } ui_print_result_message ($result, __('Successfully enabled'), __('Could not be enabled')); } if ($disable_agent) { $result = db_process_sql_update('tagente', array('disabled' => 1), array('id_agente' => $disable_agent)); $alias = agents_get_alias($disable_agent); if ($result) { // Update the agent from the metaconsole cache enterprise_include_once('include/functions_agents.php'); $values = array('disabled' => 1); enterprise_hook ('agent_update_from_cache', array($disable_agent, $values,$server_name)); db_pandora_audit("Agent management", 'Disable ' . $alias); } else { db_pandora_audit("Agent management", 'Fail to disable ' . $alias); } ui_print_result_message ($result, __('Successfully disabled'), __('Could not be disabled')); } echo ""; echo ""; echo ""; echo ""; echo "
"; echo __('Group') . ' '; $own_info = get_user_info($config['id_user']); if (!$own_info['is_admin'] && !check_acl ($config['id_user'], 0, "AW")) $return_all_group = false; else $return_all_group = true; html_print_select_groups(false, "AR", $return_all_group, "ag_group", $ag_group, 'this.form.submit();', '', 0, false, false, true, '', false); echo ""; echo __('Show Agents') . ' '; $fields = array( 2 => __('Everyone'), 1 => __('Only disabled'), 0 => __('Only enabled'), ); html_print_select($fields,"disabled",$disabled,'this.form.submit()'); echo ""; echo __('Operative System') . ' '; $pre_fields = db_get_all_rows_sql('select distinct(tagente.id_os),tconfig_os.description from tagente,tconfig_os where tagente.id_os = tconfig_os.id_os'); $fields = array(); foreach ($pre_fields as $key => $value) { $fields[$value['id_os']] = $value['description']; } html_print_select($fields,"os",$os,'this.form.submit()','All',0); echo ""; echo __('Recursion') . ' '; html_print_checkbox ("recursion", 1, $recursion, false, false, 'this.form.submit()'); echo ""; echo __('Search') . ' '; html_print_input_text ("search", $search, '', 12); echo ui_print_help_tip(__('Search filter by alias, name, description, IP address or custom fields content'), true); echo ""; echo ""; echo ""; echo ""; echo "
"; $order_collation = ""; switch ($config["dbtype"]) { case "mysql": $order_collation = ""; $order_collation = "COLLATE utf8_general_ci"; break; case "postgresql": case "oracle": $order_collation = ""; break; } $selected = 'border: 1px solid black;'; $selectNameUp = ''; $selectNameDown = ''; $selectOsUp = ''; $selectOsDown = ''; $selectGroupUp = ''; $selectGroupDown = ''; switch ($sortField) { case 'remote': switch ($sort) { case 'up': $selectRemoteUp = $selected; $order = array('field' => 'remote ', 'field2' => 'nombre ' . $order_collation, 'order' => 'ASC'); break; case 'down': $selectRemoteDown = $selected; $order = array('field' => 'remote ', 'field2' => 'nombre ' . $order_collation, 'order' => 'DESC'); break; } break; case 'name': switch ($sort) { case 'up': $selectNameUp = $selected; $order = array('field' => 'alias ' . $order_collation, 'field2' => 'alias ' . $order_collation, 'order' => 'ASC'); break; case 'down': $selectNameDown = $selected; $order = array('field' => 'alias ' . $order_collation, 'field2' => 'alias ' . $order_collation, 'order' => 'DESC'); break; } break; case 'os': switch ($sort) { case 'up': $selectOsUp = $selected; $order = array('field' => 'id_os', 'field2' => 'alias ' . $order_collation, 'order' => 'ASC'); break; case 'down': $selectOsDown = $selected; $order = array('field' => 'id_os', 'field2' => 'alias ' . $order_collation, 'order' => 'DESC'); break; } break; case 'group': switch ($sort) { case 'up': $selectGroupUp = $selected; $order = array('field' => 'id_grupo', 'field2' => 'alias ' . $order_collation, 'order' => 'ASC'); break; case 'down': $selectGroupDown = $selected; $order = array('field' => 'id_grupo', 'field2' => 'alias ' . $order_collation, 'order' => 'DESC'); break; } break; default: $selectNameUp = $selected; $selectNameDown = ''; $selectOsUp = ''; $selectOsDown = ''; $selectGroupUp = ''; $selectGroupDown = ''; $order = array('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 ( LOWER(nombre) " . $order_collation . " LIKE LOWER('%$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 . " LIKE LOWER('%$search%') OR alias " . $order_collation . " LIKE LOWER('%$search%') OR comentarios " . $order_collation . " LIKE LOWER('%$search%') OR EXISTS (SELECT * FROM tagent_custom_data WHERE id_agent = id_agente AND description LIKE '%$search%'))"; } } if ($disabled == 1) { $search_sql .= " AND disabled = ". $disabled . $search_sql; } else { if ($disabled == 0) { $search_sql .= " AND disabled = 0" . $search_sql; } } if($os != 0){ $search_sql .= " AND id_os = " . $os; } // Show only selected groups if ($ag_group > 0) { $ag_groups = array(); $ag_groups = (array)$ag_group; if ($recursion) { $ag_groups = groups_get_id_recursive($ag_group, true); } switch ($config["dbtype"]) { case "mysql": $sql = sprintf ('SELECT * FROM tagente WHERE id_grupo IN (%s) %s ORDER BY %s %s, %s %s LIMIT %d, %d', implode (",", $ag_groups), $search_sql, $order['field'],$order['order'], $order['field2'], $order['order'], $offset, $config["block_size"]); break; case "postgresql": $sql = sprintf ('SELECT * FROM tagente WHERE id_grupo IN (%s) %s ORDER BY %s %s, %s %s LIMIT %d OFFSET %d', implode (",", $ag_groups), $search_sql, $order['field'],$order['order'], $order['field2'], $order['order'], $config["block_size"], $offset); break; case "oracle": $set = array (); $set['limit'] = $config["block_size"]; $set['offset'] = $offset; $sql = sprintf ('SELECT * FROM tagente WHERE id_grupo IN (%s) %s ORDER BY %s %s, %s %s', implode (",", $ag_groups), $search_sql, $order['field'],$order['order'], $order['field2'], $order['order']); $sql = oracle_recode_query ($sql, $set); break; } $sql_total = sprintf ('SELECT COUNT(*) FROM tagente WHERE id_grupo IN (%s) %s', implode (",", $ag_groups), $search_sql); $total_agents = db_get_sql ($sql_total); } else { // Admin user get ANY group, even if they doesnt exist if (check_acl ($config['id_user'], 0, "PM")) { $sql = sprintf ('SELECT COUNT(*) FROM tagente WHERE 1=1 %s', $search_sql); $total_agents = db_get_sql ($sql); switch ($config["dbtype"]) { case "mysql": $order['field2'] = ""; /* $sql = sprintf ('SELECT * FROM tagente WHERE 1=1 %s ORDER BY %s %s, %s %s LIMIT %d, %d', $search_sql, $order['field'],$order['order'], $order['field2'], $order['order'], $offset, $config["block_size"]); */ $sql = sprintf ('SELECT * FROM tagente WHERE 1=1 %s ORDER BY %s %s %s LIMIT %d, %d', $search_sql, $order['field'], $order['field2'], $order['order'], $offset, $config["block_size"]); break; case "postgresql": $sql = sprintf ('SELECT * FROM tagente WHERE 1=1 %s ORDER BY %s %s, %s %s LIMIT %d OFFSET %d', $search_sql, $order['field'],$order['order'], $order['field2'], $order['order'], $config["block_size"], $offset); break; case "oracle": $set = array (); $set['limit'] = $config["block_size"]; $set['offset'] = $offset; $sql = sprintf ('SELECT * FROM tagente WHERE 1=1 %s ORDER BY %s %s, %s %s', $search_sql, $order['field'],$order['order'], $order['field2'], $order['order']); $sql = oracle_recode_query ($sql, $set); break; } } else { // Concatenate AW and AD permisions to get all the possible groups where the user can manage $user_groupsAW = users_get_groups ($config['id_user'], 'AW'); $user_groupsAD = users_get_groups ($config['id_user'], 'AD'); $user_groups = $user_groupsAW + $user_groupsAD; $sql = sprintf ('SELECT COUNT(*) FROM tagente WHERE id_grupo IN (%s) %s', implode (',', array_keys ($user_groups)), $search_sql); $total_agents = db_get_sql ($sql); switch ($config["dbtype"]) { case "mysql": $sql = sprintf ('SELECT * FROM tagente WHERE id_grupo IN (%s) %s ORDER BY %s %s, %s %s LIMIT %d, %d', implode (',', array_keys ($user_groups)), $search_sql, $order['field'],$order['order'], $order['field2'], $order['order'], $offset, $config["block_size"]); break; case "postgresql": $sql = sprintf ('SELECT * FROM tagente WHERE id_grupo IN (%s) %s ORDER BY %s %s, %s %s LIMIT %d OFFSET %d', implode (',', array_keys ($user_groups)), $search_sql, $order['field'],$order['order'], $order['field2'], $order['order'], $config["block_size"], $offset); break; case "oracle": $set = array (); $set['limit'] = $config["block_size"]; $set['offset'] = $offset; $sql = sprintf ('SELECT * FROM tagente WHERE id_grupo IN (%s) %s ORDER BY %s %s, %s %s', implode (',', array_keys ($user_groups)), $search_sql, $order['field'],$order['order'], $order['field2'], $order['order']); $sql = oracle_recode_query ($sql, $set); break; } } } $agents = db_get_all_rows_sql ($sql); // Delete rnum row generated by oracle_recode_query() function if (($config['dbtype'] == 'oracle') && ($agents !== false)) { for ($i=0; $i < count($agents); $i++) { unset($agents[$i]['rnum']); } } // Prepare pagination ui_pagination ($total_agents, "index.php?sec=gagente&sec2=godmode/agentes/modificar_agente&group_id=$ag_group&recursion=$recursion&search=$search&sort_field=$sortField&sort=$sort&disabled=$disabled", $offset); if ($agents !== false) { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; $color=1; $rowPair = true; $iterator = 0; foreach ($agents as $agent) { /* Begin Update tagente.remote 0/1 with remote agent function return */ if(enterprise_hook('config_agents_has_remote_configuration',array($agent['id_agente']))){ db_process_sql_update('tagente', array('remote' => 1),'id_agente = '.$agent['id_agente'].''); } else{ db_process_sql_update('tagente', array('remote' => 0),'id_agente = '.$agent['id_agente'].''); } /* End Update tagente.remote 0/1 with remote agent function return */ $id_grupo = $agent["id_grupo"]; if (! check_acl ($config["id_user"], $id_grupo, "AW", $agent['id_agente']) && ! check_acl ($config["id_user"], $id_grupo, "AD", $agent['id_agente'])) continue; if ($color == 1) { $tdcolor = "datos"; $color = 0; } else { $tdcolor = "datos2"; $color = 1; } if ($rowPair) $rowclass = 'rowPair'; else $rowclass = 'rowOdd'; $rowPair = !$rowPair; $iterator++; // Agent name echo ""; echo ""; // Operating System icon echo ""; // Type agent (Networt, Software or Satellite) echo ""; // Group icon and name echo ""; // Description echo ""; // Action //When there is only one element in page it's necesary go back page. if ((count($agents) == 1) && ($offset >= $config["block_size"])) $offsetArg = $offset - $config["block_size"]; else $offsetArg = $offset; echo ""; } echo "
".__('Agent name') . ' ' . '' . html_print_image("images/sort_up.png", true, array("style" => $selectNameUp)) . '' . '' . html_print_image("images/sort_down.png", true, array("style" => $selectNameDown)) . ''; echo "".__('R'). ' ' . '' . html_print_image("images/sort_up.png", true, array("style" => $selectRemoteUp)) . '' . '' . html_print_image("images/sort_down.png", true, array("style" => $selectRemoteDown)) . ''; echo "".__('OS'). ' ' . '' . html_print_image("images/sort_up.png", true, array("style" => $selectOsUp)) . '' . '' . html_print_image("images/sort_down.png", true, array("style" => $selectOsDown)) . ''; echo "".__('Type'). "".__('Group'). ' ' . '' . html_print_image("images/sort_up.png", true, array("style" => $selectGroupUp)) . '' . '' . html_print_image("images/sort_down.png", true, array("style" => $selectGroupDown)) . ''; echo "" . __('Description') . "" . __('Actions') . "
"; if ($agent["disabled"]) { echo ""; } echo ''; echo ""; if (check_acl ($config["id_user"], $agent["id_grupo"], "AW")) { $main_tab = 'main'; } else { $main_tab = 'module'; } if($agent["alias"] == ''){ $agent["alias"] = $agent["nombre"]; } echo "" . ''.$agent["alias"].'' . ""; echo ""; $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'); if ($agent["disabled"]) { ui_print_help_tip(__('Disabled')); if (!$in_planned_downtime) { echo ""; } } if ($agent['quiet']) { echo " "; html_print_image("images/dot_green.disabled.png", false, array("border" => '0', "title" => __('Quiet'), "alt" => "")); } if ($in_planned_downtime) { ui_print_help_tip (__('Agent in planned downtime'), false, 'images/minireloj-16.png'); echo ""; } echo ''; echo ""; // Has remote configuration ? if (enterprise_installed()) { enterprise_include_once('include/functions_config_agents.php'); if (enterprise_hook('config_agents_has_remote_configuration',array($agent["id_agente"]))) { echo ""; echo html_print_image("images/application_edit.png", true, array("align" => 'middle', "title" => __('Edit remote config'))); echo ""; } } echo ""; ui_print_os_icon ($agent["id_os"], false); echo ""; echo ui_print_type_agent_icon ($agent["id_os"], $agent['ultimo_contacto_remoto'], $agent['ultimo_contacto'], $agent['remote'], $agent['agent_version']); echo "" . ui_print_group_icon ($id_grupo, true)."" . ui_print_truncate_text($agent["comentarios"], 'description', true, true, true, '[…]', 'font-size: 6.5pt;').""; if ($agent['disabled']) { echo "". html_print_image('images/lightbulb_off.png', true, array('alt' => __('Enable agent'), 'title' => __('Enable agent'))) .""; } else { echo "". html_print_image('images/lightbulb.png', true, array('alt' => __('Disable agent'), 'title' => __('Disable agent'))) .""; } if (check_acl ($config["id_user"], $agent["id_grupo"], "AW")) { echo "  '; echo html_print_image('images/cross.png', true, array("border" => '0')) . ""; } echo "
"; ui_pagination ($total_agents, "index.php?sec=gagente&sec2=godmode/agentes/modificar_agente&group_id=$ag_group&search=$search&sort_field=$sortField&sort=$sort&disabled=$disabled", $offset); echo "
"; } else { ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no defined agents') ) ); } if (check_acl ($config["id_user"], 0, "AW")) { // Create agent button echo '
'; echo '
'; html_print_input_hidden ('new_agent', 1); html_print_submit_button (__('Create agent'), 'crt-2', false, 'class="sub next"'); echo "
"; echo '
'; } echo "
"; ?>