modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java | 46 ++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java | 16 modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties | 23 - modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties | 4 modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties | 2 modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties | 2 modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties | 2 modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties | 4 modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties | 217 ++++------ modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties | 2 modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/UninventoryAndDeleteAgentTest.java | 164 +++++++ modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java | 12 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java | 2 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java | 10 15 files changed, 372 insertions(+), 137 deletions(-)
New commits: commit 227053907683a943ea002ad91eda7a44a86f18da Author: John Mazzitelli mazz@redhat.com Date: Wed Mar 13 10:14:30 2013 -0400
[BZ 849711] be able to delete agent simply from the admin agent UI page
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index 8376594..55bddbb 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -25,6 +25,7 @@ import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasour
import java.util.List;
+import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.SortDirection; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.grid.CellFormatter; @@ -33,6 +34,8 @@ import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.authz.Permission; +import org.rhq.core.domain.resource.Agent; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.IconEnum; import org.rhq.enterprise.gui.coregui.client.LinkManager; import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView; @@ -41,7 +44,10 @@ import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablem import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName; import org.rhq.enterprise.gui.coregui.client.components.view.ViewName; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTServiceAsync; import org.rhq.enterprise.gui.coregui.client.util.StringUtility; +import org.rhq.enterprise.gui.coregui.client.util.message.Message;
/** * Shows the table of all agents. @@ -120,11 +126,51 @@ public class AgentTableView extends TableSection<AgentDatasource> implements Has }); } } + + setupDeleteButton(); + if (isAffinityGroupId) { showUpdateMembersAction(); } }
+ private void setupDeleteButton() { + addTableAction(MSG.common_button_delete(), MSG.view_adminTopology_agent_delete_confirm(), + new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_INVENTORY) { + public void executeAction(final ListGridRecord[] selections, Object actionValue) { + if (selections == null || selections.length == 0) { + return; // do nothing since nothing is selected (we really shouldn't get here) + } + + final ResourceGWTServiceAsync resourceManager = GWTServiceLookup.getResourceService(); + final Agent[] agents = new Agent[selections.length]; + int i = 0; + for (ListGridRecord selection : selections) { + final int agentId = selection.getAttributeAsInt(FIELD_ID); + final String agentName = selection.getAttribute(FIELD_NAME); + final Agent agent = new Agent(); + agent.setId(agentId); + agent.setName(agentName); + agents[i++] = agent; + } + + resourceManager.uninventoryAllResourcesByAgent(agents, new AsyncCallback<Void>() { + public void onSuccess(Void result) { + CoreGUI.getMessageCenter().notify( + new Message(MSG.view_adminTopology_agent_delete_submitted(Integer + .toString(agents.length)))); + refresh(); + } + + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError(MSG.view_adminTopology_agent_delete_error(), caught); + refresh(); + } + }); + } + }); + } + private void showUpdateMembersAction() { addTableAction(MSG.view_groupInventoryMembers_button_updateMembership(), new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java index 1cdc64c..6d7d00c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java @@ -26,6 +26,7 @@ import com.google.gwt.user.client.rpc.RemoteService;
import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.criteria.ResourceCriteria; +import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.resource.CreateResourceHistory; import org.rhq.core.domain.resource.DeleteResourceHistory; import org.rhq.core.domain.resource.InventoryStatus; @@ -106,6 +107,8 @@ public interface ResourceGWTService extends RemoteService {
void unignoreResources(int[] resourceIds) throws RuntimeException;
+ void uninventoryAllResourcesByAgent(Agent[] agents) throws RuntimeException; + List<Integer> uninventoryResources(int[] resourceIds) throws RuntimeException;
} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java index 4ee821b..d9c74f6 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java @@ -33,6 +33,7 @@ import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.domain.configuration.definition.ConfigurationTemplate; import org.rhq.core.domain.criteria.ResourceCriteria; +import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.resource.CannotConnectToAgentException; import org.rhq.core.domain.resource.CreateResourceHistory; import org.rhq.core.domain.resource.DeleteResourceHistory; @@ -259,6 +260,21 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re } }
+ public void uninventoryAllResourcesByAgent(Agent[] agents) throws RuntimeException { + try { + if (agents != null && agents.length > 0) { + // we want to uninventory them one at a time to ensure our server-side doesn't do too much in a single SLSB method/tx + // If one fails and throws an exception, we abort the whole thing. This may or may not be a good thing. + for (Agent agent : agents) { + resourceManager.uninventoryAllResourcesByAgent(getSessionSubject(), agent); + } + } + return; + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + public List<Integer> uninventoryResources(int[] resourceIds) throws RuntimeException { try { return resourceManager.uninventoryResources(getSessionSubject(), resourceIds); diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties index d552e48..6d0851d 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties @@ -8,19 +8,19 @@ ################################### chart_date_label = Date chart_down_label = Down -chart_time_label = Start -chart_unknown_label = Unknown -chart_no_data_label = No Data -chart_title_avg_label = Avg -chart_title_min_label = Min -chart_title_peak_label = Max chart_hover_availability_label = Availability +chart_hover_bar_label = Duration chart_hover_date_format = %m/%d/%y -chart_hover_time_format = %I:%M:%S %p -chart_hover_start_label = Start chart_hover_end_label = End chart_hover_period_label = Period -chart_hover_bar_label = Duration +chart_hover_start_label = Start +chart_hover_time_format = %I:%M:%S %p +chart_no_data_label = No Data +chart_time_label = Start +chart_title_avg_label = Avg +chart_title_min_label = Min +chart_title_peak_label = Max +chart_unknown_label = Unknown common_alert_high = High common_alert_low = Low common_alert_medium = Medium @@ -566,6 +566,9 @@ view_adminTopology_agent_agentBindAddress = Agent Bind Address view_adminTopology_agent_agentBindPort = Agent Bind Port view_adminTopology_agent_agentName = Agent Name view_adminTopology_agent_connectedServer = Connected Server +view_adminTopology_agent_delete_confirm = This will delete the selected agents and uninventory any and all resources associated with them. Are you sure you want to do this? +view_adminTopology_agent_delete_error = The request to delete the selected agents failed. +view_adminTopology_agent_delete_submitted = Deleted [{0}] agents and all of their associated resources are uninventoried.\n view_adminTopology_agent_lastAvailabilityPing = Last Availability Ping view_adminTopology_agent_lastAvailabilityReport = Last Availability Report view_adminTopology_agents = Agents @@ -811,8 +814,8 @@ view_admin_topology = Topology view_alert_common_tab_conditions = Conditions view_alert_common_tab_conditions_expression = Fire alert when view_alert_common_tab_conditions_expression_tooltip = Determines if ANY or ALL of the conditions must evaluate to true in order for the entire condition set to be considered true. -view_alert_common_tab_conditions_modal_title = Add Condition view_alert_common_tab_conditions_modalEdit_title = Edit Condition +view_alert_common_tab_conditions_modal_title = Add Condition view_alert_common_tab_conditions_recovery_disabled = This alert caused its alert definition to be disabled view_alert_common_tab_conditions_recovery_enabled = Triggered ''{0}'' to be re-enabled view_alert_common_tab_conditions_text = Condition diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties index bebeb16..1a27856 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties @@ -829,8 +829,8 @@ view_admin_topology = Topologie view_alert_common_tab_conditions = Podmínky view_alert_common_tab_conditions_expression = Vyvolat výstrahu když view_alert_common_tab_conditions_expression_tooltip = Určí jestli některé (ANY) nebo všechny (ALL) podmínky se musí vyhodnotit na true, aby celková podmínka byla splněna. -view_alert_common_tab_conditions_modal_title = Přidat podmínku view_alert_common_tab_conditions_modalEdit_title = Editovat podmínku +view_alert_common_tab_conditions_modal_title = Přidat podmínku view_alert_common_tab_conditions_recovery_disabled = Tato výstraha způsobí, že definice této výstrahy bude zneplatněna view_alert_common_tab_conditions_recovery_enabled = Odpáleno ''{0}'' bude znovupovolen view_alert_common_tab_conditions_text = Podmínka @@ -1302,8 +1302,8 @@ view_bundle_version_deleteFailure = Nepodařilo se smazat verzi balíku [{0}] view_bundle_version_deleteSuccessful = Úspěšně jste smazali verzi balíku [{0}] view_bundle_version_loadFailure = Nepodařilo s načíst verzi balíku view_bundle_versions = Verze -view_configCompare_comparingConfigs = Porovnat konfigurace ##view_charts_time_axis_label = Time +view_configCompare_comparingConfigs = Porovnat konfigurace view_configCompare_configCompare = Porovnání konfigurace view_configEdit_addItem = Přidat položku do seznamu view_configEdit_confirm_1 = Jste si jisti, že chcete smazat vybrané vlastnosti z množiny? diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties index 91145ac..a276a6b 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties @@ -722,8 +722,8 @@ view_admin_topology = Topologie view_alert_common_tab_conditions = Bedingungen view_alert_common_tab_conditions_expression = Alarm auslösen wenn ##view_alert_common_tab_conditions_expression_tooltip = Determines if ANY or ALL of the conditions must evaluate to true in order for the entire condition set to be considered true. -view_alert_common_tab_conditions_modal_title = Bedingung hinzufügen ##view_alert_common_tab_conditions_modalEdit_title = Edit Condition +view_alert_common_tab_conditions_modal_title = Bedingung hinzufügen view_alert_common_tab_conditions_recovery_disabled = Dieser Alarm hat seine Definition deaktiviert. view_alert_common_tab_conditions_recovery_enabled = Ausgelöst, dass ''{0}'' wieder aktiviert wurde view_alert_common_tab_conditions_text = Bedingung diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties index aa4c5fd..3ad6421 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties @@ -805,8 +805,8 @@ view_admin_topology = トポロジー view_alert_common_tab_conditions = 条件 view_alert_common_tab_conditions_expression = アラート発火 view_alert_common_tab_conditions_expression_tooltip = 全体の条件がtrueであると認められるために、条件の一部またはすべてがtrueと評価されなければならないかどうか決定します -view_alert_common_tab_conditions_modal_title = 条件追加 ##view_alert_common_tab_conditions_modalEdit_title = Edit Condition +view_alert_common_tab_conditions_modal_title = 条件追加 view_alert_common_tab_conditions_recovery_disabled = このアラートはそのアラート定義が無効化される原因となりました view_alert_common_tab_conditions_recovery_enabled = トリガー ''{0}'' が再び有効化される view_alert_common_tab_conditions_text = 条件 diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties index 36dbda8..8d8eaea 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties @@ -698,8 +698,8 @@ view_admin_topology = 토폴로지 view_alert_common_tab_conditions = 조건 view_alert_common_tab_conditions_expression = 경고 발생시 view_alert_common_tab_conditions_expression_tooltip = 전체 조건이 true로 인정받기 위해 조건의 일부 또는 전부가 true로 평가되어야 하는지 결정합니다. -view_alert_common_tab_conditions_modal_title = 조건 추가 ##view_alert_common_tab_conditions_modalEdit_title = Edit Condition +view_alert_common_tab_conditions_modal_title = 조건 추가 view_alert_common_tab_conditions_recovery_disabled = 이 경고는 경고 정의가 비활성화되는 원인이 되었습니다. view_alert_common_tab_conditions_recovery_enabled = 트리거 ''{0}''이 다시 활성화 되는 view_alert_common_tab_conditions_text = 조건 diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties index dd3a3e6..ea8827d 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties @@ -21,7 +21,6 @@ ##chart_hover_end_label = End ##chart_hover_period_label = Period ##chart_hover_bar_label = Duration -view_admin_systemSettings_BaselineDataSet_desc = Quantidade de dados mensurados que ser\u00E1 utilizada para determinar um baseline. Valor especificado em dias. common_alert_high = Alto common_alert_low = Baixo common_alert_medium = M\u00E9dio @@ -740,6 +739,7 @@ view_admin_systemSettings_AvailabilityPurge_desc = Tempo de vida das m\u00E9tric view_admin_systemSettings_AvailabilityPurge_name = Excluir m\u00E9tricas de disponibilidade com mais de view_admin_systemSettings_BaseURL_desc = URL do servidor GUI, usada principalmente nas notifica\u00F5es de alertas por email. view_admin_systemSettings_BaseURL_name = GUI Console URL +view_admin_systemSettings_BaselineDataSet_desc = Quantidade de dados mensurados que ser\u00E1 utilizada para determinar um baseline. Valor especificado em dias. view_admin_systemSettings_BaselineDataSet_name = Conjunto de dados para o Baseline view_admin_systemSettings_BaselineFrequency_desc = A frequ\u00EAncia na qual o c\u00E1lculo autom\u00E1tico de baselines ser\u00E1 realizado. O valor 0 desabilita o c\u00E1lculo autom\u00E1tico. Valor espeficicado em dias. view_admin_systemSettings_BaselineFrequency_name = Frequ\u00EAncia do c\u00E1lculo baseline @@ -811,8 +811,8 @@ view_admin_topology = Topologia view_alert_common_tab_conditions = Condi\u00E7\u00F5es view_alert_common_tab_conditions_expression = Disparar alerta quando view_alert_common_tab_conditions_expression_tooltip = Determina se QUALQUER UMA ou TODAS as condi\u00E7\u00F5es devem ser satisfeitas para que todo o conjunto de condi\u00E7\u00F5es seja considerado verdadeiro. -view_alert_common_tab_conditions_modal_title = Adicionar nova condi\u00E7\u00E3o. ##view_alert_common_tab_conditions_modalEdit_title = Edit Condition +view_alert_common_tab_conditions_modal_title = Adicionar nova condi\u00E7\u00E3o. view_alert_common_tab_conditions_recovery_disabled = Este alerta desativou a sua defini\u00E7\u00E3o. view_alert_common_tab_conditions_recovery_enabled = ''{0}'' disparado para ser reativado. view_alert_common_tab_conditions_text = Condi\u00E7\u00E3o diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties index 6fba7f5..85cd1d9 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties @@ -2521,6 +2521,81 @@ view_aboutBox_homepage = Домашняя страница view_aboutBox_jbossByRedHat = JBoss by Red Hat view_aboutBox_title = О {0} view_aboutBox_version = Версия: +view_adminConfig_downloads = Загрузки +view_adminConfig_systemSettings = Системные настройки +view_adminContent_contentSources = Источники контента +view_adminRoles_assignedGroups = Назначенные группы ресурсов +view_adminRoles_assignedSubjects = Назначенные субъекты +view_adminRoles_failLdap = Не удалось определить, настроен ли LDAP - предположительно LDAP отсутствует. +view_adminRoles_failLdapGroups = Не удалось получить LDAP-группы. Предположительно LDAP группы отсутствуют +view_adminRoles_failLdapGroupsRole = Не удалось загрузить LDAP группы, доступные для роли. +view_adminRoles_failRoles = Не удалось получить роли. +view_adminRoles_globalPerms = Глобальные полномочия +view_adminRoles_ldapGroups = LDAP-группы +view_adminRoles_ldapGroupsReadOnly = данные LDAP групп доступны только для чтения +view_adminRoles_permissions_autoselecting_configureRead_implied = Автоматически отключено CONFIGURE_WRITE полномочие, поскольку отсутствует CONFIGURE_READ... +view_adminRoles_permissions_autoselecting_configureWrite_implied = Автоматически выбрано CONFIGURE_READ полномочие, поскольку CONFIGURE_WRITE подразумевает, что ... +view_adminRoles_permissions_autoselecting_manageInventory_implied = Автоматически установлены не выбранные полномочия реусурсов, поскольку MANAGE_INVENTORY предполагает все полномочия ресурса... +view_adminRoles_permissions_autoselecting_manageSecurity_implied = Автоматически установлены невыбранные полномочия, поскольку MANAGE_SECURITY включает все другие полномочия... +view_adminRoles_permissions_globalPermissions = Глобальные полномчия +view_adminRoles_permissions_illegalDeselectionDueToCorrespondingWritePermSelection = {0} полномочия на чтение не могут быть отключены, пока предварительно {0} полномочия записи, которые включают полномочия на чтение, не будут отключены. +view_adminRoles_permissions_illegalDeselectionDueToManageInventorySelection = {0} полномочия не могут быть отключены, пока предварительно Manage Inventory, которая включает все полномочия ресурса, не будет отключено. +view_adminRoles_permissions_illegalDeselectionDueToManageSecuritySelection = {0} полномочия не могут быть отключены, пока предватильно Manage Security полномочие, которое включает все другие полномочия, не будет отключено. +view_adminRoles_permissions_isAuthorized = Авторизованы? +view_adminRoles_permissions_isRead = Читать? +view_adminRoles_permissions_isWrite = Запись? +view_adminRoles_permissions_permDesc_manageBundles = Можно создавать, обновлять и удалять узлы предоставления (просмотр предоставляется всем) +view_adminRoles_permissions_permDesc_manageRepositories = можно создавать, обновлять или удалять репозитории любого пользователя (каждый может создавать свои собственные репозитории), можно ассоциировать источники контента с резпозиториями. +view_adminRoles_permissions_permDesc_manageSecurity = можно создавать, обновлять или удалять пользователей и роли - включает все другие полномочия +view_adminRoles_permissions_permReadDesc_configure = просмотр конфигурации ресурса и историю версий конфигурации ресурса +view_adminRoles_permissions_permReadDesc_createChildResources = (ПОДРАЗУМЕВАЕМЫЙ) просмотр истории создания дочернего ресурса +view_adminRoles_permissions_permReadDesc_deleteChildResources = (ПОДРАЗУМЕВАЕМЫЙ) просмотр истории удаления дочернего ресурса +view_adminRoles_permissions_permReadDesc_inventory = (ПОДРАЗУМЕВАЕМЫЙ) просмотр свойств ресурса (наименование, описание, версия и т.д.), настройки подключения, и историю настроек подключения +view_adminRoles_permissions_permReadDesc_manageAlerts = (ПОДРАЗУМЕВАЕМЫЙ) просмотр определений предупреждений и истории предупреждения +view_adminRoles_permissions_permReadDesc_manageEvents = (ПОДРАЗУМЕВАЕМЫЙ) просмотр событий +view_adminRoles_permissions_permWriteDesc_configure = обновить конфигурацию ресурса; удалить элементы истории версий конфигурации ресурса +view_adminRoles_permissions_permWriteDesc_control = выполнять операции; удалить элементы истории выполнения операций +view_adminRoles_permissions_permWriteDesc_deleteChildResources = убрать ресурс из инвентаризации; удалить ресурсы (для типов ресурсов, которые могут быть удалены) +view_adminRoles_permissions_permWriteDesc_inventory = обновить наименование ресурса, версию, описание и настройки подключения; удалить элементы истории настроек подключения +view_adminRoles_permissions_permWriteDesc_manageAlerts = создать, обновить и удалить определения уведомлений; подтверждать и удалять элементы истории предупреждений +view_adminRoles_permissions_permWriteDesc_manageContent = подписаться на источники контента; устанавливать и удалять пакеты +view_adminRoles_permissions_permWriteDesc_manageEvents = удалять события +view_adminRoles_permissions_permWriteDesc_manageMeasurements = обновление метрик коллекции планировщиков +view_adminRoles_permissions_perm_configure = Конфигурация +view_adminRoles_permissions_perm_control = Управление +view_adminRoles_permissions_perm_inventory = Инвентаризация +view_adminRoles_permissions_perm_manageAlerts = Управление предупреждениями +view_adminRoles_permissions_perm_manageBundles = Управление узлами +view_adminRoles_permissions_perm_manageContent = Управление контентом +view_adminRoles_permissions_perm_manageEvents = Управление событиями +view_adminRoles_permissions_perm_manageInventory = Управление инвентаризацией +view_adminRoles_permissions_perm_manageMeasurements = Управление измерениями +view_adminRoles_permissions_perm_manageRepositories = Управление репозиториями +view_adminRoles_permissions_perm_manageSecurity = Управление безопасностью +view_adminRoles_permissions_perm_manageSettings = Управление настройками +view_adminRoles_permissions_read = Чтение: +view_adminRoles_permissions_readAccessImplied = Доступ чтения для {0} полномочия подразумевается и не может быть закрыт. +view_adminRoles_permissions_resourcePermissions = Полномчия ресурса +view_adminRoles_permissions_write = Запись: +view_adminRoles_resourcePerms = Полномочия ресурса +view_adminRoles_roleAdded = Роль [{0}] добавлена. +view_adminRoles_roleDeleteFailed = Не удалось удалить роль [{0}]. +view_adminRoles_roleDeleted = Роль [{0}] удалена +view_adminRoles_roleUpdateFailed = Не удалось обновить роль [{0}]. +view_adminRoles_roleUpdated = Роль [{0}] обновлена. +view_adminTemplates_editAlertTemplate = Редактировать шаблон предупреждения +view_adminTemplates_platformServices = Сервисы платформы +view_adminTemplates_platforms = Платформы +view_adminTemplates_prompt_disabledAlertTemplates = Количество шаблонов предупреждений, которые были созданы, но закрыты для этого типа ресурсов +view_adminTemplates_prompt_disabledMetricTemplates = Количество планировщиком метрик, которые закрыты по умолчанию для этого типа ресурсов +view_adminTemplates_prompt_enabledAlertTemplates = Количество шаблонов уведомлений, которые включены для этого типа ресурсов +view_adminTemplates_prompt_enabledMetricTemplates = Количество планировщиков метрик, которые включены по умолчанию для этого типа ресурсов +view_adminTemplates_servers = Серверы +view_adminTopology_agents = Агенты +view_adminTopology_partitionEvents = События раздела +view_adminTopology_remoteAgentInstall = Установка удаленного агента +view_adminTopology_servers = Серверы +view_adminUsersDetails_dataTypeName = пользователь view_admin_administration = Администрация view_admin_configuration = Конфигурация view_admin_content = Контент @@ -2546,21 +2621,41 @@ view_admin_downloads_cli_link_value = Загрузить CLI {0} ({1}) view_admin_downloads_cli_loadError = Не удалось получить версию CLI view_admin_downloads_cli_md5 = CLI MD5 view_admin_downloads_cli_version = Версия CLI -view_tabs_common_graphs_cubism=Cubism графики ##view_admin_downloads_connectorsDownload = Connectors Download ##view_admin_downloads_connectors_help = Connectors are software that is needed in order for some products to be manageable by {0}. You install connectors into some managed products so {0} agents can talk to them. See the documentation for more information. ##view_admin_downloads_connectors_loadError = Cannot get connectors info ##view_admin_downloads_connectors_none = No connectors are available for download +view_admin_plugins_server = Сервер +view_admin_security = Безопасность +view_admin_systemSettings_AgentMaxQuietTimeAllowed_desc = Если в течение этого количества +view_admin_systemSettings_AgentMaxQuietTimeAllowed_name = Максимально допустимое время "молчания" агента +view_admin_systemSettings_AlertPurge_name = Удалить предупреждения, старше чем +view_admin_systemSettings_AvailabilityPurge_name = Удалить данные о доступности, старше чем +view_admin_systemSettings_BaseURL_desc = URL GUI сервера, используемый главным образом для предупреждений посредством email уведомлений. +view_admin_systemSettings_BaseURL_name = URL GUI консоли +view_admin_systemSettings_BaselineFrequency_name = Частота вычисления базовой линии +view_admin_systemSettings_DataMaintenance_name = Период обслуживания БД +view_admin_systemSettings_DataReindex_desc = Если включено, определенные таблицы БД будут периодически переиндексироваться. +view_admin_systemSettings_EnableAgentAutoUpdate_desc = Определяет, разрешает ли сервер агентам самостоятельное автообновление. Вы не сможете загрузить дистрибутивы агента с сервера, если эта опция отключена. +view_admin_systemSettings_EnableAgentAutoUpdate_name = Включить автообновление агентов +view_admin_systemSettings_EnableDebugMode_name = Включить режим отладки +view_admin_systemSettings_EventPurge_name = Удалить события, старше чем +view_admin_systemSettings_JAASProvider_desc = Использовать LDAP для определения идентичности пользователя? +view_admin_systemSettings_JAASProvider_name = Включить LDAP +view_admin_systemSettings_LDAPBaseDN_desc = Основание дерева каталогов для поиска имен пользователей и паролей при аутентификации пользователей, например ou=People,dc=redhat,dc=com +view_admin_systemSettings_LDAPBaseDN_name = Поиск в базе +view_admin_systemSettings_LDAPBindDN_name = Имя пользователя +view_admin_systemSettings_LDAPBindPW_name = Пароль ##view_alert_details_field_resource_ancestry = Resource Ancestry ##view_alert_details_field_watched_resource = Watched Resource ##view_bundle_revertWizard_getInfoStep_revertDeployDescFull = [REVERT From] {0} [REVERT To] {1} ##view_configEdit_description = Description ##view_configEdit_property = Vlastnost ##view_configEdit_unset = Unset? +##view_configEdit_value = Value ##view_dashboardsManager_message_title_details = <h1>Welcome to {0}</h1>\n<p>This dashboard can be edited by clicking the (Edit Mode) button above.</p>\n<p>What would you like to do?</p>\n<p> <a href="{1}">Import newly discovered resources.</a></p>\n<p> <a href="{2}">Search for resources.</a></p>\n<p> <a href="{3}">See help and documentation.</a></p> ##view_group_common_emptyGroup = An empty group is always considered as mixed. ##view_inventory_resources_disableSuccessful = You have successfully disabled the selected resources and their children, [{0}] resources. -##view_configEdit_value = Value ##view_messageCenter_messageRootCause = Root Cause ##view_operationHistoryList_cancelConfirm = Are you sure you want to cancel the selected operations? NOTE: Only those selected operations that are currently "in progress" will be attempted to be canceled. ##view_operationHistoryList_cancelFailure = The cancel request failed for the operation with the history ID of [{0}]. @@ -2569,120 +2664,4 @@ view_tabs_common_graphs_cubism=Cubism графики ##view_operationHistoryList_deleteFailure = Failed to delete operation history [{0}]. ##view_operationHistoryList_deletePartialSuccess = Deleted [{0}] operation history items, but failed to delete the items with the following IDs: {1} ##view_operationHistoryList_deleteSuccess = Deleted [{0}] operation history items. -view_admin_plugins_server=Сервер -view_admin_security=Безопасность -view_admin_systemSettings_AgentMaxQuietTimeAllowed_desc=Если в течение этого количества -view_adminConfig_downloads=Загрузки -view_adminConfig_systemSettings=Системные настройки -view_adminContent_contentSources=Источники контента -view_adminRoles_assignedGroups=Назначенные группы ресурсов -view_adminRoles_assignedSubjects=Назначенные субъекты -view_adminRoles_failLdap=Не удалось определить, настроен ли LDAP - предположительно LDAP отсутствует. -view_adminRoles_failLdapGroups=Не удалось получить LDAP-группы. Предположительно LDAP группы отсутствуют -view_adminRoles_failLdapGroupsRole=Не удалось загрузить LDAP группы, доступные для роли. -view_adminRoles_failRoles=Не удалось получить роли. -view_adminRoles_globalPerms=Глобальные полномочия -view_adminRoles_ldapGroups=LDAP-группы -view_adminRoles_ldapGroupsReadOnly=данные LDAP групп доступны только для чтения -view_adminRoles_permissions_autoselecting_configureRead_implied=Автоматически отключено CONFIGURE_WRITE полномочие, поскольку отсутствует CONFIGURE_READ... -view_adminRoles_permissions_autoselecting_configureWrite_implied=Автоматически выбрано CONFIGURE_READ полномочие, поскольку CONFIGURE_WRITE подразумевает, что ... -view_adminRoles_permissions_autoselecting_manageInventory_implied=Автоматически установлены не выбранные полномочия реусурсов, поскольку MANAGE_INVENTORY предполагает все полномочия ресурса... -view_adminRoles_permissions_autoselecting_manageSecurity_implied=Автоматически установлены невыбранные полномочия, поскольку MANAGE_SECURITY включает все другие полномочия... -view_adminRoles_permissions_globalPermissions=Глобальные полномчия -view_adminRoles_permissions_illegalDeselectionDueToCorrespondingWritePermSelection={0} полномочия на чтение не могут быть отключены, пока предварительно {0} полномочия записи, которые включают полномочия на чтение, не будут отключены. -view_adminRoles_permissions_illegalDeselectionDueToManageInventorySelection={0} полномочия не могут быть отключены, пока предварительно Manage Inventory, которая включает все полномочия ресурса, не будет отключено. -view_adminRoles_permissions_illegalDeselectionDueToManageSecuritySelection={0} полномочия не могут быть отключены, пока предватильно Manage Security полномочие, которое включает все другие полномочия, не будет отключено. -view_adminRoles_permissions_isAuthorized=Авторизованы? -view_adminRoles_permissions_isRead=Читать? -view_adminRoles_permissions_isWrite=Запись? -view_adminRoles_permissions_permDesc_manageBundles=Можно создавать, обновлять и удалять узлы предоставления (просмотр предоставляется всем) -view_adminRoles_permissions_permDesc_manageInventory=обладает полными полномочиями ресурса, как описано ниже, для всех ресурсов; можно создавать, обновлять и удалять группы; можно импортировать автоматически-обнаруживаемые и обнаруживаемые вручную ресурсы -view_adminRoles_permissions_permDesc_manageRepositories=можно создавать, обновлять или удалять репозитории любого пользователя (каждый может создавать свои собственные репозитории), можно ассоциировать источники контента с резпозиториями. -view_adminRoles_permissions_permDesc_manageSecurity=можно создавать, обновлять или удалять пользователей и роли - включает все другие полномочия -view_adminRoles_permissions_permReadDesc_configure=просмотр конфигурации ресурса и историю версий конфигурации ресурса -view_adminRoles_permissions_permReadDesc_control=(ПОДРАЗУМЕВАЕМЫЙ) просмотр доступных операций и итории выполнения операции -view_adminRoles_permissions_permReadDesc_createChildResources=(ПОДРАЗУМЕВАЕМЫЙ) просмотр истории создания дочернего ресурса -view_adminRoles_permissions_permReadDesc_deleteChildResources=(ПОДРАЗУМЕВАЕМЫЙ) просмотр истории удаления дочернего ресурса -view_adminRoles_permissions_permReadDesc_inventory=(ПОДРАЗУМЕВАЕМЫЙ) просмотр свойств ресурса (наименование, описание, версия и т.д.), настройки подключения, и историю настроек подключения -view_adminRoles_permissions_permReadDesc_manageAlerts=(ПОДРАЗУМЕВАЕМЫЙ) просмотр определений предупреждений и истории предупреждения -view_adminRoles_permissions_permReadDesc_manageContent=(ПОДРАЗУМЕВАЕМЫЙ) просмотр установленных и доступных пакетов; просмотр истории установки пакета -view_adminRoles_permissions_permReadDesc_manageEvents=(ПОДРАЗУМЕВАЕМЫЙ) просмотр событий -view_adminRoles_permissions_permReadDesc_manageMeasurements=(ПОДРАЗУМЕВАЕМЫЙ) просмотр данных метрики и коллекции планировщиков -view_adminRoles_permissions_permWriteDesc_configure=обновить конфигурацию ресурса; удалить элементы истории версий конфигурации ресурса -view_adminRoles_permissions_permWriteDesc_control=выполнять операции; удалить элементы истории выполнения операций -view_adminRoles_permissions_permWriteDesc_createChildResources=создать новый дочерний ресурсы (для типов дочерних ресурсов, которые могут быть созданы) -view_adminRoles_permissions_permWriteDesc_deleteChildResources=убрать ресурс из инвентаризации; удалить ресурсы (для типов ресурсов, которые могут быть удалены) -view_adminRoles_permissions_permWriteDesc_inventory=обновить наименование ресурса, версию, описание и настройки подключения; удалить элементы истории настроек подключения -view_adminRoles_permissions_permWriteDesc_manageAlerts=создать, обновить и удалить определения уведомлений; подтверждать и удалять элементы истории предупреждений -view_adminRoles_permissions_permWriteDesc_manageContent=подписаться на источники контента; устанавливать и удалять пакеты -view_adminRoles_permissions_permWriteDesc_manageEvents=удалять события -view_adminRoles_permissions_permWriteDesc_manageMeasurements=обновление метрик коллекции планировщиков -view_adminRoles_permissions_perm_configure=Конфигурация -view_adminRoles_permissions_perm_control=Управление -view_adminRoles_permissions_perm_createChildResources=Создание дочерних ресурсов -view_adminRoles_permissions_perm_deleteChildResources=Удаление дочерних ресурсов -view_adminRoles_permissions_perm_inventory=Инвентаризация -view_adminRoles_permissions_perm_manageAlerts=Управление предупреждениями -view_adminRoles_permissions_perm_manageBundles=Управление узлами -view_adminRoles_permissions_perm_manageContent=Управление контентом -view_adminRoles_permissions_perm_manageEvents=Управление событиями -view_adminRoles_permissions_perm_manageInventory=Управление инвентаризацией -view_adminRoles_permissions_perm_manageMeasurements=Управление измерениями -view_adminRoles_permissions_perm_manageRepositories=Управление репозиториями -view_adminRoles_permissions_perm_manageSecurity=Управление безопасностью -view_adminRoles_permissions_perm_manageSettings=Управление настройками -view_adminRoles_permissions_read=Чтение: -view_adminRoles_permissions_readAccessImplied=Доступ чтения для {0} полномочия подразумевается и не может быть закрыт. -view_adminRoles_permissions_resourcePermissions=Полномчия ресурса -view_adminRoles_permissions_write=Запись: -view_adminRoles_resourcePerms=Полномочия ресурса -view_adminRoles_roleAdded=Роль [{0}] добавлена. -view_adminRoles_roleDeleteFailed=Не удалось удалить роль [{0}]. -view_adminRoles_roleDeleted=Роль [{0}] удалена -view_adminRoles_roleUpdateFailed=Не удалось обновить роль [{0}]. -view_adminRoles_roleUpdated=Роль [{0}] обновлена. -view_adminTemplates_editAlertTemplate=Редактировать шаблон предупреждения -view_adminTemplates_platformServices=Сервисы платформы -view_adminTemplates_platforms=Платформы -view_adminTemplates_prompt_disabledAlertTemplates=Количество шаблонов предупреждений, которые были созданы, но закрыты для этого типа ресурсов -view_adminTemplates_prompt_disabledMetricTemplates=Количество планировщиком метрик, которые закрыты по умолчанию для этого типа ресурсов -view_adminTemplates_prompt_enabledAlertTemplates=Количество шаблонов уведомлений, которые включены для этого типа ресурсов -view_adminTemplates_prompt_enabledMetricTemplates=Количество планировщиков метрик, которые включены по умолчанию для этого типа ресурсов -view_adminTemplates_servers=Серверы -view_adminTopology_affinityGroups=Похожие группы -view_adminTopology_agents=Агенты -view_adminTopology_partitionEvents=События раздела -view_adminTopology_remoteAgentInstall=Установка удаленного агента -view_adminTopology_servers=Серверы -view_adminUsersDetails_dataTypeName=пользователь -view_admin_systemSettings_AgentMaxQuietTimeAllowed_name=Максимально допустимое время "молчания" агента -view_admin_systemSettings_AlertPurge_desc=Как долго история предупреждений должна храниться прежде чем будет очищена из БД. Указывается в днях. -view_admin_systemSettings_AlertPurge_name=Удалить предупреждения, старше чем -view_admin_systemSettings_AvailabilityPurge_desc=Как долго данные о доступности должны храниться, прежде чем будут очищены из БД. Указывается в днях. -view_admin_systemSettings_AvailabilityPurge_name=Удалить данные о доступности, старше чем -view_admin_systemSettings_BaseURL_desc=URL GUI сервера, используемый главным образом для предупреждений посредством email уведомлений. -view_admin_systemSettings_BaseURL_name=URL GUI консоли -view_admin_systemSettings_BaselineDataSet_desc=Количество прошедщих измерений, используемых для определения базовой линии. Указывается в днях. -view_admin_systemSettings_BaselineDataSet_name=Набор данных базовой линии -view_admin_systemSettings_BaselineFrequency_desc=Частота, с которой выполняется авто-расчет базовых линий. Если 0, авто-расчет базовой линии отключен. Указывается в днях. Максимальное значение - 'Baseline Dataset'. -view_admin_systemSettings_BaselineFrequency_name=Частота вычисления базовой линии -view_admin_systemSettings_DataMaintenance_desc=Как часто выполняется обслуживание БД (например, vacuuming если используется Postgres). Указывается в часах. -view_admin_systemSettings_DataMaintenance_name=Период обслуживания БД -view_admin_systemSettings_DataReindex_desc=Если включено, определенные таблицы БД будут периодически переиндексироваться. -view_admin_systemSettings_DataReindex_name=Переиндексировать таблицы данных каждую ночь -view_admin_systemSettings_EnableAgentAutoUpdate_desc=Определяет, разрешает ли сервер агентам самостоятельное автообновление. Вы не сможете загрузить дистрибутивы агента с сервера, если эта опция отключена. -view_admin_systemSettings_EnableAgentAutoUpdate_name=Включить автообновление агентов -view_admin_systemSettings_EnableDebugMode_desc=Если включено, сервер будет входить в отладочный режим. -view_admin_systemSettings_EnableDebugMode_name=Включить режим отладки -view_admin_systemSettings_EnableExperimentalFeatures_desc=Если включено, любые экспериментальные характеристики, которые существуют в текущем продукте будут доступны. -view_admin_systemSettings_EnableExperimentalFeatures_name=Включить экспериментальные характеристики -view_admin_systemSettings_EventPurge_desc=Как долго данные событий должны храниться, прежде чем будут удалены из БД. Указывается в днях. -view_admin_systemSettings_EventPurge_name=Удалить события, старше чем -view_admin_systemSettings_LDAPBaseDN_name=Поиск в базе -view_admin_systemSettings_LDAPBindDN_desc=Имя пользователя для подключения к LDAP-серверу при запросе LDAP базы данных. Как правило, это полное отличительное имя (DN) LDAP менеджера пользователя, например cn=Manager,dc=redhat,dc=com -view_admin_systemSettings_LDAPBindDN_name=Имя пользователя -view_admin_systemSettings_LDAPBindPW_desc=Идентификационная информация пользователя для подключения к LDAP серверу при запросе LDAP базы данных -view_admin_systemSettings_LDAPBindPW_name=Пароль -view_admin_systemSettings_JAASProvider_desc=Использовать LDAP для определения идентичности пользователя? -view_admin_systemSettings_JAASProvider_name=Включить LDAP -view_admin_systemSettings_LDAPBaseDN_desc=Основание дерева каталогов для поиска имен пользователей и паролей при аутентификации пользователей, например ou=People,dc=redhat,dc=com +view_tabs_common_graphs_cubism = Cubism графики diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties index e2cf0da..48dbdd8 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties @@ -799,8 +799,8 @@ view_admin_topology = \u62d3\u6251 view_alert_common_tab_conditions = Conditions view_alert_common_tab_conditions_expression = \u89e6\u53d1\u4e8b\u4ef6\u5f53 view_alert_common_tab_conditions_expression_tooltip = Determines if ANY or ALL of the conditions must evaluate to true in order for the entire condition set to be considered true. -view_alert_common_tab_conditions_modal_title = \u6dfb\u52a0\u6761\u4ef6 ##view_alert_common_tab_conditions_modalEdit_title = Edit Condition +view_alert_common_tab_conditions_modal_title = \u6dfb\u52a0\u6761\u4ef6 view_alert_common_tab_conditions_recovery_disabled = This alert caused its alert definition to be disabled view_alert_common_tab_conditions_recovery_enabled = Triggered ''{0}'' to be re-enabled view_alert_common_tab_conditions_text = \u6761\u4ef6 diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/UninventoryAndDeleteAgentTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/UninventoryAndDeleteAgentTest.java new file mode 100644 index 0000000..c2ef1d4 --- /dev/null +++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/UninventoryAndDeleteAgentTest.java @@ -0,0 +1,164 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2013 Red Hat, Inc. + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +package org.rhq.enterprise.server.resource.test; + +import java.util.HashMap; +import java.util.Random; + +import org.testng.annotations.Test; + +import org.rhq.core.domain.resource.Agent; +import org.rhq.core.domain.resource.InventoryStatus; +import org.rhq.core.domain.resource.Resource; +import org.rhq.core.domain.resource.ResourceCategory; +import org.rhq.core.domain.resource.ResourceType; +import org.rhq.core.domain.resource.group.ResourceGroup; +import org.rhq.enterprise.server.core.AgentManagerLocal; +import org.rhq.enterprise.server.resource.ResourceNotFoundException; +import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal; +import org.rhq.enterprise.server.resource.metadata.test.UpdatePluginMetadataTestBase; +import org.rhq.enterprise.server.util.LookupUtil; + +/** + * Testing the deletion of agents and uninventoring their resources, if there are any. + * This is testing BZ 849711. + */ +@Test +public class UninventoryAndDeleteAgentTest extends UpdatePluginMetadataTestBase { + private AgentManagerLocal agentManager; + private ResourceGroupManagerLocal groupManager; + private ResourceGroup newGroup; + private ResourceType platformType; + + @Override + protected void beforeMethod() throws Exception { + super.beforeMethod(); + platformType = createPlatformResourceType(); + groupManager = LookupUtil.getResourceGroupManager(); + newGroup = createNewGroup(); + agentManager = LookupUtil.getAgentManager(); + } + + @Override + protected void afterMethod() throws Exception { + if (newGroup != null) { + groupManager.deleteResourceGroup(getOverlord(), newGroup.getId()); + } + cleanupResourceType(platformType.getName()); + super.afterMethod(); + } + + public void testDeletingAgents() throws Exception { + // create three agents: + // 1) agent is the only thing registered - has no inventory yet + // 2) agent's platform is NEW, not yet committed to inventory yet (it is in the discovery queue) + // 3) agent's platform is COMMITTED in inventory + Agent agentRegistered = createOnlyAgent(1); + HashMap<Agent, Resource> agentPlatNew = createAgentWithResource(2, InventoryStatus.NEW); + HashMap<Agent, Resource> agentPlatCommitted = createAgentWithResource(3, InventoryStatus.COMMITTED); + + Agent agentNew = agentPlatNew.keySet().iterator().next(); + Agent agentCommitted = agentPlatCommitted.keySet().iterator().next(); + + // just for some complexity - we'll want to add our committed resource to a group + Resource committedResource = agentPlatCommitted.values().iterator().next(); + groupManager.addResourcesToGroup(getOverlord(), newGroup.getId(), new int[] { committedResource.getId() }); + + // delete our agents + resourceManager.uninventoryAllResourcesByAgent(getOverlord(), agentRegistered); + resourceManager.uninventoryAllResourcesByAgent(getOverlord(), agentNew); + resourceManager.uninventoryAllResourcesByAgent(getOverlord(), agentCommitted); + + assert null == agentManager.getAgentByID(agentRegistered.getId()); + assert null == agentManager.getAgentByID(agentNew.getId()); + assert null == agentManager.getAgentByID(agentCommitted.getId()); + + try { + Resource doomed = resourceManager.getResourceById(getOverlord(), committedResource.getId()); + assert doomed.getAgent() == null : "Resource should not have an agent attached, it should have been uninventoried"; + assert doomed.getInventoryStatus() == InventoryStatus.UNINVENTORIED : "Should have been uninventoried"; + } catch (ResourceNotFoundException rnfe) { + // this could happen if the quartz job already purged the uninventoried resource; test is success if this happens + } + + return; + } + + private ResourceType createPlatformResourceType() throws Exception { + ResourceType resourceType; + getTransactionManager().begin(); + try { + resourceType = new ResourceType("DeleteAgentTest-PlatType" + System.currentTimeMillis(), PLUGIN_NAME, + ResourceCategory.PLATFORM, null); + em.persist(resourceType); + } catch (Exception e) { + System.out.println("CANNOT PREPARE TEST: " + e); + getTransactionManager().rollback(); + throw e; + } + getTransactionManager().commit(); + return resourceType; + } + + private Agent createOnlyAgent(int index) throws Exception { + Agent agent; + getTransactionManager().begin(); + try { + agent = new Agent("DeleteAgentTest-Agent" + index, "testaddr", 16163 + index, "", "testtoken" + index); + em.persist(agent); + em.flush(); + } catch (Exception e) { + System.out.println("CANNOT PREPARE TEST: " + e); + getTransactionManager().rollback(); + throw e; + } + getTransactionManager().commit(); + return agent; + } + + private HashMap<Agent, Resource> createAgentWithResource(int index, InventoryStatus invStatus) throws Exception { + HashMap<Agent, Resource> ret = new HashMap<Agent, Resource>(1); + + Agent agent = createOnlyAgent(index); + Resource resource; + + getTransactionManager().begin(); + try { + resource = new Resource("DeleteAgentTest-Res" + index, "DeleteAgentTest-Res" + index, platformType); + resource.setUuid("" + new Random().nextInt()); + resource.setAgent(agent); + resource.setInventoryStatus(invStatus); + em.persist(resource); + } catch (Exception e) { + System.out.println("CANNOT PREPARE TEST: " + e); + getTransactionManager().rollback(); + throw e; + } + getTransactionManager().commit(); + + ret.put(agent, resource); + return ret; + } + + private ResourceGroup createNewGroup() { + ResourceGroup group = new ResourceGroup("DeleteAgentTest-Group"); + groupManager.createResourceGroup(getOverlord(), group); + return group; + } +} diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java index d332161..6c46172 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java @@ -249,6 +249,18 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage return entityManager.merge(persistedResource); }
+ @TransactionAttribute(TransactionAttributeType.NEVER) + public void uninventoryAllResourcesByAgent(Subject user, Agent doomedAgent) { + Resource platform = resourceManager.getPlatform(doomedAgent); + if (platform == null) { + // there is no platform resource - just delete the agent itself + agentManager.deleteAgent(doomedAgent); + } else { + resourceManager.uninventoryResources(user, new int[] { platform.getId() }); + } + } + + @TransactionAttribute(TransactionAttributeType.SUPPORTS) public List<Integer> uninventoryResources(Subject user, int[] resourceIds) {
List<Integer> result = new ArrayList<Integer>(); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java index b4c90f2..d0b959e 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java @@ -508,6 +508,8 @@ public interface ResourceManagerLocal { */ List<Resource> findResourceLineage(Subject subject, int resourceId);
+ void uninventoryAllResourcesByAgent(Subject user, Agent doomedAgent); + /** * This will uninventory the resources with the given ID along with all of their child resources. This method will not * create its own transaction; each individual child resource as well as the top level resources identified with the diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java index 3a0c282..aa202d3 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java @@ -27,6 +27,7 @@ import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.criteria.ResourceCriteria; import org.rhq.core.domain.measurement.AvailabilityType; import org.rhq.core.domain.measurement.ResourceAvailability; +import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceAncestryFormat; import org.rhq.core.domain.resource.composite.ResourceAvailabilitySummary; @@ -105,6 +106,15 @@ public interface ResourceManagerRemote { Resource updateResource(Subject subject, Resource resource);
/** + * This will uninventory all resources managed by the given agent. Since this + * also removes the platform resource, this will also remove the given agent as well. + * + * @param user the logged in user + * @param doomedAgent the agent to be deleted and whose resources are to be uninventoried + */ + void uninventoryAllResourcesByAgent(Subject user, Agent doomedAgent); + + /** * Removes these resources from inventory. The resources may subsequently be rediscovered. Note that for * each specified resource all children will also be removed, it it not necessary or recommended to * specify more than one resource in the same ancestry line.
rhq-commits@lists.fedorahosted.org