$name_group) { if (in_array($id_gr, $groups) === false) { $ret[$id_gr] = $name_group; } } echo json_encode($ret); return; } } $update_agents = get_parameter('update_agents', 0); $recursion = get_parameter('recursion'); if ($update_agents) { $values = []; if (get_parameter('group', '') != -1) { $values['id_grupo'] = get_parameter('group'); } if (!(get_parameter('interval_select') == -1 && empty(get_parameter('interval_text')))) { if (get_parameter('interval', 0) != 0) { $values['intervalo'] = get_parameter('interval'); } } if (get_parameter('id_os', '') != -1) { $values['id_os'] = get_parameter('id_os'); } if (get_parameter('id_parent', '') != '') { $values['id_parent'] = get_parameter('id_agent_parent', 0); } if (get_parameter('server_name', '') != -1) { $values['server_name'] = get_parameter('server_name'); } if (get_parameter('description', '') != '') { $values['comentarios'] = get_parameter('description'); } if (get_parameter('mode', '') != -1) { $values['modo'] = get_parameter('mode'); } if (get_parameter('disabled', '') != -1) { $values['disabled'] = get_parameter('disabled'); } if (get_parameter('icon_path', '') != '') { $values['icon_path'] = get_parameter('icon_path'); } if (get_parameter('update_gis_data', -1) != -1) { $values['update_gis_data'] = get_parameter('update_gis_data'); } if (get_parameter('custom_id', '') != '') { $values['custom_id'] = get_parameter('custom_id'); } if (get_parameter('cascade_protection', -1) != -1) { $values['cascade_protection'] = get_parameter('cascade_protection'); } if (get_parameter('cascade_protection_module', -1) != -1) { $values['cascade_protection_module'] = get_parameter('cascade_protection_module'); } if (get_parameter('delete_conf', 0) != 0) { $values['delete_conf'] = get_parameter('delete_conf'); } if (get_parameter('quiet_select', -1) != -1) { $values['quiet'] = get_parameter('quiet_select'); } if (get_parameter('safe_mode_change', -1) == 1 && get_parameter('safe_mode_module', '') != '') { // Get the module name. $values['safe_mode_module'] = get_parameter('safe_mode_module'); } else if (get_parameter('safe_mode_change', -1) == 0) { // Disabled Safe Operation Mode. $values['safe_mode_module'] = '0'; } $secondary_groups_added = (array) get_parameter('secondary_groups_added', []); $secondary_groups_removed = (array) get_parameter('secondary_groups_removed', []); $fields = db_get_all_fields_in_table('tagent_custom_fields'); if ($fields === false) { $fields = []; } $id_agents = get_parameter('id_agents', false); if (!$id_agents) { ui_print_error_message(__('No agents selected')); $id_agents = []; } else { if (empty($values) && empty($fields)) { ui_print_error_message(__('No values changed')); $id_agents = []; } } // Get the id_agente_modulo to update the 'safe_operation_mode' field. if (isset($values['safe_mode_module']) && ($values['safe_mode_module'] != '0')) { foreach ($id_agents as $id_agent) { $id_module_safe[$id_agent] = db_get_value_filter( 'id_agente_modulo', 'tagente_modulo', [ 'id_agente' => $id_agent, 'nombre' => $values['safe_mode_module'], ] ); } } // CONF FILE DELETION. if (isset($values['delete_conf'])) { unset($values['delete_conf']); $n_deleted = 0; foreach ($id_agents as $id_agent) { $agent_md5 = md5(agents_get_name($id_agent)); @unlink( $config['remote_config'].'/md5/'.$agent_md5.'.md5' ); $result = @unlink( $config['remote_config'].'/conf/'.$agent_md5.'.conf' ); $n_deleted += (int) $result; } if ($n_deleted > 0) { db_pandora_audit( AUDIT_LOG_MASSIVE_MANAGEMENT, 'Delete conf file '.$id_agent ); } else { db_pandora_audit( AUDIT_LOG_MASSIVE_MANAGEMENT, 'Try to delete conf file '.$id_agent ); } ui_print_result_message( $n_deleted > 0, __('Configuration files deleted successfully').'('.$n_deleted.')', __('Configuration files cannot be deleted') ); } if (empty($values) && empty($fields)) { $id_agents = []; } $n_edited = 0; $result = []; foreach ($id_agents as $id_agent) { $old_interval_value = db_get_value_filter('intervalo', 'tagente', ['id_agente' => $id_agent]); if (!empty($values)) { $disabled_old = false; if ($values['id_grupo'] || isset($values['disabled'])) { $values_old = db_get_row_filter('tagente', ['id_agente' => $id_agent], ['id_grupo', 'disabled']); if (isset($values['disabled'])) { $disabled_old = $values_old['disabled']; } } // Get the id_agent_module for this agent to update the 'safe_operation_mode' field. if (isset($values['safe_mode_module']) && ($values['safe_mode_module'] != '0')) { $values['safe_mode_module'] = $id_module_safe[$id_agent]; } $result[$id_agent]['db'] = db_process_sql_update( 'tagente', $values, ['id_agente' => $id_agent] ); if ($result[$id_agent]['db'] && $config['metaconsole_agent_cache'] == 1) { $server_name['server_name'] = db_get_sql('SELECT server_name FROM tagente WHERE id_agente ='.$id_agent); // Force an update of the agent cache. $result_metaconsole = agent_update_from_cache($id_agent, $values, $server_name); } // Update the configuration files. if ($result[$id_agent]['db'] && ($old_interval_value != $values['intervalo']) && !empty($values['intervalo'])) { enterprise_hook( 'config_agents_update_config_token', [ $id_agent, 'interval', $values['intervalo'], ] ); } if ($disabled_old !== false && $disabled_old != $values['disabled']) { enterprise_hook( 'config_agents_update_config_token', [ $id_agent, 'standby', $values['disabled'], ] ); // Validate alerts for disabled agents. if ($values['disabled'] == 1) { alerts_validate_alert_agent($id_agent); } } } $info = []; // Update Custom Fields. foreach ($fields as $field) { $info[$field['id_field']] = $field['name']; $value = get_parameter('customvalue_'.$field['id_field']); if (empty($value) === false) { $key = $field['id_field']; $old_value = db_get_all_rows_filter( 'tagent_custom_data', [ 'id_agent' => $id_agent, 'id_field' => $key, ] ); if ($old_value === false) { // Create custom field if not exist. $result[$id_agent]['fields'][$field['id_field']] = db_process_sql_insert( 'tagent_custom_data', [ 'id_field' => $key, 'id_agent' => $id_agent, 'description' => $value, ] ); } else { if ($old_value[0]['description'] !== $value) { $result[$id_agent]['fields'][$field['id_field']] = db_process_sql_update( 'tagent_custom_data', ['description' => $value], [ 'id_field' => $key, 'id_agent' => $id_agent, ] ); } } } } // Create or Remove the secondary groups. if (empty($secondary_groups_added) === false || empty($secondary_groups_removed) === false ) { $result[$id_agent]['secondary'] = enterprise_hook( 'agents_update_secondary_groups', [ $id_agent, $secondary_groups_added, $secondary_groups_removed, true, ] ); } if ($result['db'] !== false) { db_pandora_audit( AUDIT_LOG_MASSIVE_MANAGEMENT, 'Update agent '.$id_agent, false, false, json_encode($info) ); } else { if (isset($id_agent) === true) { db_pandora_audit( AUDIT_LOG_MASSIVE_MANAGEMENT, 'Try to update agent '.$id_agent, false, false, json_encode($info) ); } } } $ret = []; foreach ($result as $id_agent => $item) { if ($item['db'] !== false) { $ret['db']['edited'] += 1; $ret['db']['edited_agent'][] = $id_agent; } else { $ret['db']['failed'] += 1; $ret['db']['failed_agent'][] = $id_agent; } if (isset($item['fields']) === true && empty($item['fields']) === false ) { foreach ($item['fields'] as $kfield => $vfield) { if ($vfield !== false) { $ret['fields'][$id_agent]['edited'] += 1; $ret['fields'][$id_agent]['edited_field'][] = $kfield; } else { $ret['fields'][$id_agent]['failed'] += 1; $ret['fields'][$id_agent]['failed_field'][] = $kfield; } } } if (isset($item['secondary']) === true && empty($item['secondary']) === false ) { foreach ($item['secondary'] as $type_action => $values_secondary) { foreach ($values_secondary as $kgr => $vgr) { if ($vgr !== false) { $ret['secondary'][$type_action][$id_agent]['edited'] += 1; $ret['secondary'][$type_action][$id_agent]['edited_gr'][] = $kgr; } else { $ret['secondary'][$type_action][$id_agent]['failed'] += 1; $ret['secondary'][$type_action][$id_agent]['failed_gr'][] = $kgr; } } } } } foreach ($ret as $type => $ret_val) { switch ($type) { case 'db': if (isset($ret_val['edited']) === true && $ret_val['edited'] > 0 ) { ui_print_success_message( __( 'Agents updated successfully (%d)', $ret_val['edited'], implode( ',', $ret_val['edited_agent'] ) ) ); } if (isset($ret_val['failed']) === true && $ret_val['failed'] > 0 ) { ui_print_error_message( __( 'Agents cannot be updated (%d), ids (%s)', $ret_val['failed'], implode(',', $ret_val['failed_agent']) ) ); } break; case 'fields': $str = ''; foreach ($ret_val as $kag => $vag) { if (isset($vag['failed']) === true && $vag['failed'] > 0 ) { $str .= __( 'Agent ID: %s cannot be updated custom fields (%s)', $kag, implode(',', $vag['failed_field']) ).'
'; } } if (empty($str) === false) { ui_print_error_message($str); } break; case 'secondary': $str = ''; foreach ($ret_val as $type => $values_secondary) { foreach ($values_secondary as $kag => $vag) { if (isset($vag['failed']) === true && $vag['failed'] > 0 ) { $str .= __( 'Agent ID: %s cannot be updated %s secondary groups (%s)', $kag, $type, implode(',', $vag['failed_gr']) ).'
'; } } } if (empty($str) === false) { ui_print_error_message($str); } break; default: // Not posible. break; } } } $id_group = 0; $table = new StdClass(); $table->id = 'delete_table'; $table->class = 'databox filters'; $table->width = '100%'; $table->data = []; $table->style = []; $table->style[0] = 'font-weight: bold;'; $table->style[2] = 'font-weight: bold'; $table->size = []; $table->size[0] = '15%'; $table->size[1] = '35%'; $table->size[2] = '15%'; $table->size[3] = '35%'; $table->data = []; $table->data[0][0] = __('Group'); $table->data[0][1] = html_print_select_groups( false, 'AW', true, 'id_group', $id_group, false, '', '', true ); $table->data[0][2] = __('Group recursion'); $table->data[0][3] = html_print_checkbox( 'recursion2', 1, $recursion, true, false ); $status_list = []; $status_list[AGENT_STATUS_NORMAL] = __('Normal'); $status_list[AGENT_STATUS_WARNING] = __('Warning'); $status_list[AGENT_STATUS_CRITICAL] = __('Critical'); $status_list[AGENT_STATUS_UNKNOWN] = __('Unknown'); $status_list[AGENT_STATUS_NOT_NORMAL] = __('Not normal'); $status_list[AGENT_STATUS_NOT_INIT] = __('Not init'); $table->data[1][0] = __('Status'); $table->data[1][1] = html_print_select( $status_list, 'status_agents', 'selected', '', __('All'), AGENT_STATUS_ALL, true ); $table->data[1][2] = __('Show agents'); $table->data[1][3] = html_print_select( [ 0 => 'Only enabled', 1 => 'Only disabled', ], 'disabled', 2, '', __('All'), 2, true, false, true, '', false, 'width:30%;' ); $table->data[2][0] = __('Agents'); $table->data[2][0] .= ''; $all_agents = agents_get_group_agents( array_keys(users_get_groups($config['id_user'], 'AW', false)), ['disabled' => 2], 'none' ); $table->data[2][1] = html_print_select( $all_agents, 'id_agents[]', 0, false, '', '', true, true, true, '', false, 'min-width: 500px; max-width: 500px; max-height: 100px', false, false, false, '', false, false, false, false, true, true, true ); echo '
'; echo html_print_avoid_autocomplete(); html_print_table($table); $nombre_agente = ''; $direccion_agente = ''; $id_agente = 0; $id_parent = 0; $cascade_protection = 0; $group = 0; $interval = ''; $id_os = 0; $server_name = 0; $description = ''; echo ''; ui_toggle(html_print_table($table, true), __('Advanced options')); unset($table); $table = new StdClass(); $table->width = '100%'; $table->class = 'databox filters'; $table->head = []; $table->style = []; $table->style[0] = 'font-weight: bold; width: 150px;'; $table->data = []; $table->size[0] = '15%'; $table->size[1] = '35%'; $table->size[2] = '15%'; $table->size[3] = '35%'; $fields = db_get_all_fields_in_table('tagent_custom_fields'); if ($fields === false) { $fields = []; } foreach ($fields as $field) { $data[0] = ''.$field['name'].''; $combo = []; $combo = $field['combo_values']; $combo = explode(',', $combo); $combo_values = []; foreach ($combo as $value) { $combo_values[$value] = $value; } $custom_value = db_get_value_filter('description', 'tagent_custom_data', ['id_field' => $field['id_field'], 'id_agent' => $id_agente]); if ($custom_value === false) { $custom_value = ''; } if ($field['is_password_type']) { $data[1] = html_print_input_password_avoid_autocomplete(); $data[1] .= html_print_input_text_extended( 'customvalue_'.$field['id_field'], $custom_value, 'customvalue_'.$field['id_field'], '', 30, 100, $view_mode, '', '', true, true ); } else { $data[1] = html_print_textarea('customvalue_'.$field['id_field'], 2, 65, $custom_value, 'class="mrgn_right_30px"', true); } if ($field['combo_values'] !== '') { $data[1] = html_print_input( [ 'type' => 'select_search', 'fields' => $combo_values, 'name' => 'customvalue_'.$field['id_field'], 'selected' => $custom_value, 'nothing' => __('No change'), 'nothing_value' => '', 'return' => true, 'sort' => false, ] ); }; array_push($table->data, $data); } if (!empty($fields)) { ui_toggle(html_print_table($table, true), __('Custom fields')); } echo ''; html_print_input_hidden('id_agente', $id_agente); attachActionButton('update_agents', 'update', $table->width); // Shown and hide div. echo '
'; ui_require_jquery_file('form'); ui_require_jquery_file('pandora.controls'); ui_require_jquery_file('ajaxqueue'); ui_require_jquery_file('bgiframe'); ?>