.classpath
| 2
etc/agentspawn/src/scripts/agentcopy.xml
| 22
etc/intellij-tools/rhq-style.xml
| 72
etc/m2/smartgwt-war-archetype/src/main/resources/archetype-resources/pom.xml
| 6
etc/rhq-plugin-archetype/src/main/resources/archetype-resources/pom.xml
| 4
modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/upgrade/ResourceUpgradeRequest.java
| 30
modules/core/domain/pom.xml
| 4
modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java
| 12
modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertCondition.java
| 8
modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java
| 27
modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleDeployment.java
| 14
modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleFile.java
| 4
modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleResourceDeployment.java
| 4
modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleResourceDeploymentHistory.java
| 2
modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
| 4
modules/core/domain/src/main/java/org/rhq/core/domain/cloud/FailoverList.java
| 356 -
modules/core/domain/src/main/java/org/rhq/core/domain/cloud/FailoverListDetails.java
| 338 -
modules/core/domain/src/main/java/org/rhq/core/domain/configuration/PluginConfigurationUpdate.java
| 4
modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSource.java
| 6
modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSourceSyncResults.java
| 2
modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSourceType.java
| 2
modules/core/domain/src/main/java/org/rhq/core/domain/content/InstalledPackageHistory.java
| 10
modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageType.java
| 10
modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java
| 42
modules/core/domain/src/main/java/org/rhq/core/domain/content/RepoSyncResults.java
| 6
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BundleDeploymentCriteria.java
| 5
modules/core/domain/src/main/java/org/rhq/core/domain/dashboard/Dashboard.java
| 10
modules/core/domain/src/main/java/org/rhq/core/domain/discovery/ResourceSyncInfo.java
| 4
modules/core/domain/src/main/java/org/rhq/core/domain/event/Event.java
| 4
modules/core/domain/src/main/java/org/rhq/core/domain/event/EventDefinition.java
| 2
modules/core/domain/src/main/java/org/rhq/core/domain/event/EventSource.java
| 2
modules/core/domain/src/main/java/org/rhq/core/domain/event/composite/EventComposite.java
| 266 -
modules/core/domain/src/main/java/org/rhq/core/domain/measurement/Availability.java
| 582 +-
modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementBaseline.java
| 2
modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementData.java
| 54
modules/core/domain/src/main/java/org/rhq/core/domain/measurement/ResourceAvailability.java
| 390 -
modules/core/domain/src/main/java/org/rhq/core/domain/measurement/calltime/CallTimeDataKey.java
| 218
modules/core/domain/src/main/java/org/rhq/core/domain/operation/OperationHistory.java
| 4
modules/core/domain/src/main/java/org/rhq/core/domain/operation/ResourceOperationHistory.java
| 8
modules/core/domain/src/main/java/org/rhq/core/domain/plugin/ServerPlugin.java
| 8
modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
| 24
modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceType.java
| 55
modules/core/domain/src/main/java/org/rhq/core/domain/search/SavedSearch.java
| 2
modules/core/domain/src/test/java/org/rhq/core/domain/test/QueryAllTest.java
| 8
modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/ResourceContext.java
| 26
modules/core/plugin-container/pom.xml
| 40
modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
| 189
modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java
| 140
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
| 145
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
| 69
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeProgressHandlingTest.java
| 183
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTestBase.java
| 4
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/duplicate/v1/rhq-plugin.xml
| 31
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/duplicate/v2/rhq-plugin.xml
| 30
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseUpgradingDiscoveryComponent.java
| 14
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v1/rhq-plugin.xml
| 32
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v2/rhq-plugin.xml
| 30
modules/enterprise/binding/pom.xml
| 2
modules/enterprise/binding/src/main/java/org/rhq/bindings/client/AbstractRhqFacadeProxy.java
| 3
modules/enterprise/binding/src/main/java/org/rhq/bindings/util/InterfaceSimplifier.java
| 21
modules/enterprise/gui/coregui/pom.xml
| 9
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/RefreshableView.java
| 7
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
| 27
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
| 22
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDistroFileStep.java
| 18
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectBundleVersionStep.java
| 1
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentView.java
| 1
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/RadioGroupWithComponentsItem.java
| 46
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java
| 35
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/DynamicCallbackFormImpl.java
| 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/DynamicCallbackFormImplIE6.java
| 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/AbstractRecentAlertsPortlet.java
| 9
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
| 9
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
| 7
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java
| 208
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java
| 76
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/GroupResourceConfigurationEditView.java
| 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDetailsView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
| 24
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ResourceFactoryPackageStep.java
| 28
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java
| 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableImgButton.java
| 23
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/filter/CacheControlFilter.java
| 7
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
| 27
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/FileUploadServlet.java
| 15
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
| 18
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/MessageConstants_zh.properties
| 53
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
| 8
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties
| 2532 +++-------
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
| 2315 +++++++++
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
| 2172 ++++++++
modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
| 21
modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
| 16
modules/enterprise/gui/coregui/src/main/webapp/images/header/header_bg_selected.png
|binary
modules/enterprise/gui/installer-war/src/main/resources/InstallerMessages_zh.properties
| 250
modules/enterprise/gui/installer-war/src/main/webapp/WEB-INF/faces-config.xml
| 1
modules/enterprise/gui/installer-war/src/main/webapp/createdb.jsp
| 2
modules/enterprise/gui/installer-war/src/main/webapp/header.jsp
| 2
modules/enterprise/gui/installer-war/src/main/webapp/index.html
| 2
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/role/AddUsersFormPrepareAction.java
| 192
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/user/AddUserRolesFormPrepareAction.java
| 196
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/user/ListAction.java
| 97
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/CreateRepoUIBean.java
| 39
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/RepoDetailsUIBean.java
| 39
modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/web.xml
| 15
modules/enterprise/gui/portal-war/src/main/webapp/admin/test/agent.jsp
| 2
modules/enterprise/gui/portal-war/src/main/webapp/admin/test/browser.jsp
| 2
modules/enterprise/gui/portal-war/src/main/webapp/index.html
| 2
modules/enterprise/gui/portal-war/src/main/webapp/portal/MainLayout.jsp
| 8
modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/visibility/DashCharts.jsp
| 2
modules/enterprise/gui/portal-war/src/main/webapp/rhq/group/operation/groupOperationHistoryDetails.xhtml
| 2
modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history-request-plain.xhtml
| 2
modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history-request.xhtml
| 2
modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history.xhtml
| 2
modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/operation/resourceOperationHistoryDetails.xhtml
| 2
modules/enterprise/remoting/cli/pom.xml
| 4
modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/conf/web.xml
| 4
modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/server.xml
| 19
modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/mail-service.xml
| 2
modules/enterprise/server/jar/pom.xml
| 183
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionLogManagerBean.java
| 15
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionManagerBean.java
| 15
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDampeningManagerBean.java
| 15
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
| 15
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/CachedConditionManagerBean.java
| 15
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SessionManager.java
| 103
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
| 132
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerLocal.java
| 34
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerRemote.java
| 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
| 12
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
| 24
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
| 14
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
| 14
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/CacheConsistencyManagerBean.java
| 14
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java
| 14
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
| 28
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerLocal.java
| 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationServerServiceImpl.java
| 10
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
| 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/event/EventManagerBean.java
| 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/GroupOperationJob.java
| 16
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationJob.java
| 6
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/ResourceOperationJob.java
| 13
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java
| 14
modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
| 165
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java
| 80
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/authz/test/RoleManagerBeanTest.java
| 72
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
| 26
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanUnitTest.java
| 3
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/DynamicConfigurationPropertyBeanTest.java
| 39
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/operation/OperationManagerBeanTest.java
| 6
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceGroupManagerBeanTest.java
| 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
| 14
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
| 7
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/SessionTestHelper.java
| 6
modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
| 134
modules/enterprise/server/safe-invoker/src/main/java/org/rhq/enterprise/server/util/HibernateDetachUtility.java
| 37
modules/jopr/etc/jbas5-jnp-client/src/main/java/test/RmiClient.java
| 20
modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerComponent.java
| 11
modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerDiscoveryComponent.java
| 4
modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceComponent.java
| 97
modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
| 172
modules/plugins/apache/src/main/java/org/rhq/plugins/apache/augeas/ApacheAugeasNode.java
| 69
modules/plugins/apache/src/main/java/org/rhq/plugins/apache/augeas/AugeasTreeBuilderApache.java
| 23
modules/plugins/apache/src/main/java/org/rhq/plugins/apache/parser/ApacheDirective.java
| 12
modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/ApacheBinaryInfo.java
| 2
modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
| 24
modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/RuntimeApacheConfiguration.java
| 511 +-
modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/VHostSpec.java
| 90
modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/VirtualHostLegacyResourceKeyUtil.java
| 284 +
modules/plugins/apache/src/test/java/org/rhq/plugins/apache/RuntimeConfigurationTest.java
| 208
modules/plugins/apache/src/test/java/org/rhq/plugins/apache/SnmpMappingTest.java
| 140
modules/plugins/apache/src/test/java/org/rhq/plugins/apache/util/MockApacheBinaryInfo.java
| 126
modules/plugins/apache/src/test/java/org/rhq/plugins/apache/util/MockProcessInfo.java
| 51
modules/plugins/apache/src/test/resources/runtime-config/conditional/httpd.conf
| 2
modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-defined.conf
| 5
modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-undefined.conf
| 5
modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-loaded.conf
| 13
modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-not-loaded.conf
| 11
modules/plugins/apache/src/test/resources/runtime-config/conditional/ifversion.conf
| 43
modules/plugins/apache/src/test/resources/runtime-config/conditional/nested-mess.conf
| 51
modules/plugins/apache/src/test/resources/runtime-config/incl-order/a.conf
| 1
modules/plugins/apache/src/test/resources/runtime-config/incl-order/b.conf
| 1
modules/plugins/apache/src/test/resources/runtime-config/incl-order/c.conf
| 1
modules/plugins/apache/src/test/resources/runtime-config/incl-order/httpd.conf
| 1
modules/plugins/apache/src/test/resources/snmp-mapping/httpd.conf
| 5
modules/plugins/apache/src/test/resources/snmp-mapping/vhost-with-servername-by-ip.conf
| 3
modules/plugins/apache/src/test/resources/snmp-mapping/vhost-with-servername-by-unresolvable-hostname.conf
| 3
modules/plugins/apache/src/test/resources/snmp-mapping/vhost-without-servername-resolvable-ip.conf
| 3
modules/plugins/apache/src/test/resources/snmp-mapping/vhost-without-servername-unresolvable-hostname.conf
| 3
modules/plugins/apache/src/test/resources/snmp-mapping/vhost-without-servername-unresolvable-ip.conf
| 3
modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/AbstractManagedDeploymentComponent.java
| 14
modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/AbstractManagedDeploymentDiscoveryComponent.java
| 139
modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ManagedComponentComponent.java
| 5
modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/adapter/api/AbstractPropertySimpleAdapter.java
| 41
modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/script/ScriptDiscoveryComponent.java
| 78
modules/plugins/jboss-as-5/src/main/resources/META-INF/rhq-plugin.xml
| 3
modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/script/ScriptDiscoveryComponent.java
| 76
modules/plugins/pattern-generator/pom.xml
| 23
modules/plugins/pattern-generator/src/main/java/org/rhq/plugins/pattern/PatternComponent.java
| 19
modules/plugins/pattern-generator/src/main/resources/META-INF/rhq-plugin.xml
| 1
modules/plugins/platform/src/main/java/org/rhq/plugins/platform/PlatformComponent.java
| 15
modules/plugins/platform/src/main/java/org/rhq/plugins/platform/WindowsPlatformComponent.java
| 21
modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaServerComponent.java
| 24
204 files changed, 11237 insertions(+), 4774 deletions(-)
New commits:
commit d6fc522507bcaddbe191d4a9c607f688a99c0381
Merge: 2b86d51 e89bbe0
Author: John Sanda <jsanda(a)redhat.com>
Date: Mon May 23 16:35:08 2011 -0400
Merge branch 'master' into drift
commit e89bbe0b05d951c3621e6e11ed0f7de0daf24ce3
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Mon May 23 17:05:56 2011 +0200
Rename to _pt only as this is Portuguese and can this way apply to more users.
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
new file mode 100755
index 0000000..65514b0
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
@@ -0,0 +1,2315 @@
+#
+# RHQ GUI i18n Messages - pt-BR
+###################################
+
+#************************************** SHARED ****************************************
+
+#=================== Common =====================
+
+#
+# Build Info
+#
+common_buildInfo_gwtVersion=${gwt.version}
+
+# Button Labels
+#--------------
+common_button_ack=Confirmar
+common_button_ack_all=Confirmar Todos
+common_button_add=Adicionar
+common_button_advanced=Avan\u00E7ado...
+common_button_apply=Aplicar
+common_button_cancel=Cancelar
+common_button_close=Fechar
+common_button_compare=Comparar
+common_button_create_child=Criar filho
+common_button_delete=Excluir
+common_button_delete_all=Excluir Todos
+common_button_disable=Desabilitar
+common_button_edit=Editar
+common_button_enable=Habilitar
+common_button_finish=Finalizar
+common_button_import=Importar
+common_button_new=Novo
+common_button_next=Pr\u00F3ximo
+common_button_ok=OK
+common_button_previous=Anterior
+common_button_purgeAll=Purge All
+common_button_refresh=Refresh
+common_button_reset=Limpar
+common_button_save=Salvar
+common_button_schedule=Schedule
+common_button_search=Procurar
+common_button_set=Set
+common_button_showDetails=Mostrar Detalhes...
+common_button_uninventory=Remover do Invent\u00E1rio
+
+# Common Labels
+#------------------------
+common_label_ago=ago
+common_label_all=TODOS
+common_label_all_resources=todos os recursos
+common_label_day=dia
+common_label_days=dias
+common_label_hour=hora
+common_label_hours=horas
+common_label_item=item
+common_label_items=itens
+common_label_milliseconds=milisegundos
+common_label_minutes=minutos
+common_label_month=m\u00EAs
+common_label_none=nenhum
+common_label_role=perfil
+common_label_roles=perfis
+common_label_scheduled_operations=opera\u00E7\u00F5es agendadas
+common_label_seconds=segundos
+common_label_selected_resources=recursos selecionados
+common_label_unlimited=ilimitado
+common_label_user=usu\u00E1rio
+common_label_users=usu\u00E1rios
+common_label_week=semana
+common_label_weeks=semanas
+common_label_yesterday=Yesterday
+
+# Common Units
+#-------------
+common_unit_times=times
+common_unit_milliseconds=milliseconds
+common_unit_seconds=seconds
+common_unit_minutes=minutes
+common_unit_hours=hours
+common_unit_days=days
+common_unit_weeks=weeks
+common_unit_months=months
+common_unit_years=years
+
+# Common Severities
+#------------------
+common_severity_debug=Debug
+common_severity_info=Info
+common_severity_warn=Warn
+common_severity_error=Error
+common_severity_fatal=Fatal
+
+# Common Titles
+#--------------
+common_title_address=Endere\u00E7o
+common_title_add_column=Adicionar Coluna
+common_title_add_graph_to_view=Add Graph to Monitor View
+common_title_add_portlet=Adicionar Portlet
+common_title_alert_range=S\u00E9rie de Alertas
+common_title_ancestry=Ancestry
+common_title_availability=Disponibilidade
+common_title_average_metrics=M\u00E9tricas da m\u00E9dia por Minuto
+common_title_available_resources=Recursos Dispon\u00EDveis
+common_title_background=Background
+common_title_bundle=Bundle
+common_title_bundles=Bundles
+common_title_category=Categoria
+common_title_change_refresh_time=Refresh Interval
+common_title_columns=Colunas
+common_title_configuration=Configura\u00E7\u00E3o
+common_title_compare_metrics=Compare Metrics
+common_title_compatibleGroups=Grupos Compat\u00EDveis
+common_title_compatibleGroups_total=Total de Grupos Compat\u00EDveis
+common_title_component_errors=Componentes com erro
+common_title_config_update_status=Update Status
+common_title_count=Count
+common_title_custom=Personalizado
+common_title_dashboard_name=Nome do Painel de Controle
+common_title_dateCreated=Data de Cria\u00E7\u00E3o
+common_title_dateRange=Date Range
+common_title_default=Padr\u00E3o
+common_title_description=Descri\u00E7\u00E3o
+common_title_details=Detalhes
+common_title_display=Display
+common_title_display_name=Nome do Display
+common_title_duration=Dura\u00E7\u00E3o
+common_title_edit_mode=Modo Edi\u00E7\u00E3o
+common_title_enabled=Habilitado?
+common_title_end=Fim
+common_title_error=Error
+common_title_generalProp=Propriedades Gerais
+common_title_group=Group
+common_title_groups=Groups
+common_title_group_def_total=Total de Defini\u00E7\u00E3o de Grupos
+common_title_group_member_health=Group Member Health
+common_title_icon=\u00EDcone
+common_title_id=ID
+common_title_id_parent=ID do Recurso pai
+common_title_info=Info
+common_title_help=Help
+common_title_host=Host
+common_title_inventory=Invent\u00E1rio
+common_title_inventorySummary=Sum\u00E1rio do Invent\u00E1rio
+common_title_lastUpdated=\u00DAltima Atualiza\u00E7\u00E3o
+common_title_lastUpdatedBy=\u00DAltima Atualiza\u00E7\u00E3o feita por
+common_title_ldapGroups=LDAP Groups
+common_title_mashup=Mashup
+common_title_members_reporting=Members Reporting
+common_title_message=Mensagem
+common_title_metric=M\u00E9trica
+common_title_metric_chart=Metric Chart
+common_title_mixedGroups=Grupos Mistos
+common_title_mixedGroups_total=Total de Grupos Mistos
+common_title_name=Nome
+common_title_new_dashboard=Novo Painel de Controle
+common_title_numeric_metrics=Numeric Metrics
+common_title_numeric_type=Tipo Num\u00E9rico
+common_title_operation_status=Operation Status
+common_title_operations=Opera\u00E7\u00F5es
+common_title_operations_range=S\u00E9rie de Opera\u00E7\u00F5es
+common_title_over=Execesso
+common_title_password=Senha
+common_title_path=Path
+common_title_permissions=Permissions
+common_title_platform=Plataforma
+common_title_platform_total=Total de Plataformas
+common_title_plugin=Plugin
+common_title_port=Porta
+common_title_providers=Provedores
+common_title_recent_alerts=Alertas Recentes
+common_title_recent_bundle_deployments=Recent Bundle Deployments
+common_title_recent_configuration_updates=Recent Configuration Updates
+common_title_recent_event_counts=Recent Event Counts
+common_title_recent_measurements=Recent Measurements
+common_title_recent_oob_metrics=Recent Out of Bound metrics
+common_title_recent_operations=Opera\u00E7\u00F5es Recentes
+common_title_recent_pkg_history=Recent Package History
+common_title_recently_added=Recursos Adicionados Recentemente
+common_title_remove_column=Remover Coluna
+common_title_repositories=Reposit\u00F3rios
+common_title_resource=Recursos
+common_title_resources=Resources
+common_title_resource_group=Grupo de Recursos
+common_title_resourceGroups=Resource Groups
+common_title_resource_inventory=Invent\u00E1rio de Recursos
+common_title_resource_id=ID do Recurso
+common_title_resource_name=Nome do Recurso
+common_title_resource_key=Resource Key
+common_title_resource_type=Resource Type
+common_title_results_count=Results Count
+common_title_results_count_tooltip=Displays this number of results
+common_title_role=Role
+common_title_roles=Roles
+common_title_search=Procurar
+common_title_scheduled_operations=Opera\u00E7\u00F5es Agendadas
+common_title_selected_resources=Recursos Selecionados
+common_title_server=Server
+common_title_server_total=Total de Servidores
+common_title_service=Service
+common_title_service_total=Total de Servi\u00E7os
+common_title_settings=Configura\u00E7\u00F5es
+common_title_show=Visualizar
+common_title_show_more=Visualizar mais...
+common_title_sort_order=Sort Order
+common_title_sort_order_tooltip=Sets sort order for results.
+common_title_start=Iniciar
+common_title_status=Status
+common_title_stop=Stop
+common_title_summary=Sum\u00E1rio
+common_title_tag_cloud=Nuvem de Tags
+common_title_the=O
+common_title_timestamp=Data/Hora
+common_title_total=Total
+common_title_type=Tipo
+common_title_units=Unidades
+common_title_user=Usu\u00E1rio
+common_title_users=Users
+common_title_value=Valor
+common_title_version=Vers\u00E3o
+common_title_view_mode=Modo vis\u00E3o
+common_title_web_address=Endere\u00E7o Web
+common_title_welcome=Bem Vindo
+
+# Common Messages
+#--------------
+common_msg_areYouSure=Tem certeza?
+common_msg_changeAutoDetected=Change auto-detected
+common_msg_deleteConfirm=Tem certeza de que deseja excluir o \# selecionado {0}?
+common_msg_emphasizedNotePrefix=NOTA\:
+common_msg_loading=Carregando...
+common_msg_noItemsToShow=N\u00E3o existem itens para apresentar
+common_msg_notYetImplemented=Not Yet Implemented
+common_msg_see_more=see more...
+common_msg_step_x_of_y=Step {0} of {1}
+common_msg_asyncTimeout={0}. This occurred because the server is taking a long time to
complete this request. \
+Please be aware that the server may still be processing your request and it may complete
shortly. \
+You can check the server logs to see if any abnormal errors occurred.
+
+# Common Values
+#--------------
+common_val_for=para
+common_val_no=N\u00E3o
+common_val_no_lower=n\u00E3o
+common_val_yes=Sim
+common_val_yes_lower=sim
+common_val_never=Nunca
+common_val_na=N/A
+common_val_none=Nenhum
+
+# Common Statuses
+common_status_canceled=Canceled
+common_status_deferred=Deferred
+common_status_failed=Failed
+common_status_inprogress=In Progress
+common_status_nochange=No Change
+common_status_success=Success
+common_status_unknown=Unknown
+common_status_timedOut=Timed Out
+common_status_partial=Partial
+
+# 1st, 2nd, 3rd, 4th, etc.
+common_val_n1st={0}st
+common_val_n2nd={0}nd
+common_val_n3rd={0}rd
+common_val_nth={0}th
+
+# Common Alert Priorities
+#------------------------
+common_alert_high=High
+common_alert_medium=Medium
+common_alert_low=Low
+
+# Common Calendar
+#--------------
+common_calendar_january_short=jan
+common_calendar_february_short=fev
+common_calendar_march_short=mar
+common_calendar_april_short=abr
+common_calendar_may_short=mai
+common_calendar_june_short=jun
+common_calendar_july_short=jul
+common_calendar_august_short=ago
+common_calendar_september_short=set
+common_calendar_october_short=out
+common_calendar_november_short=nov
+common_calendar_december_short=dez
+
+
+#=================== Widgets =====================
+
+# Favorites
+#--------------
+favorites=Favorites
+favorites_resources=Favorite Resources
+favorites_groups=Favorite Groups
+favorites_recentlyViewed=Recently Viewed
+
+# Record Editor
+#--------------
+widget_recordEditor_title_view=Visualizar {0} [{1}]
+widget_recordEditor_title_edit=Editar {0} [{1}]
+widget_recordEditor_title_new=Criar Novo {0}
+# // dup in common
+widget_recordEditor_label_loading=Carregar...
+widget_recordEditor_error_invalidViewPath=Caminho inv\u00E1lido\: [{0}]
+widget_recordEditor_error_noRecords=Nenhum registro encontrado - era esperado exatamente
um.
+widget_recordEditor_error_multipleRecords=Foram encontrados v\u00E1rios registros - era
esperado apenas um.
+widget_recordEditor_info_recordCreatedConcise={0} criado.
+widget_recordEditor_info_recordCreatedDetailed={0} [{1}] criado.
+widget_recordEditor_info_recordUpdatedConcise={0} atualizado.
+widget_recordEditor_info_recordUpdatedDetailed={0} [{1}] atualizado.
+widget_recordEditor_info_recordsDeletedConcise={0} {1} exclu\u00EDdo.
+widget_recordEditor_info_recordsDeletedDetailed={0} {1} exclu\u00EDdo\: {2}.
+widget_recordEditor_error_operation=Operation failed. An error occurred
+widget_recordEditor_error_operationInvalidValues=Operation failed - one or more fields
have invalid values
+widget_recordEditor_error_unsupportedOperationType=Tipo de opera\u00E7\u00E3o n\u00E3o
suportada\: [{0}]
+widget_recordEditor_error_permissionCreate=You do not have the permissions required to
create a new [{0}]
+widget_recordEditor_warn_validation=One or more fields have invalid values. This [{0}]
cannot be saved until these values are corrected
+
+# Resource Selector/Picker
+#--------------------------------
+widget_resourceSelector_selectResource=Selecionar um Recurso
+widget_resourceSelector_pleaseSelectResource=Favor selecionar um recurso
+widget_resourceSelector_selectMultipleResources=Selecionar Recursos
+widget_resourceSelector_pleaseSelectMultipleResource=Favor selecionar um ou mais
recursos
+widget_resourceSelector_groupCategory=Categoria do Grupo
+
+# Resource Factory Wizard
+#--------------------------------
+widget_resourceFactoryWizard_uploadInProgress=Upload em andamento... Esse processo pode
demorar alguns minutos para ser finalizado em caso de arquivos muito grandes.
+widget_resourceFactoryWizard_uploadFileStepName=Upload do Arquivo do Recurso
+widget_resourceFactoryWizard_uploadFailure=Falha ao realizar o upload do arquivo
+widget_resourceFactoryWizard_editConfigStepName=Editar Configura\u00E7\u00E3o
+widget_resourceFactoryWizard_editConfigStep_nothingToDo=There is no configuration that
you need to define for this resource.
+widget_resourceFactoryWizard_infoStepName=Informa\u00E7\u00E3o do Recurso
+widget_resourceFactoryWizard_infoStep_loadFail=Failed to get available Architectures
+widget_resourceFactoryWizard_namePrompt=Novo Nome do Recurso
+widget_resourceFactoryWizard_templatePrompt=Modelo de Propriedades para Conex\u00E3o
+widget_resourceFactoryWizard_contentTemplatePrompt=Modelos de Configura\u00E7\u00E3o do
Tempo de Deploy
+widget_resourceFactoryWizard_configTemplatePrompt=Modelo de Configura\u00E7\u00E3o de
Recurso
+widget_resourceFactoryWizard_archPrompt=Arquitetura do Pacote
+widget_resourceFactoryWizard_versionPrompt=Vers\u00E3o do Pacote
+widget_resourceFactoryWizard_importWizardWindowTitle=Assistente para Importa\u00E7\u00E3o
de Recurso
+widget_resourceFactoryWizard_importWizardTitle=Importar Recursos do Tipo [{0}]
+widget_resourceFactoryWizard_importFailure=Falha ao importar recursos manualmente
+widget_resourceFactoryWizard_importSubmitted=Uma requisi\u00E7\u00E3o para importar um
novo recurso do tipo [{0}] foi submetida
+widget_resourceFactoryWizard_createWizardWindowTitle=Assistente para Cria\u00E7\u00E3o de
Recurso
+widget_resourceFactoryWizard_createWizardTitle=Criar novo recurso do tipo [{0}]
+widget_resourceFactoryWizard_execute1=Falha ao criar novo recurso - vers\u00E3o do pacote
inexistente
+widget_resourceFactoryWizard_execute2=Falha ao criar novo recurso
+widget_resourceFactoryWizard_createSubmitType=A requisi\u00E7\u00E3o para
cria\u00E7\u00E3o de um recurso do tipo [{0}] foi submetida com sucesso.
+widget_resourceFactoryWizard_createSubmit=A requisi\u00E7\u00E3o para cria\u00E7\u00E3o
de um recurso com nome [{0}] foi submetida com sucesso.
+widget_resourceFactoryWizard_failedToGetType=Falha ao recuperar o tipo de pacote para o
novo recurso
+widget_resourceFactoryWizard_failedToDeleteVersion=Falha ao excluir a vers\u00E3o do
pacote durante o cancelamento da cria\u00E7\u00E3o do recurso
+
+widget_typeCache_loadFail=Failed to load resource type metadata
+
+widget_typeTree_badTemplateType=Invalid URL. Unknown template type [{0}]
+widget_typeTree_badTypeId=Invalid URL. Bad resource type ID [{0}]
+widget_typeTree_loadFail=Failed to load resource types
+
+# Color Picker
+#--------------
+widget_colorPicker_tooltip=Click to select a new color
+
+# Job Trigger Editor
+#--------------------
+widget_jobTriggerEditor_field_mode=Schedule using
+widget_jobTriggerEditor_value_calendar=Calendar
+widget_jobTriggerEditor_value_cronExpression=Cron Expression
+widget_jobTriggerEditor_value_now=Now
+widget_jobTriggerEditor_value_nowAndRepeat=Now & Repeat
+widget_jobTriggerEditor_value_later=Later
+widget_jobTriggerEditor_value_laterAndRepeat=Later & Repeat
+widget_jobTriggerEditor_field_cronExpression=Cron Expression
+widget_jobTriggerEditor_tab_format=Format
+widget_jobTriggerEditor_tab_examples=Examples
+widget_jobTriggerEditor_field_repeatInterval_now=Run now and every
+widget_jobTriggerEditor_field_repeatInterval_later=Repeat every
+widget_jobTriggerEditor_fieldHelp_repeatInterval=how often the operation should be
executed
+widget_jobTriggerEditor_value_for=For
+widget_jobTriggerEditor_value_until=Until
+widget_jobTriggerEditor_value_indefinitely=Indefinitely
+widget_jobTriggerEditor_fieldHelp_repeatDuration=keep running this operation this many
times or until this amount of time has elapsed
+widget_jobTriggerEditor_field_startType=Run
+widget_jobTriggerEditor_value_on=on
+widget_jobTriggerEditor_value_in=in
+widget_jobTriggerEditor_fieldHelp_startDelay=start executing the operation after this
amount of time has elapsed
+widget_jobTriggerEditor_message_startTimeMustBeInFuture=Start time must be in the
future.
+widget_jobTriggerEditor_message_endTimeMustBeAfterStartTime=End time must be after start
time.
+widget_jobTriggerEditor_message_endTimeMustBeInFuture=End time must be in the future.
+
+# Duration Item
+#---------------
+widget_durationItem_inputUnitLessThanTargetUnit=Input unit is less than target unit.
+widget_durationItem_unitTypeNotSupported=Unit type [{0}] is not supported by this
DurationItem.
+
+
+#===================== Utils ======================
+
+# Ancestry
+#-------------------------------------------------
+util_ancestry_parentAncestry=Parent Ancestry for:
+
+# Disambiguation Report Decorator
+#-------------------------------------------------
+util_disambiguationReportDecorator_pluginSuffix=({0} plugin)
+
+# Monitoring Request Callback
+#------------------------------------------
+util_monitoringRequestCallback_error_checkServerStatusFailure=Imposs\u00EDvel verificar o
status do login - verifique o estatdo do Servidor.
+
+# RPC Manager
+#----------------------
+util_rpcManager_activeRequests={0} Requisi\u00E7\u00F5es ativas
+
+# User Permissions Manager
+#--------------------------
+util_userPerm_loadFailGlobal=Falha ao carregar permiss\u00F5es globais - nenhuma
permiss\u00E3o concedida.
+util_userPerm_loadFailGroup=Falha ao carregar suas permiss\u00F5es para o Grupo de
Recursos com id [{0}] - nenhum permiss\u00E3o concedida.
+util_userPerm_loadFailResource=Falha ao carregar suas permiss\u00F5es para o Recurso com
id [{0}] - nenhuma permiss\u00E3o concedida.
+
+# User Session Manager
+#--------------------------
+util_userSession_loadFailSubject=UserSessionManager\: Falha ao carregar a credencial do
usu\u00E1rio
+util_userSession_logoutFail=Falha durante o logout.
+
+# Error Handler
+#--------------------
+util_errorHandler_nullException=Exce\u00E7\u00E3o nula
+
+# Widgets Field
+#---------------------
+util_widgetsField_unlimited=Ilimitado
+
+
+#================== DataSources ====================
+
+# RPC (abstract)
+#-----------------------
+dataSource_bundle_loadFailed=Failed to load Bundle data
+
+
+# RPC (abstract)
+#-----------------------
+dataSource_rpc_error_transformRequestFailure=Ocorreu uma falha na fonte de dados durante
o processamento da requisi\u00E7\u00E3o {0}.
+dataSource_rpc_error_unsupportedArrayFilterType=Sem suporte para passing de array filters
do tipo {0}.
+dataSource_rpc_error_unsupportedEnumType=Favor adicionar um trecho de c\u00F3digo
apropriado para a enum {0} para RPCDataSource.getEnumArray(Class)
+dataSource_rpc_yes=sim
+dataSource_rpc_no=n\u00E3o
+
+# ContentRepositoryTree
+#------
+dataSource_ContentRepoTree_error_load=Erro ao carregar os reposit\u00F3rios
+dataSource_ContentRepoTree_field_parentId=Parent ID
+
+
+# Users
+#------
+###### dup in common
+dataSource_users_field_id=ID
+dataSource_users_field_name=Nome do Usu\u00E1rio
+dataSource_users_field_ldap=LDAP Login?
+dataSource_users_field_password=Senha
+dataSource_users_field_passwordVerify=Verifique a Senha
+dataSource_users_field_firstName=Primeiro Nome
+dataSource_users_field_lastName=\u00DAltimo Nome
+dataSource_users_field_emailAddress=Endere\u00E7o de Email
+dataSource_users_field_phoneNumber=N\u00FAmero de Telefone
+dataSource_users_field_department=Departamento
+dataSource_users_field_factive=Login Habilitado?
+dataSource_users_delete=Deleted user [{0}]
+dataSource_users_deleteFailed=Failed to delete user [{0}]
+dataSource_users_passwordsDoNotMatch=Passwords do not match.
+dataSource_users_invalidEmailAddress=Invalid email address.
+
+# Roles
+#------
+datasource_roles_field_resourceGroups=Resource Groups
+datasource_roles_field_permissions=Permissions
+datasource_roles_field_subjects=Subjects
+datasource_roles_field_ldapGroups=LDAP Groups
+
+# Platforms
+#-----------
+dataSource_platforms_field_cpu=CPU
+dataSource_platforms_field_memory=Mem\u00F3ria
+dataSource_platforms_field_swap=Swap
+
+# Traits
+#------
+dataSource_traits_failFetch=Failed to fetch traits for criteria [{0}].
+dataSource_traits_field_primaryKey=Chave Prim\u00E1ria
+dataSource_traits_field_definitionID=Definition ID
+dataSource_traits_field_lastChanged=\u00DAltima Altera\u00E7\u00E3o
+dataSource_traits_field_trait=Propriedade
+dataSource_traits_group_field_groupId=ID de Grupo
+
+# Measurement OOBs
+#---------------------------------
+dataSource_measurementOob_field_scheduleName=M\u00E9trica
+dataSource_measurementOob_field_resourceName=Recurso
+dataSource_measurementOob_field_parentName=Pai
+dataSource_measurementOob_field_formattedBaseband=Faixa
+dataSource_measurementOob_field_formattedOutlier=Fora de s\u00E9rie
+dataSource_measurementOob_field_factor=Fator fora da faixa (%)
+dataSource_measurementOob_error_fetchFailure=Falha ao carregar informa\u00E7\u00F5es das
m\u00E9tricas OOB
+
+# Measurements
+#----------------------
+dataSource_definitions_loadFailed=Falha ao carregar defini\u00E7\u00E3o de m\u00E9tricas
+dataSource_schedules_loadFailed=Falha ao carregar agendamento de m\u00E9tricas
+dataSource_schedules_loadFailedCriteria=Failed to load metric schedules for criteria
[{0}]
+dataSource_schedules_loadFailedContext=Failed to load metric schedules for context [{0}]
+dataSource_schedules_field_resourceGroupId=ID de Grupo
+
+dataSource_schedules_enableFailure_resource=Falha ao habilitar a coleta de m\u00E9tricas
de [{0}] para o recurso com ID [{1}]. As m\u00E9tricas s\u00E3o\: [{2}]
+dataSource_schedules_enableFailure_group=Falha ao habilitar a coleta de m\u00E9tricas de
[{0}] para o grupo com ID [{1}]. As m\u00E9tricas s\u00E3o\: [{2}]
+
+dataSource_schedules_enableSuccessful_concise=Voce habilitou a coleta de m\u00E9tricas de
[{0}]
+dataSource_schedules_enableSuccessful_full_resource=Voc\u00EA habilitou a coleta de
m\u00E9tricas de [{0}] para o recurso com ID [{1}]. As m\u00E9tricas habilitadas foram\:
[{2}]
+dataSource_schedules_enableSuccessful_full_group=Voc\u00EA habilitou a coleta de
m\u00E9tricas de [{0}] para o grupo de recursos com ID [{1}]. As m\u00E9tricas habilitadas
foram\: [{2}]
+
+dataSource_schedules_disableFailure_resource=Falha ao desabilitar a coleta de
m\u00E9tricas de [{0}] para o recurso com ID [{1}]. As m\u00E9tricas eram\: [{2}]
+dataSource_schedules_disableFailure_group=Falha ao desabilitar a coleta de m\u00E9tricas
de [{0}] para o grupo de recursos com ID [{1}]. As m\u00E9tricas eram\: [{2}]
+
+dataSource_schedules_disableSuccessful_concise=Voc\u00EA desabilitou a coleta de
m\u00E9tricas de [{0}]
+dataSource_schedules_disableSuccessful_full_resource=Voc\u00EA desabilitou a coleta de
m\u00E9tricas de[{0}] para o recurso com ID [{1}]. As m\u00E9tricas desabilitadas
s\u00E3o\: [{2}]
+dataSource_schedules_disableSuccessful_full_group=Voc\u00EA desabilitou a coleta de
m\u00E9tricas de[{0}] para o grupo de recursos com ID [{1}]. As m\u00E9tricas
desabilitadas s\u00E3o\: [{2}]
+
+dataSource_schedules_updateFailure_resource=Falha ao configurar o intervalo para coleta
de m\u00E9tricas de [{0}] para o recurso com ID [{1}]. M\u00E9tricas\: [{2}]. O intervalo
de coleta seria de [{3}] segundos.
+dataSource_schedules_updateFailure_group=Falha ao configurar o intervalo para coleta de
m\u00E9tricas de [{0}] para o grupo de recursos com ID [{1}]. M\u00E9tricas\: [{2}]. O
intervalo de coleta seria de [{3}] segundos.
+
+dataSource_schedules_updateSuccessful_concise=Um novo intervalo de coleta de [{0}]
segundos foi configurado para m\u00E9tricas de [{1}]
+dataSource_schedules_updateSuccessful_full_resource=Um novo intervalo de coleta de [{0}]
segundos foi configurado para m\u00E9tricas de [{1}] para o recurso com ID [{2}].
M\u00E9tricas atualizadas\: [{3}]
+dataSource_schedules_updateSuccessful_full_group=Um novo intervalo de coleta de [{0}]
segundos foi configurado para m\u00E9tricas de [{1}] para o grupo de recursos com ID
[{2}]. M\u00E9tricas atualizadas\: [{3}]
+
+# Resources
+#-----------------------
+dataSource_resources_field_location=Location
+dataSource_resources_field_key=Key
+dataSource_resources_field_discoveryTime=Discovery Time
+dataSource_resources_field_importTime=Import Time
+dataSource_resources_field_lastModifiedTime=Last Modified Time
+dataSource_resources_field_lastModifier=Last Modifier
+
+# Resource Groups
+#-----------------------
+dataSource_resourceGroups_loadFailed=Failed to load Resource Groups
+
+# Problem Resources
+#------------------------------
+dataSource_problemResources_field_alerts=Alertas
+dataSource_problemResources_field_available=Disponibilidade Atual
+dataSource_problemResources_error_fetchFailure=Falha com carregar Recursos com
alertas/indisponibilidade.
+
+# Recent Operations
+#----------------------------
+dataSource_recentOperations_field_resource=Recurso
+dataSource_recentOperations_field_location=Localiza\u00E7\u00E3o
+dataSource_recentOperations_field_operation=Opera\u00E7\u00E3o
+dataSource_recentOperations_field_time=Data/Hora
+dataSource_recentOperations_field_status=Status
+dataSource_recentOperations_error_fetchFailure=Falha ao carregar a lista de
opera\u00E7\u00F5es finalizadas recentemente.
+
+# Scheduled Operations (ResourceOperationScheduleComposites)
+#------------------------------------------------------------
+dataSource_scheduledOperations_field_resource=Recurso
+dataSource_scheduledOperations_field_location=Localiza\u00E7\u00E3o
+dataSource_scheduledOperations_field_operation=Opera\u00E7\u00E3o
+dataSource_scheduledOperations_field_time=Data/Hora
+dataSource_scheduledOperations_error_fetchFailure=Falha ao carregar a lista de
opera\u00E7\u00F5es agendadas
+
+# Operation Schedules
+#--------------------
+dataSource_operationSchedule_field_id=Schedule ID
+dataSource_operationSchedule_field_operationName=Operation
+dataSource_operationSchedule_field_operationDisplayName=Operation
+dataSource_operationSchedule_field_subject=Owner
+dataSource_operationSchedule_field_description=Notes
+dataSource_operationSchedule_field_nextFireTime=Next Execution
+dataSource_operationSchedule_field_timeout=Timeout (in seconds)
+
+# Operation Histories
+#--------------------
+dataSource_operationHistory_field_operationName=Operation Name
+dataSource_operationHistory_field_createdTime=Created Time
+dataSource_operationHistory_field_startedTime=Started Time
+dataSource_operationHistory_field_subject=Requester
+dataSource_operationHistory_error_fetchFailure=Falha ao carregar o hist\u00F3rico de
opera\u00E7\u00F5es.
+
+# Configuration History
+#-------------------------------
+dataSource_configurationHistory_dateSubmitted=Date Submitted
+dataSource_configurationHistory_dateCompleted=Date Completed
+dataSource_configurationHistory_updateType=Update Type
+dataSource_configurationHistory_updateType_individual=Individual
+dataSource_configurationHistory_updateType_group=Group
+dataSource_configurationHistory_currentConfig=This is the current configuration
+dataSource_configurationHistory_clickToSeeError=Double click to see error message...
+dataSource_configurationHistory_error_fetchFailure=N\u00E3o foi poss\u00EDvel carregar o
hist\u00F3rico de configura\u00E7\u00E3o.
+
+# Resource Errors
+#-------------------------
+dataSource_resourceErrors_field_summary=Sum\u00E1rio
+dataSource_resourceErrors_field_errorType=Tipo de Erro
+dataSource_resourceErrors_field_timeOccured=Tempo
+dataSource_resourceErrors_error_fetchFailure=Falha ao procurar por erros para o Recurso
com ID [{0}].
+dataSource_resourceErrors_clickStatusIcon=Click the icon for more details
+dataSource_resourceErrors_deleteSuccess=You have successfully deleted [{0}] resource
error messages.
+dataSource_resourceErrors_deleteFailure=Failed to delete resource errors
+
+# Template Schedules
+#-------------------------
+datasource_templateSchedules_disabled=Disabled collection of selected metric [{0}].
+datasource_templateSchedules_disabled_detailed=Disabled collection of metric [{0}] [{1}]
by default for ResourceType with id [{2}].
+datasource_templateSchedules_disabled_failed=Failed to disable collection of metric [{0}]
[{1}] by default for ResourceType with id [{2}].
+datasource_templateSchedules_enabled=Enabled collection of selected metric [{0}].
+datasource_templateSchedules_enabled_detailed=Enabled collection of metric [{0}] [{1}] by
default for ResourceType with id [{2}].
+datasource_templateSchedules_enabled_failed=Failed to enable collection of metric [{0}]
[{1}] by default for ResourceType with id [{2}].
+datasource_templateSchedules_updated=Updated collection intervals of selected metric
[{0}].
+datasource_templateSchedules_updated_detail=Collection interval for metric [{0}] [{1}] by
default for ResourceType with id [{2}] set to [{3}] seconds.
+datasource_templateSchedules_updated_failed=Failed to set collection interval to [{0}]
seconds for metric [{1}] [{2}] by default for ResourceType with id [{3}].
+
+
+#********************************** VIEW-SPECIFIC *************************************
+
+#================= Administration ==================
+
+view_admin_administration=Administra\u00E7\u00E3o
+view_admin_landing=Nesta se\u00E7\u00E3o \u00E9 poss\u00EDvel administrar propriedades
globais do RHQ. Isso inclui configura\u00E7\u00F5es de Seguran\u00E7a, Plugins, e
gerenciamento de servidores RHQ e agentes.
+view_admin_configuration=Configura\u00E7\u00E3o
+view_admin_security=Seguran\u00E7a
+view_admin_topology=Topologia
+view_admin_content=Content
+
+view_adminSecurity_users=Usu\u00E1rios
+view_adminSecurity_roles=Perfis
+
+view_adminTopology_affinityGroups=Grupos de Afinidade
+view_adminTopology_agents=Agentes
+view_adminTopology_partitionEvents=Eventos na Parti\u00E7\u00E3o
+view_adminTopology_remoteAgentInstall=Instala\u00E7\u00E3o Remota de Agentes
+view_adminTopology_servers=Servidores
+
+view_adminConfig_downloads=Downloads
+view_adminConfig_plugins=Plugins
+view_adminConfig_systemSettings=Propriedades de Sistema
+view_adminConfig_templates=Modelos
+
+view_adminContent_contentSources=Content Sources
+view_adminContent_repositories=Repositories
+
+# Administration/Templates
+#--------------------------------
+
+view_adminTemplates_platforms=Platforms
+view_adminTemplates_platformServices=Platform Services
+view_adminTemplates_servers=Servers
+view_adminTemplates_enabledAlertTemplates=Enabled Alert Templates
+view_adminTemplates_disabledAlertTemplates=Disabled Alert Templates
+view_adminTemplates_enabledMetricTemplates=Enabled Metric Templates
+view_adminTemplates_disabledMetricTemplates=Disabled Metric Templates
+view_adminTemplates_editAlertTemplate=Edit Alert Template
+view_adminTemplates_editMetricTemplate=Edit Metric Template
+view_adminTemplates_prompt_enabledAlertTemplates=Number of alert templates that are
enabled on this resource type
+view_adminTemplates_prompt_disabledAlertTemplates=Number of alert templates that are
created but disabled on this resource type
+view_adminTemplates_prompt_enabledMetricTemplates=Number of metric schedules that are
enabled by default on this resource type
+view_adminTemplates_prompt_disabledMetricTemplates=Number of metric schedules that are
disabled by default on this resource type
+
+# Administration/Security/Users
+#--------------------------------
+view_adminUsersList_dataTypeName=usu\u00E1rio
+view_adminUsersList_dataTypeNamePlural=usu\u00E1rios
+
+# Administration/Security/Users/#
+#--------------------------------
+view_adminUsersDetails_dataTypeName=usu\u00E1rio
+
+# Administration/Security/Roles/#
+#--------------------------------
+view_adminRoles_assignedGroups=Grupos de Recursos Associados
+view_adminRoles_assignedSubjects=Perfis Associados
+view_adminRoles_failLdap=Falha ao determinar se o LDAP foi configurado - assumindo como
LDAP n\u00E3o configurado.
+view_adminRoles_failLdapGroups=Falha ao recuperar os grupos dispon\u00EDveis no LDAP -
assumindo como LDAP sem grupos.
+view_adminRoles_failLdapGroupsRole=Falha ao carregar grupos do LDAP dispon\u00EDveis para
o perfil.
+view_adminRoles_failRoles=Falha ao recuperar perfis.
+view_adminRoles_globalPerms=Permiss\u00F5es Globais
+view_adminRoles_ldapGroups=Grupos LDAP
+view_adminRoles_ldapGroupsReadOnly=Informa\u00E7\u00F5es do grupo LDAP com
permiss\u00F5es apenas de leitura
+view_adminRoles_noItems=Sem itens para apresentar
+view_adminRoles_noLdap=A integra\u00E7\u00E3o com o LDAP ainda n\u00E3o foi configurada.
Para configurar o LDAP acesse <a {0}>{1}</a>.
+view_adminRoles_perms=Permiss\u00F5es
+view_adminRoles_resourcePerms=Permiss\u00F5es do Recurso
+view_adminRoles_roleAdded=Perfil [{0}] adicionado.
+view_adminRoles_roleDeleteFailed=Falha ao excluir o perfil [{0}].
+view_adminRoles_roleDeleted=Perfil [{0}] exclu\u00EDdo.
+view_adminRoles_roleUpdateFailed=Falha ao atualizar o perfil [{0}].
+view_adminRoles_roleUpdated=Perfil [{0}] atualizado.
+view_adminRoles_permissions_globalPermissions=Global Permissions
+view_adminRoles_permissions_resourcePermissions=Resource Permissions
+view_adminRoles_permissions_readAccessImplied=Read access for the {0} permission is
implied and cannot be disabled.
+view_adminRoles_permissions_isAuthorized=Authorized?
+view_adminRoles_permissions_isRead=Read?
+view_adminRoles_permissions_isWrite=Write?
+view_adminRoles_permissions_read=Read:
+view_adminRoles_permissions_write=Write:
+view_adminRoles_permissions_perm_manageSecurity=Manage Security
+view_adminRoles_permissions_permDesc_manageSecurity=can create, update, or delete users
and roles (viewing is implied for everyone)
+view_adminRoles_permissions_perm_manageInventory=Manage Inventory
+view_adminRoles_permissions_permDesc_manageInventory=has all Resource permissions, as
described below, for all Resources; can create, update, and delete groups; and can import
auto-discovered or manually discovered Resources
+view_adminRoles_permissions_perm_manageSettings=Manage Settings
+view_adminRoles_permissions_permDesc_manageSettings=can modify the RHQ Server
configuration and perform any Server-related functionality
+view_adminRoles_permissions_perm_manageBundles=Manage Bundles
+view_adminRoles_permissions_permDesc_manageBundles=can create, update, or delete
provisioning bundles (viewing is implied for everyone)
+view_adminRoles_permissions_perm_manageRepositories=Manage Repositories
+view_adminRoles_permissions_permDesc_manageRepositories=can create, update, or delete
repositories of any user (everyone can create their own repositories), can associate
content sources to repositories.
+view_adminRoles_permissions_perm_inventory=Inventory
+view_adminRoles_permissions_permReadDesc_inventory=(IMPLIED) view Resource properties
(name, description, version, etc.), connection settings, and connection settings history
+view_adminRoles_permissions_permWriteDesc_inventory=update Resource name, version,
description, and connection settings; delete connection settings history items
+view_adminRoles_permissions_perm_manageMeasurements=Manage Measurements
+view_adminRoles_permissions_permReadDesc_manageMeasurements=(IMPLIED) view metric data
and collection schedules
+view_adminRoles_permissions_permWriteDesc_manageMeasurements=update metric collection
schedules
+view_adminRoles_permissions_perm_manageAlerts=Manage Alerts
+view_adminRoles_permissions_permReadDesc_manageAlerts=(IMPLIED) view alert definitions
and alert history
+view_adminRoles_permissions_permWriteDesc_manageAlerts=create, update, and delete alert
definitions; acknowledge and delete alert history items
+view_adminRoles_permissions_perm_configure=Configure
+view_adminRoles_permissions_permReadDesc_configure=view Resource configuration and
Resource configuration revision history
+view_adminRoles_permissions_permWriteDesc_configure=update Resource configuration; delete
Resource configuration revision history items
+view_adminRoles_permissions_perm_control=Control
+view_adminRoles_permissions_permReadDesc_control=(IMPLIED) view available operations and
operation execution history
+view_adminRoles_permissions_permWriteDesc_control=execute operations; delete operation
execution history items
+view_adminRoles_permissions_perm_manageEvents=Manage Events
+view_adminRoles_permissions_permReadDesc_manageEvents=(IMPLIED) view events
+view_adminRoles_permissions_permWriteDesc_manageEvents=delete events
+view_adminRoles_permissions_perm_manageContent=Manage Content
+view_adminRoles_permissions_permReadDesc_manageContent=(IMPLIED) view installed and
available packages; view package installation history
+view_adminRoles_permissions_permWriteDesc_manageContent=subscribe to content sources;
install and uninstall packages
+view_adminRoles_permissions_perm_createChildResources=Create Child Resources
+view_adminRoles_permissions_permReadDesc_createChildResources=(IMPLIED) view child
Resource creation history
+view_adminRoles_permissions_permWriteDesc_createChildResources=create new child Resources
(for child Resources of types that are creatable)
+view_adminRoles_permissions_perm_deleteChildResources=Delete Child Resources
+view_adminRoles_permissions_permReadDesc_deleteChildResources=(IMPLIED) view child
Resource deletion history
+view_adminRoles_permissions_permWriteDesc_deleteChildResources=uninventory resources;
delete Resources (for Resources of types that are deletable)
+view_adminRoles_permissions_autoselecting_manageSecurity_implied=Autoselected unselected
permissions, since MANAGE_SECURITY implies all other permissions...
+view_adminRoles_permissions_autoselecting_manageInventory_implied=Autoselected unselected
Resource permissions, since MANAGE_INVENTORY implies all Resource permissions...
+view_adminRoles_permissions_autoselecting_configureWrite_implied=Autoselected
CONFIGURE_READ permission, since CONFIGURE_WRITE implies it...
+view_adminRoles_permissions_autoselecting_configureRead_implied=Autodeselected
CONFIGURE_WRITE permission, since lack of CONFIGURE_READ implies lack of it...
+view_adminRoles_permissions_illegalDeselectionDueToManageSecuritySelection={0} permission
cannot be deselected, unless the Manage Security permission, which implies all other
permissions, is deselected first.
+view_adminRoles_permissions_illegalDeselectionDueToManageInventorySelection={0}
permission cannot be deselected, unless Manage Inventory, which implies all Resource
permissions, is deselected first.
+view_adminRoles_permissions_illegalDeselectionDueToCorrespondingWritePermSelection={0}
read permission cannot be deselected, unless the {0} write permission, which implies the
read permission, is deselected first.
+
+# Administration/Topology/RemoteAgentInstall/#
+#--------------------------------
+view_remoteAgentInstall_agentStatus=Status do Agente
+view_remoteAgentInstall_agentStatusDefault=-Pressione o Bot\u00E3o Atualizar Status-
+view_remoteAgentInstall_connInfo=Informa\u00E7\u00E3o de Conex\u00E3o
+view_remoteAgentInstall_buttonFindAgent=Procurar Agente
+view_remoteAgentInstall_error_1=Ocorreu um erro ao tentar localizar o caminho de
instala\u00E7\u00E3o do agente
+view_remoteAgentInstall_error_2=N\u00E3o foi poss\u00EDvel encontrar uma
instala\u00E7\u00E3o do agente nos locais comuns
+view_remoteAgentInstall_error_3=N\u00E3o foi poss\u00EDvel encontar a
instala\u00E7\u00E3o do agente em [{0}]
+view_remoteAgentInstall_error_4=Falha ao instalar o agente
+view_remoteAgentInstall_error_5=Falha a iniciar o agente
+view_remoteAgentInstall_error_6=Falha ao parar o agente
+
+view_remoteAgentInstall_installAgent=Instalar Agente
+view_remoteAgentInstall_installInfo=Informa\u00E7\u00E3o sobre a instala\u00E7\u00E3o do
Agente
+view_remoteAgentInstall_installPath=Caminho de Instala\u00E7\u00E3o do Agente
+view_remoteAgentInstall_owner=Propriet\u00E1rio
+view_remoteAgentInstall_promptInstallPath=Onde o agente est\u00E1 ou ser\u00E1 instalado.
Caso n\u00E3o tenha certeza onde o agente est\u00E1 instalado, informe um diret\u00F3rio
pai e clique em ''Procurar Agente'' para encontrar o agente. Caso informe
um diret\u00F3rio vazio, a busca pelo agente ser\u00E1 realizada em locais de
instala\u00E7\u00E3o comuns.
+view_remoteAgentInstall_promptHost=O host onde o agente est\u00E1 ou ser\u00E1 instalado
+view_remoteAgentInstall_promptPassword=Credenciais usadas para autentica\u00E7\u00E3o do
usu\u00E1rio no host via SSH
+view_remoteAgentInstall_promptPort=Porta onde o servidor SSH escuta. Se n\u00E3o
especificada, o padr\u00E3o \u00E9 22
+view_remoteAgentInstall_promptUser=Nome do usu\u00E1rio informado nas credenciais
passadas ao host via SSH
+view_remoteAgentInstall_result=Resultado
+view_remoteAgentInstall_resultCode=ResultCode
+view_remoteAgentInstall_startAgent=Iniciar Agente
+view_remoteAgentInstall_startAgentResults=resultado da inicializa\u00E7\u00E3o do
Agente\: [{0}]
+view_remoteAgentInstall_step=Step
+view_remoteAgentInstall_stopAgent=Parar Agente
+view_remoteAgentInstall_stopAgentResults=resultado do encerramento do Agente\: [{0}]
+view_remoteAgentInstall_success=Instala\u00E7\u00E3o do Agente finalizada
+view_remoteAgentInstall_updateStatus=Status da Atualiza\u00E7\u00E3o
+
+# Administration/SystemSettings
+#------------------------------
+view_admin_systemSettings_cannotLoadSettings=Cannot obtain the current system settings
+view_admin_systemSettings_savedSettings=You successfully saved the system properties
+view_admin_systemSettings_saveFailure=Failed to save the system settings
+view_admin_systemSettings_fixBeforeSaving=Please fix the invalid values before saving
+view_admin_systemSettings_group_general=General Configuration Properties
+view_admin_systemSettings_group_dataMgr=Data Manager Configuration Properties
+view_admin_systemSettings_group_baseline=Automatic Baseline Configuration Properties
+view_admin_systemSettings_group_ldap=LDAP Configuration Properties
+view_admin_systemSettings_cannotLoadServerDetails=Cannot load server details
+view_admin_systemSettings_serverDetails=Server Details
+view_admin_systemSettings_serverDetails_buildNumber=Build Number
+view_admin_systemSettings_serverDetails_tz=Server Time Zone
+view_admin_systemSettings_serverDetails_time=Server Local Time
+view_admin_systemSettings_serverDetails_installDir=Server Installation Directory
+view_admin_systemSettings_serverDetails_dbUrl=Database Connection URL
+view_admin_systemSettings_serverDetails_dbName=Database Product Name
+view_admin_systemSettings_serverDetails_dbVersion=Database Product Version
+view_admin_systemSettings_serverDetails_dbDriverName=Database Driver Name
+view_admin_systemSettings_serverDetails_dbDriverVersion=Database Driver Version
+view_admin_systemSettings_serverDetails_currentTable=Current Measurement Raw Table
+view_admin_systemSettings_serverDetails_nextRotation=Next Measurement Table Rotation
+view_admin_systemSettings_BaseURL_name=GUI Console URL
+view_admin_systemSettings_BaseURL_desc=A URL to the server GUI, used mainly within alert
email notifications.
+view_admin_systemSettings_AgentMaxQuietTimeAllowed_name=Agent Max Quiet Time Allowed
+view_admin_systemSettings_AgentMaxQuietTimeAllowed_desc=If this amount of time passes
without hearing from an agent, that quiet agent will be considered down. This value is
specified in minutes.
+view_admin_systemSettings_EnableAgentAutoUpdate_name=Enable Agent Auto-Updates
+view_admin_systemSettings_EnableAgentAutoUpdate_desc=Determines if the server will allow
agents to auto-update themselves. You will not be able to download agent distributions
from the server if this is disabled.
+view_admin_systemSettings_EnableDebugMode_name=Enable Debug Mode
+view_admin_systemSettings_EnableDebugMode_desc=If enabled, the server will enter debug
mode.
+view_admin_systemSettings_EnableExperimentalFeatures_name=Enable Experimental Features
+view_admin_systemSettings_EnableExperimentalFeatures_desc=If enabled, any experimental
features that exist in the current product will be available.
+view_admin_systemSettings_DataMaintenance_name=Database Maintenance Period
+view_admin_systemSettings_DataMaintenance_desc=How often database maintenance is
performed (for example, vacuuming if using Postgres). This is specified in hours.
+view_admin_systemSettings_AvailabilityPurge_name=Delete Availability Data Older Than
+view_admin_systemSettings_AvailabilityPurge_desc=How old availability data must be before
being purged from the database. This is specified in days.
+view_admin_systemSettings_AlertPurge_name=Delete Alerts Older Than
+view_admin_systemSettings_AlertPurge_desc=How old alert history items must be before
being purged from the database. This is specified in days.
+view_admin_systemSettings_TraitPurge_name=Delete Measurement Traits Older Than
+view_admin_systemSettings_TraitPurge_desc=How old measurement trait data must be before
being purged from the database. This is specified in days.
+view_admin_systemSettings_RtDataPurge_name=Delete Response Time Data Older Than
+view_admin_systemSettings_RtDataPurge_desc=How old response time data must be before
being purged from the database. This is specified in days.
+view_admin_systemSettings_EventPurge_name=Delete Events Older Than
+view_admin_systemSettings_EventPurge_desc=How old event data must be before being purged
from the database. This is specified in days.
+view_admin_systemSettings_DataReindex_name=Reindex Data Tables Nightly
+view_admin_systemSettings_DataReindex_desc=If enabled, certain database tables will be
re-indexed periodically.
+view_admin_systemSettings_BaselineFrequency_name=Baseline Calculation Frequency
+view_admin_systemSettings_BaselineFrequency_desc=The frequency which the auto-calculation
of baselines will be performed. If 0, baseline auto-calculation is disabled. This is
specified in days.
+view_admin_systemSettings_BaselineDataSet_name=Baseline Dataset
+view_admin_systemSettings_BaselineDataSet_desc=The amount of past measurement data that
is used to determine a baseline. This is specified in days.
+view_admin_systemSettings_JAASProvider_name=Enable LDAP
+view_admin_systemSettings_JAASProvider_desc=Should LDAP be used to determine user
identity?
+view_admin_systemSettings_LDAPUrl_name=LDAP URL
+view_admin_systemSettings_LDAPUrl_desc=URL to the LDAP Server
+view_admin_systemSettings_LDAPProtocol_name=SSL
+view_admin_systemSettings_LDAPProtocol_desc=Should communication with the LDAP server be
done over SSL?
+view_admin_systemSettings_LDAPLoginProperty_name=Login Property
+view_admin_systemSettings_LDAPLoginProperty_desc=The LDAP property that contains the user
name. Defaults to "cn". If multiple matches are found, the first entry found is
used.
+view_admin_systemSettings_LDAPFilter_name=Search Filter
+view_admin_systemSettings_LDAPFilter_desc=Any additional filters to apply when doing the
LDAP search. This is useful if the population to authenticate can be identified via a
given LDAP property, e.g. RHQUser=true
+view_admin_systemSettings_LDAPGroupFilter_name=Group Search Filter
+view_admin_systemSettings_LDAPGroupFilter_desc=LDAP search filter that must return all
LDAP groups available for authorization. This is used for LDAP group authorization.
+view_admin_systemSettings_LDAPGroupMember_name=Group Member Filter
+view_admin_systemSettings_LDAPGroupMember_desc=LDAP search filter that is used in
conjunction with the group search filter to determine user authorization. This is used for
LDAP group authorization.
+view_admin_systemSettings_LDAPBaseDN_name=Search Base
+view_admin_systemSettings_LDAPBaseDN_desc=The base of the directory tree to search for
usernames and passwords while authenticating users, e.g. ou=People,dc=redhat,dc=com
+view_admin_systemSettings_LDAPBindDN_name=Username
+view_admin_systemSettings_LDAPBindDN_desc=The username to connect to the LDAP server when
querying the LDAP user database. This is typically the full LDAP distinguished name (DN)
of a manager user, e.g. cn=Manager,dc=redhat,dc=com
+view_admin_systemSettings_LDAPBindPW_name=Password
+view_admin_systemSettings_LDAPBindPW_desc=The credentials of the user used to connect to
the LDAP server when querying the LDAP user database.
+
+# Administration/Downloads
+#------------------------------
+view_admin_downloads_agentDownload=Agent Download
+view_admin_downloads_cliDownload=Command Line Client Download
+view_admin_downloads_bundleDownload=Bundle Deployer Download
+view_admin_downloads_connectorsDownload=Connectors Download
+
+view_admin_downloads_agent_loadError=Cannot get agent version info
+view_admin_downloads_agent_version=Agent Version
+view_admin_downloads_agent_buildNumber=Agent Build
+view_admin_downloads_agent_md5=Agent MD5
+view_admin_downloads_agent_link_label=Link
+view_admin_downloads_agent_link_value=Download Agent {0} ({1})
+view_admin_downloads_agent_help=<p> \
+ This is the RHQ Agent Update Binary jar file. The purpose of this \
+ jar file is to allow you to install a fresh agent on a machine \
+ where an agent does not yet exist and to allow you to update \
+ an agent that is already installed on a machine. \
+ For more details, run this agent download jar with the --help command line
option:<br/> \
+ <b>java -jar <agent-download.jar> --help</b> \
+ </p> \
+ <h3>Agent Install</h3> \
+ <p> \
+ <b>java -jar <agent-download.jar> --install[=<new agent
directory>]</b><br/> \
+ This command will install a new agent. If you do not specify the new agent
directory, the default will be "." \
+ </p> \
+ <h3>Agent Update</h3> \
+ <p> \
+ <b>java -jar <agent-download.jar> --update[=<old agent
home>]</b><br/> \
+ This will update an existing agent that was already installed. \
+ If you do not specify the directory where the old, existing agent was installed, it
will assumed to be "rhq-agent". \
+ </p>
+
+view_admin_downloads_cli_loadError=Cannot get CLI version info
+view_admin_downloads_cli_version=CLI Version
+view_admin_downloads_cli_buildNumber=CLI Build
+view_admin_downloads_cli_md5=CLI MD5
+view_admin_downloads_cli_link_label=Link
+view_admin_downloads_cli_link_value=Download CLI {0} ({1})
+view_admin_downloads_cli_help=<p> \
+ This is the Command Line Client tool, otherwise known as the CLI. \
+ It is a standalone tool that runs from within a console and provides a \
+ command line interface to the RHQ Server. You can invoke commands via the CLI \
+ as well as run scripts to perform automated tasks. See the documentation for \
+ more information on how to install and use the CLI. \
+ </p>
+
+view_admin_downloads_bundle_loadError=Cannot get bundle deployer info
+view_admin_downloads_bundle_link_label=Link
+view_admin_downloads_bundle_link_value=Download Bundle Deployer {0}
+view_admin_downloads_bundle_help=<p> \
+ This is the Bundle Deployer tool. It is for use by developers and packagers of RHQ
bundles. \
+ This standalone tool allows you to test your bundles and their recipes from a console.
\
+ </p>
+
+view_admin_downloads_connectors_loadError=Cannot get connectors info
+view_admin_downloads_connectors_none=No connectors are available for download
+view_admin_downloads_connectors_help=Connectors are software that is needed in order for
some products to be manageable by RHQ. You install connectors into some managed products
so RHQ agents can talk to them. See the documentation for more information.
+
+# Measurement Templates view
+view_admin_measTemplates_title=Template Metric Collection Schedules
+view_admin_measTemplates_updateExisting_title=Update Existing Schedules
+view_admin_measTemplates_updateExisting_tooltip=Check this box to update the collection
schedules for the selected metrics on all existing resources of this type. If this is not
checked, the template schedules will only be applied to new resources of this type that
are added to inventory in the future.
+
+#==================== Alerts ======================
+view_alerts_table_title_group=Hist\u00F3rico de Alertas do Grupo
+view_alerts_table_title_resource=Hist\u00F3rico de Alertas do Recurso
+view_alerts_table_filter_priority=Filtro de Prioridade
+view_alerts_field_created_time=Data de Cria\u00E7\u00E3o
+view_alerts_field_modified_time=Data de Altera\u00E7\u00E3o
+view_alerts_field_enabled=Habilitado
+view_alerts_field_ack_time=Data de Verifica\u00E7\u00E3o
+view_alerts_field_ack_subject=Assunto da Verifica\u00E7\u00E3o
+view_alerts_field_ack_status=Status
+view_alerts_field_ack_status_noAck=No Ack
+view_alerts_field_ack_status_noAckHover=Not yet Acknowledged
+view_alerts_field_ack_status_ack=Ack ({0})
+view_alerts_field_ack_status_ackHover=Acknowledged by {0} at {1}
+view_alerts_field_name=Nome
+view_alerts_field_condition_text=Condi\u00E7\u00E3o
+view_alerts_field_condition_text_none=Sem condi\u00E7\u00F5es
+view_alerts_field_condition_text_many=M\u00FAltiplas condi\u00E7\u00F5es
+view_alerts_field_condition_value=Valor da Condi\u00E7\u00E3o
+view_alerts_field_priority=Prioridade
+view_alerts_field_parent=Pai
+view_alerts_field_protected=Protegido
+view_alerts_field_protected_tooltip=Se verdadeiro, esta defini\u00E7\u00E3o \u00E9
protegida de altera\u00E7\u00F5es feitas na defini\u00E7\u00E3o pai, ou seja,
altera\u00E7\u00F5es realizadas no pai n\u00E3o sobrescrevem esta defini\u00E7\u00E3o.
+view_alerts_loadFailed=Falha ao carregar dados dos alertas
+view_alerts_delete_confirm=Excluir o(s) alerta(s) selecionado(s)?
+view_alerts_delete_confirm_all=Excluir todos os alertas?
+view_alerts_delete_success=Alertas {0} exclu\u00EDdos com sucesso
+view_alerts_delete_failure=Falha ao excluir alertas com os seguintes IDs\: {0}
+view_alerts_delete_failure_all=N\u00E3o foi poss\u00EDvel excluir os alertas
+view_alerts_ack_confirm=Confirma o(s) alerta(s) selecionado(s)?
+view_alerts_ack_confirm_all=Confirma todos os alertas?
+view_alerts_ack_success=Alertas {0} confirmados com sucesso
+view_alerts_ack_failure=Falha ao confirmar alertas com os seguintes IDs\: {0}
+view_alerts_ack_failure_all=N\u00E3o foi poss\u00EDvel confirmar todos os alertas
+view_alert_details_loadFailed=Falha ao recuperar detalhes do alerta
+view_alert_details_field_ack_by=Verificado por
+view_alert_details_field_ack_at=Verificado em
+view_alert_details_field_recovery_info=Informa\u00E7\u00E3o de Recupera\u00E7\u00E3o
+view_alert_definition_for_type=Visualizar Template
+view_alert_definition_for_group=Visualizar Defini\u00E7\u00E3o de Grupo
+view_alert_definitions_table_title_group=Defini\u00E7\u00F5es de Alertas para Grupo
+view_alert_definitions_table_title_resource=Defini\u00E7\u00F5es de Alerta para Recurso
+view_alert_definitions_loadFailed=Falha ao obter a defini\u00E7\u00E3o do alerta
+view_alert_definitions_loadFailed_single=Falha ao obter a defini\u00E7\u00E3o do alerta
com ID {0}
+view_alert_definitions_enable_confirm=Habilitar a(s) defini\u00E7\u00E3o(\u00F5es) para o
alerta selecionado?
+view_alert_definitions_enable_success=Defini\u00E7\u00F5es do alerta {0} habilitados com
sucesso
+view_alert_definitions_enable_failure=Falha ao habilitar defini\u00E7\u00F5es para o
alerta selecionado
+view_alert_definitions_disable_confirm=Desabilitar as defini\u00E7\u00F5es para o alerta
selecionado?
+view_alert_definitions_disable_success=Defini\u00E7\u00F5es do alerta {0} desabilitadas
com sucesso
+view_alert_definitions_disable_failure=Falha ao desabilitar defini\u00E7\u00F5es para o
alerta selecionado
+view_alert_definitions_delete_confirm=Excluir defini\u00E7\u00F5es para o alerta
selecionado?
+view_alert_definitions_delete_success=Defini\u00E7\u00F5es do alerta {0} exclu\u00EDdas
com sucesso
+view_alert_definitions_delete_failure=Falha aos excluir as defini\u00E7\u00F5es do alerta
selecionado
+view_alert_definitions_create_success=Defini\u00E7\u00E3o do alerta criada com sucesso
+view_alert_definitions_create_failure=Falha na cria\u00E7\u00E3o da defini\u00E7\u00E3o
do alerta
+view_alert_definitions_update_success=Defini\u00E7\u00E3o do alerta atualizada com
sucesso
+view_alert_definitions_update_failure=Falha ao atualizar a defini\u00E7\u00E3o do alerta
+view_alert_definition_condition_editor_option_label=Tipo de Condi\u00E7\u00E3o
+view_alert_definition_condition_editor_option_availability=Mudan\u00E7a de
Disponibilidade
+view_alert_definition_condition_editor_option_metric_threshold=Threshold (valor absoluto)
da M\u00E9trica
+view_alert_definition_condition_editor_option_metric_baseline=Threshold base da
M\u00E9trica
+view_alert_definition_condition_editor_option_metric_change=Mudan\u00E7a no valor da
M\u00E9trica
+view_alert_definition_condition_editor_option_metric_calltime_threshold=Tempo limite da
chamada
+view_alert_definition_condition_editor_option_metric_calltime_change=Mudan\u00E7a no
tempo de chamada
+view_alert_definition_condition_editor_option_metric_trait_change=Mudan\u00E7a de
Carcter\u00EDstica
+view_alert_definition_condition_editor_option_operation=Execu\u00E7\u00E3o de
Opera\u00E7\u00E3o
+view_alert_definition_condition_editor_option_resource_configuration=Mudan\u00E7a na
Configura\u00E7\u00E3o do Recurso
+view_alert_definition_condition_editor_option_event=Detec\u00E7\u00E3o de Evento
+view_alert_definition_condition_editor_avilability_tooltip=Especifica a mudan\u00E7a de
estado na disponibilidade do recurso que ir\u00E1 disparar a condi\u00E7\u00E3o.
+view_alert_definition_condition_editor_avilability_value=Disponibilidade
+view_alert_definition_condition_editor_avilability_option_up=DISPON\u00CDVEL
+view_alert_definition_condition_editor_avilability_option_down=INDISPON\u00CDVEL
+view_alert_definition_condition_editor_metric_common_definition_not_found=Deve existir
uma defini\u00E7\u00E3o para a m\u00E9trica - algo est\u00E1 incorreto
+view_alert_definition_condition_editor_metric_threshold_tooltip=Especifica um threshold
que, quando alcan\u00E7ado, dispara a condi\u00E7\u00E3o. O valor especificado deve ser
absoluto e com uma unidade de medida opcional.
+view_alert_definition_condition_editor_metric_threshold_name=M\u00E9trica
+view_alert_definition_condition_editor_metric_threshold_value=Valor da M\u00E9trica
+view_alert_definition_condition_editor_metric_threshold_value_tooltip=Limiar (threshold)
da m\u00E9trica utilizado na compara\u00E7\u00E3o como condi\u00E7\u00E3o de disparo.
+view_alert_definition_condition_editor_metric_threshold_comparator=Mecanismo de
Compara\u00E7\u00E3o
+view_alert_definition_condition_editor_metric_threshold_comparator_less=Menor que
+view_alert_definition_condition_editor_metric_threshold_comparator_equal=Igual \u00E0
+view_alert_definition_condition_editor_metric_threshold_comparator_greater=Maior que
+view_alert_definition_condition_editor_metric_threshold_comparator_tooltip=Como a
m\u00E9trica coletada deve ser comparada ao threshold estabelecido
+view_alert_definition_condition_editor_metric_baseline_tooltip=Especifica a linha de base
que, quando violada, dispara a condi\u00E7\u00E3o. O valor especificado \u00E9 o
percentual do valor da linha de base informado.
+view_alert_definition_condition_editor_metric_baseline_percentage=Percentual da linha de
base
+view_alert_definition_condition_editor_metric_baseline_percentage_tooltip=Valor da
m\u00E9trica coletada usada para disparo da condi\u00E7\u00E3o quando comparado ao valor
da linha de base selecionada
+view_alert_definition_condition_editor_metric_baseline_value=Linha de base
(<i>baseline</i>)
+view_alert_definition_condition_editor_metric_change_tooltip=Especifica a m\u00E9trica
cujo valor deve ser alterado para disparar a condi\u00E7\u00E3o.
+view_alert_definition_condition_editor_metric_calltime_threshold_tooltip=Especifica um
tempo limite para a chamada que, quando alcan\u00E7ado, dispara a condi\u00E7\u00E3o. O
valor especificado deve ser absoluto e com uma unidade de medida opcional. \u00C9
necess\u00E1rio especificar o tempo limite da chamada para compar\u00E1-lo ao valor\:
m\u00EDnimo, m\u00E1ximo ou m\u00E9dio.
+view_alert_definition_condition_editor_metric_calltime_common_name=M\u00E9trica do tempo
de chamada
+view_alert_definition_condition_editor_metric_calltime_common_limit=Tempo limite da
chamada
+view_alert_definition_condition_editor_metric_calltime_common_limit_tooltip=Tempo de
chamada limite a ser comparado com o valor informado
+view_alert_definition_condition_editor_metric_calltime_common_regex=Express\u00E3o
Regular
+view_alert_definition_condition_editor_metric_calltime_common_regex_tooltip=Se
especificada, essa \u00E9 a express\u00E3o regular a ser satisfeita pela chamada para
disparar a condi\u00E7\u00E3o.
+view_alert_definition_condition_editor_metric_calltime_common_comparator=Compara\u00E7\u00E3o
+view_alert_definition_condition_editor_metric_calltime_common_comparator_shrinks=Redu\u00E7\u00F5es
+view_alert_definition_condition_editor_metric_calltime_common_comparator_grows=Ganhos
+view_alert_definition_condition_editor_metric_calltime_common_comparator_changes=Mudan\u00E7as
+view_alert_definition_condition_editor_metric_calltime_common_comparator_tooltip=Como o
valor do tempo de chamada deve ser comparado ao valor limite
+view_alert_definition_condition_editor_metric_calltime_threshold_value=Valor do tempo de
chamada
+view_alert_definition_condition_editor_metric_calltime_threshold_value_tooltip=O valor do
limiar (<i>threshold</i>) da m\u00E9trica usado para disparar a
condi\u00E7\u00E3o quando comparado ao mecanismo de compara\u00E7\u00E3o escolhido.
+view_alert_definition_condition_editor_metric_calltime_change_tooltip=Especifica o valor
do tempo de chamada que, quanto alterado, dispara a condi\u00E7\u00E3o. \u00C9
necess\u00E1rio especificar o tempo limite para a chamada (m\u00EDnimo, m\u00E1ximo ou
m\u00E9dio) e o percental de mudan\u00E7a que deve ocorrer.
+view_alert_definition_condition_editor_metric_calltime_change_percentage=Percentual de
Mudan\u00E7a
+view_alert_definition_condition_editor_metric_calltime_change_percentage_tooltip=Valor do
tempo de chamada coletado usado para disparar a condi\u00E7\u00E3o quando diferir do
percentual do valor limite do tempo de chamada definido.
+view_alert_definition_condition_editor_metric_trait_change_tooltip=Specify the trait
whose value must change to trigger the condition.
+view_alert_definition_condition_editor_metric_trait_change_value=Caracter\u00EDstica
+view_alert_definition_condition_editor_operation_tooltip=Define o resultado esperado
quando a opera\u00E7\u00E3o selecionada for executada para dispararo da
confi\u00E7\u00E3o.
+view_alert_definition_condition_editor_operation_value=Opera\u00E7\u00E3o
+view_alert_definition_condition_editor_operation_status=Status da Opera\u00E7\u00E3o
+view_alert_definition_condition_editor_operation_status_inprogress=Em andamento
+view_alert_definition_condition_editor_operation_status_success=Sucesso
+view_alert_definition_condition_editor_operation_status_failure=Falha
+view_alert_definition_condition_editor_operation_status_canceled=Cancelada
+view_alert_definition_condition_editor_resource_configuration_tooltip=Essa
condi\u00E7\u00E3o \u00E9 disparada quando a configura\u00E7\u00E3o do recurso for
alterada.
+view_alert_definition_condition_editor_event_tooltip=Define a severeidade do evento para
disparar a condi\u00E7\u00E3o. Caso seja definida uma express\u00E3o regular, a
condi\u00E7\u00E3o somente ser\u00E1 disparada se o evento satisfazer a express\u00E3o.
+view_alert_definition_condition_editor_event_severity=Severidade do Evento
+view_alert_definition_condition_editor_event_severity_debug=Debug
+view_alert_definition_condition_editor_event_severity_info=Info
+view_alert_definition_condition_editor_event_severity_warn=Warn
+view_alert_definition_condition_editor_event_severity_error=Error
+view_alert_definition_condition_editor_event_severity_fatal=Fatal
+view_alert_definition_condition_editor_event_regex=Express\u00E3o Regular
+view_alert_definition_condition_editor_event_regex_tooltip=Se definida, a
condi\u00E7\u00E3o somente ser\u00E1 disparada caso o evento satisfa\u00E7a a
express\u00E3o.
+view_alert_definition_condition_editor_common_min=M\u00EDnimo
+view_alert_definition_condition_editor_common_avg=M\u00E9dio
+view_alert_definition_condition_editor_common_max=M\u00E1ximo
+view_alert_definition_condition_editor_delete_confirm=Delete the selected alert
condition(s)?
+view_alert_definition_notification_editor_title_add=Adicionar Notifica\u00E7\u00E3o
+view_alert_definition_notification_editor_title_edit=Editar Notifica\u00E7\u00E3o
+view_alert_definition_notification_editor_sender=Remetente da Notifica\u00E7\u00E3o
+view_alert_definition_notification_editor_none_available=Remetentes n\u00E3o
dispon\u00EDveis
+view_alert_definition_notification_editor_loadFailed=N\u00E3o \u00E9 poss\u00EDvel obter
remetentes
+view_alert_definition_notification_editor_loadFailed_single=N\u00E3o \u00E9 poss\u00EDvel
obter a configura\u00E7\u00E3o do remetente
+view_alert_definition_notification_editor_saveFailed=N\u00E3o foi poss\u00EDvel salvar a
configura\u00E7\u00E3o
+view_alert_definition_notification_editor_field_sender=Remetente
+view_alert_definition_notification_editor_field_configuration=Configura\u00E7\u00E3o
+view_alert_definition_notification_editor_field_configuration_not_loaded=Desconhecido
+view_alert_definition_notification_editor_field_configuration_loadFailed=Falha ao obter a
configura\u00E7\u00E3o
+view_alert_definition_notification_editor_delete_confirm=Tem certeza de que deseja
excluir as notifica\u00E7\u00F5es selecionadas?
+view_alert_definition_notification_operation_editor_mode_title=Modo de Sele\u00E7\u00E3o
do Recurso
+view_alert_definition_notification_operation_editor_mode_this=Este Recurso
+view_alert_definition_notification_operation_editor_mode_specific=Recurso
Espec\u00EDfico
+view_alert_definition_notification_operation_editor_mode_relative=Recurso parente
+view_alert_definition_notification_operation_editor_mode_unknown=OP\u00C7\u00C3O
INV\u00C1LIDA - BUG\!
+view_alert_definition_notification_operation_editor_common_operation=Opera\u00E7\u00E3o
+view_alert_definition_notification_operation_editor_specific_resource=Recurso
+view_alert_definition_notification_operation_editor_specific_pick_button=Selecionar
+view_alert_definition_notification_operation_editor_specific_pick_text=Selecione um
recurso...
+view_alert_definition_notification_operation_editor_specific_pick_error_invalid=Favor
selecionar um recurso
+view_alert_definition_notification_operation_editor_specific_pick_error_no_operation=Selecione
um recurso que possua um ou mais opera\u00E7\u00F5es
+view_alert_definition_notification_operation_editor_relative_ancestor=Iniciar a busca a
partir de
+view_alert_definition_notification_operation_editor_relative_ancestor_tooltip=Selecione o
topo da hierarquia para buscar a \u00E1rvore de descendentes para Filtro por Tipo
+view_alert_definition_notification_operation_editor_relative_ancestor_loadFailed=N\u00E3o
\u00E9 poss\u00EDvel obter a ascend\u00EAncia do tipo
+view_alert_definition_notification_operation_editor_relative_ancestor_root=Tipo do
Ancestral Raiz
+view_alert_definition_notification_operation_editor_relative_descendant=Ent\u00E3o
procure por
+view_alert_definition_notification_operation_editor_relative_descendant_tooltip=Tipo do
recurso a ser procurado a baixo do tipo raiz definido na sele\u00E7\u00E3o 'Inicia a
Pesquesa a partir de'.
+view_alert_definition_notification_operation_editor_relative_descendant_filter_tooltip=Um
nome especifico para identificar unicamente um recurso quando existir mais de um do mesmo
tipo. Isso \u00E9 opcional, se definido, sempre ser\u00E1 um recurso do tipo slecionda na
hierarquia.
+view_alert_definition_notification_operation_editor_relative_descendant_loadFailed=N\u00E3o
\u00E9 poss\u00EDvel obter os tipos de descendentes
+view_alert_definition_notification_operation_editor_operations_loadFailed=Falha ao
carregar a lista de opera\u00E7\u00F5es dispon\u00EDveis
+view_alert_definition_notification_operation_editor_operations_no_parameters=Esta
opera\u00E7\u00E3o n\u00E3o recebe par\u00E2metros
+view_alert_definition_notification_role_editor_loadFailed=N\u00E3o \u00E9 poss\u00EDvel
determinar os perfis atuais - iniciando vazio
+view_alert_definition_notification_role_editor_restoreFailed=N\u00E3o \u00E9
poss\u00EDvel usar os perfis atuais - iniciando vazio
+view_alert_definition_notification_role_editor_saveFailed=N\u00E3o foi poss\u00EDvel
salvar os perfis selecionados
+view_alert_definition_notification_user_editor_loadFailed=N\u00E3o \u00E9 poss\u00EDvel
determinar os usu\u00E1rios atuais - iniciando vazio
+view_alert_definition_notification_user_editor_restoreFailed=N\u00E3o foi poss\u00EDvel
usar os usu\u00E1rios atuais - iniciando vazio
+view_alert_definition_notification_user_editor_saveFailed=N\u00E3o foi poss\u00EDvel
salvar os usu\u00E1rios seleciondados
+view_alert_definition_notification_cliScript_editor_repository=Repository
+view_alert_definition_notification_cliScript_editor_script=Script
+view_alert_definition_notification_cliScript_editor_whichUser=User To Run The Script As
+view_alert_definition_notification_cliScript_editor_thisUser=Myself
+view_alert_definition_notification_cliScript_editor_anotherUser=Another User
+view_alert_definition_notification_cliScript_editor_verifyAuthentication=Verify
+view_alert_definition_notification_cliScript_editor_loadFailed=Loading the CLI
Notification Editor Failed.
+view_alert_definition_notification_cliScript_editor_selectRepoFirst=Select a repository
first.
+view_alert_definition_notification_cliScript_editor_existingScript=Existing Script
+view_alert_definition_notification_cliScript_editor_uploadNewScript=Upload New Script
+view_alert_definition_notification_cliScript_editor_newScriptVersion=Version
+view_alert_definition_notification_cliScript_editor_selectRepo=Select the repository
where the script should reside
+view_alert_definition_recovery_editor_disable_when_fired=Desabilitar quando disparado
+view_alert_definition_recovery_editor_disable_when_fired_tooltip=Indica se este alerta
deve ser desabilitado ap\u00F3s ser disparado. Uma vez desabilitado, o alerta pode ser
reativado manualmente ou um alerta de recupera\u00E7\u00E3o pode ser definido para
reativ\u00E1-lo automaticamente. If this alert is a recovery alert itself, this setting
cannot be turned on.
+view_alert_definition_recovery_editor_recovery_alert=Alerta de Recupera\u00E7\u00E3o
+view_alert_definition_recovery_editor_recovery_alert_tooltip=O Alerta a ser recuperado
(reativado) ap\u00F3s o disparo deste alerta. N\u00E3o selecione um alerta aqui caso
n\u00E3o esteja definindo um alerta de recupera\u00E7\u00E3o.
+view_alert_definition_recovery_editor_loadFailed=N\u00E3o foi poss\u00EDvel construir o
menu de recupera\u00E7\u00E3o
+view_alert_definition_recovery_editor_none_available=Nenhum
+view_alert_common_tab_general=Propriedades Gerais
+view_alert_common_tab_conditions=Condi\u00E7\u00F5es
+view_alert_common_tab_conditions_modal_title=Adicionar nova condi\u00E7\u00E3o.
+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_text=Condi\u00E7\u00E3o
+view_alert_common_tab_conditions_value=Valor
+view_alert_common_tab_conditions_type_availability=Mudan\u00E7a na Disponibilidade
+view_alert_common_tab_conditions_type_availability_down=Indispon\u00EDvel
+view_alert_common_tab_conditions_type_availability_up=Dispon\u00EDvel
+view_alert_common_tab_conditions_type_metric_threshold=Valor da M\u00E9trica excede o
limiar (threshold)
+view_alert_common_tab_conditions_type_metric_calltime_threshold=Tempo de chamada excede o
limiar (threshold)
+view_alert_common_tab_conditions_type_metric_calltime_destination=com o destino da
chamada correspondente
+view_alert_common_tab_conditions_type_metric_calltime_change=Mudan\u00E7a no tempo de
chamada
+view_alert_common_tab_conditions_type_metric_calltime_change_verb=ao menos
+view_alert_common_tab_conditions_type_metric_calltime_delta_grows=Aumento
+view_alert_common_tab_conditions_type_metric_calltime_delta_shrinks=Redu\u00E7\u00E3o
+view_alert_common_tab_conditions_type_metric_calltime_delta_other=Mudan\u00E7a
+view_alert_common_tab_conditions_type_metric_baseline=Valor da m\u00E9trica excede a
linha de base (baseline)
+view_alert_common_tab_conditions_type_metric_baseline_verb=de
+view_alert_common_tab_conditions_type_metric_change=Mudan\u00E7a no valor da
m\u00E9trica
+view_alert_common_tab_conditions_type_metric_trait_change=Mudan\u00E7a de
Carater\u00EDstica
+view_alert_common_tab_conditions_type_operation=Execu\u00E7\u00E3o de Opera\u00E7\u00E3o
+view_alert_common_tab_conditions_type_operation_status=resultado com status
+view_alert_common_tab_conditions_type_resource_configuration=Mudan\u00E7a na
Configura\u00E7\u00E3o do Recurso
+view_alert_common_tab_conditions_type_event=Detec\u00E7\u00E3o de Envento
+view_alert_common_tab_conditions_type_event_matching=combinando com o evento de origem
+view_alert_common_tab_conditions_recovery_enabled=''{0}'' disparado para
ser reativado.
+view_alert_common_tab_conditions_recovery_disabled=Este alerta desativou a sua
defini\u00E7\u00E3o.
+view_alert_common_tab_notifications=Notifica\u00E7\u00F5es
+view_alert_common_tab_notifications_sender=Remetente
+view_alert_common_tab_notifications_status=Status
+view_alert_common_tab_notifications_message=Mensagem
+view_alert_common_tab_dampening=Sensibilidade
+view_alert_common_tab_dampening_category_none=N\u00E3o definido
+view_alert_common_tab_dampening_category_none_tooltip=Sensibilidade desabilitada. Cada
vez que o conjunto de condi\u00E7\u00F5es for satisfeito, um alerta ser\u00E1 disparado.
+view_alert_common_tab_dampening_category_consecutive_count=Consecutivos
+view_alert_common_tab_dampening_category_consecutive_count_tooltip=Um alerta \u00E9
disparado a cada X ocorr\u00EAncias consecutivas em que o conjunto de condi\u00E7\u1E4Des
for satisfeito.
+view_alert_common_tab_dampening_category_partial_count=\u00DAltimas N
verifica\u00E7\u00F5es
+view_alert_common_tab_dampening_category_partial_count_tooltip=Um alerta \u00E9 disparado
a cada X ocorr\u00EAncias em que o conjunto de condi\u00E7\u00F5es \u00E9 satisfeito
durante as \u00FAltimas N verifica\u00E7\u00F5es.
+view_alert_common_tab_dampening_category_duration_count=Per\u00EDodo de Tempo
+view_alert_common_tab_dampening_category_duration_count_tooltip=Um alerta \u00E9
disparado a cada X ocorr\u00EAncias em que o conjunto de condi\u00E7\u00F5es \u00E9
satisfeito dentro de um dado per\u00EDodo de tempo.
+view_alert_common_tab_dampening_consecutive_occurrences_label=Ocorr\u00EAcias
+view_alert_common_tab_dampening_consecutive_occurrences_label_tooltip=O n\u00FAmero de
vezes que o conjunto de condi\u00E7\u00F5es deve ser satisfeito antes do alerta ser
disparado.
+view_alert_common_tab_dampening_partial_occurrences_label=Ocorr\u00EAncias
+view_alert_common_tab_dampening_partial_occurrences_label_tooltip=O n\u00FAmero de vezes
que o conjunto de condi\u00E7\u00F5es deve ser satisfeito durante as \u00FAltimas N
verifica\u00E7\u00F5es antes do alerta ser disparado.
+view_alert_common_tab_dampening_partial_evalatuions_label=Verifica\u00E7\u00F5es
+view_alert_common_tab_dampening_partial_evalatuions_label_tooltip=O total de vezes que o
conjunto de condi\u00E7\u00F5es ser\u00E1 testado para certificar-se de que o n\u00FAmero
de ocorr\u00EAncias definido foi satisfeito.
+view_alert_common_tab_dampening_duration_occurrences_label=Ocorr\u00EAncias
+view_alert_common_tab_dampening_duration_occurrences_label_tooltip=O n\u00FAmero de vezes
que o conjunto de condi\u00E7\u00F5es deve ser satisfeito durante o per\u00EDodo de tempo
definido antes do alerta ser disparado.
+view_alert_common_tab_dampening_duration_period_label=Per\u00EDodo de Tempo
+view_alert_common_tab_dampening_duration_period_label_tooltip=Espa\u00E7o de tempo em que
o conjunto de condi\u00E7\u00F5es ser\u00E1 testado para verificar se o n\u00FAmero de
ocorr\u00EAncias definido \u00E9 satisfeito.
+view_alert_common_tab_recovery=Recupera\u00E7\u00E3o~
+view_alert_common_tab_invalid_condition_category=Categoria de condi\u00E7\u00E3o
inv\u00E1lida - favor reportar como um bug\: {0}
+view_alert_common_tab_invalid_dampening_category=Categora de sensibilidade inv\u00E1lida
- favor reportar como um bug\: {0}
+view_alert_common_tab_invalid_time_units=Unidade de tempo inv\u00E1lida - favor reportar
como um bug\: {0}
+
+# Auto Discovery Queue
+#----------------------------
+view_autoDiscoveryQ_title=Fila de Autodescoberta
+view_autoDiscoveryQ_import=Importar
+view_autoDiscoveryQ_ignore=Ignorar
+view_autoDiscoveryQ_ignored=Ignorado
+view_autoDiscoveryQ_unignore=N\u00E3o ignorar
+view_autoDiscoveryQ_committed=Committed
+view_autoDiscoveryQ_deleted=Deleted
+view_autoDiscoveryQ_uninventoried=Uninventoried
+view_autoDiscoveryQ_new=Novo
+view_autoDiscoveryQ_newAndIgnored=Novo e Ignorado
+view_autoDiscoveryQ_importFailure=Falha ao importar recursos
+view_autoDiscoveryQ_importSuccessful=Os recursos selecionados foram importados com
sucesso.
+view_autoDiscoveryQ_ignoreFailure=Falha ao ignorar recursos.
+view_autoDiscoveryQ_ignoreSuccessful=Os recursos selecionados foram ignorados com
sucesso.
+view_autoDiscoveryQ_unignoreFailure=Falha ao reimportar os recursos
+view_autoDiscoveryQ_unignoreSuccessful=You have successfully unignored the selected
resources.~
+view_autoDiscoveryQ_noperm=(Required manage inventory permissions missing. See
Administrator to change)~
+view_autoDiscoveryQ_noItems=N\u00E3o h\u00E1 itens a serem mostrados
+view_autoDiscoveryQ_field_parentId=ID Pai
+view_autoDiscoveryQ_field_name=Nome do Recurso
+view_autoDiscoveryQ_field_key=Chave do Recurso
+view_autoDiscoveryQ_field_discoveryTime=Data e Hora da Descoberta
+view_autoDiscoveryQ_field_inventoryStatus=Status do Invet\u00E1rio
+view_autoDiscoveryQ_loadFailure=Falha ao carregar a fila de descoberta do
invent\u00E1rio
+view_autoDiscoveryQ_showStatus=Show
+view_autoDiscoveryQ_confirmSelect=Also select the platform children?
+
+#==================== Bundles ======================
+
+# some common bundle terms
+view_bundle_bundle=Bundle~
+view_bundle_bundles=Bundles~
+view_bundle_bundleDestinations=Bundle Destinations~
+view_bundle_bundleDeployment=Bundle Deployment~
+view_bundle_bundleDeployments=Bundle Deployments~
+view_bundle_bundleFiles=Bundle Files~
+view_bundle_bundleType=Bundle Type~
+view_bundle_bundleVersion=Bundle Version~
+view_bundle_bundleVersions=Bundle Versions~
+view_bundle_deploy=Deploy~
+view_bundle_deployed=Deployed~
+view_bundle_deployDir=Deploy Directory~
+view_bundle_deployments=Deployments~
+view_bundle_destinations=Destinations~
+view_bundle_files=Files~
+view_bundle_latestVersion=Latest Version~
+view_bundle_recipe=Recipe~
+view_bundle_revert=Revert~
+view_bundle_purge=Purge
+view_bundle_versions=Versions~
+view_bundle_deleteConfirm=Are you sure you want to delete this bundle? All versions,
destinations and deployments for this bundle will also be deleted.
+
+# individual bundle views/wizards
+view_bundle_fileListView_fileSize=File Size~
+view_bundle_fileListView_md5=MD5
+view_bundle_fileListView_sha256=SHA256
+view_bundle_fileListView_loadFailure=Failed to load bundle file data~
+view_bundle_version_backToBundle=Back to Bundle~
+view_bundle_version_bundleVersionTagUpdateFailure=Failed to update bundle version tags~
+view_bundle_version_bundleVersionTagUpdateSuccessful=You have successfully updated the
bundle version tags~
+view_bundle_version_deleteConfirm=Are you sure you want to delete this bundle version?
+view_bundle_version_deleteFailure=Failed to delete the bundle version [{0}]
+view_bundle_version_deleteSuccessful=You successfully deleted the bundle version [{0}]
+view_bundle_version_loadFailure=Failed to load bundle version~
+view_bundle_tree_loadFailure=Failed to load bundle data~
+view_bundle_revertWizard_title=Bundle Revert~
+view_bundle_revertWizard_windowTitle=Bundle Revert Wizard~
+view_bundle_revertWizard_getInfoStep_name=Provide Revert Information~
+view_bundle_revertWizard_getInfoStep_revertDeployName=Revert Deploy Name~
+view_bundle_revertWizard_getInfoStep_revertDeployDesc=Revert Deploy Description~
+view_bundle_revertWizard_getInfoStep_revertDeployDescFull=[REVERT
From]\\n{0}\\n\\n[REVERT To]\\n{1}~
+view_bundle_revertWizard_getInfoStep_cleanDeploy=Clean Deployment? (this will delete an
old, existing deploy directory prior to starting the revert deployment)~
+view_bundle_revertWizard_getInfoStep_getNameFailure=Failed to get revert deployment
name~
+view_bundle_revertWizard_confirmStep_name=Revert Deployment Confirmation~
+view_bundle_revertWizard_confirmStep_noLiveDeployment_concise=No live deployment was
found for the destination
+view_bundle_revertWizard_confirmStep_noLiveDeployment=No live deployment was found for
the destination [{0}]~
+view_bundle_revertWizard_confirmStep_noPriorDeployment_concise=The live deployment cannot
be reverted because there is no prior deployment
+view_bundle_revertWizard_confirmStep_noPriorDeployment=The live deployment [{0}] cannot
be reverted because there is no prior deployment for the destination [{1}]~
+view_bundle_revertWizard_confirmStep_failedToFindLiveDeployment=Failed to find live
deployment; cannot revert~
+view_bundle_revertWizard_confirmStep_liveDeployment=Live Deployment~
+view_bundle_revertWizard_confirmStep_prevDeployment=Previous Deployment~
+view_bundle_revertWizard_confirmStep_confirmation=Reverting Live Deployment to Previous
Deployment. Click "Next" to continue...~
+view_bundle_revertWizard_revertStep_name=Deploy Bundle to Destination Platforms~
+view_bundle_revertWizard_revertStep_reverting=Reverting...~
+view_bundle_revertWizard_revertStep_scheduled=You have successfully scheduled the revert
deployment!~
+view_bundle_revertWizard_revertStep_scheduledDetails=You have successfully scheduled to
revert the bundle deployment [{0}] from resource group [{1}]~
+view_bundle_revertWizard_revertStep_scheduledFailure=Failed to schedule revert
deployment!~
+view_bundle_list_loadFailure=Failed to load the bundle to be deployed [{0}]~
+view_bundle_list_singleLoadFailure=Failed to get a single bundle to be deployed [{0}]~
+view_bundle_list_versionsCount=Versions Count~
+view_bundle_list_destinationsCount=Destinations Count~
+view_bundle_list_loadWithLatestFailure=Failed to load bundle with the latest version
data~
+view_bundleVersion_loadFailure=Failed to load bundle version data~
+view_bundle_list_backToAll=Back to All Bundles~
+view_bundle_list_tagUpdateFailure=Failed to update bundle tags~
+view_bundle_list_tagUpdateSuccessful=You have successfully updated the bundle tags~
+view_bundle_list_deleteConfirm=Are you sure you want to delete this bundle?~
+view_bundle_list_deletesFailure=Failed to delete the bundles
+view_bundle_list_deletesSuccessful=You successfully deleted the bundles
+view_bundle_list_deleteFailure=Failed to delete the bundle [{0}]~
+view_bundle_list_deleteSuccessful=You successfully deleted the bundle named [{0}]~
+view_bundle_list_error1=Failed to load bundle to deploy [{0}]~
+view_bundle_list_error2=Failed to get a single bundle to deploy [{0}]~
+view_bundle_list_error3=Failed to load bundle~
+view_bundle_dest_group=Group~
+view_bundle_dest_created=Created~
+view_bundle_dest_deployDir=Deploy Directory~
+view_bundle_dest_lastDeployedVersion=Last Deployed Version~
+view_bundle_dest_lastDeploymentDate=Last Deployment Date~
+view_bundle_dest_lastDeploymentStatus=Last Deployment Status~
+view_bundle_dest_loadFailure=Failed to load bundle destinations~
+view_bundle_dest_loadFailureVersionInfo=Failed to load bundle destination deployed
version information~
+view_bundle_dest_backToBundle=Back to Bundle~
+view_bundle_dest_tagUpdateFailure=Failed to update bundle destination tags~
+view_bundle_dest_tagUpdateSuccessful=You have successfully updated the bundle destination
tags~
+view_bundle_dest_purgeConfirm=This will purge the bundle content from all remote
machines. Are you sure you want to do this?
+view_bundle_dest_purgeFailure=Failed to purge the bundle destination [{0}] from some or
all of the remote machines.
+view_bundle_dest_purgeSuccessful=You successfully purged the bundle destination [{0}]
from all of the remote machines.
+view_bundle_dest_revertConfirm=This will revert all remote machines back to the previous
bundle deployment. Are you sure you want to do this?
+view_bundle_dest_deleteConfirm=Are you sure you want to delete this bundle destination?
This only deletes it from the database; all bundle content that was deployed to this
destination on remote machines will remain.
+view_bundle_dest_deleteFailure=Failed to delete the bundle destination [{0}]
+view_bundle_dest_deleteSuccessful=You successfully deleted the bundle destination [{0}]
+view_bundle_resDeployDS_loadFailure=Failed to load bundle resource deployments~
+view_bundle_deploy_name=Deployment Name~
+view_bundle_deploy_time=Deployment Time~
+view_bundle_deploy_loadDeployFailure=Failed to load bundle deployments~
+view_bundle_deploy_action=Action~
+view_bundle_deploy_installDetails=Install Details~
+view_bundle_deploy_backButton=Back to Destination~
+view_bundle_deploy_tagUpdateFailure=Failed to update bundle deployment tags~
+view_bundle_deploy_tagUpdateSuccessful=You have successfully updated the bundle
deployment tags~
+view_bundle_deploy_deploymentPlatforms=Deployment Platforms~
+view_bundle_deploy_selectARow=Select a row to show installation details~
+view_bundle_deploy_operatingSystem=Operating System~
+view_bundle_deploy_loadFailure=Failed to load bundle deployment~
+view_bundle_deploy_loadBundleFailure=Failed to find bundle~
+view_bundle_deploy_deployedBy=Deployed By
+view_bundle_deploy_clickForError=Click the icon for the error message
+view_bundle_deploy_deleteConfirm=Are you sure you want to delete this bundle deployment?
+view_bundle_deploy_deleteFailure=Failed to delete the bundle deployment [{0}]
+view_bundle_deploy_deleteSuccessful=You successfully deleted the bundle deployment [{0}]
+view_bundle_createWizard_title=Create Bundle~
+view_bundle_createWizard_windowTitle=Bundle Creation Wizard~
+view_bundle_createWizard_cancelSuccessful=Canceled the creation of bundle [{0}],
version=[{1}]~
+view_bundle_createWizard_cancelFailure=Failed to fully cancel the creation of bundle
[{0}], version=[{1}] - the bundle may still exist in the database~
+view_bundle_createWizard_noBundleTypesSupported=No bundle types are supported - you must
deploy a valid plugin that supports bundle deployments~
+view_bundle_createWizard_noBundleTypesAvail=No bundle types are available~
+view_bundle_createWizard_loadBundleFileFailure=Cannot obtain bundle file information from
server~
+view_bundle_createWizard_enterUrl=Please enter a valid URL where the bundle distribution
file can be downloaded from
+view_bundle_createWizard_enterRecipe=Please supply a valid recipe
+view_bundle_createWizard_uploadInProgress=Upload is in progress... This can take several
minutes for large files~
+view_bundle_createWizard_uploadStepName=Provide a Bundle Distribution~
+view_bundle_createWizard_noAdditionalFilesNeeded=No additional files need to be uploaded
for this bundle~
+view_bundle_createWizard_failedToUploadFile=Failed to upload bundle file~
+view_bundle_createWizard_failedToUploadDistroFile=Failed to upload bundle distribution
file~
+view_bundle_createWizard_bundleDistro=Bundle Distribution~
+view_bundle_createWizard_youMustChooseOne=You must choose one option in order to create a
bundle!
+view_bundle_createWizard_urlOption=URL~
+view_bundle_createWizard_uploadOption=Upload~
+view_bundle_createWizard_recipeOption=Recipe~
+view_bundle_createWizard_provideBundleDistro=Provide a Bundle Distribution
+view_bundle_createWizard_clickToUploadRecipe=Click to upload a recipe file~
+view_bundle_createWizard_createFailure=Failed to create the bundle~
+view_bundle_createWizard_createSuccessful=You have successfully created a bundle named
[{0}] with a version of [{1}]~
+
+view_bundle_deployWizard_deploying=Deploying...~
+view_bundle_deployWizard_deployStep=Deploy Bundle to Destination Platforms~
+view_bundle_deployWizard_deploymentCreated=Created Deployment...~
+view_bundle_deployWizard_deploymentCreatedDetail=Created deployment [{0}] description
[{1}]~
+view_bundle_deployWizard_deploymentCreatedDetail_concise=You have created the deployment
[{0}]
+view_bundle_deployWizard_destinationCreatedDetail=Created destination [{0}] description
[{1}]~
+view_bundle_deployWizard_destinationCreatedDetail_concise=You have created the
destination [{0}]
+view_bundle_deployWizard_deploymentScheduled=Bundle Deployment Scheduled!~
+view_bundle_deployWizard_deploymentScheduledDetail=Scheduled bundle deployment [{0}]
destination group [{1}]~
+view_bundle_deployWizard_deploymentScheduledDetail_concise=You have scheduled the bundle
deployment
+view_bundle_deployWizard_error_1=Failed to delete new deployment on Cancel:
+view_bundle_deployWizard_error_2=Failed to delete new destination on Cancel:
+view_bundle_deployWizard_error_3=Failed to Schedule Deployment!~
+view_bundle_deployWizard_error_4=Failed to schedule deployment: {0}~
+view_bundle_deployWizard_error_5=Failed to Create Deployment!~
+view_bundle_deployWizard_error_6=Failed to create deployment: {0}~
+view_bundle_deployWizard_error_7=Failed to get deployment name.~
+view_bundle_deployWizard_error_8=You must select a valid resource group from the drop
down~
+view_bundle_deployWizard_error_9=Failed to delete new destination in nextPage:~
+view_bundle_deployWizard_error_10=Failed to create destination, it may already exist.
(Note, for an existing destination deploy from the Destination view)~
+view_bundle_deployWizard_error_11=Failed to find defined deployments.~
+view_bundle_deployWizard_error_12=Failed to find defined bundles.~
+view_bundle_deployWizard_getConfigStep=Set Deployment Configuration~
+view_bundle_deployWizard_getConfigSkip=No configuration needed for this bundle version.~
+view_bundle_deployWizard_getDestStep=New Destination~
+view_bundle_deployWizard_getDest_name=Destination Name~
+view_bundle_deployWizard_getDest_desc=Destination Description~
+view_bundle_deployWizard_getDest_deployDir=Root Deployment Directory (on destination
platforms)~
+view_bundle_deployWizard_getInfoStep=Provide Deployment Information~
+view_bundle_deployWizard_getInfo_clean=Clean Deployment? (wipe deploy directory on
destination platform)~
+view_bundle_deployWizard_getInfo_deploymentDesc=Deployment Description~
+view_bundle_deployWizard_getInfo_deploymentName=Deployment Name~
+view_bundle_deployWizard_getOptionsStep=Deploy Options~
+view_bundle_deployWizard_getOptions_deployLater=Deploy Later~
+view_bundle_deployWizard_getOptions_deployNow=Deploy Now~
+view_bundle_deployWizard_getOptions_deployTime=Deployment Time~
+view_bundle_deployWizard_selectBundleStep=Select Deployment Bundle~
+view_bundle_deployWizard_selectBundle_single=Select only a single bundle for
deployment.~
+view_bundle_deployWizard_selectVersionStep=Select Deployment Bundle Version~
+view_bundle_deployWizard_selectVersion_latest=Latest Version [{0}]~
+view_bundle_deployWizard_selectVersion_live=Live Version [{0}]~
+view_bundle_deployWizard_selectVersion_select=Select Version from List:~
+view_bundle_deployWizard_title=Bundle Deployment Wizard~
+
+# =================== Measurement Views =====================
+
+view_measureTable_chartMetricValues=Chart Selected Metrics
+view_measureTable_getLive=Get Live Value
+view_measureTable_getLive_failure=Cannot get live values for those metrics. Make sure the
agent is running and the managed resource is up.
+view_measureTable_live_title=Live Data
+
+# =================== Components =====================
+
+view_configCompare_comparingConfigs=Comparando Configura\u00E7\u00F5es
+view_configCompare_configCompare=Compara\u00E7\u00E3o de Configura\u00E7\u00F5es
+
+view_configEdit_addItem=Adicionar Item \u00E0 Lista
+view_configEdit_confirm_1=Tem certeza de que deseja excluir as propriedades
selecionadas?
+view_configEdit_confirm_2=Tem certeza de que deseja excluir esta linha?
+view_configEdit_confirm_3=Tem certeza de que deseja excluir [{0}] selecionado [{1}]?
+view_configEdit_viewRow=View Row
+view_configEdit_editRow=Editar Linha de Configura\u00E7\u00E3o
+view_configEdit_enterPropName=Informe o nome da propriedade a ser adicionada.
+view_configEdit_error_1=Este recurso n\u00E3o suporta Configura\u00E7\u00E3o.
+view_configEdit_error_2=Este recurso n\u00E3o possui suporte \u00E0 propriedades de
conex\u00E3o.
+view_configEdit_error_3=N\u00E3o f\u00F3 poss\u00EDvel adicionar a propriedade com nome
[{0}]. Nome de propriedade j\u00E1 utilizada neste conjunto.
+view_configEdit_files=Arquivos
+view_configEdit_hideAll=Ocultar todos
+view_configEdit_jumpToSection=Ir direto para a Sele\u00E7\u00E3o
+view_configEdit_msg_1=Propriedade [{0}] adicionada ao conjunto.
+view_configEdit_msg_2=Propriedades removidas do conjunto.
+view_configEdit_msg_3=[{0} {1}] removido da lista.
+view_configEdit_msg_4=Item adicionado \u00E0 lista.
+view_configEdit_properties=Propriedades
+view_configEdit_tooltip_1=Remove os itens selecionados da lista.
+view_configEdit_tooltip_2=Adiciona um item \u00E0 lista.
+
+view_groupConfigEdit_member=Membro
+view_groupConfigEdit_noListProps=Lista de propriedades n\u00E3o suportada atualmente para
configura\u00E7\u00F5es em grupo.
+view_groupConfigEdit_tooltip_1=Valores dos membros diferem - clique no \u00EDcone para
edit\u00E1-los.
+view_groupConfigEdit_setAll=Atribuir todos os valores \u00E0\:
+view_groupConfigEdit_unset=Remover atribui\u00E7\u00E3o
+view_groupConfigEdit_valsDiff=valores dos membros diferem
+view_groupConfigEdit_valsDiffForProp=Valores dos membros para a Propriedade [{0}]
+
+view_leftNav_unknownPage=P\u00E1gina desconhecida [{0}] para a se\u00E7\u00E3o [{1}] -
URL inv\u00E1lida.
+
+view_measure_nan=--dados indispon\u00EDveis--
+
+# Measurement Range Selector
+view_measureRange_last=\u00DAltimo
+view_measureRange_start=Time Range - Start
+view_measureRange_simple=Simples...
+
+view_selector_assigned=Associado {0}
+view_selector_available=Dispon\u00EDvel {0}
+
+view_subTab_error_disabled=N\u00E3o \u00E9 poss\u00EDvel selecionar uma subTab
desabilidada [{0}].
+
+view_table_drawFail=Failed to draw Table [{0}].
+view_table_matchingRows=Matching Rows: {0} (selected: {1})
+view_table_totalRows=Total de Linhas\: {0} (selecionada\: {1})
+view_tableSection_backButton=Voltar \u00E0 Lista
+view_tableSection_error_noId=Table [{0}] record is missing 'id' attribute -
please report this bug.~
+view_tableSection_error_badId=Can not show detail for [{0}]. Illegal 'id': [{1}].
Please report this bug~
+
+view_tags_tags=Tags~
+view_tags_error_1=Failed to load Tags~
+view_tags_tooltip_1=Click to remove this Tag~
+view_tags_tooltip_2=Click to edit Tags~
+view_tags_tooltip_3=Enter a Tag in the format: (namespace:)(semantic=)tagname (e.g.
it:env=QA, or owner=John)
+
+# File Upload (various)
+view_upload_alreadyUploaded=File has already been uploaded~
+view_upload_bundleDistFile=Distribution File~
+view_upload_error_bundleDistFile=Error uploading Bundle Distribution File~
+view_upload_error_file=Error uploading file~
+view_upload_error_fileName=Error uploading file [{0}]~
+view_upload_error_fileName_2=Error uploading file [{0}], check for invalid file path.~
+view_upload_error_packageVersionFile=Error uploading Package Version File~
+view_upload_error_results=Error uploading file, unexpected results: [{0}]~
+view_upload_inProgress=Can not submit, upload is currently in progress~
+view_upload_prompt_1=[{0}] File to Upload~
+view_upload_prompt_2=File to Upload~
+view_upload_tooltip_1a=Select a file to upload, then click Upload or Next
+view_upload_tooltip_1b=Select a file to upload, then click Next
+view_upload_tooltip_2=File upload had previously failed~
+view_upload_success=File successfully uploaded~
+view_upload_upload=Upload~
+view_upload_uploadFile=UploadFile~
+
+# Group Create Wizard
+view_groupCreateWizard_membersStepName=Select Members~
+view_groupCreateWizard_createStepName=Group Settings~
+view_groupCreateWizard_createStep_recursive=Recursive~
+view_groupCreateWizard_title=Create Group~
+view_groupCreateWizard_windowTitle=Create Group~
+view_groupCreateWizard_createFailure=Failed to create the resource group~
+view_groupCreateWizard_createSuccessful_concise=You have created a new resource group.
[<a href="{0}">View Group</a>]~
+view_groupCreateWizard_createSuccessful_full=You have created a new [{0}] resource group
with the name [{1}] that contains [{2}] member resources~
+
+# Resource Type / Plugin View/Datasources
+view_type_resourceTypes=Resource Types~
+view_type_parentId=Parent ID~
+view_type_typeTreeLoadFailure=Failed to load resource type tree data~
+
+# Tabs
+view_tabs_invalidSubTab=Invalid subtab: {0}
+view_tabs_invalidTab=Invalid tab: {0}
+
+# Group Tree
+group_tree_partialClusterTooltip={0} out of {1} group members have a
''{2}'' resource
+
+#=================== Dashboard =====================
+view_dashboard_favorites_error1=Failed to load favorite Resources.~
+view_dashboardManager_error=Failed to save dashboard to server~
+view_dashboardManager_saved=Saved dashboard {0} to server~
+view_dashboardManager_success=Saved dashboard~
+view_dashboardManager_deleteFail=Failed to delete dashboard.
+view_dashboardManager_deleted=Successfully deleted dashboard {0}~
+view_dashboards_title=Dashboard~
+view_dashboards_confirm1=Are you sure you want to delete~
+view_dashboards_portlets_refresh_fail1=Failed to update interval for portlets that
auto-refresh
+view_dashboards_portlets_refresh_fail2=Failed to disable reload for portlets that
auto-refresh
+view_dashboards_portlets_refresh_none=No Refresh
+view_dashboards_portlets_refresh_one_min=1 minute
+view_dashboards_portlets_refresh_multiple_min={0} minutes
+view_dashboards_portlets_refresh_success1=Updated interval for portlets that
auto-refresh
+view_dashboards_portlets_refresh_success2=Stopping reload for portlets that auto-refresh
+view_dashboardsManager_error1=Failed to add new dashboard~
+view_dashboardsManager_message_title_details=<h1>Welcome to
RHQ</h1>\n<p>The RHQ project is an abstraction and plug-in based systems
management suite that provides extensible and integrated systems management for multiple
products and platforms across a set of core features. The project is designed with layered
modules that provide a flexible architecture for deployment. It delivers a core user
interface that delivers audited and historical management across an entire enterprise. A
Server/Agent architecture provides remote management and plugins implement all specific
support for managed products.</p>\n <p>This default dashboard can be edited by
clicking the (edit mode) button above.</p>~
+
+view_portlet_factory_invalidPortlet=This is an obsolete portlet that is no longer valid.
Please delete it.
+
+view_portlet_defaultName_autodiscovery=Discovery Queue
+view_portlet_defaultName_favoriteResources=Favorite Resources
+view_portlet_defaultName_resourceMetric=Resource Metric Graph
+view_portlet_defaultName_groupMetric=Resource Group Metric Graph
+view_portlet_defaultName_inventorySummary=Inventory Summary
+view_portlet_defaultName_mashup=Mashup
+view_portlet_defaultName_message=Message
+view_portlet_defaultName_operations=Recent Operations
+view_portlet_defaultName_platformSummary=Platform Utilization
+view_portlet_defaultName_problemResources=Alerted or Unavailable Resources
+view_portlet_defaultName_recentAlerts=Recent Alerts
+view_portlet_defaultName_recentlyAddedResources=Recently Added Resources
+view_portlet_defaultName_tagCloud=Tag Count
+
+view_portlet_defaultName_group_alerts=Group: Alerts
+view_portlet_defaultName_group_bundles=Group: Bundle Deployments
+view_portlet_defaultName_group_config_updates=Group: Configuration Updates
+view_portlet_defaultName_group_events=Group: Event Counts
+view_portlet_defaultName_group_metrics=Group: Metrics
+view_portlet_defaultName_group_oobs=Group: OOB Conditions
+view_portlet_defaultName_group_operations=Group: Operations
+view_portlet_defaultName_group_pkg_hisory=Group: Package History
+view_portlet_defaultName_resource_alerts=Resource: Alerts
+view_portlet_defaultName_resource_bundles=Resource: Bundle Deployments
+view_portlet_defaultName_resource_config_updates=Resource: Configuration Updates
+view_portlet_defaultName_resource_events=Resource: Event Counts
+view_portlet_defaultName_resource_metrics=Resource: Measurements
+view_portlet_defaultName_resource_oobs=Resource: OOB Metrics
+view_portlet_defaultName_resource_operations=Resource: Operations
+view_portlet_defaultName_resource_pkg_hisory=Resource: Package History
+
+view_portlet_help_autodiscovery=This portlet allows import or ignore of newly discovered
resources. Imported resources are added to inventory for monitoring and management.
Ignored resources are not imported and are hidden from view unless explicitly unignored.
+view_portlet_help_bundle_deps=This portlet shows relevant bundle deployments based on
display criteria configured.
+view_portlet_help_config_updates=This portlet displays recent configuration changes
consistent with configuration settings.
+view_portlet_help_eventcounts=This portlet displays Event counts consistent with display
criteria configured.
+view_portlet_help_favoriteResources=This portlet displays the current user''s
favorite resources.
+view_portlet_help_graph=This portlet displays the resource metric graph.
+view_portlet_help_inventorySummary=This portlet displays a short summary of the current
user''s viewable inventory and metric collection rate.
+view_portlet_help_mashup=This portlet displays the returned content of a remote HTTP
request (via an iframe).
+view_portlet_help_metrics=This portlet graphs relevant recent metric data based on
display criteria configured.
+view_portlet_help_message=This portlet displays a static HTML message. The
<i>message</i> property must be configured.
+view_portlet_help_oobs=This portlet displays OOB(Out of Bound) metric conditions.
+view_portlet_help_operations=This portlet displays the most recently executed operations
for the current user''s inventory.
+view_portlet_help_scheduledOperations=This portlet displays the next scheduled operations
for the current user''s inventory.
+view_portlet_help_operations_criteria=This portlet displays Operations consistent with
display criteria configured.
+view_portlet_help_pkg_history=This portlet shows relevant package history based on
display criteria configured.
+view_portlet_help_platformSummary=This portlet displays utilization data (such as current
CPU and memory usage) for platform resources that are accessible by the current user.
+view_portlet_help_problemResources=This portlet displays the current user''s
alerted or unavailable resources.
+view_portlet_help_recentAlerts=This portlet displays alerts recently fired on the current
user''s viewable inventory.
+view_portlet_help_recentlyAdded=This portlet displays resources that have recently been
imported into inventory.
+view_portlet_help_tagCloud=This portlet displays the relative tag counts for the current
user''s inventory.
+view_portlet_help_none=There is no help available for this portlet.
+
+view_portlet_configure_needed=Click the Settings button to configure this portlet.
+view_portlet_configure_notNeeded=Configuration is not necessary for this portlet.
+view_portlet_configure_definitionTitle=Portlet Configuration
+view_portlet_configure_definitionDesc=The configuration settings for the portlet.
+
+view_portlet_autodiscovery_setting_platforms=discovered platforms
+
+view_portlet_graph_configure_resource_graph=The resource to graph~
+view_portlet_graph_configure_metricDefinition_graph=The metric definition id to graph~
+
+view_portlet_inventory_error1=Failed to retrieve inventory summary~
+view_portlet_inventory_tooltip_expand=Click to show more details for this resource.
+view_portlet_inventory_tooltip_collapse=Click to hide details for this resource.
+
+view_portlet_message_title=Message~
+
+view_portlet_operations_config_completed_maximum=Maximum number of Completed operations
to display.~
+view_portlet_operations_config_completed_enable=Whether to enable completed operations
results grouping for dashboard.~
+view_portlet_operations_config_scheduled_enable=Whether to enable scheduled operations
results grouping for dashboard.~
+view_portlet_operations_config_scheduled_maximum=Maximum number of Scheduled operations
to display.~
+view_portlet_operations_config_completed=completed operations~
+view_portlet_operations_config_show_last=show Last~
+view_portlet_operations_config_show_next=show Next~
+view_portlet_operations_disabled=(Results currently disabled. Change settings to enable
results.~
+
+view_portlet_platform_platform_error_1=Failed to load platform metrics~
+view_portlet_platform_type_error_1=Could not load type data~
+
+view_portlet_problemResources_config_display_maximum=Maximum number of Problem resources
to display.
+view_portlet_problemResources_config_display_range=Show problem resources going back this
many hours.
+view_portlet_problemResources_config_display_range2=From {0} to {1}
+view_portlet_problemResources_maxDisplaySetting=maximum resources.
+
+view_portlet_recentAlerts_config_members=Select Members~
+view_portlet_recentAlerts_config_priority_label=priority Alerts,~
+view_portlet_recentAlerts_config_when=within the past~
+view_portlet_recentAlerts_fail_msg=Failed to load resources assigned for alert
filtering.
+
+view_portlet_recentlyAdded_setting_addedPlatforms=recently added platforms
+view_portlet_recentlyAdded_error1=Failed to load recently added resources~
+view_portlet_results_empty=No results found using specified criteria.
+
+# =================== Inventory =====================
+view_inventory_adq=Discovery Queue~
+view_inventory_sectionHelp=From this section, newly discovered Resources, inventoried
Resources, and Groups can be viewed and managed.~
+view_inventory_problemGroups=Problem Groups~
+view_inventory_collectionInterval=Collection Interval~
+view_inventory_mixed=mixed~
+view_inventory_unavailableServers=Unavailable Servers
+view_inventory_groups=Groups~
+view_inventory_allGroups=All Groups~
+view_inventory_allResources=All Resources~
+view_inventory_platforms=Platforms~
+view_inventory_servers=Servers~
+view_inventory_services=Services~
+view_inventory_summary_agent_error1=Failed to locate agent managing resource id~
+view_inventory_summary_agent_error2=Failed to ping agent managing resource id~
+view_inventory_summary_agent_error3=You do not have permission to view details for this
Agent.
+view_inventory_summary_agent_fullEnpoint=Full Endpoint~
+view_inventory_summary_agent_fullEnpoint_err1=!No remote endpoint associated with this
resource!~
+view_inventory_summary_agent_last_title=Last Received Availability Report~
+view_inventory_summary_agent_status_title=Agent Communications Status~
+view_inventory_summary_agent_title=Agent Managing this Resource~
+view_inventory_dynagroupDefs=Dynagroup Definitions~
+view_metric_traits=Traits~
+view_metric_viewTraitHistory=Value History for Trait [{0}]~
+view_inventory_eventHistory_groupEventHistory=Group Event History~
+view_inventory_eventHistory_resourceEventHistory=Resource Event History~
+view_inventory_eventHistory_sourceFilter=Source Filter~
+view_inventory_eventHistory_detailsFilter=Details Filter~
+view_inventory_eventHistory_severityFilter=Severity Filter~
+view_inventory_eventHistory_timestamp=Timestamp~
+view_inventory_eventHistory_severity=Severity~
+view_inventory_eventHistory_details=Details~
+view_inventory_eventHistory_sourceLocation=Source Location~
+view_inventory_eventHistory_deleteSuccessful=You have successfully deleted [{0}] events
for [{1}]~
+view_inventory_eventHistory_deleteFailed=Failed to deleted selected events for [{0}]~
+view_inventory_eventHistory_purgeSuccessful=You have successfully purged [{0}] events for
[{1}]~
+view_inventory_eventHistory_purgeFailed=Failed to purge events for [{0}]~
+view_inventory_eventDetails_loadFailed=An error occurred loading the event details~
+view_inventory_groups_resourceGroups=Resource Groups~
+view_inventory_groups_children=Children~
+view_inventory_groups_descendants=Descendants~
+view_inventory_groups_deleteSuccessful=You have successfully deleted the selected
resource groups~
+view_inventory_groups_deleteFailed=Failed to delete the selected resource groups~
+view_inventory_groups_loadFailed=Failed to load group composite data~
+view_inventory_resource_loadFailed=Resource with id [{0}] does not exist or is not
accessible~
+view_inventory_resources_deleteConfirm=Are you sure you want to delete the selected
resources?~
+view_inventory_resources_deleteSuccessful=You have successfully deleted the selected
resources~
+view_inventory_resources_deleteFailed=Failed to delete the selected resources~
+view_inventory_resources_uninventoryConfirm=Are you sure you want to uninventory the
selected resources? Note that if a selected resource still exists, then it will get
rediscovered during its agent''s next discovery scan.
+view_inventory_resources_uninventorySuccessful=You have successfully uninventoried the
selected resources
+view_inventory_resources_uninventoryFailed=Failed to uninventory the selected resources
+view_inventory_resources_loadFailed=Failed to load resource composite data~
+view_inventory_resources_title=Member Resources~
+view_inventory_resources_title_children=Child Resources~
+view_inventory_resources_title_members=Member Resources~
+view_resource_inventory_activity_changed_by=Changed by
+view_resource_inventory_activity_criteria_no_recent_events=No event counts based off
display criteria.
+view_resource_inventory_activity_no_recent_alerts=No recent alerts
+view_resource_inventory_activity_no_recent_bundle_deploy=No recent bundle deployments
+view_resource_inventory_activity_no_recent_config_history=No configuration change
history
+view_resource_inventory_activity_no_recent_events=No events in the last 24 hours
+view_resource_inventory_activity_no_recent_metrics=This resource has no recent metrics
+view_resource_inventory_activity_no_recent_oob=No OOB conditions found
+view_resource_inventory_activity_no_recent_operations=No recent operation history
+view_resource_inventory_activity_no_recent_pkg_history=No recent package history
+view_resource_inventory_childhistory_createdChild=Created Child
+view_resource_inventory_childhistory_deletedChild=Deleted Child
+view_resource_inventory_childhistory_status_invalidArtifact=Invalid Artifact
+view_resource_inventory_childhistory_status_invalidConfig=Invalid Configuration
+view_resource_inventory_childhistory_filterTitle=Past N Days
+view_resource_monitor_availability_loadFailed=Failed to load availability history~
+view_resource_monitor_graphs_noneAvailable=No graphs available~
+view_resource_monitor_graphs_loadFailed=Failed to load graph data~
+view_resource_monitor_graphs_lookupFailed=Failed to find resource for graph~
+view_resource_monitor_graph_instructions=Point your mouse to a data point on the chart~
+view_resource_monitor_graph_live_tooltip=Click for a live graph of current values~
+view_resource_monitor_table_min=Minimum
+view_resource_monitor_table_max=Maximum
+view_resource_monitor_table_avg=Average
+view_resource_monitor_table_last=Last
+view_resource_monitor_table_alerts=Alerts
+view_resource_monitor_detailed_graph_label=Detailed Graph~
+view_resource_monitor_calltime_title=Call Time Data~
+view_resource_monitor_calltime_destination=Call Destination~
+view_resource_monitor_calltime_count=Count~
+view_resource_monitor_calltime_minimum=Minimum~
+view_resource_monitor_calltime_average=Average~
+view_resource_monitor_calltime_maximum=Maximum~
+view_resource_monitor_calltime_total=Total~
+view_resource_monitor_calltime_loadFailed=Could not load call time data~
+view_resource_monitor_calltime_lookupFailed=Could not load resource for call time~
+view_resource_monitor_calltime_editFailed=Call time data can not be edited~
+view_resource_monitor_schedules_title=Resource Metric Collection Schedules~
+view_resource_title_tagUpdateFailed=Failed to update resource tags~
+view_resource_title_component_errors_tooltip=Shows managed component errors. Click for
details~
+view_tree_common_loadFailed_generic=Failed to load data for tree~
+view_tree_common_loadFailed_root=Failed to load root for tree~
+view_tree_common_loadFailed_descendants=Failed to load descendants for tree~
+view_tree_common_loadFailed_children=Failed to load children for node~
+view_tree_common_createFailed_autoCluster=Failed to create or update autocluster backing
group
+view_tree_common_loadFailed_group=Failed to load group with id [{0}]
+view_tree_common_loadFailed_groupTree=Failed to load group tree
+view_tree_common_loadFailed_selection=Failed to select this node~
+view_tree_common_loadFailed_node=Failed to load data for this node~
+view_tree_common_loadFailed_create=Failed to create view for this node~
+view_tree_common_loadFailed_update=Failed to update view for this node~
+view_tree_common_contextMenu_loadFail_children=Failed to load platform manual add
children
+view_tree_common_contextMenu_loadFail_dashboards=Failed to load user dashboards
+view_tree_common_contextMenu_loadFail_group=Failed to load group for context menu
+view_tree_common_contextMenu_type_name_label=Type: {0}
+view_tree_common_contextMenu_resourceConfiguration=Resource Configuration~
+view_tree_common_contextMenu_editPluginConfiguration=Edit [{0}] Plugin Configuration~
+view_tree_common_contextMenu_editResourceConfiguration=Edit [{0}] Resource
Configuration~
+view_tree_common_contextMenu_operations=Operations~
+view_tree_common_contextMenu_operations_loadFailed=Failure to start wizard for running
operations~
+view_tree_common_contextMenu_measurements=Measurements~
+view_tree_common_contextMenu_addChartToDashboard=Add chart to dashboard [{0}]~
+view_tree_common_contextMenu_resourceGraph=Resource Metric Graph
+view_tree_common_contextMenu_groupGraph=Group Metric Graph
+view_tree_common_contextMenu_saveChartToDashboardSuccessful=You have saved dashboard
[{0}]~
+view_tree_common_contextMenu_saveChartToDashboardFailure=Failed to save the dashboard~
+view_tree_common_contextMenu_loadFailed_dashboard=Failed to load user dashboards
+view_tree_common_contextMenu_loadFailed_manualAddChildren=Failed to load platform manual
add children~
+view_tree_group_error_updateAutoCluster=Failed to create or update autocluster backing
group. key: [{0}]
+view_tabs_common_activity=Activity
+view_tabs_common_agent=Agent
+view_tabs_common_summary=Summary~
+view_tabs_common_overview=Overview~
+view_tabs_common_dashboard=Dashboard~
+view_tabs_common_timeline=Timeline~
+view_tabs_common_monitoring=Monitoring~
+view_tabs_common_graphs=Graphs~
+view_tabs_common_tables=Tables~
+view_tabs_common_traits=Traits~
+view_tabs_common_availability=Availability~
+view_tabs_common_schedules=Schedules~
+view_tabs_common_calltime=Calltime~
+view_tabs_common_inventory=Inventory~
+view_tabs_common_groups=Groups~
+view_tabs_common_members=Members~
+view_tabs_common_group_members=Group Members
+view_tabs_common_group_membership=Group Membership~
+view_tabs_common_child_resources=Child Resources~
+view_tabs_common_child_history=Child History~
+view_tabs_common_connectionSettings=Connection Settings~
+view_tabs_common_connectionSettingsHistory=Connection Settings History~
+view_tabs_common_operations=Operations~
+view_tabs_common_schedule=Schedule
+view_tabs_common_history=History~
+view_tabs_common_alerts=Alerts~
+view_tabs_common_definitions=Definitions~
+view_tabs_common_current=Current~
+view_tabs_common_events=Events~
+view_tabs_common_configuration=Configuration~
+view_tabs_common_content=Content~
+view_tabs_common_deployed=Deployed~
+view_tabs_common_new=New~
+view_tabs_common_subscriptions=Subscriptions~
+view_titleBar_common_updateTagsSuccessful=The tags for [{0}] have been updated~
+view_titleBar_common_updateTagsFailure=Failed to update the tags for [{0}]~
+view_titleBar_common_loadTagsFailure=Failed to load the tags for [{0}]~
+view_titleBar_common_clickToRemoveFav=Click to remove this as a favorite~
+view_titleBar_common_clickToAddFav=Click to add this as a favorite~
+view_titleBar_common_removedFav=You have removed [{0}] as one of your favorites~
+view_titleBar_common_addedFav=You have added [{0}] as a favorite~
+view_titleBar_common_removedFavFailure=Failed to remove [{0}] as one of your favorites~
+view_titleBar_common_addedFavFailure=Failed to add [{0}] as a favorite~
+view_titleBar_group_failInfo=Failed to get general info on group [{0}] with ID [{1}]
+view_titleBar_group_summary_collapsedTooltip=Click to show more details for this group
+view_titleBar_group_summary_expandedTooltip=Click to hide details for this group
+view_dynagroup_expressionSet=Expression Set~
+view_dynagroup_recalculationInterval=Recalculation Interval~
+view_dynagroup_lastCalculationTime=Last Calculation Time~
+view_dynagroup_nextCalculationTime=Next Calculation Time~
+view_dynagroup_definitionCreated=You have successfully created a group definition named
[{0}]~
+view_dynagroup_definitionLoadFailure=Failed to load group definitions~
+view_dynagroup_definitionAlreadyExists=A group definition already exists with this name~
+view_dynagroup_saveSuccessful=You have successfully saved the group definition named
[{0}]~
+view_dynagroup_saveFailure=Failed to save the group definition named [{0}]~
+view_dynagroup_singleSaveFailure=An error occurred - there should have been one created,
but instead there were [{0}] created~
+view_dynagroup_saveAndRecalculate=Save & Recalculate~
+view_dynagroup_recalculate=Recalculate~
+view_dynagroup_recalcSuccessful=You have successfully recalculated this group
definition~
+view_dynagroup_recalcFailure=Failed to recalculated this group definition~
+view_dynagroup_recalcSuccessfulSelection=You have successfully recalculated [{0}] group
definitions~
+view_dynagroup_recalcFailureSelection=Failed to recalculated the selected group
definitions~
+view_dynagroup_deleteSuccessfulSelection=You have successfully deleted [{0}] group
definitions~
+view_dynagroup_deleteFailureSelection=Failed to delete the selected group definitions~
+view_dynagroup_children=DynaGroup Children~
+view_dynagroup_newGroupDefinition=New Group Definition~
+view_dynagroup_editing=Editing [{0}]~
+view_dynagroup_expression=Expression~
+view_dynagroup_recursive=Recursive~
+view_dynagroup_loadDefinitionFailure=Failed to load group definition [{0}]~
+view_dynagroup_loadDefinitionMissing=There is no group definition with the ID of [{0}]~
+view_dynagroup_permDenied=You do not have permission to view group definitions~
+view_dynagroup_definitions=DynaGroup Definitions~
+view_dynagroup_template_customExpression=Custom Expression...
+view_dynagroup_template_jbossas4_clusters=JBossAS 4 - Clusters
+view_dynagroup_template_jbossas5_clusters=JBossAS 5/6 - Clusters
+view_dynagroup_template_jbossas4_earClusters=JBossAS 4 - Clustered EARs
+view_dynagroup_template_jbossas4_uniqueVersions=JBossAS 4 - Unique versions
+view_dynagroup_template_platforms=Platform resources in inventory
+view_dynagroup_template_uniqueResourceTypes=Unique resource types in inventory
+view_dynagroup_template_jbossas4_hostingApp=JBossAS 4 - All hosting any version of
"my" app
+view_dynagroup_template_jbossas4_nonsecured=JBossAS 4 - All non-secured
+view_dynagroup_template_downedResources=All resources currently down
+view_dynagroup_mixed=Mixed
+view_dynagroup_compatible=Compatible
+view_dynagroup_expressionBuilderIconTooltip=Expression Builder...
+view_dynagroup_exprBuilder_title=Expression Builder
+view_dynagroup_exprBuilder_expression=Expression
+view_dynagroup_exprBuilder_expression_tooltip=This is the full expression that is
represented by the selections in the form below. This text will be added to your group
definition expression text when you click the "Add Expression" button.
+view_dynagroup_exprBuilder_addExpression=Add Expression
+view_dynagroup_exprBuilder_value_tooltip=The string value for the expression to query
+view_dynagroup_exprBuilder_comparisonType=Comparison Type
+view_dynagroup_exprBuilder_comparisonType_tooltip=Comparison Type
+view_dynagroup_exprBuilder_unset=Unset
+view_dynagroup_exprBuilder_unset_tooltip=Unset will find all of the values that have a
null value in the database. This is not possible using the "=" operator because
of how databases store and query data.
+view_dynagroup_exprBuilder_propertyName=Property Name
+view_dynagroup_exprBuilder_propertyName_tooltip=The name of the property to query. This
is defined by the expression type as well as the resource type.
+view_dynagroup_exprBuilder_resourceType=Resource Type
+view_dynagroup_exprBuilder_resourceType_tooltip=The type of resource
+view_dynagroup_exprBuilder_definingPlugin=Defining Plugin
+view_dynagroup_exprBuilder_definingPlugin_tooltip=The plugin to search
+view_dynagroup_exprBuilder_expressionType=Expression Type
+view_dynagroup_exprBuilder_expressionType_tooltip=The type of property this expression
switches on:<br/> \
+<b>Resource</b>: A resource property such as its name or version<br/>
\
+<b>Resource Type</b>: Search for resources of a specific type<br/> \
+<b>Resource Category</b>: Search for resources by category: platform, server,
service<br/> \
+<b>Trait</b>: Resources that have selected values for a monitored
trait<br/> \
+<b>Plugin Configuration</b>: Search by the plugin component configuration
setting of the component<br/> \
+<b>Resource Configuration</b>: Search by the configuration setting of the
managed resource
+view_dynagroup_exprBuilder_resource=Resource
+view_dynagroup_exprBuilder_resource_tooltip=Choose the level of the resource you wish to
select. For example, select "parent" will find resources whose parent resource
matches the rest of the expression.
+view_dynagroup_exprBuilder_groupBy=Group by
+view_dynagroup_exprBuilder_groupBy_tooltip=GroupBy will cause the system to pivot on the
values from the entered expressions creating a separate group for each value. For example,
GroupBy on the cluster name to create a group for each cluster with all cluster members in
it.
+view_dynagroup_exprBuilder_resource_resource=Resource
+view_dynagroup_exprBuilder_resource_child=Child
+view_dynagroup_exprBuilder_resource_parent=Parent
+view_dynagroup_exprBuilder_resource_grandparent=Grandparent
+view_dynagroup_exprBuilder_resource_greatGrandparent=GreatGrandparent
+view_dynagroup_exprBuilder_resource_greatGreatGrandparent=GreatGreatGrandparent
+view_dynagroup_exprBuilder_comparisonType_equals=equals
+view_dynagroup_exprBuilder_comparisonType_startsWith=starts with
+view_dynagroup_exprBuilder_comparisonType_endsWith=ends with
+view_dynagroup_exprBuilder_comparisonType_contains=contains
+view_dynagroup_exprBuilder_expressionType_resource=Resource
+view_dynagroup_exprBuilder_expressionType_resourceType=Resource Type
+view_dynagroup_exprBuilder_expressionType_resourceCategory=Resource Category
+view_dynagroup_exprBuilder_expressionType_trait=Trait
+view_dynagroup_exprBuilder_expressionType_pluginConfig=Plugin Configuration
+view_dynagroup_exprBuilder_expressionType_resourceConfig=Resource Configuration
+view_dynagroup_exprBuilder_pluginLoadFailure=Cannot get the list of plugins
+view_dynagroup_exprBuilder_resTypeLoadFailure=Cannot get list of resource types for
plugin [{0}]
+view_dynagroup_exprBuilder_propLoadFailure=Cannot get list of properties
+view_dynagroup_exprBuilder_noResourceTypes=--No resource types--
+view_dynagroup_exprBuilder_noProperties=--No properties--
+view_dynagroup_exprBuilder_noPlugins=--No plugins--
+
+view_group_detail_failLoad=Failed to load group for group with ID [{0}]
+view_group_detail_failLoadComp=Failed to load group composite for group with ID [{0}]
+view_group_detail_recursiveChange=You successfully changed the recursive setting for
group [{0}]
+view_group_detail_failRecursiveChange=Failed to update the recursive setting for group
[{0}]
+view_group_inventory_activity_no_recent_metrics=This group has no recent metrics
+view_group_membership_failFetch=Failed to fetch Resource Group
+view_group_membership_saveFailure=Failed to update membership of group [{0}]~
+view_group_membership_saveSuccessful=You have updated the membership of group [{0}]~
+view_group_resConfig_edit_saveTooltip=Update the configurations of all group members~
+view_group_resConfig_edit_loadFail=Failed to retrieve member Resource configurations for
[{0}]
+view_group_resConfig_edit_noperm=You do not have permission to edit this group
configuration~
+view_group_resConfig_edit_saveInitiated_concise=The group configuration updates have been
initiated~
+view_group_resConfig_edit_saveInitiated_full=The group configuration updates have been
initiated for the [{0}] compatible group named [{1}]~
+view_group_resConfig_edit_saveFailure=Failed to initiate group configuration update for
[{0}] compatible group named [{1}]~
+view_group_resConfig_edit_valid=All configuration properties have valid values, so the
configuration can now be saved~
+view_group_resConfig_edit_invalid=The following configuration properties have invalid
values and must be corrected before the configuration can be saved: [{0}]~
+
+view_group_resConfig_view_noperm=You do not have permissions to see the resource
configuration settings
+view_group_resConfig_view_groupProperties=Group Properties
+view_group_resConfig_table_title=Group Resource Configuration History
+view_group_resConfig_table_statusDetails=Status Details
+view_group_resConfig_table_viewSettings=View Settings
+view_group_resConfig_table_viewMemberHistory=View Member History
+view_group_resConfig_table_msg1=View Member History for status of each individual
resource
+view_group_resConfig_table_failFetch=Failed to get group resource config history
+view_group_resConfig_table_deleteSuccessful=You have deleted [{0}] history items
+view_group_resConfig_table_deleteFailure=Failed to delete group resource config history
+view_group_resConfig_table_statusSuccess=This group configuration update was successful
+view_group_resConfig_table_statusInprogress=This group configuration update is still in
progress
+view_group_resConfig_table_statusNochange=No changes were made to this group
configuration
+view_group_resConfig_table_statusFailure=This group configuration update failed
+view_group_resConfig_table_clickStatusIcon=Click the status icon for full details
+view_group_resConfig_members_title=Group Resource Configuration Member Histories
+view_group_resConfig_members_fetchFailure=Failed to get resource config update history
for members of group [{0}]
+view_group_resConfig_members_fetchFailureConfig=Failed to retrieve member resource
configuration settings for [{0}]
+view_group_resConfig_members_fetchFailureConfigInProgress=A group resource configuration
update is currently in progress. You must wait until the update is finished before you can
view the group settings.
+view_group_resConfig_members_statusDetails=Status Details
+view_group_resConfig_members_statusSuccess=This configuration update was successful
+view_group_resConfig_members_statusInprogress=This configuration update is still in
progress
+view_group_resConfig_members_statusNochange=No changes were made to this configuration
+view_group_resConfig_members_statusFailure=This configuration update failed for an
unknown reason
+
+view_group_pluginConfig_view_noperm=You do not have permissions to see the connection
settings~
+view_group_pluginConfig_view_groupProperties=Group Properties~
+view_group_pluginConfig_table_failFetch=Failed to get group plugin config history
+view_group_pluginConfig_table_title=Group Connection Settings History~
+view_group_pluginConfig_table_statusDetails=Status Details~
+view_group_pluginConfig_table_viewSettings=View Settings~
+view_group_pluginConfig_table_viewMemberHistory=View Member History~
+view_group_pluginConfig_table_deleteSuccessful=You have deleted [{0}] history items~
+view_group_pluginConfig_table_deleteFailure=Failed to delete group plugin config
history~
+view_group_pluginConfig_table_msg1=View Member History for status of each individual
resource~
+view_group_pluginConfig_table_statusSuccess=This group configuration update was
successful~
+view_group_pluginConfig_table_statusInprogress=This group configuration update is still
in progress~
+view_group_pluginConfig_table_statusNochange=No changes were made to this group
configuration~
+view_group_pluginConfig_table_statusFailure=This group configuration update failed~
+view_group_pluginConfig_table_clickStatusIcon=Click the status icon for full details~
+view_group_pluginConfig_members_title=Group Connection Settings Member Histories~
+view_group_pluginConfig_members_statusDetails=Status Details~
+view_group_pluginConfig_members_statusSuccess=This configuration update was successful~
+view_group_pluginConfig_members_statusInprogress=This configuration update is still in
progress~
+view_group_pluginConfig_members_statusNochange=No changes were made to this
configuration~
+view_group_pluginConfig_members_statusFailure=This configuration update failed for an
unknown reason~
+view_group_pluginConfig_members_fetchFailure=Failed to get plugin config update history
for members of group [{0}]~
+view_group_pluginConfig_members_fetchFailureConn=Failed to retrieve member connection
settings for [{0}]
+view_group_pluginConfig_members_fetchFailureConnInProgress=A group plugin configuration
update is currently in progress. You must wait until the update is finished before you can
view the group settings.
+view_group_pluginConfig_edit_currentGroupProperties=Current Group Properties~
+view_group_pluginConfig_edit_saveTooltip=Update the connection settings of all group
members~
+view_group_pluginConfig_edit_noperm=You do not have permission to edit this group
connection settings~
+view_group_pluginConfig_edit_saveInitiated_concise=The group connection setting updates
have been initiated~
+view_group_pluginConfig_edit_saveInitiated_full=The group connection setting updates have
been initiated for the [{0}] compatible group named [{1}]~
+view_group_pluginConfig_edit_saveFailure=Failed to initiate group connection setting
update for [{0}] compatible group named [{1}]~
+view_group_pluginConfig_edit_valid=All connection setting properties have valid values,
so the connection settings can now be saved~
+view_group_pluginConfig_edit_invalid=The following connection setting properties have
invalid values and must be corrected before the connection settings can be saved: [{0}]~
+view_group_meas_schedules_title=Group Metric Collection Schedules~
+view_group_summary_nameUpdateFailure=Failed to change the name of the resource group with
ID [{0}] - could not change from [{1}] to [{2}]~
+view_group_summary_nameUpdateSuccessful=You have changed the name of the resource group
with ID [{0}] from [{1}] to [{2}]~
+view_group_summary_memberType=Member Type~
+view_group_summary_memberCount=Member Count~
+view_group_summary_dynamic=Dynamic~
+view_group_summary_recursive=Recursive~
+view_group_summary_groupDefinition=Group Definition~
+view_group_summary_mixed=Mixed~
+view_group_summary_compatible=Compatible
+view_group_summary_descUpdateFailure=Failed to change the description of the resource
group with ID [{0}]~
+view_group_summary_descUpdateSuccessful=You have changed the description of this resource
group~
+view_group_summary_dynamicNote=Dynamic group names and descriptions are managed, and
therefore are not editable~
+
+# Connection Settings Details
+#------------------------------------------
+view_connectionSettingsDetails_noPermission=You do not have permission to edit this
Resource''s connection settings.~
+view_connectionSettingsDetails_error_updateFailure=Failed to update connection
settings.~
+view_connectionSettingsDetails_messageConcise_updateSuccess=Connection settings
updated.~
+view_connectionSettingsDetails_messageDetailed_updateSuccess=Connection settings updated
for Resource [{0}].~
+view_connectionSettingsDetails_allPropertiesValid=All connection settings have valid
values, so the settings can now be saved.~
+view_connectionSettingsDetails_somePropertiesInvalid=The following connection settings
have invalid values: {0}. The values must be corrected before the settings can be saved.~
+
+# Resource Resource Groups
+#-----------------------------------------
+view_resourceResourceGroupList_error_fetchFailure=Failed to fetch Resource''s
groups.~
+view_resourceResourceGroupList_error_updateFailure=Failed to update assigned Resource
groups.~
+view_resourceResourceGroupList_message_updateSuccess=Group membership updated for [{0}].
+
+# Configuration Details
+#-------------------------------
+view_configurationDetails_noPermission=You do not have permission to edit this
Resource''s configuration.~
+view_configurationDetails_error_updateFailure=Failed to update configuration.~
+view_configurationDetails_messageConcise=Configuration updated - current version is
{0}.~
+view_configurationDetails_messageDetailed=Configuration updated to version {0} for
Resource [{1}].
+view_configurationDetails_allPropertiesValid=All configuration properties have valid
values, so the configuration can now be saved.~
+view_configurationDetails_somePropertiesInvalid=The following configuration properties
have invalid values: {0}. The values must be corrected before the configuration can be
saved.~
+view_configurationDetails_configNotUpdatedDueToNoChange=Configuration was not updated,
since the new configuration is equivalent to the current configuration.
+
+# Resource Configuration History List
+#-------------------------------
+view_configurationHistoryList_title=Configuration History~
+
+# Abstract Configuration History List
+#-------------------------------
+view_configurationHistoryList_rollback=Rollback
+view_configurationHistoryList_rollback_success=You successfully rolled back the
configuration to the selected past configuration.
+view_configurationHistoryList_rollback_failure=Failed to rollback the configuration. The
original configuration is still in effect.
+view_configurationHistoryList_delete_success=You successfully deleted the selected
configuration history items.
+view_configurationHistoryList_delete_failure=Failed to delete the configuration history
items.
+view_configurationHistoryList_cannotDeleteGroupItems=One or more selected configuration
history items are part of a group configuration update. \
+You must purge that parent group history item before you can delete its individual
resource history items.
+view_configurationHistoryList_cannotDeleteCurrent=One of the selected history items
represents the current configuration - you cannot delete it.
+view_configurationHistoryList_table_statusSuccess=This configuration update was
successful
+view_configurationHistoryList_table_statusInprogress=This configuration update is still
in progress
+view_configurationHistoryList_table_statusNochange=No changes were made to this
configuration
+view_configurationHistoryList_table_statusFailure=This configuration update failed
+view_configurationHistoryList_table_clickStatusIcon=Click the status icon for full
details
+
+# Configuration History Details
+#------------------------------------------
+view_configurationHistoryDetails_error_loadFailure=Unable to load configuration
history.~
+
+
+# Operation Schedule List
+#------------------------
+xxx =
+
+# Operation Schedule Details
+#---------------------------
+view_operationScheduleDetails_operationSchedule=Operation Schedule
+view_operationScheduleDetails_field_description=Description
+view_operationScheduleDetails_field_parameters=Parameters
+view_operationScheduleDetails_field_timeout=Timeout
+view_operationScheduleDetails_fieldHelp_timeout=a time duration - if specified, if the
duration elapses before a scheduled operation execution has completed, the RHQ Server will
timeout the operation and consider it to have failed; note, it is usually not possible to
abort the underlying managed resource operation if it was already initiated
+view_operationScheduleDetails_fieldHelp_description=an optional description of this
scheduled operation (e.g. nightly maintenance app server restart)
+view_operationScheduleDetails_fieldDefault_description=Select an operation to see its
description.
+view_operationScheduleDetails_fieldDefault_parameters=Select an operation to see its
parameters.
+view_operationScheduleDetails_noParameters=This operation does not take any parameters.
+view_operationScheduleDetails_enterParametersBelow=Enter parameters below...
+
+view_group_operationScheduleDetails_failedToLoadMembers=Failed to load group member
Resources.
+view_group_operationScheduleDetails_field_execute=Execute
+view_group_operationScheduleDetails_value_parallel=in parallel
+view_group_operationScheduleDetails_value_sequential=in the order specified below (drag
and drop member Resources to change order)
+view_group_operationScheduleDetails_field_haltOnFailure=Halt on Failure?
+view_group_operationScheduleDetails_memberResource=Member Resource
+
+
+# Operation History List
+#-----------------------
+view_operationHistoryList_title=Operation History~
+view_operationHistoryList_button_runOperation=Run Operation~
+view_operationHistoryList_button_forceDelete=Force Delete
+view_operationHistoryList_notYetStarted=not yet started
+
+# Operation History Details
+#--------------------------
+view_operationHistoryDetails_error_fetchFailure=Failure loading operation history.~
+view_operationHistoryDetails_operation=Operation
+view_operationHistoryDetails_dateSubmitted=Date Submitted
+view_operationHistoryDetails_dateCompleted=Date Completed
+view_operationHistoryDetails_requestor=Requestor
+view_operationHistoryDetails_status=Status
+view_operationHistoryDetails_parameters=Parameters
+view_operationHistoryDetails_results=Results
+view_operationHistoryDetails_noResults=This operation does not return any results.
+
+
+# Summary Overview
+#-----------------------------
+view_summaryOverview_header_detectedErrors=Detected Errors~
+view_summaryOverview_tooltip_detectedErrors=Click on the rows to see the error details.~
+view_summaryOverview_title_errorDetailsWindow=Error Details~
+
+# Summary Overview Form
+#-------------------------------------
+view_summaryOverviewForm_field_type=Type~
+view_summaryOverviewForm_field_name=Name~
+view_summaryOverviewForm_field_description=Description~
+view_summaryOverviewForm_field_location=Location~
+view_summaryOverviewForm_field_version=Version~
+view_summaryOverviewForm_error_traitsLoadFailure=Failed to load traits for {0}.~
+view_summaryOverviewForm_label_plugin=Plugin:
+view_summaryOverviewForm_label_type=Type:
+view_summaryOverviewForm_header_summary=Summary~
+view_summaryOverviewForm_error_nameChangeFailure=Failed to change name of Resource with
id {0} from [{1}] to [{2}].~
+view_summaryOverviewForm_message_nameChangeSuccess=Name of Resource with id {0} was
changed from [{1}] to [{2}].~
+view_summaryOverviewForm_error_descriptionChangeFailure=Failed to change description of
Resource with id {0} from [{1}] to [{2}].~
+view_summaryOverviewForm_message_descriptionChangeSuccess=Description of Resource with id
{0} was changed from [{1}] to [{2}].~
+view_summaryOverviewForm_error_locationChangeFailure=Failed to change location of
Resource with id {0} from [{1}] to [{2}].~
+view_summaryOverviewForm_message_locationChangeSuccess=Location of Resource with id {0}
was changed from [{1}] to [{2}].~
+
+# Summary Dashboard
+#-----------------------------
+view_summaryDashboard_resetConfirm=Reset to default summary dashboard (lose local
changes)?
+
+# Group Inventory>Members subtab
+#-----------------------------------------
+view_groupInventoryMembers_button_updateMembership=Update Membership...
+view_groupInventoryMembers_title_updateMembership=Update Membership
+
+
+#==================== Reports ======================
+
+view_reportsTop_title=Relat\u00F3rios~
+view_reportsTop_description=This section provides access to global reports.~
+view_reports_platforms=Utiliza\u00E7\u00E3o de Mem\u00F3ria e CPU~
+view_reports_subsystems=Subsistemas~
+view_reports_alertDefinitions=Defini\u00E7\u00E3o de Alertas~
+
+view_measurementOob_title=M\u00E9tricas Suspeitas~
+
+view_tagCloud_title=Nuvem de Tags~
+view_tagCloud_error_fetchFailure=Falha ao carregar etiquetas (tags).~
+view_tagCloud_error_tagUsedCount=Etiqueta (tag) usada {0} vezes.~
+view_tagCloud_deleteTag=Delete Tag
+view_tagCloud_deleteTagFailure=Failed to delete the tag [{0}]
+view_tagCloud_deleteTagSuccess=You successfully deleted the tag [{0}]
+
+view_reports_inventorySummary_failFetch=Failed to get inventory summary
+
+view_taggedResources_title=Recursos Etiquetados~
+
+view_reports_alertDefinitions_parentHover=Click to go to the parent alert definition
+view_reports_alertDefinitions_resTypeLoadError=Cannot get the template resource type -
unable to view the alert template.
+
+#==================== Help ======================
+
+view_helpTop_description=This section provides access to documentation, tutorials,
version, and other helpful information.
+view_help_section_product=Product
+view_help_section_product_about=About
+
+
+#===================== Test =======================
+view_testTop_title=Teste~
+view_testTop_description=Esta se\u00E7\u00E3o cont\u00E9m p\u00E1ginas para
realiza\u00E7\u00E3o de testes em v\u00E1rios componentes UI.~
+
+#=================== Top Level =====================
+
+# About Box
+#----------
+view_aboutBox_allRightsReserved=Todos os Direitos Reservados.~
+view_aboutBox_buildNumber=N\u00FAmero do Build\:~
+view_aboutBox_failedToLoad=Falha ao carregar informa\u00E7oes do produto.~
+view_aboutBox_homepage=P\u00E1gina Inicial~
+view_aboutBox_jbossByRedHat=JBoss by Red Hat~
+view_aboutBox_title=Sobre {0}~
+view_aboutBox_version=Vers\u00E3o\:~
+
+# CoreGUI
+#--------------
+view_core_error_1=Falha ao perquisar novos alertas~
+#view_core_loggedInAs = Logged in as {0}
+view_core_loggedOut=Logged out~
+view_core_recentAlerts=[{0}] alertas recentes~
+view_core_noRecentAlerts=There are no recent alerts to report
+view_core_uncaught=Exce\u00E7\u00E3o n\u00E3o capturada~
+
+# Login
+#--------------
+view_login_invalidEmail=Endere\u00E7o de e-mail inv\u00E1lido~
+view_login_login=Login~
+view_login_logout=Logout~
+view_login_noBackend=Fonte de Dados indispon\u00EDvel.~
+view_login_noLdap=Note: Optional retrieval of ldap details unsuccessful. Manual entry is
required.~
+view_login_noUser=Usu\u00E1rio ou senha inv\u00E1lidos.~
+view_login_prompt=Favor efetuar Login~
+view_login_registerLater=(Logout - Concluir registro mais tarde.)~
+view_login_registerLdapSuccess=Novo usu\u00E1rios do LDAP registrado com sucesso.~
+view_login_registerUser=Registrar Usu\u00E1rio~
+view_login_welcome=Bem Vindo~
+view_login_welcomeMsg=Seja Bem Vindo ao JBoss ON\! <br/><br/> Informe ou
altere os seguintes campos para completar o processo de registro.<br/> Clique em
"OK" para acessar o sistema.<br/><br/>~
+
+# Menu Bar
+#--------------
+view_menuBar_logout=Logout~
+
+# Search Bar, GUI
+#-----------------
+view_searchBar_resources=Recursos~
+view_searchBar_resourceGroups=Grupos de Recursos~
+# TODO: i18n pluralization
+view_searchBar_welcomeMessage=procurar por {0}s~
+view_searchBar_defaultPattern=definir nome para o padr\u00E3o~
+view_searchBar_error_selectSavedSearch=''Erro ao selecionar a
pesquisa''~
+view_searchBar_query=Query~
+
+view_searchGUI_loginStatus=Imposs\u00EDvel determinar o status do login, verifique o
status do servidor~
+
+# Message Center
+#--------------------------
+view_messageCenter_messageTitle=Centro de Mensagens~
+view_messageCenter_noRecentMessages=N\u00E3o existem Mensagens Recentes~
+view_messageCenter_maxMessages=Max Messages
+view_messageCenter_lastNMessages=Last {0} Messages
+view_messageCenter_clearAllMessages=Clear All Messages
+view_messageCenter_messageTime=Tempo~
+view_messageCenter_messageSeverity=Severidade~
+view_messageCenter_messageDetail=Detalhe~
+view_messageCenter_stackTraceFollows=--- STACK TRACE FOLLOWS ---
+view_messageCenter_messageBarShowDetails=Show Details
+common_title_favorites=Favoritos
+common_title_summary_counts=Sum\u00E1rio de Contagem
+dataSource_traits_group_field_memberResource=Recurso Membro
+
+
+# Problem Resources
+#------------------------------
+dataSource_problemResources_field_resource=Recurso
+dataSource_problemResources_field_location=Local
+
+# Configuration History
+#-------------------------------
+dataSource_configurationHistory_field_id=ID
+dataSource_configurationHistory_field_resource=Recurso
+dataSource_configurationHistory_field_createdTime=Criado
+dataSource_configurationHistory_field_status=Status
+dataSource_configurationHistory_field_subject=Assunto
+dataSource_resourceErrors_field_detail=Mensagem detalhada
+view_adminConfig_license=Licen\u00E7a
+view_adminRoles_roleExists=O perfil com nome [{0}] j\u00E1 existe.
+view_alerts_field_ack_status_empty=Ainda n\u00E3o verificado
+view_alerts_field_ack_status_filled={0} verificado em {1}
+view_alerts_field_resource=Recurso
+view_alert_details_breadcrumb=Detalhes
+TODO=PAREI AQUI\!\!\!
+view_alert_common_tab_notifications_all_emails=Todos os Emails
+view_alert_common_tab_notifications_bad_emails=Emails recusados
+view_measureRange_day=1 Dia
+view_measureRange_days={0} Dias
+view_measureRange_hour=1 Hora
+view_measureRange_hours={0} Horas
+view_measureRange_minutes={0} Minutos
+view_measureRange_range=Faixa
+view_tags_title=Tags:~
+view_upload_tooltip_1=Select a file to upload, then click Upload or Next~
+# // dup in common
+view_dashboardsManager_inventory_title=Inventory Summary~
+view_dashboardsManager_mashup_title=RHQ News~
+view_dashboardsManager_message_title=Welcome To RHQ~
+view_dashboardsManager_tagcloud_title=Tag Cloud~
+view_portlet_autodiscovery_config_platform_selection=Number of platforms to display~
+view_portlet_autodiscovery_help_msg=This portlet offers the ability to import newly
discovered resources into the inventory for monitoring and management or to ignore them
from further action.~
+view_portlet_autodiscovery_title=Discovery Queue~
+view_portlet_favoriteResources_msg=This portlet displays your favorite resources~
+view_portlet_favoriteResources_title=Favorite Resources~
+view_portlet_generic_help=No help available for this portlet~
+view_portlet_generic_unconfigured=No settings available for this portlet~
+view_portlet_graph_configure_title=Graph Config~
+view_portlet_graph_configure_title_desc=Configuration of the graph portlet~
+view_portlet_graph_help_msg=This Portlet supports the graphing of a resource metric.~
+view_portlet_graph_help_title=Graph Portlet~
+view_portlet_graph_help_unconfigured=This graph is unconfigured, click the settings
button to configure.~
+view_portlet_graph_title=Resource Graph~
+view_portlet_mashup_config_title=MashupPorlet Configuration~
+view_portlet_mashup_config_title_desc=The configuration settings for the mashup
portlet.~
+view_portlet_mashup_help=This portlet can include a web page via an HTTP request into an
iframe on the dashboard.~
+view_portlet_mashup_unconfigured=Page address not yet configured, click the settings
button to setup this portlet.~
+view_portlet_message_config_title=MessagePortlet Configuration~
+view_portlet_message_config_title_desc=The configuration settings for the message
portlet.~
+view_portlet_message_help=This portlet can display an HTML message on the dashboard.~
+view_portlet_message_unconfigured=Message not yet configured, click the settings button
to setup this portlet.~
+view_portlet_operations_config_title=OperationsPortlet Configuration~
+view_portlet_operations_config_title_desc=The configuration settings for the Operations
portlet.~
+view_portlet_operations_help_msg=This portlet displays both operations that have occurred
and are scheduled to occur.~
+view_portlet_platform_help_msg=This portlet displays information about platforms in
inventory.~
+view_portlet_platform_title=Platforms Summary~
+view_portlet_problem_resources_config_display_maximum=Maximum number of Problem resources
to display.~
+view_portlet_problem_resources_config_display_range=Show problem resources going back
this many hours.~
+view_portlet_problem_resources_config_display_range2=From {0} to {1}~
+view_portlet_problem_resources_config_problem_label=problem resources on dashboard.~
+view_portlet_problem_resources_config_title=ProblemResourcesPortlet Configuration~
+view_portlet_problem_resources_config_title_desc=The configuration settings for the
Problem resources portlet.~
+view_portlet_problem_resources_help=This portlet displays resources that have reported
alerts or Down availability.~
+view_portlet_problem_resources_title=Has Alerts or Currently Unavailable~
+view_portlet_recentAlerts_help_msg=Displays recent alerts fired on resources visible to
the current user login.~
+# // dup in common
+view_portlet_recentAlerts_title=Recent Alerts~
+view_portlet_recentlyAdded_approved_platforms=recently approved platforms on dashboard.~
+view_portlet_recentlyAdded_help_msg=This portlet displays resources that have recently
been imported into the inventory.~
+view_portlet_recentlyAdded_title=Recently Added Portlet~
+view_portlet_tagCloud_help=portlet displays the relative tag counts in the system visible
to the current user.~
+view_portlet_tagCloud_title=TagCloud~
+view_inventory_cannotGetGlobalPerms=Could not determine global permissions - assuming
none.~
+view_inventory_downServers=Down Servers~
+view_tree_common_contextMenu_pluginConfiguration=Plugin Configuration~
+view_tree_common_contextMenu_chart=Chart~
+view_tabs_common_scheduled=Scheduled~
+view_dynagroup_permUnknown=Could not determine if you have the proper permissions -
access is denied~
+view_configurationHistoryList_itemNamePlural=configuration history items
+
+# Configuration History Details
+#------------------------------------------
+view_configurationHistoryDetails_dialogTitle=Configuration Details~
+
+# Operation Create Wizard
+#-------------------------------------
+view_operationCreateWizard_title=Operation Wizard~
+view_operationCreateWizard_header=Execute {0} on {1}~
+view_operationCreateWizard_button_execute=Execute~
+view_operationCreateWizard_button_executeImmediately=Execute Immediately~
+view_operationCreateWizard_error_scheduleOperationFailure=Failed to schedule operation
execution.~
+view_operationCreateWizard_message_scheduleOperationSuccess=Schedule operation [{0}] on
Resource [{1}] with cron string [{2}].~
+view_operationCreateWizard_parametersStep_name=Operation Parameters~
+view_operationCreateWizard_parametersStep_noParameters=This operation does not take any
parameters.~
+view_operationCreateWizard_schedulingStep_name=Schedule~
+view_operationCreateWizard_schedulingStep_label_start=Start~
+view_operationCreateWizard_schedulingStep_label_schedule=Schedule~
+view_operationCreateWizard_schedulingStep_label_recurrence=Recurrence~
+view_operationCreateWizard_schedulingStep_label_runAt=Run At~
+view_operationCreateWizard_schedulingStep_label_nMinutes=n Minutes~
+view_operationCreateWizard_schedulingStep_label_hourly=Hourly~
+view_operationCreateWizard_schedulingStep_label_daily=Daily~
+view_operationCreateWizard_schedulingStep_label_weekly=Weekly~
+view_operationCreateWizard_schedulingStep_label_monthly=Monthly~
+view_operationCreateWizard_schedulingStep_label_timePeriod=Time Period~
+view_operationCreateWizard_schedulingStep_label_startDate=Start Date~
+view_operationCreateWizard_schedulingStep_label_recurrenceEnd=Recurrence End~
+view_operationCreateWizard_schedulingStep_label_endDate=End Date~
+view_operationCreateWizard_schedulingStep_label_willExecuteImmediately=Will execute
immediately~
+view_operationCreateWizard_schedulingStep_label_onceAt=Once At~
+view_operationCreateWizard_schedulingStep_label_date=Date~
+view_operationCreateWizard_schedulingStep_label_time=Time~
+view_operationCreateWizard_schedulingStep_label_everyNMinutes=Every n Minutes~
+view_operationCreateWizard_schedulingStep_label_minuteInterval=Minute Interval~
+view_operationCreateWizard_schedulingStep_label_hourlyAt=Hourly At~
+view_operationCreateWizard_schedulingStep_label_minuteOfHour=Minute of Hour~
+view_operationCreateWizard_schedulingStep_label_dailyAt=Daily At~
+view_operationCreateWizard_schedulingStep_label_timeOfDay=Time of Day~
+view_operationCreateWizard_schedulingStep_label_weeklyOn=Weekly On~
+view_operationCreateWizard_schedulingStep_label_dayOfWeek=Day of Week~
+view_operationCreateWizard_schedulingStep_label_monthlyOn=Monthly On~
+view_operationCreateWizard_schedulingStep_label_dayOfMonth=Day of Month~
+view_summaryOverviewForm_field_parent=Parent~
+view_core_loggedInAs=Logado como {0}~
+
+
+# Menu Bar
+#--------------
+view_menuBar_help=Ajuda~
+
+# Message Center
+#--------------------------
+view_messageCenter_button_messages=Mensagens~
diff --git
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt_BR.properties
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt_BR.properties
deleted file mode 100755
index 65514b0..0000000
---
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt_BR.properties
+++ /dev/null
@@ -1,2315 +0,0 @@
-#
-# RHQ GUI i18n Messages - pt-BR
-###################################
-
-#************************************** SHARED ****************************************
-
-#=================== Common =====================
-
-#
-# Build Info
-#
-common_buildInfo_gwtVersion=${gwt.version}
-
-# Button Labels
-#--------------
-common_button_ack=Confirmar
-common_button_ack_all=Confirmar Todos
-common_button_add=Adicionar
-common_button_advanced=Avan\u00E7ado...
-common_button_apply=Aplicar
-common_button_cancel=Cancelar
-common_button_close=Fechar
-common_button_compare=Comparar
-common_button_create_child=Criar filho
-common_button_delete=Excluir
-common_button_delete_all=Excluir Todos
-common_button_disable=Desabilitar
-common_button_edit=Editar
-common_button_enable=Habilitar
-common_button_finish=Finalizar
-common_button_import=Importar
-common_button_new=Novo
-common_button_next=Pr\u00F3ximo
-common_button_ok=OK
-common_button_previous=Anterior
-common_button_purgeAll=Purge All
-common_button_refresh=Refresh
-common_button_reset=Limpar
-common_button_save=Salvar
-common_button_schedule=Schedule
-common_button_search=Procurar
-common_button_set=Set
-common_button_showDetails=Mostrar Detalhes...
-common_button_uninventory=Remover do Invent\u00E1rio
-
-# Common Labels
-#------------------------
-common_label_ago=ago
-common_label_all=TODOS
-common_label_all_resources=todos os recursos
-common_label_day=dia
-common_label_days=dias
-common_label_hour=hora
-common_label_hours=horas
-common_label_item=item
-common_label_items=itens
-common_label_milliseconds=milisegundos
-common_label_minutes=minutos
-common_label_month=m\u00EAs
-common_label_none=nenhum
-common_label_role=perfil
-common_label_roles=perfis
-common_label_scheduled_operations=opera\u00E7\u00F5es agendadas
-common_label_seconds=segundos
-common_label_selected_resources=recursos selecionados
-common_label_unlimited=ilimitado
-common_label_user=usu\u00E1rio
-common_label_users=usu\u00E1rios
-common_label_week=semana
-common_label_weeks=semanas
-common_label_yesterday=Yesterday
-
-# Common Units
-#-------------
-common_unit_times=times
-common_unit_milliseconds=milliseconds
-common_unit_seconds=seconds
-common_unit_minutes=minutes
-common_unit_hours=hours
-common_unit_days=days
-common_unit_weeks=weeks
-common_unit_months=months
-common_unit_years=years
-
-# Common Severities
-#------------------
-common_severity_debug=Debug
-common_severity_info=Info
-common_severity_warn=Warn
-common_severity_error=Error
-common_severity_fatal=Fatal
-
-# Common Titles
-#--------------
-common_title_address=Endere\u00E7o
-common_title_add_column=Adicionar Coluna
-common_title_add_graph_to_view=Add Graph to Monitor View
-common_title_add_portlet=Adicionar Portlet
-common_title_alert_range=S\u00E9rie de Alertas
-common_title_ancestry=Ancestry
-common_title_availability=Disponibilidade
-common_title_average_metrics=M\u00E9tricas da m\u00E9dia por Minuto
-common_title_available_resources=Recursos Dispon\u00EDveis
-common_title_background=Background
-common_title_bundle=Bundle
-common_title_bundles=Bundles
-common_title_category=Categoria
-common_title_change_refresh_time=Refresh Interval
-common_title_columns=Colunas
-common_title_configuration=Configura\u00E7\u00E3o
-common_title_compare_metrics=Compare Metrics
-common_title_compatibleGroups=Grupos Compat\u00EDveis
-common_title_compatibleGroups_total=Total de Grupos Compat\u00EDveis
-common_title_component_errors=Componentes com erro
-common_title_config_update_status=Update Status
-common_title_count=Count
-common_title_custom=Personalizado
-common_title_dashboard_name=Nome do Painel de Controle
-common_title_dateCreated=Data de Cria\u00E7\u00E3o
-common_title_dateRange=Date Range
-common_title_default=Padr\u00E3o
-common_title_description=Descri\u00E7\u00E3o
-common_title_details=Detalhes
-common_title_display=Display
-common_title_display_name=Nome do Display
-common_title_duration=Dura\u00E7\u00E3o
-common_title_edit_mode=Modo Edi\u00E7\u00E3o
-common_title_enabled=Habilitado?
-common_title_end=Fim
-common_title_error=Error
-common_title_generalProp=Propriedades Gerais
-common_title_group=Group
-common_title_groups=Groups
-common_title_group_def_total=Total de Defini\u00E7\u00E3o de Grupos
-common_title_group_member_health=Group Member Health
-common_title_icon=\u00EDcone
-common_title_id=ID
-common_title_id_parent=ID do Recurso pai
-common_title_info=Info
-common_title_help=Help
-common_title_host=Host
-common_title_inventory=Invent\u00E1rio
-common_title_inventorySummary=Sum\u00E1rio do Invent\u00E1rio
-common_title_lastUpdated=\u00DAltima Atualiza\u00E7\u00E3o
-common_title_lastUpdatedBy=\u00DAltima Atualiza\u00E7\u00E3o feita por
-common_title_ldapGroups=LDAP Groups
-common_title_mashup=Mashup
-common_title_members_reporting=Members Reporting
-common_title_message=Mensagem
-common_title_metric=M\u00E9trica
-common_title_metric_chart=Metric Chart
-common_title_mixedGroups=Grupos Mistos
-common_title_mixedGroups_total=Total de Grupos Mistos
-common_title_name=Nome
-common_title_new_dashboard=Novo Painel de Controle
-common_title_numeric_metrics=Numeric Metrics
-common_title_numeric_type=Tipo Num\u00E9rico
-common_title_operation_status=Operation Status
-common_title_operations=Opera\u00E7\u00F5es
-common_title_operations_range=S\u00E9rie de Opera\u00E7\u00F5es
-common_title_over=Execesso
-common_title_password=Senha
-common_title_path=Path
-common_title_permissions=Permissions
-common_title_platform=Plataforma
-common_title_platform_total=Total de Plataformas
-common_title_plugin=Plugin
-common_title_port=Porta
-common_title_providers=Provedores
-common_title_recent_alerts=Alertas Recentes
-common_title_recent_bundle_deployments=Recent Bundle Deployments
-common_title_recent_configuration_updates=Recent Configuration Updates
-common_title_recent_event_counts=Recent Event Counts
-common_title_recent_measurements=Recent Measurements
-common_title_recent_oob_metrics=Recent Out of Bound metrics
-common_title_recent_operations=Opera\u00E7\u00F5es Recentes
-common_title_recent_pkg_history=Recent Package History
-common_title_recently_added=Recursos Adicionados Recentemente
-common_title_remove_column=Remover Coluna
-common_title_repositories=Reposit\u00F3rios
-common_title_resource=Recursos
-common_title_resources=Resources
-common_title_resource_group=Grupo de Recursos
-common_title_resourceGroups=Resource Groups
-common_title_resource_inventory=Invent\u00E1rio de Recursos
-common_title_resource_id=ID do Recurso
-common_title_resource_name=Nome do Recurso
-common_title_resource_key=Resource Key
-common_title_resource_type=Resource Type
-common_title_results_count=Results Count
-common_title_results_count_tooltip=Displays this number of results
-common_title_role=Role
-common_title_roles=Roles
-common_title_search=Procurar
-common_title_scheduled_operations=Opera\u00E7\u00F5es Agendadas
-common_title_selected_resources=Recursos Selecionados
-common_title_server=Server
-common_title_server_total=Total de Servidores
-common_title_service=Service
-common_title_service_total=Total de Servi\u00E7os
-common_title_settings=Configura\u00E7\u00F5es
-common_title_show=Visualizar
-common_title_show_more=Visualizar mais...
-common_title_sort_order=Sort Order
-common_title_sort_order_tooltip=Sets sort order for results.
-common_title_start=Iniciar
-common_title_status=Status
-common_title_stop=Stop
-common_title_summary=Sum\u00E1rio
-common_title_tag_cloud=Nuvem de Tags
-common_title_the=O
-common_title_timestamp=Data/Hora
-common_title_total=Total
-common_title_type=Tipo
-common_title_units=Unidades
-common_title_user=Usu\u00E1rio
-common_title_users=Users
-common_title_value=Valor
-common_title_version=Vers\u00E3o
-common_title_view_mode=Modo vis\u00E3o
-common_title_web_address=Endere\u00E7o Web
-common_title_welcome=Bem Vindo
-
-# Common Messages
-#--------------
-common_msg_areYouSure=Tem certeza?
-common_msg_changeAutoDetected=Change auto-detected
-common_msg_deleteConfirm=Tem certeza de que deseja excluir o \# selecionado {0}?
-common_msg_emphasizedNotePrefix=NOTA\:
-common_msg_loading=Carregando...
-common_msg_noItemsToShow=N\u00E3o existem itens para apresentar
-common_msg_notYetImplemented=Not Yet Implemented
-common_msg_see_more=see more...
-common_msg_step_x_of_y=Step {0} of {1}
-common_msg_asyncTimeout={0}. This occurred because the server is taking a long time to
complete this request. \
-Please be aware that the server may still be processing your request and it may complete
shortly. \
-You can check the server logs to see if any abnormal errors occurred.
-
-# Common Values
-#--------------
-common_val_for=para
-common_val_no=N\u00E3o
-common_val_no_lower=n\u00E3o
-common_val_yes=Sim
-common_val_yes_lower=sim
-common_val_never=Nunca
-common_val_na=N/A
-common_val_none=Nenhum
-
-# Common Statuses
-common_status_canceled=Canceled
-common_status_deferred=Deferred
-common_status_failed=Failed
-common_status_inprogress=In Progress
-common_status_nochange=No Change
-common_status_success=Success
-common_status_unknown=Unknown
-common_status_timedOut=Timed Out
-common_status_partial=Partial
-
-# 1st, 2nd, 3rd, 4th, etc.
-common_val_n1st={0}st
-common_val_n2nd={0}nd
-common_val_n3rd={0}rd
-common_val_nth={0}th
-
-# Common Alert Priorities
-#------------------------
-common_alert_high=High
-common_alert_medium=Medium
-common_alert_low=Low
-
-# Common Calendar
-#--------------
-common_calendar_january_short=jan
-common_calendar_february_short=fev
-common_calendar_march_short=mar
-common_calendar_april_short=abr
-common_calendar_may_short=mai
-common_calendar_june_short=jun
-common_calendar_july_short=jul
-common_calendar_august_short=ago
-common_calendar_september_short=set
-common_calendar_october_short=out
-common_calendar_november_short=nov
-common_calendar_december_short=dez
-
-
-#=================== Widgets =====================
-
-# Favorites
-#--------------
-favorites=Favorites
-favorites_resources=Favorite Resources
-favorites_groups=Favorite Groups
-favorites_recentlyViewed=Recently Viewed
-
-# Record Editor
-#--------------
-widget_recordEditor_title_view=Visualizar {0} [{1}]
-widget_recordEditor_title_edit=Editar {0} [{1}]
-widget_recordEditor_title_new=Criar Novo {0}
-# // dup in common
-widget_recordEditor_label_loading=Carregar...
-widget_recordEditor_error_invalidViewPath=Caminho inv\u00E1lido\: [{0}]
-widget_recordEditor_error_noRecords=Nenhum registro encontrado - era esperado exatamente
um.
-widget_recordEditor_error_multipleRecords=Foram encontrados v\u00E1rios registros - era
esperado apenas um.
-widget_recordEditor_info_recordCreatedConcise={0} criado.
-widget_recordEditor_info_recordCreatedDetailed={0} [{1}] criado.
-widget_recordEditor_info_recordUpdatedConcise={0} atualizado.
-widget_recordEditor_info_recordUpdatedDetailed={0} [{1}] atualizado.
-widget_recordEditor_info_recordsDeletedConcise={0} {1} exclu\u00EDdo.
-widget_recordEditor_info_recordsDeletedDetailed={0} {1} exclu\u00EDdo\: {2}.
-widget_recordEditor_error_operation=Operation failed. An error occurred
-widget_recordEditor_error_operationInvalidValues=Operation failed - one or more fields
have invalid values
-widget_recordEditor_error_unsupportedOperationType=Tipo de opera\u00E7\u00E3o n\u00E3o
suportada\: [{0}]
-widget_recordEditor_error_permissionCreate=You do not have the permissions required to
create a new [{0}]
-widget_recordEditor_warn_validation=One or more fields have invalid values. This [{0}]
cannot be saved until these values are corrected
-
-# Resource Selector/Picker
-#--------------------------------
-widget_resourceSelector_selectResource=Selecionar um Recurso
-widget_resourceSelector_pleaseSelectResource=Favor selecionar um recurso
-widget_resourceSelector_selectMultipleResources=Selecionar Recursos
-widget_resourceSelector_pleaseSelectMultipleResource=Favor selecionar um ou mais
recursos
-widget_resourceSelector_groupCategory=Categoria do Grupo
-
-# Resource Factory Wizard
-#--------------------------------
-widget_resourceFactoryWizard_uploadInProgress=Upload em andamento... Esse processo pode
demorar alguns minutos para ser finalizado em caso de arquivos muito grandes.
-widget_resourceFactoryWizard_uploadFileStepName=Upload do Arquivo do Recurso
-widget_resourceFactoryWizard_uploadFailure=Falha ao realizar o upload do arquivo
-widget_resourceFactoryWizard_editConfigStepName=Editar Configura\u00E7\u00E3o
-widget_resourceFactoryWizard_editConfigStep_nothingToDo=There is no configuration that
you need to define for this resource.
-widget_resourceFactoryWizard_infoStepName=Informa\u00E7\u00E3o do Recurso
-widget_resourceFactoryWizard_infoStep_loadFail=Failed to get available Architectures
-widget_resourceFactoryWizard_namePrompt=Novo Nome do Recurso
-widget_resourceFactoryWizard_templatePrompt=Modelo de Propriedades para Conex\u00E3o
-widget_resourceFactoryWizard_contentTemplatePrompt=Modelos de Configura\u00E7\u00E3o do
Tempo de Deploy
-widget_resourceFactoryWizard_configTemplatePrompt=Modelo de Configura\u00E7\u00E3o de
Recurso
-widget_resourceFactoryWizard_archPrompt=Arquitetura do Pacote
-widget_resourceFactoryWizard_versionPrompt=Vers\u00E3o do Pacote
-widget_resourceFactoryWizard_importWizardWindowTitle=Assistente para Importa\u00E7\u00E3o
de Recurso
-widget_resourceFactoryWizard_importWizardTitle=Importar Recursos do Tipo [{0}]
-widget_resourceFactoryWizard_importFailure=Falha ao importar recursos manualmente
-widget_resourceFactoryWizard_importSubmitted=Uma requisi\u00E7\u00E3o para importar um
novo recurso do tipo [{0}] foi submetida
-widget_resourceFactoryWizard_createWizardWindowTitle=Assistente para Cria\u00E7\u00E3o de
Recurso
-widget_resourceFactoryWizard_createWizardTitle=Criar novo recurso do tipo [{0}]
-widget_resourceFactoryWizard_execute1=Falha ao criar novo recurso - vers\u00E3o do pacote
inexistente
-widget_resourceFactoryWizard_execute2=Falha ao criar novo recurso
-widget_resourceFactoryWizard_createSubmitType=A requisi\u00E7\u00E3o para
cria\u00E7\u00E3o de um recurso do tipo [{0}] foi submetida com sucesso.
-widget_resourceFactoryWizard_createSubmit=A requisi\u00E7\u00E3o para cria\u00E7\u00E3o
de um recurso com nome [{0}] foi submetida com sucesso.
-widget_resourceFactoryWizard_failedToGetType=Falha ao recuperar o tipo de pacote para o
novo recurso
-widget_resourceFactoryWizard_failedToDeleteVersion=Falha ao excluir a vers\u00E3o do
pacote durante o cancelamento da cria\u00E7\u00E3o do recurso
-
-widget_typeCache_loadFail=Failed to load resource type metadata
-
-widget_typeTree_badTemplateType=Invalid URL. Unknown template type [{0}]
-widget_typeTree_badTypeId=Invalid URL. Bad resource type ID [{0}]
-widget_typeTree_loadFail=Failed to load resource types
-
-# Color Picker
-#--------------
-widget_colorPicker_tooltip=Click to select a new color
-
-# Job Trigger Editor
-#--------------------
-widget_jobTriggerEditor_field_mode=Schedule using
-widget_jobTriggerEditor_value_calendar=Calendar
-widget_jobTriggerEditor_value_cronExpression=Cron Expression
-widget_jobTriggerEditor_value_now=Now
-widget_jobTriggerEditor_value_nowAndRepeat=Now & Repeat
-widget_jobTriggerEditor_value_later=Later
-widget_jobTriggerEditor_value_laterAndRepeat=Later & Repeat
-widget_jobTriggerEditor_field_cronExpression=Cron Expression
-widget_jobTriggerEditor_tab_format=Format
-widget_jobTriggerEditor_tab_examples=Examples
-widget_jobTriggerEditor_field_repeatInterval_now=Run now and every
-widget_jobTriggerEditor_field_repeatInterval_later=Repeat every
-widget_jobTriggerEditor_fieldHelp_repeatInterval=how often the operation should be
executed
-widget_jobTriggerEditor_value_for=For
-widget_jobTriggerEditor_value_until=Until
-widget_jobTriggerEditor_value_indefinitely=Indefinitely
-widget_jobTriggerEditor_fieldHelp_repeatDuration=keep running this operation this many
times or until this amount of time has elapsed
-widget_jobTriggerEditor_field_startType=Run
-widget_jobTriggerEditor_value_on=on
-widget_jobTriggerEditor_value_in=in
-widget_jobTriggerEditor_fieldHelp_startDelay=start executing the operation after this
amount of time has elapsed
-widget_jobTriggerEditor_message_startTimeMustBeInFuture=Start time must be in the
future.
-widget_jobTriggerEditor_message_endTimeMustBeAfterStartTime=End time must be after start
time.
-widget_jobTriggerEditor_message_endTimeMustBeInFuture=End time must be in the future.
-
-# Duration Item
-#---------------
-widget_durationItem_inputUnitLessThanTargetUnit=Input unit is less than target unit.
-widget_durationItem_unitTypeNotSupported=Unit type [{0}] is not supported by this
DurationItem.
-
-
-#===================== Utils ======================
-
-# Ancestry
-#-------------------------------------------------
-util_ancestry_parentAncestry=Parent Ancestry for:
-
-# Disambiguation Report Decorator
-#-------------------------------------------------
-util_disambiguationReportDecorator_pluginSuffix=({0} plugin)
-
-# Monitoring Request Callback
-#------------------------------------------
-util_monitoringRequestCallback_error_checkServerStatusFailure=Imposs\u00EDvel verificar o
status do login - verifique o estatdo do Servidor.
-
-# RPC Manager
-#----------------------
-util_rpcManager_activeRequests={0} Requisi\u00E7\u00F5es ativas
-
-# User Permissions Manager
-#--------------------------
-util_userPerm_loadFailGlobal=Falha ao carregar permiss\u00F5es globais - nenhuma
permiss\u00E3o concedida.
-util_userPerm_loadFailGroup=Falha ao carregar suas permiss\u00F5es para o Grupo de
Recursos com id [{0}] - nenhum permiss\u00E3o concedida.
-util_userPerm_loadFailResource=Falha ao carregar suas permiss\u00F5es para o Recurso com
id [{0}] - nenhuma permiss\u00E3o concedida.
-
-# User Session Manager
-#--------------------------
-util_userSession_loadFailSubject=UserSessionManager\: Falha ao carregar a credencial do
usu\u00E1rio
-util_userSession_logoutFail=Falha durante o logout.
-
-# Error Handler
-#--------------------
-util_errorHandler_nullException=Exce\u00E7\u00E3o nula
-
-# Widgets Field
-#---------------------
-util_widgetsField_unlimited=Ilimitado
-
-
-#================== DataSources ====================
-
-# RPC (abstract)
-#-----------------------
-dataSource_bundle_loadFailed=Failed to load Bundle data
-
-
-# RPC (abstract)
-#-----------------------
-dataSource_rpc_error_transformRequestFailure=Ocorreu uma falha na fonte de dados durante
o processamento da requisi\u00E7\u00E3o {0}.
-dataSource_rpc_error_unsupportedArrayFilterType=Sem suporte para passing de array filters
do tipo {0}.
-dataSource_rpc_error_unsupportedEnumType=Favor adicionar um trecho de c\u00F3digo
apropriado para a enum {0} para RPCDataSource.getEnumArray(Class)
-dataSource_rpc_yes=sim
-dataSource_rpc_no=n\u00E3o
-
-# ContentRepositoryTree
-#------
-dataSource_ContentRepoTree_error_load=Erro ao carregar os reposit\u00F3rios
-dataSource_ContentRepoTree_field_parentId=Parent ID
-
-
-# Users
-#------
-###### dup in common
-dataSource_users_field_id=ID
-dataSource_users_field_name=Nome do Usu\u00E1rio
-dataSource_users_field_ldap=LDAP Login?
-dataSource_users_field_password=Senha
-dataSource_users_field_passwordVerify=Verifique a Senha
-dataSource_users_field_firstName=Primeiro Nome
-dataSource_users_field_lastName=\u00DAltimo Nome
-dataSource_users_field_emailAddress=Endere\u00E7o de Email
-dataSource_users_field_phoneNumber=N\u00FAmero de Telefone
-dataSource_users_field_department=Departamento
-dataSource_users_field_factive=Login Habilitado?
-dataSource_users_delete=Deleted user [{0}]
-dataSource_users_deleteFailed=Failed to delete user [{0}]
-dataSource_users_passwordsDoNotMatch=Passwords do not match.
-dataSource_users_invalidEmailAddress=Invalid email address.
-
-# Roles
-#------
-datasource_roles_field_resourceGroups=Resource Groups
-datasource_roles_field_permissions=Permissions
-datasource_roles_field_subjects=Subjects
-datasource_roles_field_ldapGroups=LDAP Groups
-
-# Platforms
-#-----------
-dataSource_platforms_field_cpu=CPU
-dataSource_platforms_field_memory=Mem\u00F3ria
-dataSource_platforms_field_swap=Swap
-
-# Traits
-#------
-dataSource_traits_failFetch=Failed to fetch traits for criteria [{0}].
-dataSource_traits_field_primaryKey=Chave Prim\u00E1ria
-dataSource_traits_field_definitionID=Definition ID
-dataSource_traits_field_lastChanged=\u00DAltima Altera\u00E7\u00E3o
-dataSource_traits_field_trait=Propriedade
-dataSource_traits_group_field_groupId=ID de Grupo
-
-# Measurement OOBs
-#---------------------------------
-dataSource_measurementOob_field_scheduleName=M\u00E9trica
-dataSource_measurementOob_field_resourceName=Recurso
-dataSource_measurementOob_field_parentName=Pai
-dataSource_measurementOob_field_formattedBaseband=Faixa
-dataSource_measurementOob_field_formattedOutlier=Fora de s\u00E9rie
-dataSource_measurementOob_field_factor=Fator fora da faixa (%)
-dataSource_measurementOob_error_fetchFailure=Falha ao carregar informa\u00E7\u00F5es das
m\u00E9tricas OOB
-
-# Measurements
-#----------------------
-dataSource_definitions_loadFailed=Falha ao carregar defini\u00E7\u00E3o de m\u00E9tricas
-dataSource_schedules_loadFailed=Falha ao carregar agendamento de m\u00E9tricas
-dataSource_schedules_loadFailedCriteria=Failed to load metric schedules for criteria
[{0}]
-dataSource_schedules_loadFailedContext=Failed to load metric schedules for context [{0}]
-dataSource_schedules_field_resourceGroupId=ID de Grupo
-
-dataSource_schedules_enableFailure_resource=Falha ao habilitar a coleta de m\u00E9tricas
de [{0}] para o recurso com ID [{1}]. As m\u00E9tricas s\u00E3o\: [{2}]
-dataSource_schedules_enableFailure_group=Falha ao habilitar a coleta de m\u00E9tricas de
[{0}] para o grupo com ID [{1}]. As m\u00E9tricas s\u00E3o\: [{2}]
-
-dataSource_schedules_enableSuccessful_concise=Voce habilitou a coleta de m\u00E9tricas de
[{0}]
-dataSource_schedules_enableSuccessful_full_resource=Voc\u00EA habilitou a coleta de
m\u00E9tricas de [{0}] para o recurso com ID [{1}]. As m\u00E9tricas habilitadas foram\:
[{2}]
-dataSource_schedules_enableSuccessful_full_group=Voc\u00EA habilitou a coleta de
m\u00E9tricas de [{0}] para o grupo de recursos com ID [{1}]. As m\u00E9tricas habilitadas
foram\: [{2}]
-
-dataSource_schedules_disableFailure_resource=Falha ao desabilitar a coleta de
m\u00E9tricas de [{0}] para o recurso com ID [{1}]. As m\u00E9tricas eram\: [{2}]
-dataSource_schedules_disableFailure_group=Falha ao desabilitar a coleta de m\u00E9tricas
de [{0}] para o grupo de recursos com ID [{1}]. As m\u00E9tricas eram\: [{2}]
-
-dataSource_schedules_disableSuccessful_concise=Voc\u00EA desabilitou a coleta de
m\u00E9tricas de [{0}]
-dataSource_schedules_disableSuccessful_full_resource=Voc\u00EA desabilitou a coleta de
m\u00E9tricas de[{0}] para o recurso com ID [{1}]. As m\u00E9tricas desabilitadas
s\u00E3o\: [{2}]
-dataSource_schedules_disableSuccessful_full_group=Voc\u00EA desabilitou a coleta de
m\u00E9tricas de[{0}] para o grupo de recursos com ID [{1}]. As m\u00E9tricas
desabilitadas s\u00E3o\: [{2}]
-
-dataSource_schedules_updateFailure_resource=Falha ao configurar o intervalo para coleta
de m\u00E9tricas de [{0}] para o recurso com ID [{1}]. M\u00E9tricas\: [{2}]. O intervalo
de coleta seria de [{3}] segundos.
-dataSource_schedules_updateFailure_group=Falha ao configurar o intervalo para coleta de
m\u00E9tricas de [{0}] para o grupo de recursos com ID [{1}]. M\u00E9tricas\: [{2}]. O
intervalo de coleta seria de [{3}] segundos.
-
-dataSource_schedules_updateSuccessful_concise=Um novo intervalo de coleta de [{0}]
segundos foi configurado para m\u00E9tricas de [{1}]
-dataSource_schedules_updateSuccessful_full_resource=Um novo intervalo de coleta de [{0}]
segundos foi configurado para m\u00E9tricas de [{1}] para o recurso com ID [{2}].
M\u00E9tricas atualizadas\: [{3}]
-dataSource_schedules_updateSuccessful_full_group=Um novo intervalo de coleta de [{0}]
segundos foi configurado para m\u00E9tricas de [{1}] para o grupo de recursos com ID
[{2}]. M\u00E9tricas atualizadas\: [{3}]
-
-# Resources
-#-----------------------
-dataSource_resources_field_location=Location
-dataSource_resources_field_key=Key
-dataSource_resources_field_discoveryTime=Discovery Time
-dataSource_resources_field_importTime=Import Time
-dataSource_resources_field_lastModifiedTime=Last Modified Time
-dataSource_resources_field_lastModifier=Last Modifier
-
-# Resource Groups
-#-----------------------
-dataSource_resourceGroups_loadFailed=Failed to load Resource Groups
-
-# Problem Resources
-#------------------------------
-dataSource_problemResources_field_alerts=Alertas
-dataSource_problemResources_field_available=Disponibilidade Atual
-dataSource_problemResources_error_fetchFailure=Falha com carregar Recursos com
alertas/indisponibilidade.
-
-# Recent Operations
-#----------------------------
-dataSource_recentOperations_field_resource=Recurso
-dataSource_recentOperations_field_location=Localiza\u00E7\u00E3o
-dataSource_recentOperations_field_operation=Opera\u00E7\u00E3o
-dataSource_recentOperations_field_time=Data/Hora
-dataSource_recentOperations_field_status=Status
-dataSource_recentOperations_error_fetchFailure=Falha ao carregar a lista de
opera\u00E7\u00F5es finalizadas recentemente.
-
-# Scheduled Operations (ResourceOperationScheduleComposites)
-#------------------------------------------------------------
-dataSource_scheduledOperations_field_resource=Recurso
-dataSource_scheduledOperations_field_location=Localiza\u00E7\u00E3o
-dataSource_scheduledOperations_field_operation=Opera\u00E7\u00E3o
-dataSource_scheduledOperations_field_time=Data/Hora
-dataSource_scheduledOperations_error_fetchFailure=Falha ao carregar a lista de
opera\u00E7\u00F5es agendadas
-
-# Operation Schedules
-#--------------------
-dataSource_operationSchedule_field_id=Schedule ID
-dataSource_operationSchedule_field_operationName=Operation
-dataSource_operationSchedule_field_operationDisplayName=Operation
-dataSource_operationSchedule_field_subject=Owner
-dataSource_operationSchedule_field_description=Notes
-dataSource_operationSchedule_field_nextFireTime=Next Execution
-dataSource_operationSchedule_field_timeout=Timeout (in seconds)
-
-# Operation Histories
-#--------------------
-dataSource_operationHistory_field_operationName=Operation Name
-dataSource_operationHistory_field_createdTime=Created Time
-dataSource_operationHistory_field_startedTime=Started Time
-dataSource_operationHistory_field_subject=Requester
-dataSource_operationHistory_error_fetchFailure=Falha ao carregar o hist\u00F3rico de
opera\u00E7\u00F5es.
-
-# Configuration History
-#-------------------------------
-dataSource_configurationHistory_dateSubmitted=Date Submitted
-dataSource_configurationHistory_dateCompleted=Date Completed
-dataSource_configurationHistory_updateType=Update Type
-dataSource_configurationHistory_updateType_individual=Individual
-dataSource_configurationHistory_updateType_group=Group
-dataSource_configurationHistory_currentConfig=This is the current configuration
-dataSource_configurationHistory_clickToSeeError=Double click to see error message...
-dataSource_configurationHistory_error_fetchFailure=N\u00E3o foi poss\u00EDvel carregar o
hist\u00F3rico de configura\u00E7\u00E3o.
-
-# Resource Errors
-#-------------------------
-dataSource_resourceErrors_field_summary=Sum\u00E1rio
-dataSource_resourceErrors_field_errorType=Tipo de Erro
-dataSource_resourceErrors_field_timeOccured=Tempo
-dataSource_resourceErrors_error_fetchFailure=Falha ao procurar por erros para o Recurso
com ID [{0}].
-dataSource_resourceErrors_clickStatusIcon=Click the icon for more details
-dataSource_resourceErrors_deleteSuccess=You have successfully deleted [{0}] resource
error messages.
-dataSource_resourceErrors_deleteFailure=Failed to delete resource errors
-
-# Template Schedules
-#-------------------------
-datasource_templateSchedules_disabled=Disabled collection of selected metric [{0}].
-datasource_templateSchedules_disabled_detailed=Disabled collection of metric [{0}] [{1}]
by default for ResourceType with id [{2}].
-datasource_templateSchedules_disabled_failed=Failed to disable collection of metric [{0}]
[{1}] by default for ResourceType with id [{2}].
-datasource_templateSchedules_enabled=Enabled collection of selected metric [{0}].
-datasource_templateSchedules_enabled_detailed=Enabled collection of metric [{0}] [{1}] by
default for ResourceType with id [{2}].
-datasource_templateSchedules_enabled_failed=Failed to enable collection of metric [{0}]
[{1}] by default for ResourceType with id [{2}].
-datasource_templateSchedules_updated=Updated collection intervals of selected metric
[{0}].
-datasource_templateSchedules_updated_detail=Collection interval for metric [{0}] [{1}] by
default for ResourceType with id [{2}] set to [{3}] seconds.
-datasource_templateSchedules_updated_failed=Failed to set collection interval to [{0}]
seconds for metric [{1}] [{2}] by default for ResourceType with id [{3}].
-
-
-#********************************** VIEW-SPECIFIC *************************************
-
-#================= Administration ==================
-
-view_admin_administration=Administra\u00E7\u00E3o
-view_admin_landing=Nesta se\u00E7\u00E3o \u00E9 poss\u00EDvel administrar propriedades
globais do RHQ. Isso inclui configura\u00E7\u00F5es de Seguran\u00E7a, Plugins, e
gerenciamento de servidores RHQ e agentes.
-view_admin_configuration=Configura\u00E7\u00E3o
-view_admin_security=Seguran\u00E7a
-view_admin_topology=Topologia
-view_admin_content=Content
-
-view_adminSecurity_users=Usu\u00E1rios
-view_adminSecurity_roles=Perfis
-
-view_adminTopology_affinityGroups=Grupos de Afinidade
-view_adminTopology_agents=Agentes
-view_adminTopology_partitionEvents=Eventos na Parti\u00E7\u00E3o
-view_adminTopology_remoteAgentInstall=Instala\u00E7\u00E3o Remota de Agentes
-view_adminTopology_servers=Servidores
-
-view_adminConfig_downloads=Downloads
-view_adminConfig_plugins=Plugins
-view_adminConfig_systemSettings=Propriedades de Sistema
-view_adminConfig_templates=Modelos
-
-view_adminContent_contentSources=Content Sources
-view_adminContent_repositories=Repositories
-
-# Administration/Templates
-#--------------------------------
-
-view_adminTemplates_platforms=Platforms
-view_adminTemplates_platformServices=Platform Services
-view_adminTemplates_servers=Servers
-view_adminTemplates_enabledAlertTemplates=Enabled Alert Templates
-view_adminTemplates_disabledAlertTemplates=Disabled Alert Templates
-view_adminTemplates_enabledMetricTemplates=Enabled Metric Templates
-view_adminTemplates_disabledMetricTemplates=Disabled Metric Templates
-view_adminTemplates_editAlertTemplate=Edit Alert Template
-view_adminTemplates_editMetricTemplate=Edit Metric Template
-view_adminTemplates_prompt_enabledAlertTemplates=Number of alert templates that are
enabled on this resource type
-view_adminTemplates_prompt_disabledAlertTemplates=Number of alert templates that are
created but disabled on this resource type
-view_adminTemplates_prompt_enabledMetricTemplates=Number of metric schedules that are
enabled by default on this resource type
-view_adminTemplates_prompt_disabledMetricTemplates=Number of metric schedules that are
disabled by default on this resource type
-
-# Administration/Security/Users
-#--------------------------------
-view_adminUsersList_dataTypeName=usu\u00E1rio
-view_adminUsersList_dataTypeNamePlural=usu\u00E1rios
-
-# Administration/Security/Users/#
-#--------------------------------
-view_adminUsersDetails_dataTypeName=usu\u00E1rio
-
-# Administration/Security/Roles/#
-#--------------------------------
-view_adminRoles_assignedGroups=Grupos de Recursos Associados
-view_adminRoles_assignedSubjects=Perfis Associados
-view_adminRoles_failLdap=Falha ao determinar se o LDAP foi configurado - assumindo como
LDAP n\u00E3o configurado.
-view_adminRoles_failLdapGroups=Falha ao recuperar os grupos dispon\u00EDveis no LDAP -
assumindo como LDAP sem grupos.
-view_adminRoles_failLdapGroupsRole=Falha ao carregar grupos do LDAP dispon\u00EDveis para
o perfil.
-view_adminRoles_failRoles=Falha ao recuperar perfis.
-view_adminRoles_globalPerms=Permiss\u00F5es Globais
-view_adminRoles_ldapGroups=Grupos LDAP
-view_adminRoles_ldapGroupsReadOnly=Informa\u00E7\u00F5es do grupo LDAP com
permiss\u00F5es apenas de leitura
-view_adminRoles_noItems=Sem itens para apresentar
-view_adminRoles_noLdap=A integra\u00E7\u00E3o com o LDAP ainda n\u00E3o foi configurada.
Para configurar o LDAP acesse <a {0}>{1}</a>.
-view_adminRoles_perms=Permiss\u00F5es
-view_adminRoles_resourcePerms=Permiss\u00F5es do Recurso
-view_adminRoles_roleAdded=Perfil [{0}] adicionado.
-view_adminRoles_roleDeleteFailed=Falha ao excluir o perfil [{0}].
-view_adminRoles_roleDeleted=Perfil [{0}] exclu\u00EDdo.
-view_adminRoles_roleUpdateFailed=Falha ao atualizar o perfil [{0}].
-view_adminRoles_roleUpdated=Perfil [{0}] atualizado.
-view_adminRoles_permissions_globalPermissions=Global Permissions
-view_adminRoles_permissions_resourcePermissions=Resource Permissions
-view_adminRoles_permissions_readAccessImplied=Read access for the {0} permission is
implied and cannot be disabled.
-view_adminRoles_permissions_isAuthorized=Authorized?
-view_adminRoles_permissions_isRead=Read?
-view_adminRoles_permissions_isWrite=Write?
-view_adminRoles_permissions_read=Read:
-view_adminRoles_permissions_write=Write:
-view_adminRoles_permissions_perm_manageSecurity=Manage Security
-view_adminRoles_permissions_permDesc_manageSecurity=can create, update, or delete users
and roles (viewing is implied for everyone)
-view_adminRoles_permissions_perm_manageInventory=Manage Inventory
-view_adminRoles_permissions_permDesc_manageInventory=has all Resource permissions, as
described below, for all Resources; can create, update, and delete groups; and can import
auto-discovered or manually discovered Resources
-view_adminRoles_permissions_perm_manageSettings=Manage Settings
-view_adminRoles_permissions_permDesc_manageSettings=can modify the RHQ Server
configuration and perform any Server-related functionality
-view_adminRoles_permissions_perm_manageBundles=Manage Bundles
-view_adminRoles_permissions_permDesc_manageBundles=can create, update, or delete
provisioning bundles (viewing is implied for everyone)
-view_adminRoles_permissions_perm_manageRepositories=Manage Repositories
-view_adminRoles_permissions_permDesc_manageRepositories=can create, update, or delete
repositories of any user (everyone can create their own repositories), can associate
content sources to repositories.
-view_adminRoles_permissions_perm_inventory=Inventory
-view_adminRoles_permissions_permReadDesc_inventory=(IMPLIED) view Resource properties
(name, description, version, etc.), connection settings, and connection settings history
-view_adminRoles_permissions_permWriteDesc_inventory=update Resource name, version,
description, and connection settings; delete connection settings history items
-view_adminRoles_permissions_perm_manageMeasurements=Manage Measurements
-view_adminRoles_permissions_permReadDesc_manageMeasurements=(IMPLIED) view metric data
and collection schedules
-view_adminRoles_permissions_permWriteDesc_manageMeasurements=update metric collection
schedules
-view_adminRoles_permissions_perm_manageAlerts=Manage Alerts
-view_adminRoles_permissions_permReadDesc_manageAlerts=(IMPLIED) view alert definitions
and alert history
-view_adminRoles_permissions_permWriteDesc_manageAlerts=create, update, and delete alert
definitions; acknowledge and delete alert history items
-view_adminRoles_permissions_perm_configure=Configure
-view_adminRoles_permissions_permReadDesc_configure=view Resource configuration and
Resource configuration revision history
-view_adminRoles_permissions_permWriteDesc_configure=update Resource configuration; delete
Resource configuration revision history items
-view_adminRoles_permissions_perm_control=Control
-view_adminRoles_permissions_permReadDesc_control=(IMPLIED) view available operations and
operation execution history
-view_adminRoles_permissions_permWriteDesc_control=execute operations; delete operation
execution history items
-view_adminRoles_permissions_perm_manageEvents=Manage Events
-view_adminRoles_permissions_permReadDesc_manageEvents=(IMPLIED) view events
-view_adminRoles_permissions_permWriteDesc_manageEvents=delete events
-view_adminRoles_permissions_perm_manageContent=Manage Content
-view_adminRoles_permissions_permReadDesc_manageContent=(IMPLIED) view installed and
available packages; view package installation history
-view_adminRoles_permissions_permWriteDesc_manageContent=subscribe to content sources;
install and uninstall packages
-view_adminRoles_permissions_perm_createChildResources=Create Child Resources
-view_adminRoles_permissions_permReadDesc_createChildResources=(IMPLIED) view child
Resource creation history
-view_adminRoles_permissions_permWriteDesc_createChildResources=create new child Resources
(for child Resources of types that are creatable)
-view_adminRoles_permissions_perm_deleteChildResources=Delete Child Resources
-view_adminRoles_permissions_permReadDesc_deleteChildResources=(IMPLIED) view child
Resource deletion history
-view_adminRoles_permissions_permWriteDesc_deleteChildResources=uninventory resources;
delete Resources (for Resources of types that are deletable)
-view_adminRoles_permissions_autoselecting_manageSecurity_implied=Autoselected unselected
permissions, since MANAGE_SECURITY implies all other permissions...
-view_adminRoles_permissions_autoselecting_manageInventory_implied=Autoselected unselected
Resource permissions, since MANAGE_INVENTORY implies all Resource permissions...
-view_adminRoles_permissions_autoselecting_configureWrite_implied=Autoselected
CONFIGURE_READ permission, since CONFIGURE_WRITE implies it...
-view_adminRoles_permissions_autoselecting_configureRead_implied=Autodeselected
CONFIGURE_WRITE permission, since lack of CONFIGURE_READ implies lack of it...
-view_adminRoles_permissions_illegalDeselectionDueToManageSecuritySelection={0} permission
cannot be deselected, unless the Manage Security permission, which implies all other
permissions, is deselected first.
-view_adminRoles_permissions_illegalDeselectionDueToManageInventorySelection={0}
permission cannot be deselected, unless Manage Inventory, which implies all Resource
permissions, is deselected first.
-view_adminRoles_permissions_illegalDeselectionDueToCorrespondingWritePermSelection={0}
read permission cannot be deselected, unless the {0} write permission, which implies the
read permission, is deselected first.
-
-# Administration/Topology/RemoteAgentInstall/#
-#--------------------------------
-view_remoteAgentInstall_agentStatus=Status do Agente
-view_remoteAgentInstall_agentStatusDefault=-Pressione o Bot\u00E3o Atualizar Status-
-view_remoteAgentInstall_connInfo=Informa\u00E7\u00E3o de Conex\u00E3o
-view_remoteAgentInstall_buttonFindAgent=Procurar Agente
-view_remoteAgentInstall_error_1=Ocorreu um erro ao tentar localizar o caminho de
instala\u00E7\u00E3o do agente
-view_remoteAgentInstall_error_2=N\u00E3o foi poss\u00EDvel encontrar uma
instala\u00E7\u00E3o do agente nos locais comuns
-view_remoteAgentInstall_error_3=N\u00E3o foi poss\u00EDvel encontar a
instala\u00E7\u00E3o do agente em [{0}]
-view_remoteAgentInstall_error_4=Falha ao instalar o agente
-view_remoteAgentInstall_error_5=Falha a iniciar o agente
-view_remoteAgentInstall_error_6=Falha ao parar o agente
-
-view_remoteAgentInstall_installAgent=Instalar Agente
-view_remoteAgentInstall_installInfo=Informa\u00E7\u00E3o sobre a instala\u00E7\u00E3o do
Agente
-view_remoteAgentInstall_installPath=Caminho de Instala\u00E7\u00E3o do Agente
-view_remoteAgentInstall_owner=Propriet\u00E1rio
-view_remoteAgentInstall_promptInstallPath=Onde o agente est\u00E1 ou ser\u00E1 instalado.
Caso n\u00E3o tenha certeza onde o agente est\u00E1 instalado, informe um diret\u00F3rio
pai e clique em ''Procurar Agente'' para encontrar o agente. Caso informe
um diret\u00F3rio vazio, a busca pelo agente ser\u00E1 realizada em locais de
instala\u00E7\u00E3o comuns.
-view_remoteAgentInstall_promptHost=O host onde o agente est\u00E1 ou ser\u00E1 instalado
-view_remoteAgentInstall_promptPassword=Credenciais usadas para autentica\u00E7\u00E3o do
usu\u00E1rio no host via SSH
-view_remoteAgentInstall_promptPort=Porta onde o servidor SSH escuta. Se n\u00E3o
especificada, o padr\u00E3o \u00E9 22
-view_remoteAgentInstall_promptUser=Nome do usu\u00E1rio informado nas credenciais
passadas ao host via SSH
-view_remoteAgentInstall_result=Resultado
-view_remoteAgentInstall_resultCode=ResultCode
-view_remoteAgentInstall_startAgent=Iniciar Agente
-view_remoteAgentInstall_startAgentResults=resultado da inicializa\u00E7\u00E3o do
Agente\: [{0}]
-view_remoteAgentInstall_step=Step
-view_remoteAgentInstall_stopAgent=Parar Agente
-view_remoteAgentInstall_stopAgentResults=resultado do encerramento do Agente\: [{0}]
-view_remoteAgentInstall_success=Instala\u00E7\u00E3o do Agente finalizada
-view_remoteAgentInstall_updateStatus=Status da Atualiza\u00E7\u00E3o
-
-# Administration/SystemSettings
-#------------------------------
-view_admin_systemSettings_cannotLoadSettings=Cannot obtain the current system settings
-view_admin_systemSettings_savedSettings=You successfully saved the system properties
-view_admin_systemSettings_saveFailure=Failed to save the system settings
-view_admin_systemSettings_fixBeforeSaving=Please fix the invalid values before saving
-view_admin_systemSettings_group_general=General Configuration Properties
-view_admin_systemSettings_group_dataMgr=Data Manager Configuration Properties
-view_admin_systemSettings_group_baseline=Automatic Baseline Configuration Properties
-view_admin_systemSettings_group_ldap=LDAP Configuration Properties
-view_admin_systemSettings_cannotLoadServerDetails=Cannot load server details
-view_admin_systemSettings_serverDetails=Server Details
-view_admin_systemSettings_serverDetails_buildNumber=Build Number
-view_admin_systemSettings_serverDetails_tz=Server Time Zone
-view_admin_systemSettings_serverDetails_time=Server Local Time
-view_admin_systemSettings_serverDetails_installDir=Server Installation Directory
-view_admin_systemSettings_serverDetails_dbUrl=Database Connection URL
-view_admin_systemSettings_serverDetails_dbName=Database Product Name
-view_admin_systemSettings_serverDetails_dbVersion=Database Product Version
-view_admin_systemSettings_serverDetails_dbDriverName=Database Driver Name
-view_admin_systemSettings_serverDetails_dbDriverVersion=Database Driver Version
-view_admin_systemSettings_serverDetails_currentTable=Current Measurement Raw Table
-view_admin_systemSettings_serverDetails_nextRotation=Next Measurement Table Rotation
-view_admin_systemSettings_BaseURL_name=GUI Console URL
-view_admin_systemSettings_BaseURL_desc=A URL to the server GUI, used mainly within alert
email notifications.
-view_admin_systemSettings_AgentMaxQuietTimeAllowed_name=Agent Max Quiet Time Allowed
-view_admin_systemSettings_AgentMaxQuietTimeAllowed_desc=If this amount of time passes
without hearing from an agent, that quiet agent will be considered down. This value is
specified in minutes.
-view_admin_systemSettings_EnableAgentAutoUpdate_name=Enable Agent Auto-Updates
-view_admin_systemSettings_EnableAgentAutoUpdate_desc=Determines if the server will allow
agents to auto-update themselves. You will not be able to download agent distributions
from the server if this is disabled.
-view_admin_systemSettings_EnableDebugMode_name=Enable Debug Mode
-view_admin_systemSettings_EnableDebugMode_desc=If enabled, the server will enter debug
mode.
-view_admin_systemSettings_EnableExperimentalFeatures_name=Enable Experimental Features
-view_admin_systemSettings_EnableExperimentalFeatures_desc=If enabled, any experimental
features that exist in the current product will be available.
-view_admin_systemSettings_DataMaintenance_name=Database Maintenance Period
-view_admin_systemSettings_DataMaintenance_desc=How often database maintenance is
performed (for example, vacuuming if using Postgres). This is specified in hours.
-view_admin_systemSettings_AvailabilityPurge_name=Delete Availability Data Older Than
-view_admin_systemSettings_AvailabilityPurge_desc=How old availability data must be before
being purged from the database. This is specified in days.
-view_admin_systemSettings_AlertPurge_name=Delete Alerts Older Than
-view_admin_systemSettings_AlertPurge_desc=How old alert history items must be before
being purged from the database. This is specified in days.
-view_admin_systemSettings_TraitPurge_name=Delete Measurement Traits Older Than
-view_admin_systemSettings_TraitPurge_desc=How old measurement trait data must be before
being purged from the database. This is specified in days.
-view_admin_systemSettings_RtDataPurge_name=Delete Response Time Data Older Than
-view_admin_systemSettings_RtDataPurge_desc=How old response time data must be before
being purged from the database. This is specified in days.
-view_admin_systemSettings_EventPurge_name=Delete Events Older Than
-view_admin_systemSettings_EventPurge_desc=How old event data must be before being purged
from the database. This is specified in days.
-view_admin_systemSettings_DataReindex_name=Reindex Data Tables Nightly
-view_admin_systemSettings_DataReindex_desc=If enabled, certain database tables will be
re-indexed periodically.
-view_admin_systemSettings_BaselineFrequency_name=Baseline Calculation Frequency
-view_admin_systemSettings_BaselineFrequency_desc=The frequency which the auto-calculation
of baselines will be performed. If 0, baseline auto-calculation is disabled. This is
specified in days.
-view_admin_systemSettings_BaselineDataSet_name=Baseline Dataset
-view_admin_systemSettings_BaselineDataSet_desc=The amount of past measurement data that
is used to determine a baseline. This is specified in days.
-view_admin_systemSettings_JAASProvider_name=Enable LDAP
-view_admin_systemSettings_JAASProvider_desc=Should LDAP be used to determine user
identity?
-view_admin_systemSettings_LDAPUrl_name=LDAP URL
-view_admin_systemSettings_LDAPUrl_desc=URL to the LDAP Server
-view_admin_systemSettings_LDAPProtocol_name=SSL
-view_admin_systemSettings_LDAPProtocol_desc=Should communication with the LDAP server be
done over SSL?
-view_admin_systemSettings_LDAPLoginProperty_name=Login Property
-view_admin_systemSettings_LDAPLoginProperty_desc=The LDAP property that contains the user
name. Defaults to "cn". If multiple matches are found, the first entry found is
used.
-view_admin_systemSettings_LDAPFilter_name=Search Filter
-view_admin_systemSettings_LDAPFilter_desc=Any additional filters to apply when doing the
LDAP search. This is useful if the population to authenticate can be identified via a
given LDAP property, e.g. RHQUser=true
-view_admin_systemSettings_LDAPGroupFilter_name=Group Search Filter
-view_admin_systemSettings_LDAPGroupFilter_desc=LDAP search filter that must return all
LDAP groups available for authorization. This is used for LDAP group authorization.
-view_admin_systemSettings_LDAPGroupMember_name=Group Member Filter
-view_admin_systemSettings_LDAPGroupMember_desc=LDAP search filter that is used in
conjunction with the group search filter to determine user authorization. This is used for
LDAP group authorization.
-view_admin_systemSettings_LDAPBaseDN_name=Search Base
-view_admin_systemSettings_LDAPBaseDN_desc=The base of the directory tree to search for
usernames and passwords while authenticating users, e.g. ou=People,dc=redhat,dc=com
-view_admin_systemSettings_LDAPBindDN_name=Username
-view_admin_systemSettings_LDAPBindDN_desc=The username to connect to the LDAP server when
querying the LDAP user database. This is typically the full LDAP distinguished name (DN)
of a manager user, e.g. cn=Manager,dc=redhat,dc=com
-view_admin_systemSettings_LDAPBindPW_name=Password
-view_admin_systemSettings_LDAPBindPW_desc=The credentials of the user used to connect to
the LDAP server when querying the LDAP user database.
-
-# Administration/Downloads
-#------------------------------
-view_admin_downloads_agentDownload=Agent Download
-view_admin_downloads_cliDownload=Command Line Client Download
-view_admin_downloads_bundleDownload=Bundle Deployer Download
-view_admin_downloads_connectorsDownload=Connectors Download
-
-view_admin_downloads_agent_loadError=Cannot get agent version info
-view_admin_downloads_agent_version=Agent Version
-view_admin_downloads_agent_buildNumber=Agent Build
-view_admin_downloads_agent_md5=Agent MD5
-view_admin_downloads_agent_link_label=Link
-view_admin_downloads_agent_link_value=Download Agent {0} ({1})
-view_admin_downloads_agent_help=<p> \
- This is the RHQ Agent Update Binary jar file. The purpose of this \
- jar file is to allow you to install a fresh agent on a machine \
- where an agent does not yet exist and to allow you to update \
- an agent that is already installed on a machine. \
- For more details, run this agent download jar with the --help command line
option:<br/> \
- <b>java -jar <agent-download.jar> --help</b> \
- </p> \
- <h3>Agent Install</h3> \
- <p> \
- <b>java -jar <agent-download.jar> --install[=<new agent
directory>]</b><br/> \
- This command will install a new agent. If you do not specify the new agent
directory, the default will be "." \
- </p> \
- <h3>Agent Update</h3> \
- <p> \
- <b>java -jar <agent-download.jar> --update[=<old agent
home>]</b><br/> \
- This will update an existing agent that was already installed. \
- If you do not specify the directory where the old, existing agent was installed, it
will assumed to be "rhq-agent". \
- </p>
-
-view_admin_downloads_cli_loadError=Cannot get CLI version info
-view_admin_downloads_cli_version=CLI Version
-view_admin_downloads_cli_buildNumber=CLI Build
-view_admin_downloads_cli_md5=CLI MD5
-view_admin_downloads_cli_link_label=Link
-view_admin_downloads_cli_link_value=Download CLI {0} ({1})
-view_admin_downloads_cli_help=<p> \
- This is the Command Line Client tool, otherwise known as the CLI. \
- It is a standalone tool that runs from within a console and provides a \
- command line interface to the RHQ Server. You can invoke commands via the CLI \
- as well as run scripts to perform automated tasks. See the documentation for \
- more information on how to install and use the CLI. \
- </p>
-
-view_admin_downloads_bundle_loadError=Cannot get bundle deployer info
-view_admin_downloads_bundle_link_label=Link
-view_admin_downloads_bundle_link_value=Download Bundle Deployer {0}
-view_admin_downloads_bundle_help=<p> \
- This is the Bundle Deployer tool. It is for use by developers and packagers of RHQ
bundles. \
- This standalone tool allows you to test your bundles and their recipes from a console.
\
- </p>
-
-view_admin_downloads_connectors_loadError=Cannot get connectors info
-view_admin_downloads_connectors_none=No connectors are available for download
-view_admin_downloads_connectors_help=Connectors are software that is needed in order for
some products to be manageable by RHQ. You install connectors into some managed products
so RHQ agents can talk to them. See the documentation for more information.
-
-# Measurement Templates view
-view_admin_measTemplates_title=Template Metric Collection Schedules
-view_admin_measTemplates_updateExisting_title=Update Existing Schedules
-view_admin_measTemplates_updateExisting_tooltip=Check this box to update the collection
schedules for the selected metrics on all existing resources of this type. If this is not
checked, the template schedules will only be applied to new resources of this type that
are added to inventory in the future.
-
-#==================== Alerts ======================
-view_alerts_table_title_group=Hist\u00F3rico de Alertas do Grupo
-view_alerts_table_title_resource=Hist\u00F3rico de Alertas do Recurso
-view_alerts_table_filter_priority=Filtro de Prioridade
-view_alerts_field_created_time=Data de Cria\u00E7\u00E3o
-view_alerts_field_modified_time=Data de Altera\u00E7\u00E3o
-view_alerts_field_enabled=Habilitado
-view_alerts_field_ack_time=Data de Verifica\u00E7\u00E3o
-view_alerts_field_ack_subject=Assunto da Verifica\u00E7\u00E3o
-view_alerts_field_ack_status=Status
-view_alerts_field_ack_status_noAck=No Ack
-view_alerts_field_ack_status_noAckHover=Not yet Acknowledged
-view_alerts_field_ack_status_ack=Ack ({0})
-view_alerts_field_ack_status_ackHover=Acknowledged by {0} at {1}
-view_alerts_field_name=Nome
-view_alerts_field_condition_text=Condi\u00E7\u00E3o
-view_alerts_field_condition_text_none=Sem condi\u00E7\u00F5es
-view_alerts_field_condition_text_many=M\u00FAltiplas condi\u00E7\u00F5es
-view_alerts_field_condition_value=Valor da Condi\u00E7\u00E3o
-view_alerts_field_priority=Prioridade
-view_alerts_field_parent=Pai
-view_alerts_field_protected=Protegido
-view_alerts_field_protected_tooltip=Se verdadeiro, esta defini\u00E7\u00E3o \u00E9
protegida de altera\u00E7\u00F5es feitas na defini\u00E7\u00E3o pai, ou seja,
altera\u00E7\u00F5es realizadas no pai n\u00E3o sobrescrevem esta defini\u00E7\u00E3o.
-view_alerts_loadFailed=Falha ao carregar dados dos alertas
-view_alerts_delete_confirm=Excluir o(s) alerta(s) selecionado(s)?
-view_alerts_delete_confirm_all=Excluir todos os alertas?
-view_alerts_delete_success=Alertas {0} exclu\u00EDdos com sucesso
-view_alerts_delete_failure=Falha ao excluir alertas com os seguintes IDs\: {0}
-view_alerts_delete_failure_all=N\u00E3o foi poss\u00EDvel excluir os alertas
-view_alerts_ack_confirm=Confirma o(s) alerta(s) selecionado(s)?
-view_alerts_ack_confirm_all=Confirma todos os alertas?
-view_alerts_ack_success=Alertas {0} confirmados com sucesso
-view_alerts_ack_failure=Falha ao confirmar alertas com os seguintes IDs\: {0}
-view_alerts_ack_failure_all=N\u00E3o foi poss\u00EDvel confirmar todos os alertas
-view_alert_details_loadFailed=Falha ao recuperar detalhes do alerta
-view_alert_details_field_ack_by=Verificado por
-view_alert_details_field_ack_at=Verificado em
-view_alert_details_field_recovery_info=Informa\u00E7\u00E3o de Recupera\u00E7\u00E3o
-view_alert_definition_for_type=Visualizar Template
-view_alert_definition_for_group=Visualizar Defini\u00E7\u00E3o de Grupo
-view_alert_definitions_table_title_group=Defini\u00E7\u00F5es de Alertas para Grupo
-view_alert_definitions_table_title_resource=Defini\u00E7\u00F5es de Alerta para Recurso
-view_alert_definitions_loadFailed=Falha ao obter a defini\u00E7\u00E3o do alerta
-view_alert_definitions_loadFailed_single=Falha ao obter a defini\u00E7\u00E3o do alerta
com ID {0}
-view_alert_definitions_enable_confirm=Habilitar a(s) defini\u00E7\u00E3o(\u00F5es) para o
alerta selecionado?
-view_alert_definitions_enable_success=Defini\u00E7\u00F5es do alerta {0} habilitados com
sucesso
-view_alert_definitions_enable_failure=Falha ao habilitar defini\u00E7\u00F5es para o
alerta selecionado
-view_alert_definitions_disable_confirm=Desabilitar as defini\u00E7\u00F5es para o alerta
selecionado?
-view_alert_definitions_disable_success=Defini\u00E7\u00F5es do alerta {0} desabilitadas
com sucesso
-view_alert_definitions_disable_failure=Falha ao desabilitar defini\u00E7\u00F5es para o
alerta selecionado
-view_alert_definitions_delete_confirm=Excluir defini\u00E7\u00F5es para o alerta
selecionado?
-view_alert_definitions_delete_success=Defini\u00E7\u00F5es do alerta {0} exclu\u00EDdas
com sucesso
-view_alert_definitions_delete_failure=Falha aos excluir as defini\u00E7\u00F5es do alerta
selecionado
-view_alert_definitions_create_success=Defini\u00E7\u00E3o do alerta criada com sucesso
-view_alert_definitions_create_failure=Falha na cria\u00E7\u00E3o da defini\u00E7\u00E3o
do alerta
-view_alert_definitions_update_success=Defini\u00E7\u00E3o do alerta atualizada com
sucesso
-view_alert_definitions_update_failure=Falha ao atualizar a defini\u00E7\u00E3o do alerta
-view_alert_definition_condition_editor_option_label=Tipo de Condi\u00E7\u00E3o
-view_alert_definition_condition_editor_option_availability=Mudan\u00E7a de
Disponibilidade
-view_alert_definition_condition_editor_option_metric_threshold=Threshold (valor absoluto)
da M\u00E9trica
-view_alert_definition_condition_editor_option_metric_baseline=Threshold base da
M\u00E9trica
-view_alert_definition_condition_editor_option_metric_change=Mudan\u00E7a no valor da
M\u00E9trica
-view_alert_definition_condition_editor_option_metric_calltime_threshold=Tempo limite da
chamada
-view_alert_definition_condition_editor_option_metric_calltime_change=Mudan\u00E7a no
tempo de chamada
-view_alert_definition_condition_editor_option_metric_trait_change=Mudan\u00E7a de
Carcter\u00EDstica
-view_alert_definition_condition_editor_option_operation=Execu\u00E7\u00E3o de
Opera\u00E7\u00E3o
-view_alert_definition_condition_editor_option_resource_configuration=Mudan\u00E7a na
Configura\u00E7\u00E3o do Recurso
-view_alert_definition_condition_editor_option_event=Detec\u00E7\u00E3o de Evento
-view_alert_definition_condition_editor_avilability_tooltip=Especifica a mudan\u00E7a de
estado na disponibilidade do recurso que ir\u00E1 disparar a condi\u00E7\u00E3o.
-view_alert_definition_condition_editor_avilability_value=Disponibilidade
-view_alert_definition_condition_editor_avilability_option_up=DISPON\u00CDVEL
-view_alert_definition_condition_editor_avilability_option_down=INDISPON\u00CDVEL
-view_alert_definition_condition_editor_metric_common_definition_not_found=Deve existir
uma defini\u00E7\u00E3o para a m\u00E9trica - algo est\u00E1 incorreto
-view_alert_definition_condition_editor_metric_threshold_tooltip=Especifica um threshold
que, quando alcan\u00E7ado, dispara a condi\u00E7\u00E3o. O valor especificado deve ser
absoluto e com uma unidade de medida opcional.
-view_alert_definition_condition_editor_metric_threshold_name=M\u00E9trica
-view_alert_definition_condition_editor_metric_threshold_value=Valor da M\u00E9trica
-view_alert_definition_condition_editor_metric_threshold_value_tooltip=Limiar (threshold)
da m\u00E9trica utilizado na compara\u00E7\u00E3o como condi\u00E7\u00E3o de disparo.
-view_alert_definition_condition_editor_metric_threshold_comparator=Mecanismo de
Compara\u00E7\u00E3o
-view_alert_definition_condition_editor_metric_threshold_comparator_less=Menor que
-view_alert_definition_condition_editor_metric_threshold_comparator_equal=Igual \u00E0
-view_alert_definition_condition_editor_metric_threshold_comparator_greater=Maior que
-view_alert_definition_condition_editor_metric_threshold_comparator_tooltip=Como a
m\u00E9trica coletada deve ser comparada ao threshold estabelecido
-view_alert_definition_condition_editor_metric_baseline_tooltip=Especifica a linha de base
que, quando violada, dispara a condi\u00E7\u00E3o. O valor especificado \u00E9 o
percentual do valor da linha de base informado.
-view_alert_definition_condition_editor_metric_baseline_percentage=Percentual da linha de
base
-view_alert_definition_condition_editor_metric_baseline_percentage_tooltip=Valor da
m\u00E9trica coletada usada para disparo da condi\u00E7\u00E3o quando comparado ao valor
da linha de base selecionada
-view_alert_definition_condition_editor_metric_baseline_value=Linha de base
(<i>baseline</i>)
-view_alert_definition_condition_editor_metric_change_tooltip=Especifica a m\u00E9trica
cujo valor deve ser alterado para disparar a condi\u00E7\u00E3o.
-view_alert_definition_condition_editor_metric_calltime_threshold_tooltip=Especifica um
tempo limite para a chamada que, quando alcan\u00E7ado, dispara a condi\u00E7\u00E3o. O
valor especificado deve ser absoluto e com uma unidade de medida opcional. \u00C9
necess\u00E1rio especificar o tempo limite da chamada para compar\u00E1-lo ao valor\:
m\u00EDnimo, m\u00E1ximo ou m\u00E9dio.
-view_alert_definition_condition_editor_metric_calltime_common_name=M\u00E9trica do tempo
de chamada
-view_alert_definition_condition_editor_metric_calltime_common_limit=Tempo limite da
chamada
-view_alert_definition_condition_editor_metric_calltime_common_limit_tooltip=Tempo de
chamada limite a ser comparado com o valor informado
-view_alert_definition_condition_editor_metric_calltime_common_regex=Express\u00E3o
Regular
-view_alert_definition_condition_editor_metric_calltime_common_regex_tooltip=Se
especificada, essa \u00E9 a express\u00E3o regular a ser satisfeita pela chamada para
disparar a condi\u00E7\u00E3o.
-view_alert_definition_condition_editor_metric_calltime_common_comparator=Compara\u00E7\u00E3o
-view_alert_definition_condition_editor_metric_calltime_common_comparator_shrinks=Redu\u00E7\u00F5es
-view_alert_definition_condition_editor_metric_calltime_common_comparator_grows=Ganhos
-view_alert_definition_condition_editor_metric_calltime_common_comparator_changes=Mudan\u00E7as
-view_alert_definition_condition_editor_metric_calltime_common_comparator_tooltip=Como o
valor do tempo de chamada deve ser comparado ao valor limite
-view_alert_definition_condition_editor_metric_calltime_threshold_value=Valor do tempo de
chamada
-view_alert_definition_condition_editor_metric_calltime_threshold_value_tooltip=O valor do
limiar (<i>threshold</i>) da m\u00E9trica usado para disparar a
condi\u00E7\u00E3o quando comparado ao mecanismo de compara\u00E7\u00E3o escolhido.
-view_alert_definition_condition_editor_metric_calltime_change_tooltip=Especifica o valor
do tempo de chamada que, quanto alterado, dispara a condi\u00E7\u00E3o. \u00C9
necess\u00E1rio especificar o tempo limite para a chamada (m\u00EDnimo, m\u00E1ximo ou
m\u00E9dio) e o percental de mudan\u00E7a que deve ocorrer.
-view_alert_definition_condition_editor_metric_calltime_change_percentage=Percentual de
Mudan\u00E7a
-view_alert_definition_condition_editor_metric_calltime_change_percentage_tooltip=Valor do
tempo de chamada coletado usado para disparar a condi\u00E7\u00E3o quando diferir do
percentual do valor limite do tempo de chamada definido.
-view_alert_definition_condition_editor_metric_trait_change_tooltip=Specify the trait
whose value must change to trigger the condition.
-view_alert_definition_condition_editor_metric_trait_change_value=Caracter\u00EDstica
-view_alert_definition_condition_editor_operation_tooltip=Define o resultado esperado
quando a opera\u00E7\u00E3o selecionada for executada para dispararo da
confi\u00E7\u00E3o.
-view_alert_definition_condition_editor_operation_value=Opera\u00E7\u00E3o
-view_alert_definition_condition_editor_operation_status=Status da Opera\u00E7\u00E3o
-view_alert_definition_condition_editor_operation_status_inprogress=Em andamento
-view_alert_definition_condition_editor_operation_status_success=Sucesso
-view_alert_definition_condition_editor_operation_status_failure=Falha
-view_alert_definition_condition_editor_operation_status_canceled=Cancelada
-view_alert_definition_condition_editor_resource_configuration_tooltip=Essa
condi\u00E7\u00E3o \u00E9 disparada quando a configura\u00E7\u00E3o do recurso for
alterada.
-view_alert_definition_condition_editor_event_tooltip=Define a severeidade do evento para
disparar a condi\u00E7\u00E3o. Caso seja definida uma express\u00E3o regular, a
condi\u00E7\u00E3o somente ser\u00E1 disparada se o evento satisfazer a express\u00E3o.
-view_alert_definition_condition_editor_event_severity=Severidade do Evento
-view_alert_definition_condition_editor_event_severity_debug=Debug
-view_alert_definition_condition_editor_event_severity_info=Info
-view_alert_definition_condition_editor_event_severity_warn=Warn
-view_alert_definition_condition_editor_event_severity_error=Error
-view_alert_definition_condition_editor_event_severity_fatal=Fatal
-view_alert_definition_condition_editor_event_regex=Express\u00E3o Regular
-view_alert_definition_condition_editor_event_regex_tooltip=Se definida, a
condi\u00E7\u00E3o somente ser\u00E1 disparada caso o evento satisfa\u00E7a a
express\u00E3o.
-view_alert_definition_condition_editor_common_min=M\u00EDnimo
-view_alert_definition_condition_editor_common_avg=M\u00E9dio
-view_alert_definition_condition_editor_common_max=M\u00E1ximo
-view_alert_definition_condition_editor_delete_confirm=Delete the selected alert
condition(s)?
-view_alert_definition_notification_editor_title_add=Adicionar Notifica\u00E7\u00E3o
-view_alert_definition_notification_editor_title_edit=Editar Notifica\u00E7\u00E3o
-view_alert_definition_notification_editor_sender=Remetente da Notifica\u00E7\u00E3o
-view_alert_definition_notification_editor_none_available=Remetentes n\u00E3o
dispon\u00EDveis
-view_alert_definition_notification_editor_loadFailed=N\u00E3o \u00E9 poss\u00EDvel obter
remetentes
-view_alert_definition_notification_editor_loadFailed_single=N\u00E3o \u00E9 poss\u00EDvel
obter a configura\u00E7\u00E3o do remetente
-view_alert_definition_notification_editor_saveFailed=N\u00E3o foi poss\u00EDvel salvar a
configura\u00E7\u00E3o
-view_alert_definition_notification_editor_field_sender=Remetente
-view_alert_definition_notification_editor_field_configuration=Configura\u00E7\u00E3o
-view_alert_definition_notification_editor_field_configuration_not_loaded=Desconhecido
-view_alert_definition_notification_editor_field_configuration_loadFailed=Falha ao obter a
configura\u00E7\u00E3o
-view_alert_definition_notification_editor_delete_confirm=Tem certeza de que deseja
excluir as notifica\u00E7\u00F5es selecionadas?
-view_alert_definition_notification_operation_editor_mode_title=Modo de Sele\u00E7\u00E3o
do Recurso
-view_alert_definition_notification_operation_editor_mode_this=Este Recurso
-view_alert_definition_notification_operation_editor_mode_specific=Recurso
Espec\u00EDfico
-view_alert_definition_notification_operation_editor_mode_relative=Recurso parente
-view_alert_definition_notification_operation_editor_mode_unknown=OP\u00C7\u00C3O
INV\u00C1LIDA - BUG\!
-view_alert_definition_notification_operation_editor_common_operation=Opera\u00E7\u00E3o
-view_alert_definition_notification_operation_editor_specific_resource=Recurso
-view_alert_definition_notification_operation_editor_specific_pick_button=Selecionar
-view_alert_definition_notification_operation_editor_specific_pick_text=Selecione um
recurso...
-view_alert_definition_notification_operation_editor_specific_pick_error_invalid=Favor
selecionar um recurso
-view_alert_definition_notification_operation_editor_specific_pick_error_no_operation=Selecione
um recurso que possua um ou mais opera\u00E7\u00F5es
-view_alert_definition_notification_operation_editor_relative_ancestor=Iniciar a busca a
partir de
-view_alert_definition_notification_operation_editor_relative_ancestor_tooltip=Selecione o
topo da hierarquia para buscar a \u00E1rvore de descendentes para Filtro por Tipo
-view_alert_definition_notification_operation_editor_relative_ancestor_loadFailed=N\u00E3o
\u00E9 poss\u00EDvel obter a ascend\u00EAncia do tipo
-view_alert_definition_notification_operation_editor_relative_ancestor_root=Tipo do
Ancestral Raiz
-view_alert_definition_notification_operation_editor_relative_descendant=Ent\u00E3o
procure por
-view_alert_definition_notification_operation_editor_relative_descendant_tooltip=Tipo do
recurso a ser procurado a baixo do tipo raiz definido na sele\u00E7\u00E3o 'Inicia a
Pesquesa a partir de'.
-view_alert_definition_notification_operation_editor_relative_descendant_filter_tooltip=Um
nome especifico para identificar unicamente um recurso quando existir mais de um do mesmo
tipo. Isso \u00E9 opcional, se definido, sempre ser\u00E1 um recurso do tipo slecionda na
hierarquia.
-view_alert_definition_notification_operation_editor_relative_descendant_loadFailed=N\u00E3o
\u00E9 poss\u00EDvel obter os tipos de descendentes
-view_alert_definition_notification_operation_editor_operations_loadFailed=Falha ao
carregar a lista de opera\u00E7\u00F5es dispon\u00EDveis
-view_alert_definition_notification_operation_editor_operations_no_parameters=Esta
opera\u00E7\u00E3o n\u00E3o recebe par\u00E2metros
-view_alert_definition_notification_role_editor_loadFailed=N\u00E3o \u00E9 poss\u00EDvel
determinar os perfis atuais - iniciando vazio
-view_alert_definition_notification_role_editor_restoreFailed=N\u00E3o \u00E9
poss\u00EDvel usar os perfis atuais - iniciando vazio
-view_alert_definition_notification_role_editor_saveFailed=N\u00E3o foi poss\u00EDvel
salvar os perfis selecionados
-view_alert_definition_notification_user_editor_loadFailed=N\u00E3o \u00E9 poss\u00EDvel
determinar os usu\u00E1rios atuais - iniciando vazio
-view_alert_definition_notification_user_editor_restoreFailed=N\u00E3o foi poss\u00EDvel
usar os usu\u00E1rios atuais - iniciando vazio
-view_alert_definition_notification_user_editor_saveFailed=N\u00E3o foi poss\u00EDvel
salvar os usu\u00E1rios seleciondados
-view_alert_definition_notification_cliScript_editor_repository=Repository
-view_alert_definition_notification_cliScript_editor_script=Script
-view_alert_definition_notification_cliScript_editor_whichUser=User To Run The Script As
-view_alert_definition_notification_cliScript_editor_thisUser=Myself
-view_alert_definition_notification_cliScript_editor_anotherUser=Another User
-view_alert_definition_notification_cliScript_editor_verifyAuthentication=Verify
-view_alert_definition_notification_cliScript_editor_loadFailed=Loading the CLI
Notification Editor Failed.
-view_alert_definition_notification_cliScript_editor_selectRepoFirst=Select a repository
first.
-view_alert_definition_notification_cliScript_editor_existingScript=Existing Script
-view_alert_definition_notification_cliScript_editor_uploadNewScript=Upload New Script
-view_alert_definition_notification_cliScript_editor_newScriptVersion=Version
-view_alert_definition_notification_cliScript_editor_selectRepo=Select the repository
where the script should reside
-view_alert_definition_recovery_editor_disable_when_fired=Desabilitar quando disparado
-view_alert_definition_recovery_editor_disable_when_fired_tooltip=Indica se este alerta
deve ser desabilitado ap\u00F3s ser disparado. Uma vez desabilitado, o alerta pode ser
reativado manualmente ou um alerta de recupera\u00E7\u00E3o pode ser definido para
reativ\u00E1-lo automaticamente. If this alert is a recovery alert itself, this setting
cannot be turned on.
-view_alert_definition_recovery_editor_recovery_alert=Alerta de Recupera\u00E7\u00E3o
-view_alert_definition_recovery_editor_recovery_alert_tooltip=O Alerta a ser recuperado
(reativado) ap\u00F3s o disparo deste alerta. N\u00E3o selecione um alerta aqui caso
n\u00E3o esteja definindo um alerta de recupera\u00E7\u00E3o.
-view_alert_definition_recovery_editor_loadFailed=N\u00E3o foi poss\u00EDvel construir o
menu de recupera\u00E7\u00E3o
-view_alert_definition_recovery_editor_none_available=Nenhum
-view_alert_common_tab_general=Propriedades Gerais
-view_alert_common_tab_conditions=Condi\u00E7\u00F5es
-view_alert_common_tab_conditions_modal_title=Adicionar nova condi\u00E7\u00E3o.
-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_text=Condi\u00E7\u00E3o
-view_alert_common_tab_conditions_value=Valor
-view_alert_common_tab_conditions_type_availability=Mudan\u00E7a na Disponibilidade
-view_alert_common_tab_conditions_type_availability_down=Indispon\u00EDvel
-view_alert_common_tab_conditions_type_availability_up=Dispon\u00EDvel
-view_alert_common_tab_conditions_type_metric_threshold=Valor da M\u00E9trica excede o
limiar (threshold)
-view_alert_common_tab_conditions_type_metric_calltime_threshold=Tempo de chamada excede o
limiar (threshold)
-view_alert_common_tab_conditions_type_metric_calltime_destination=com o destino da
chamada correspondente
-view_alert_common_tab_conditions_type_metric_calltime_change=Mudan\u00E7a no tempo de
chamada
-view_alert_common_tab_conditions_type_metric_calltime_change_verb=ao menos
-view_alert_common_tab_conditions_type_metric_calltime_delta_grows=Aumento
-view_alert_common_tab_conditions_type_metric_calltime_delta_shrinks=Redu\u00E7\u00E3o
-view_alert_common_tab_conditions_type_metric_calltime_delta_other=Mudan\u00E7a
-view_alert_common_tab_conditions_type_metric_baseline=Valor da m\u00E9trica excede a
linha de base (baseline)
-view_alert_common_tab_conditions_type_metric_baseline_verb=de
-view_alert_common_tab_conditions_type_metric_change=Mudan\u00E7a no valor da
m\u00E9trica
-view_alert_common_tab_conditions_type_metric_trait_change=Mudan\u00E7a de
Carater\u00EDstica
-view_alert_common_tab_conditions_type_operation=Execu\u00E7\u00E3o de Opera\u00E7\u00E3o
-view_alert_common_tab_conditions_type_operation_status=resultado com status
-view_alert_common_tab_conditions_type_resource_configuration=Mudan\u00E7a na
Configura\u00E7\u00E3o do Recurso
-view_alert_common_tab_conditions_type_event=Detec\u00E7\u00E3o de Envento
-view_alert_common_tab_conditions_type_event_matching=combinando com o evento de origem
-view_alert_common_tab_conditions_recovery_enabled=''{0}'' disparado para
ser reativado.
-view_alert_common_tab_conditions_recovery_disabled=Este alerta desativou a sua
defini\u00E7\u00E3o.
-view_alert_common_tab_notifications=Notifica\u00E7\u00F5es
-view_alert_common_tab_notifications_sender=Remetente
-view_alert_common_tab_notifications_status=Status
-view_alert_common_tab_notifications_message=Mensagem
-view_alert_common_tab_dampening=Sensibilidade
-view_alert_common_tab_dampening_category_none=N\u00E3o definido
-view_alert_common_tab_dampening_category_none_tooltip=Sensibilidade desabilitada. Cada
vez que o conjunto de condi\u00E7\u00F5es for satisfeito, um alerta ser\u00E1 disparado.
-view_alert_common_tab_dampening_category_consecutive_count=Consecutivos
-view_alert_common_tab_dampening_category_consecutive_count_tooltip=Um alerta \u00E9
disparado a cada X ocorr\u00EAncias consecutivas em que o conjunto de condi\u00E7\u1E4Des
for satisfeito.
-view_alert_common_tab_dampening_category_partial_count=\u00DAltimas N
verifica\u00E7\u00F5es
-view_alert_common_tab_dampening_category_partial_count_tooltip=Um alerta \u00E9 disparado
a cada X ocorr\u00EAncias em que o conjunto de condi\u00E7\u00F5es \u00E9 satisfeito
durante as \u00FAltimas N verifica\u00E7\u00F5es.
-view_alert_common_tab_dampening_category_duration_count=Per\u00EDodo de Tempo
-view_alert_common_tab_dampening_category_duration_count_tooltip=Um alerta \u00E9
disparado a cada X ocorr\u00EAncias em que o conjunto de condi\u00E7\u00F5es \u00E9
satisfeito dentro de um dado per\u00EDodo de tempo.
-view_alert_common_tab_dampening_consecutive_occurrences_label=Ocorr\u00EAcias
-view_alert_common_tab_dampening_consecutive_occurrences_label_tooltip=O n\u00FAmero de
vezes que o conjunto de condi\u00E7\u00F5es deve ser satisfeito antes do alerta ser
disparado.
-view_alert_common_tab_dampening_partial_occurrences_label=Ocorr\u00EAncias
-view_alert_common_tab_dampening_partial_occurrences_label_tooltip=O n\u00FAmero de vezes
que o conjunto de condi\u00E7\u00F5es deve ser satisfeito durante as \u00FAltimas N
verifica\u00E7\u00F5es antes do alerta ser disparado.
-view_alert_common_tab_dampening_partial_evalatuions_label=Verifica\u00E7\u00F5es
-view_alert_common_tab_dampening_partial_evalatuions_label_tooltip=O total de vezes que o
conjunto de condi\u00E7\u00F5es ser\u00E1 testado para certificar-se de que o n\u00FAmero
de ocorr\u00EAncias definido foi satisfeito.
-view_alert_common_tab_dampening_duration_occurrences_label=Ocorr\u00EAncias
-view_alert_common_tab_dampening_duration_occurrences_label_tooltip=O n\u00FAmero de vezes
que o conjunto de condi\u00E7\u00F5es deve ser satisfeito durante o per\u00EDodo de tempo
definido antes do alerta ser disparado.
-view_alert_common_tab_dampening_duration_period_label=Per\u00EDodo de Tempo
-view_alert_common_tab_dampening_duration_period_label_tooltip=Espa\u00E7o de tempo em que
o conjunto de condi\u00E7\u00F5es ser\u00E1 testado para verificar se o n\u00FAmero de
ocorr\u00EAncias definido \u00E9 satisfeito.
-view_alert_common_tab_recovery=Recupera\u00E7\u00E3o~
-view_alert_common_tab_invalid_condition_category=Categoria de condi\u00E7\u00E3o
inv\u00E1lida - favor reportar como um bug\: {0}
-view_alert_common_tab_invalid_dampening_category=Categora de sensibilidade inv\u00E1lida
- favor reportar como um bug\: {0}
-view_alert_common_tab_invalid_time_units=Unidade de tempo inv\u00E1lida - favor reportar
como um bug\: {0}
-
-# Auto Discovery Queue
-#----------------------------
-view_autoDiscoveryQ_title=Fila de Autodescoberta
-view_autoDiscoveryQ_import=Importar
-view_autoDiscoveryQ_ignore=Ignorar
-view_autoDiscoveryQ_ignored=Ignorado
-view_autoDiscoveryQ_unignore=N\u00E3o ignorar
-view_autoDiscoveryQ_committed=Committed
-view_autoDiscoveryQ_deleted=Deleted
-view_autoDiscoveryQ_uninventoried=Uninventoried
-view_autoDiscoveryQ_new=Novo
-view_autoDiscoveryQ_newAndIgnored=Novo e Ignorado
-view_autoDiscoveryQ_importFailure=Falha ao importar recursos
-view_autoDiscoveryQ_importSuccessful=Os recursos selecionados foram importados com
sucesso.
-view_autoDiscoveryQ_ignoreFailure=Falha ao ignorar recursos.
-view_autoDiscoveryQ_ignoreSuccessful=Os recursos selecionados foram ignorados com
sucesso.
-view_autoDiscoveryQ_unignoreFailure=Falha ao reimportar os recursos
-view_autoDiscoveryQ_unignoreSuccessful=You have successfully unignored the selected
resources.~
-view_autoDiscoveryQ_noperm=(Required manage inventory permissions missing. See
Administrator to change)~
-view_autoDiscoveryQ_noItems=N\u00E3o h\u00E1 itens a serem mostrados
-view_autoDiscoveryQ_field_parentId=ID Pai
-view_autoDiscoveryQ_field_name=Nome do Recurso
-view_autoDiscoveryQ_field_key=Chave do Recurso
-view_autoDiscoveryQ_field_discoveryTime=Data e Hora da Descoberta
-view_autoDiscoveryQ_field_inventoryStatus=Status do Invet\u00E1rio
-view_autoDiscoveryQ_loadFailure=Falha ao carregar a fila de descoberta do
invent\u00E1rio
-view_autoDiscoveryQ_showStatus=Show
-view_autoDiscoveryQ_confirmSelect=Also select the platform children?
-
-#==================== Bundles ======================
-
-# some common bundle terms
-view_bundle_bundle=Bundle~
-view_bundle_bundles=Bundles~
-view_bundle_bundleDestinations=Bundle Destinations~
-view_bundle_bundleDeployment=Bundle Deployment~
-view_bundle_bundleDeployments=Bundle Deployments~
-view_bundle_bundleFiles=Bundle Files~
-view_bundle_bundleType=Bundle Type~
-view_bundle_bundleVersion=Bundle Version~
-view_bundle_bundleVersions=Bundle Versions~
-view_bundle_deploy=Deploy~
-view_bundle_deployed=Deployed~
-view_bundle_deployDir=Deploy Directory~
-view_bundle_deployments=Deployments~
-view_bundle_destinations=Destinations~
-view_bundle_files=Files~
-view_bundle_latestVersion=Latest Version~
-view_bundle_recipe=Recipe~
-view_bundle_revert=Revert~
-view_bundle_purge=Purge
-view_bundle_versions=Versions~
-view_bundle_deleteConfirm=Are you sure you want to delete this bundle? All versions,
destinations and deployments for this bundle will also be deleted.
-
-# individual bundle views/wizards
-view_bundle_fileListView_fileSize=File Size~
-view_bundle_fileListView_md5=MD5
-view_bundle_fileListView_sha256=SHA256
-view_bundle_fileListView_loadFailure=Failed to load bundle file data~
-view_bundle_version_backToBundle=Back to Bundle~
-view_bundle_version_bundleVersionTagUpdateFailure=Failed to update bundle version tags~
-view_bundle_version_bundleVersionTagUpdateSuccessful=You have successfully updated the
bundle version tags~
-view_bundle_version_deleteConfirm=Are you sure you want to delete this bundle version?
-view_bundle_version_deleteFailure=Failed to delete the bundle version [{0}]
-view_bundle_version_deleteSuccessful=You successfully deleted the bundle version [{0}]
-view_bundle_version_loadFailure=Failed to load bundle version~
-view_bundle_tree_loadFailure=Failed to load bundle data~
-view_bundle_revertWizard_title=Bundle Revert~
-view_bundle_revertWizard_windowTitle=Bundle Revert Wizard~
-view_bundle_revertWizard_getInfoStep_name=Provide Revert Information~
-view_bundle_revertWizard_getInfoStep_revertDeployName=Revert Deploy Name~
-view_bundle_revertWizard_getInfoStep_revertDeployDesc=Revert Deploy Description~
-view_bundle_revertWizard_getInfoStep_revertDeployDescFull=[REVERT
From]\\n{0}\\n\\n[REVERT To]\\n{1}~
-view_bundle_revertWizard_getInfoStep_cleanDeploy=Clean Deployment? (this will delete an
old, existing deploy directory prior to starting the revert deployment)~
-view_bundle_revertWizard_getInfoStep_getNameFailure=Failed to get revert deployment
name~
-view_bundle_revertWizard_confirmStep_name=Revert Deployment Confirmation~
-view_bundle_revertWizard_confirmStep_noLiveDeployment_concise=No live deployment was
found for the destination
-view_bundle_revertWizard_confirmStep_noLiveDeployment=No live deployment was found for
the destination [{0}]~
-view_bundle_revertWizard_confirmStep_noPriorDeployment_concise=The live deployment cannot
be reverted because there is no prior deployment
-view_bundle_revertWizard_confirmStep_noPriorDeployment=The live deployment [{0}] cannot
be reverted because there is no prior deployment for the destination [{1}]~
-view_bundle_revertWizard_confirmStep_failedToFindLiveDeployment=Failed to find live
deployment; cannot revert~
-view_bundle_revertWizard_confirmStep_liveDeployment=Live Deployment~
-view_bundle_revertWizard_confirmStep_prevDeployment=Previous Deployment~
-view_bundle_revertWizard_confirmStep_confirmation=Reverting Live Deployment to Previous
Deployment. Click "Next" to continue...~
-view_bundle_revertWizard_revertStep_name=Deploy Bundle to Destination Platforms~
-view_bundle_revertWizard_revertStep_reverting=Reverting...~
-view_bundle_revertWizard_revertStep_scheduled=You have successfully scheduled the revert
deployment!~
-view_bundle_revertWizard_revertStep_scheduledDetails=You have successfully scheduled to
revert the bundle deployment [{0}] from resource group [{1}]~
-view_bundle_revertWizard_revertStep_scheduledFailure=Failed to schedule revert
deployment!~
-view_bundle_list_loadFailure=Failed to load the bundle to be deployed [{0}]~
-view_bundle_list_singleLoadFailure=Failed to get a single bundle to be deployed [{0}]~
-view_bundle_list_versionsCount=Versions Count~
-view_bundle_list_destinationsCount=Destinations Count~
-view_bundle_list_loadWithLatestFailure=Failed to load bundle with the latest version
data~
-view_bundleVersion_loadFailure=Failed to load bundle version data~
-view_bundle_list_backToAll=Back to All Bundles~
-view_bundle_list_tagUpdateFailure=Failed to update bundle tags~
-view_bundle_list_tagUpdateSuccessful=You have successfully updated the bundle tags~
-view_bundle_list_deleteConfirm=Are you sure you want to delete this bundle?~
-view_bundle_list_deletesFailure=Failed to delete the bundles
-view_bundle_list_deletesSuccessful=You successfully deleted the bundles
-view_bundle_list_deleteFailure=Failed to delete the bundle [{0}]~
-view_bundle_list_deleteSuccessful=You successfully deleted the bundle named [{0}]~
-view_bundle_list_error1=Failed to load bundle to deploy [{0}]~
-view_bundle_list_error2=Failed to get a single bundle to deploy [{0}]~
-view_bundle_list_error3=Failed to load bundle~
-view_bundle_dest_group=Group~
-view_bundle_dest_created=Created~
-view_bundle_dest_deployDir=Deploy Directory~
-view_bundle_dest_lastDeployedVersion=Last Deployed Version~
-view_bundle_dest_lastDeploymentDate=Last Deployment Date~
-view_bundle_dest_lastDeploymentStatus=Last Deployment Status~
-view_bundle_dest_loadFailure=Failed to load bundle destinations~
-view_bundle_dest_loadFailureVersionInfo=Failed to load bundle destination deployed
version information~
-view_bundle_dest_backToBundle=Back to Bundle~
-view_bundle_dest_tagUpdateFailure=Failed to update bundle destination tags~
-view_bundle_dest_tagUpdateSuccessful=You have successfully updated the bundle destination
tags~
-view_bundle_dest_purgeConfirm=This will purge the bundle content from all remote
machines. Are you sure you want to do this?
-view_bundle_dest_purgeFailure=Failed to purge the bundle destination [{0}] from some or
all of the remote machines.
-view_bundle_dest_purgeSuccessful=You successfully purged the bundle destination [{0}]
from all of the remote machines.
-view_bundle_dest_revertConfirm=This will revert all remote machines back to the previous
bundle deployment. Are you sure you want to do this?
-view_bundle_dest_deleteConfirm=Are you sure you want to delete this bundle destination?
This only deletes it from the database; all bundle content that was deployed to this
destination on remote machines will remain.
-view_bundle_dest_deleteFailure=Failed to delete the bundle destination [{0}]
-view_bundle_dest_deleteSuccessful=You successfully deleted the bundle destination [{0}]
-view_bundle_resDeployDS_loadFailure=Failed to load bundle resource deployments~
-view_bundle_deploy_name=Deployment Name~
-view_bundle_deploy_time=Deployment Time~
-view_bundle_deploy_loadDeployFailure=Failed to load bundle deployments~
-view_bundle_deploy_action=Action~
-view_bundle_deploy_installDetails=Install Details~
-view_bundle_deploy_backButton=Back to Destination~
-view_bundle_deploy_tagUpdateFailure=Failed to update bundle deployment tags~
-view_bundle_deploy_tagUpdateSuccessful=You have successfully updated the bundle
deployment tags~
-view_bundle_deploy_deploymentPlatforms=Deployment Platforms~
-view_bundle_deploy_selectARow=Select a row to show installation details~
-view_bundle_deploy_operatingSystem=Operating System~
-view_bundle_deploy_loadFailure=Failed to load bundle deployment~
-view_bundle_deploy_loadBundleFailure=Failed to find bundle~
-view_bundle_deploy_deployedBy=Deployed By
-view_bundle_deploy_clickForError=Click the icon for the error message
-view_bundle_deploy_deleteConfirm=Are you sure you want to delete this bundle deployment?
-view_bundle_deploy_deleteFailure=Failed to delete the bundle deployment [{0}]
-view_bundle_deploy_deleteSuccessful=You successfully deleted the bundle deployment [{0}]
-view_bundle_createWizard_title=Create Bundle~
-view_bundle_createWizard_windowTitle=Bundle Creation Wizard~
-view_bundle_createWizard_cancelSuccessful=Canceled the creation of bundle [{0}],
version=[{1}]~
-view_bundle_createWizard_cancelFailure=Failed to fully cancel the creation of bundle
[{0}], version=[{1}] - the bundle may still exist in the database~
-view_bundle_createWizard_noBundleTypesSupported=No bundle types are supported - you must
deploy a valid plugin that supports bundle deployments~
-view_bundle_createWizard_noBundleTypesAvail=No bundle types are available~
-view_bundle_createWizard_loadBundleFileFailure=Cannot obtain bundle file information from
server~
-view_bundle_createWizard_enterUrl=Please enter a valid URL where the bundle distribution
file can be downloaded from
-view_bundle_createWizard_enterRecipe=Please supply a valid recipe
-view_bundle_createWizard_uploadInProgress=Upload is in progress... This can take several
minutes for large files~
-view_bundle_createWizard_uploadStepName=Provide a Bundle Distribution~
-view_bundle_createWizard_noAdditionalFilesNeeded=No additional files need to be uploaded
for this bundle~
-view_bundle_createWizard_failedToUploadFile=Failed to upload bundle file~
-view_bundle_createWizard_failedToUploadDistroFile=Failed to upload bundle distribution
file~
-view_bundle_createWizard_bundleDistro=Bundle Distribution~
-view_bundle_createWizard_youMustChooseOne=You must choose one option in order to create a
bundle!
-view_bundle_createWizard_urlOption=URL~
-view_bundle_createWizard_uploadOption=Upload~
-view_bundle_createWizard_recipeOption=Recipe~
-view_bundle_createWizard_provideBundleDistro=Provide a Bundle Distribution
-view_bundle_createWizard_clickToUploadRecipe=Click to upload a recipe file~
-view_bundle_createWizard_createFailure=Failed to create the bundle~
-view_bundle_createWizard_createSuccessful=You have successfully created a bundle named
[{0}] with a version of [{1}]~
-
-view_bundle_deployWizard_deploying=Deploying...~
-view_bundle_deployWizard_deployStep=Deploy Bundle to Destination Platforms~
-view_bundle_deployWizard_deploymentCreated=Created Deployment...~
-view_bundle_deployWizard_deploymentCreatedDetail=Created deployment [{0}] description
[{1}]~
-view_bundle_deployWizard_deploymentCreatedDetail_concise=You have created the deployment
[{0}]
-view_bundle_deployWizard_destinationCreatedDetail=Created destination [{0}] description
[{1}]~
-view_bundle_deployWizard_destinationCreatedDetail_concise=You have created the
destination [{0}]
-view_bundle_deployWizard_deploymentScheduled=Bundle Deployment Scheduled!~
-view_bundle_deployWizard_deploymentScheduledDetail=Scheduled bundle deployment [{0}]
destination group [{1}]~
-view_bundle_deployWizard_deploymentScheduledDetail_concise=You have scheduled the bundle
deployment
-view_bundle_deployWizard_error_1=Failed to delete new deployment on Cancel:
-view_bundle_deployWizard_error_2=Failed to delete new destination on Cancel:
-view_bundle_deployWizard_error_3=Failed to Schedule Deployment!~
-view_bundle_deployWizard_error_4=Failed to schedule deployment: {0}~
-view_bundle_deployWizard_error_5=Failed to Create Deployment!~
-view_bundle_deployWizard_error_6=Failed to create deployment: {0}~
-view_bundle_deployWizard_error_7=Failed to get deployment name.~
-view_bundle_deployWizard_error_8=You must select a valid resource group from the drop
down~
-view_bundle_deployWizard_error_9=Failed to delete new destination in nextPage:~
-view_bundle_deployWizard_error_10=Failed to create destination, it may already exist.
(Note, for an existing destination deploy from the Destination view)~
-view_bundle_deployWizard_error_11=Failed to find defined deployments.~
-view_bundle_deployWizard_error_12=Failed to find defined bundles.~
-view_bundle_deployWizard_getConfigStep=Set Deployment Configuration~
-view_bundle_deployWizard_getConfigSkip=No configuration needed for this bundle version.~
-view_bundle_deployWizard_getDestStep=New Destination~
-view_bundle_deployWizard_getDest_name=Destination Name~
-view_bundle_deployWizard_getDest_desc=Destination Description~
-view_bundle_deployWizard_getDest_deployDir=Root Deployment Directory (on destination
platforms)~
-view_bundle_deployWizard_getInfoStep=Provide Deployment Information~
-view_bundle_deployWizard_getInfo_clean=Clean Deployment? (wipe deploy directory on
destination platform)~
-view_bundle_deployWizard_getInfo_deploymentDesc=Deployment Description~
-view_bundle_deployWizard_getInfo_deploymentName=Deployment Name~
-view_bundle_deployWizard_getOptionsStep=Deploy Options~
-view_bundle_deployWizard_getOptions_deployLater=Deploy Later~
-view_bundle_deployWizard_getOptions_deployNow=Deploy Now~
-view_bundle_deployWizard_getOptions_deployTime=Deployment Time~
-view_bundle_deployWizard_selectBundleStep=Select Deployment Bundle~
-view_bundle_deployWizard_selectBundle_single=Select only a single bundle for
deployment.~
-view_bundle_deployWizard_selectVersionStep=Select Deployment Bundle Version~
-view_bundle_deployWizard_selectVersion_latest=Latest Version [{0}]~
-view_bundle_deployWizard_selectVersion_live=Live Version [{0}]~
-view_bundle_deployWizard_selectVersion_select=Select Version from List:~
-view_bundle_deployWizard_title=Bundle Deployment Wizard~
-
-# =================== Measurement Views =====================
-
-view_measureTable_chartMetricValues=Chart Selected Metrics
-view_measureTable_getLive=Get Live Value
-view_measureTable_getLive_failure=Cannot get live values for those metrics. Make sure the
agent is running and the managed resource is up.
-view_measureTable_live_title=Live Data
-
-# =================== Components =====================
-
-view_configCompare_comparingConfigs=Comparando Configura\u00E7\u00F5es
-view_configCompare_configCompare=Compara\u00E7\u00E3o de Configura\u00E7\u00F5es
-
-view_configEdit_addItem=Adicionar Item \u00E0 Lista
-view_configEdit_confirm_1=Tem certeza de que deseja excluir as propriedades
selecionadas?
-view_configEdit_confirm_2=Tem certeza de que deseja excluir esta linha?
-view_configEdit_confirm_3=Tem certeza de que deseja excluir [{0}] selecionado [{1}]?
-view_configEdit_viewRow=View Row
-view_configEdit_editRow=Editar Linha de Configura\u00E7\u00E3o
-view_configEdit_enterPropName=Informe o nome da propriedade a ser adicionada.
-view_configEdit_error_1=Este recurso n\u00E3o suporta Configura\u00E7\u00E3o.
-view_configEdit_error_2=Este recurso n\u00E3o possui suporte \u00E0 propriedades de
conex\u00E3o.
-view_configEdit_error_3=N\u00E3o f\u00F3 poss\u00EDvel adicionar a propriedade com nome
[{0}]. Nome de propriedade j\u00E1 utilizada neste conjunto.
-view_configEdit_files=Arquivos
-view_configEdit_hideAll=Ocultar todos
-view_configEdit_jumpToSection=Ir direto para a Sele\u00E7\u00E3o
-view_configEdit_msg_1=Propriedade [{0}] adicionada ao conjunto.
-view_configEdit_msg_2=Propriedades removidas do conjunto.
-view_configEdit_msg_3=[{0} {1}] removido da lista.
-view_configEdit_msg_4=Item adicionado \u00E0 lista.
-view_configEdit_properties=Propriedades
-view_configEdit_tooltip_1=Remove os itens selecionados da lista.
-view_configEdit_tooltip_2=Adiciona um item \u00E0 lista.
-
-view_groupConfigEdit_member=Membro
-view_groupConfigEdit_noListProps=Lista de propriedades n\u00E3o suportada atualmente para
configura\u00E7\u00F5es em grupo.
-view_groupConfigEdit_tooltip_1=Valores dos membros diferem - clique no \u00EDcone para
edit\u00E1-los.
-view_groupConfigEdit_setAll=Atribuir todos os valores \u00E0\:
-view_groupConfigEdit_unset=Remover atribui\u00E7\u00E3o
-view_groupConfigEdit_valsDiff=valores dos membros diferem
-view_groupConfigEdit_valsDiffForProp=Valores dos membros para a Propriedade [{0}]
-
-view_leftNav_unknownPage=P\u00E1gina desconhecida [{0}] para a se\u00E7\u00E3o [{1}] -
URL inv\u00E1lida.
-
-view_measure_nan=--dados indispon\u00EDveis--
-
-# Measurement Range Selector
-view_measureRange_last=\u00DAltimo
-view_measureRange_start=Time Range - Start
-view_measureRange_simple=Simples...
-
-view_selector_assigned=Associado {0}
-view_selector_available=Dispon\u00EDvel {0}
-
-view_subTab_error_disabled=N\u00E3o \u00E9 poss\u00EDvel selecionar uma subTab
desabilidada [{0}].
-
-view_table_drawFail=Failed to draw Table [{0}].
-view_table_matchingRows=Matching Rows: {0} (selected: {1})
-view_table_totalRows=Total de Linhas\: {0} (selecionada\: {1})
-view_tableSection_backButton=Voltar \u00E0 Lista
-view_tableSection_error_noId=Table [{0}] record is missing 'id' attribute -
please report this bug.~
-view_tableSection_error_badId=Can not show detail for [{0}]. Illegal 'id': [{1}].
Please report this bug~
-
-view_tags_tags=Tags~
-view_tags_error_1=Failed to load Tags~
-view_tags_tooltip_1=Click to remove this Tag~
-view_tags_tooltip_2=Click to edit Tags~
-view_tags_tooltip_3=Enter a Tag in the format: (namespace:)(semantic=)tagname (e.g.
it:env=QA, or owner=John)
-
-# File Upload (various)
-view_upload_alreadyUploaded=File has already been uploaded~
-view_upload_bundleDistFile=Distribution File~
-view_upload_error_bundleDistFile=Error uploading Bundle Distribution File~
-view_upload_error_file=Error uploading file~
-view_upload_error_fileName=Error uploading file [{0}]~
-view_upload_error_fileName_2=Error uploading file [{0}], check for invalid file path.~
-view_upload_error_packageVersionFile=Error uploading Package Version File~
-view_upload_error_results=Error uploading file, unexpected results: [{0}]~
-view_upload_inProgress=Can not submit, upload is currently in progress~
-view_upload_prompt_1=[{0}] File to Upload~
-view_upload_prompt_2=File to Upload~
-view_upload_tooltip_1a=Select a file to upload, then click Upload or Next
-view_upload_tooltip_1b=Select a file to upload, then click Next
-view_upload_tooltip_2=File upload had previously failed~
-view_upload_success=File successfully uploaded~
-view_upload_upload=Upload~
-view_upload_uploadFile=UploadFile~
-
-# Group Create Wizard
-view_groupCreateWizard_membersStepName=Select Members~
-view_groupCreateWizard_createStepName=Group Settings~
-view_groupCreateWizard_createStep_recursive=Recursive~
-view_groupCreateWizard_title=Create Group~
-view_groupCreateWizard_windowTitle=Create Group~
-view_groupCreateWizard_createFailure=Failed to create the resource group~
-view_groupCreateWizard_createSuccessful_concise=You have created a new resource group.
[<a href="{0}">View Group</a>]~
-view_groupCreateWizard_createSuccessful_full=You have created a new [{0}] resource group
with the name [{1}] that contains [{2}] member resources~
-
-# Resource Type / Plugin View/Datasources
-view_type_resourceTypes=Resource Types~
-view_type_parentId=Parent ID~
-view_type_typeTreeLoadFailure=Failed to load resource type tree data~
-
-# Tabs
-view_tabs_invalidSubTab=Invalid subtab: {0}
-view_tabs_invalidTab=Invalid tab: {0}
-
-# Group Tree
-group_tree_partialClusterTooltip={0} out of {1} group members have a
''{2}'' resource
-
-#=================== Dashboard =====================
-view_dashboard_favorites_error1=Failed to load favorite Resources.~
-view_dashboardManager_error=Failed to save dashboard to server~
-view_dashboardManager_saved=Saved dashboard {0} to server~
-view_dashboardManager_success=Saved dashboard~
-view_dashboardManager_deleteFail=Failed to delete dashboard.
-view_dashboardManager_deleted=Successfully deleted dashboard {0}~
-view_dashboards_title=Dashboard~
-view_dashboards_confirm1=Are you sure you want to delete~
-view_dashboards_portlets_refresh_fail1=Failed to update interval for portlets that
auto-refresh
-view_dashboards_portlets_refresh_fail2=Failed to disable reload for portlets that
auto-refresh
-view_dashboards_portlets_refresh_none=No Refresh
-view_dashboards_portlets_refresh_one_min=1 minute
-view_dashboards_portlets_refresh_multiple_min={0} minutes
-view_dashboards_portlets_refresh_success1=Updated interval for portlets that
auto-refresh
-view_dashboards_portlets_refresh_success2=Stopping reload for portlets that auto-refresh
-view_dashboardsManager_error1=Failed to add new dashboard~
-view_dashboardsManager_message_title_details=<h1>Welcome to
RHQ</h1>\n<p>The RHQ project is an abstraction and plug-in based systems
management suite that provides extensible and integrated systems management for multiple
products and platforms across a set of core features. The project is designed with layered
modules that provide a flexible architecture for deployment. It delivers a core user
interface that delivers audited and historical management across an entire enterprise. A
Server/Agent architecture provides remote management and plugins implement all specific
support for managed products.</p>\n <p>This default dashboard can be edited by
clicking the (edit mode) button above.</p>~
-
-view_portlet_factory_invalidPortlet=This is an obsolete portlet that is no longer valid.
Please delete it.
-
-view_portlet_defaultName_autodiscovery=Discovery Queue
-view_portlet_defaultName_favoriteResources=Favorite Resources
-view_portlet_defaultName_resourceMetric=Resource Metric Graph
-view_portlet_defaultName_groupMetric=Resource Group Metric Graph
-view_portlet_defaultName_inventorySummary=Inventory Summary
-view_portlet_defaultName_mashup=Mashup
-view_portlet_defaultName_message=Message
-view_portlet_defaultName_operations=Recent Operations
-view_portlet_defaultName_platformSummary=Platform Utilization
-view_portlet_defaultName_problemResources=Alerted or Unavailable Resources
-view_portlet_defaultName_recentAlerts=Recent Alerts
-view_portlet_defaultName_recentlyAddedResources=Recently Added Resources
-view_portlet_defaultName_tagCloud=Tag Count
-
-view_portlet_defaultName_group_alerts=Group: Alerts
-view_portlet_defaultName_group_bundles=Group: Bundle Deployments
-view_portlet_defaultName_group_config_updates=Group: Configuration Updates
-view_portlet_defaultName_group_events=Group: Event Counts
-view_portlet_defaultName_group_metrics=Group: Metrics
-view_portlet_defaultName_group_oobs=Group: OOB Conditions
-view_portlet_defaultName_group_operations=Group: Operations
-view_portlet_defaultName_group_pkg_hisory=Group: Package History
-view_portlet_defaultName_resource_alerts=Resource: Alerts
-view_portlet_defaultName_resource_bundles=Resource: Bundle Deployments
-view_portlet_defaultName_resource_config_updates=Resource: Configuration Updates
-view_portlet_defaultName_resource_events=Resource: Event Counts
-view_portlet_defaultName_resource_metrics=Resource: Measurements
-view_portlet_defaultName_resource_oobs=Resource: OOB Metrics
-view_portlet_defaultName_resource_operations=Resource: Operations
-view_portlet_defaultName_resource_pkg_hisory=Resource: Package History
-
-view_portlet_help_autodiscovery=This portlet allows import or ignore of newly discovered
resources. Imported resources are added to inventory for monitoring and management.
Ignored resources are not imported and are hidden from view unless explicitly unignored.
-view_portlet_help_bundle_deps=This portlet shows relevant bundle deployments based on
display criteria configured.
-view_portlet_help_config_updates=This portlet displays recent configuration changes
consistent with configuration settings.
-view_portlet_help_eventcounts=This portlet displays Event counts consistent with display
criteria configured.
-view_portlet_help_favoriteResources=This portlet displays the current user''s
favorite resources.
-view_portlet_help_graph=This portlet displays the resource metric graph.
-view_portlet_help_inventorySummary=This portlet displays a short summary of the current
user''s viewable inventory and metric collection rate.
-view_portlet_help_mashup=This portlet displays the returned content of a remote HTTP
request (via an iframe).
-view_portlet_help_metrics=This portlet graphs relevant recent metric data based on
display criteria configured.
-view_portlet_help_message=This portlet displays a static HTML message. The
<i>message</i> property must be configured.
-view_portlet_help_oobs=This portlet displays OOB(Out of Bound) metric conditions.
-view_portlet_help_operations=This portlet displays the most recently executed operations
for the current user''s inventory.
-view_portlet_help_scheduledOperations=This portlet displays the next scheduled operations
for the current user''s inventory.
-view_portlet_help_operations_criteria=This portlet displays Operations consistent with
display criteria configured.
-view_portlet_help_pkg_history=This portlet shows relevant package history based on
display criteria configured.
-view_portlet_help_platformSummary=This portlet displays utilization data (such as current
CPU and memory usage) for platform resources that are accessible by the current user.
-view_portlet_help_problemResources=This portlet displays the current user''s
alerted or unavailable resources.
-view_portlet_help_recentAlerts=This portlet displays alerts recently fired on the current
user''s viewable inventory.
-view_portlet_help_recentlyAdded=This portlet displays resources that have recently been
imported into inventory.
-view_portlet_help_tagCloud=This portlet displays the relative tag counts for the current
user''s inventory.
-view_portlet_help_none=There is no help available for this portlet.
-
-view_portlet_configure_needed=Click the Settings button to configure this portlet.
-view_portlet_configure_notNeeded=Configuration is not necessary for this portlet.
-view_portlet_configure_definitionTitle=Portlet Configuration
-view_portlet_configure_definitionDesc=The configuration settings for the portlet.
-
-view_portlet_autodiscovery_setting_platforms=discovered platforms
-
-view_portlet_graph_configure_resource_graph=The resource to graph~
-view_portlet_graph_configure_metricDefinition_graph=The metric definition id to graph~
-
-view_portlet_inventory_error1=Failed to retrieve inventory summary~
-view_portlet_inventory_tooltip_expand=Click to show more details for this resource.
-view_portlet_inventory_tooltip_collapse=Click to hide details for this resource.
-
-view_portlet_message_title=Message~
-
-view_portlet_operations_config_completed_maximum=Maximum number of Completed operations
to display.~
-view_portlet_operations_config_completed_enable=Whether to enable completed operations
results grouping for dashboard.~
-view_portlet_operations_config_scheduled_enable=Whether to enable scheduled operations
results grouping for dashboard.~
-view_portlet_operations_config_scheduled_maximum=Maximum number of Scheduled operations
to display.~
-view_portlet_operations_config_completed=completed operations~
-view_portlet_operations_config_show_last=show Last~
-view_portlet_operations_config_show_next=show Next~
-view_portlet_operations_disabled=(Results currently disabled. Change settings to enable
results.~
-
-view_portlet_platform_platform_error_1=Failed to load platform metrics~
-view_portlet_platform_type_error_1=Could not load type data~
-
-view_portlet_problemResources_config_display_maximum=Maximum number of Problem resources
to display.
-view_portlet_problemResources_config_display_range=Show problem resources going back this
many hours.
-view_portlet_problemResources_config_display_range2=From {0} to {1}
-view_portlet_problemResources_maxDisplaySetting=maximum resources.
-
-view_portlet_recentAlerts_config_members=Select Members~
-view_portlet_recentAlerts_config_priority_label=priority Alerts,~
-view_portlet_recentAlerts_config_when=within the past~
-view_portlet_recentAlerts_fail_msg=Failed to load resources assigned for alert
filtering.
-
-view_portlet_recentlyAdded_setting_addedPlatforms=recently added platforms
-view_portlet_recentlyAdded_error1=Failed to load recently added resources~
-view_portlet_results_empty=No results found using specified criteria.
-
-# =================== Inventory =====================
-view_inventory_adq=Discovery Queue~
-view_inventory_sectionHelp=From this section, newly discovered Resources, inventoried
Resources, and Groups can be viewed and managed.~
-view_inventory_problemGroups=Problem Groups~
-view_inventory_collectionInterval=Collection Interval~
-view_inventory_mixed=mixed~
-view_inventory_unavailableServers=Unavailable Servers
-view_inventory_groups=Groups~
-view_inventory_allGroups=All Groups~
-view_inventory_allResources=All Resources~
-view_inventory_platforms=Platforms~
-view_inventory_servers=Servers~
-view_inventory_services=Services~
-view_inventory_summary_agent_error1=Failed to locate agent managing resource id~
-view_inventory_summary_agent_error2=Failed to ping agent managing resource id~
-view_inventory_summary_agent_error3=You do not have permission to view details for this
Agent.
-view_inventory_summary_agent_fullEnpoint=Full Endpoint~
-view_inventory_summary_agent_fullEnpoint_err1=!No remote endpoint associated with this
resource!~
-view_inventory_summary_agent_last_title=Last Received Availability Report~
-view_inventory_summary_agent_status_title=Agent Communications Status~
-view_inventory_summary_agent_title=Agent Managing this Resource~
-view_inventory_dynagroupDefs=Dynagroup Definitions~
-view_metric_traits=Traits~
-view_metric_viewTraitHistory=Value History for Trait [{0}]~
-view_inventory_eventHistory_groupEventHistory=Group Event History~
-view_inventory_eventHistory_resourceEventHistory=Resource Event History~
-view_inventory_eventHistory_sourceFilter=Source Filter~
-view_inventory_eventHistory_detailsFilter=Details Filter~
-view_inventory_eventHistory_severityFilter=Severity Filter~
-view_inventory_eventHistory_timestamp=Timestamp~
-view_inventory_eventHistory_severity=Severity~
-view_inventory_eventHistory_details=Details~
-view_inventory_eventHistory_sourceLocation=Source Location~
-view_inventory_eventHistory_deleteSuccessful=You have successfully deleted [{0}] events
for [{1}]~
-view_inventory_eventHistory_deleteFailed=Failed to deleted selected events for [{0}]~
-view_inventory_eventHistory_purgeSuccessful=You have successfully purged [{0}] events for
[{1}]~
-view_inventory_eventHistory_purgeFailed=Failed to purge events for [{0}]~
-view_inventory_eventDetails_loadFailed=An error occurred loading the event details~
-view_inventory_groups_resourceGroups=Resource Groups~
-view_inventory_groups_children=Children~
-view_inventory_groups_descendants=Descendants~
-view_inventory_groups_deleteSuccessful=You have successfully deleted the selected
resource groups~
-view_inventory_groups_deleteFailed=Failed to delete the selected resource groups~
-view_inventory_groups_loadFailed=Failed to load group composite data~
-view_inventory_resource_loadFailed=Resource with id [{0}] does not exist or is not
accessible~
-view_inventory_resources_deleteConfirm=Are you sure you want to delete the selected
resources?~
-view_inventory_resources_deleteSuccessful=You have successfully deleted the selected
resources~
-view_inventory_resources_deleteFailed=Failed to delete the selected resources~
-view_inventory_resources_uninventoryConfirm=Are you sure you want to uninventory the
selected resources? Note that if a selected resource still exists, then it will get
rediscovered during its agent''s next discovery scan.
-view_inventory_resources_uninventorySuccessful=You have successfully uninventoried the
selected resources
-view_inventory_resources_uninventoryFailed=Failed to uninventory the selected resources
-view_inventory_resources_loadFailed=Failed to load resource composite data~
-view_inventory_resources_title=Member Resources~
-view_inventory_resources_title_children=Child Resources~
-view_inventory_resources_title_members=Member Resources~
-view_resource_inventory_activity_changed_by=Changed by
-view_resource_inventory_activity_criteria_no_recent_events=No event counts based off
display criteria.
-view_resource_inventory_activity_no_recent_alerts=No recent alerts
-view_resource_inventory_activity_no_recent_bundle_deploy=No recent bundle deployments
-view_resource_inventory_activity_no_recent_config_history=No configuration change
history
-view_resource_inventory_activity_no_recent_events=No events in the last 24 hours
-view_resource_inventory_activity_no_recent_metrics=This resource has no recent metrics
-view_resource_inventory_activity_no_recent_oob=No OOB conditions found
-view_resource_inventory_activity_no_recent_operations=No recent operation history
-view_resource_inventory_activity_no_recent_pkg_history=No recent package history
-view_resource_inventory_childhistory_createdChild=Created Child
-view_resource_inventory_childhistory_deletedChild=Deleted Child
-view_resource_inventory_childhistory_status_invalidArtifact=Invalid Artifact
-view_resource_inventory_childhistory_status_invalidConfig=Invalid Configuration
-view_resource_inventory_childhistory_filterTitle=Past N Days
-view_resource_monitor_availability_loadFailed=Failed to load availability history~
-view_resource_monitor_graphs_noneAvailable=No graphs available~
-view_resource_monitor_graphs_loadFailed=Failed to load graph data~
-view_resource_monitor_graphs_lookupFailed=Failed to find resource for graph~
-view_resource_monitor_graph_instructions=Point your mouse to a data point on the chart~
-view_resource_monitor_graph_live_tooltip=Click for a live graph of current values~
-view_resource_monitor_table_min=Minimum
-view_resource_monitor_table_max=Maximum
-view_resource_monitor_table_avg=Average
-view_resource_monitor_table_last=Last
-view_resource_monitor_table_alerts=Alerts
-view_resource_monitor_detailed_graph_label=Detailed Graph~
-view_resource_monitor_calltime_title=Call Time Data~
-view_resource_monitor_calltime_destination=Call Destination~
-view_resource_monitor_calltime_count=Count~
-view_resource_monitor_calltime_minimum=Minimum~
-view_resource_monitor_calltime_average=Average~
-view_resource_monitor_calltime_maximum=Maximum~
-view_resource_monitor_calltime_total=Total~
-view_resource_monitor_calltime_loadFailed=Could not load call time data~
-view_resource_monitor_calltime_lookupFailed=Could not load resource for call time~
-view_resource_monitor_calltime_editFailed=Call time data can not be edited~
-view_resource_monitor_schedules_title=Resource Metric Collection Schedules~
-view_resource_title_tagUpdateFailed=Failed to update resource tags~
-view_resource_title_component_errors_tooltip=Shows managed component errors. Click for
details~
-view_tree_common_loadFailed_generic=Failed to load data for tree~
-view_tree_common_loadFailed_root=Failed to load root for tree~
-view_tree_common_loadFailed_descendants=Failed to load descendants for tree~
-view_tree_common_loadFailed_children=Failed to load children for node~
-view_tree_common_createFailed_autoCluster=Failed to create or update autocluster backing
group
-view_tree_common_loadFailed_group=Failed to load group with id [{0}]
-view_tree_common_loadFailed_groupTree=Failed to load group tree
-view_tree_common_loadFailed_selection=Failed to select this node~
-view_tree_common_loadFailed_node=Failed to load data for this node~
-view_tree_common_loadFailed_create=Failed to create view for this node~
-view_tree_common_loadFailed_update=Failed to update view for this node~
-view_tree_common_contextMenu_loadFail_children=Failed to load platform manual add
children
-view_tree_common_contextMenu_loadFail_dashboards=Failed to load user dashboards
-view_tree_common_contextMenu_loadFail_group=Failed to load group for context menu
-view_tree_common_contextMenu_type_name_label=Type: {0}
-view_tree_common_contextMenu_resourceConfiguration=Resource Configuration~
-view_tree_common_contextMenu_editPluginConfiguration=Edit [{0}] Plugin Configuration~
-view_tree_common_contextMenu_editResourceConfiguration=Edit [{0}] Resource
Configuration~
-view_tree_common_contextMenu_operations=Operations~
-view_tree_common_contextMenu_operations_loadFailed=Failure to start wizard for running
operations~
-view_tree_common_contextMenu_measurements=Measurements~
-view_tree_common_contextMenu_addChartToDashboard=Add chart to dashboard [{0}]~
-view_tree_common_contextMenu_resourceGraph=Resource Metric Graph
-view_tree_common_contextMenu_groupGraph=Group Metric Graph
-view_tree_common_contextMenu_saveChartToDashboardSuccessful=You have saved dashboard
[{0}]~
-view_tree_common_contextMenu_saveChartToDashboardFailure=Failed to save the dashboard~
-view_tree_common_contextMenu_loadFailed_dashboard=Failed to load user dashboards
-view_tree_common_contextMenu_loadFailed_manualAddChildren=Failed to load platform manual
add children~
-view_tree_group_error_updateAutoCluster=Failed to create or update autocluster backing
group. key: [{0}]
-view_tabs_common_activity=Activity
-view_tabs_common_agent=Agent
-view_tabs_common_summary=Summary~
-view_tabs_common_overview=Overview~
-view_tabs_common_dashboard=Dashboard~
-view_tabs_common_timeline=Timeline~
-view_tabs_common_monitoring=Monitoring~
-view_tabs_common_graphs=Graphs~
-view_tabs_common_tables=Tables~
-view_tabs_common_traits=Traits~
-view_tabs_common_availability=Availability~
-view_tabs_common_schedules=Schedules~
-view_tabs_common_calltime=Calltime~
-view_tabs_common_inventory=Inventory~
-view_tabs_common_groups=Groups~
-view_tabs_common_members=Members~
-view_tabs_common_group_members=Group Members
-view_tabs_common_group_membership=Group Membership~
-view_tabs_common_child_resources=Child Resources~
-view_tabs_common_child_history=Child History~
-view_tabs_common_connectionSettings=Connection Settings~
-view_tabs_common_connectionSettingsHistory=Connection Settings History~
-view_tabs_common_operations=Operations~
-view_tabs_common_schedule=Schedule
-view_tabs_common_history=History~
-view_tabs_common_alerts=Alerts~
-view_tabs_common_definitions=Definitions~
-view_tabs_common_current=Current~
-view_tabs_common_events=Events~
-view_tabs_common_configuration=Configuration~
-view_tabs_common_content=Content~
-view_tabs_common_deployed=Deployed~
-view_tabs_common_new=New~
-view_tabs_common_subscriptions=Subscriptions~
-view_titleBar_common_updateTagsSuccessful=The tags for [{0}] have been updated~
-view_titleBar_common_updateTagsFailure=Failed to update the tags for [{0}]~
-view_titleBar_common_loadTagsFailure=Failed to load the tags for [{0}]~
-view_titleBar_common_clickToRemoveFav=Click to remove this as a favorite~
-view_titleBar_common_clickToAddFav=Click to add this as a favorite~
-view_titleBar_common_removedFav=You have removed [{0}] as one of your favorites~
-view_titleBar_common_addedFav=You have added [{0}] as a favorite~
-view_titleBar_common_removedFavFailure=Failed to remove [{0}] as one of your favorites~
-view_titleBar_common_addedFavFailure=Failed to add [{0}] as a favorite~
-view_titleBar_group_failInfo=Failed to get general info on group [{0}] with ID [{1}]
-view_titleBar_group_summary_collapsedTooltip=Click to show more details for this group
-view_titleBar_group_summary_expandedTooltip=Click to hide details for this group
-view_dynagroup_expressionSet=Expression Set~
-view_dynagroup_recalculationInterval=Recalculation Interval~
-view_dynagroup_lastCalculationTime=Last Calculation Time~
-view_dynagroup_nextCalculationTime=Next Calculation Time~
-view_dynagroup_definitionCreated=You have successfully created a group definition named
[{0}]~
-view_dynagroup_definitionLoadFailure=Failed to load group definitions~
-view_dynagroup_definitionAlreadyExists=A group definition already exists with this name~
-view_dynagroup_saveSuccessful=You have successfully saved the group definition named
[{0}]~
-view_dynagroup_saveFailure=Failed to save the group definition named [{0}]~
-view_dynagroup_singleSaveFailure=An error occurred - there should have been one created,
but instead there were [{0}] created~
-view_dynagroup_saveAndRecalculate=Save & Recalculate~
-view_dynagroup_recalculate=Recalculate~
-view_dynagroup_recalcSuccessful=You have successfully recalculated this group
definition~
-view_dynagroup_recalcFailure=Failed to recalculated this group definition~
-view_dynagroup_recalcSuccessfulSelection=You have successfully recalculated [{0}] group
definitions~
-view_dynagroup_recalcFailureSelection=Failed to recalculated the selected group
definitions~
-view_dynagroup_deleteSuccessfulSelection=You have successfully deleted [{0}] group
definitions~
-view_dynagroup_deleteFailureSelection=Failed to delete the selected group definitions~
-view_dynagroup_children=DynaGroup Children~
-view_dynagroup_newGroupDefinition=New Group Definition~
-view_dynagroup_editing=Editing [{0}]~
-view_dynagroup_expression=Expression~
-view_dynagroup_recursive=Recursive~
-view_dynagroup_loadDefinitionFailure=Failed to load group definition [{0}]~
-view_dynagroup_loadDefinitionMissing=There is no group definition with the ID of [{0}]~
-view_dynagroup_permDenied=You do not have permission to view group definitions~
-view_dynagroup_definitions=DynaGroup Definitions~
-view_dynagroup_template_customExpression=Custom Expression...
-view_dynagroup_template_jbossas4_clusters=JBossAS 4 - Clusters
-view_dynagroup_template_jbossas5_clusters=JBossAS 5/6 - Clusters
-view_dynagroup_template_jbossas4_earClusters=JBossAS 4 - Clustered EARs
-view_dynagroup_template_jbossas4_uniqueVersions=JBossAS 4 - Unique versions
-view_dynagroup_template_platforms=Platform resources in inventory
-view_dynagroup_template_uniqueResourceTypes=Unique resource types in inventory
-view_dynagroup_template_jbossas4_hostingApp=JBossAS 4 - All hosting any version of
"my" app
-view_dynagroup_template_jbossas4_nonsecured=JBossAS 4 - All non-secured
-view_dynagroup_template_downedResources=All resources currently down
-view_dynagroup_mixed=Mixed
-view_dynagroup_compatible=Compatible
-view_dynagroup_expressionBuilderIconTooltip=Expression Builder...
-view_dynagroup_exprBuilder_title=Expression Builder
-view_dynagroup_exprBuilder_expression=Expression
-view_dynagroup_exprBuilder_expression_tooltip=This is the full expression that is
represented by the selections in the form below. This text will be added to your group
definition expression text when you click the "Add Expression" button.
-view_dynagroup_exprBuilder_addExpression=Add Expression
-view_dynagroup_exprBuilder_value_tooltip=The string value for the expression to query
-view_dynagroup_exprBuilder_comparisonType=Comparison Type
-view_dynagroup_exprBuilder_comparisonType_tooltip=Comparison Type
-view_dynagroup_exprBuilder_unset=Unset
-view_dynagroup_exprBuilder_unset_tooltip=Unset will find all of the values that have a
null value in the database. This is not possible using the "=" operator because
of how databases store and query data.
-view_dynagroup_exprBuilder_propertyName=Property Name
-view_dynagroup_exprBuilder_propertyName_tooltip=The name of the property to query. This
is defined by the expression type as well as the resource type.
-view_dynagroup_exprBuilder_resourceType=Resource Type
-view_dynagroup_exprBuilder_resourceType_tooltip=The type of resource
-view_dynagroup_exprBuilder_definingPlugin=Defining Plugin
-view_dynagroup_exprBuilder_definingPlugin_tooltip=The plugin to search
-view_dynagroup_exprBuilder_expressionType=Expression Type
-view_dynagroup_exprBuilder_expressionType_tooltip=The type of property this expression
switches on:<br/> \
-<b>Resource</b>: A resource property such as its name or version<br/>
\
-<b>Resource Type</b>: Search for resources of a specific type<br/> \
-<b>Resource Category</b>: Search for resources by category: platform, server,
service<br/> \
-<b>Trait</b>: Resources that have selected values for a monitored
trait<br/> \
-<b>Plugin Configuration</b>: Search by the plugin component configuration
setting of the component<br/> \
-<b>Resource Configuration</b>: Search by the configuration setting of the
managed resource
-view_dynagroup_exprBuilder_resource=Resource
-view_dynagroup_exprBuilder_resource_tooltip=Choose the level of the resource you wish to
select. For example, select "parent" will find resources whose parent resource
matches the rest of the expression.
-view_dynagroup_exprBuilder_groupBy=Group by
-view_dynagroup_exprBuilder_groupBy_tooltip=GroupBy will cause the system to pivot on the
values from the entered expressions creating a separate group for each value. For example,
GroupBy on the cluster name to create a group for each cluster with all cluster members in
it.
-view_dynagroup_exprBuilder_resource_resource=Resource
-view_dynagroup_exprBuilder_resource_child=Child
-view_dynagroup_exprBuilder_resource_parent=Parent
-view_dynagroup_exprBuilder_resource_grandparent=Grandparent
-view_dynagroup_exprBuilder_resource_greatGrandparent=GreatGrandparent
-view_dynagroup_exprBuilder_resource_greatGreatGrandparent=GreatGreatGrandparent
-view_dynagroup_exprBuilder_comparisonType_equals=equals
-view_dynagroup_exprBuilder_comparisonType_startsWith=starts with
-view_dynagroup_exprBuilder_comparisonType_endsWith=ends with
-view_dynagroup_exprBuilder_comparisonType_contains=contains
-view_dynagroup_exprBuilder_expressionType_resource=Resource
-view_dynagroup_exprBuilder_expressionType_resourceType=Resource Type
-view_dynagroup_exprBuilder_expressionType_resourceCategory=Resource Category
-view_dynagroup_exprBuilder_expressionType_trait=Trait
-view_dynagroup_exprBuilder_expressionType_pluginConfig=Plugin Configuration
-view_dynagroup_exprBuilder_expressionType_resourceConfig=Resource Configuration
-view_dynagroup_exprBuilder_pluginLoadFailure=Cannot get the list of plugins
-view_dynagroup_exprBuilder_resTypeLoadFailure=Cannot get list of resource types for
plugin [{0}]
-view_dynagroup_exprBuilder_propLoadFailure=Cannot get list of properties
-view_dynagroup_exprBuilder_noResourceTypes=--No resource types--
-view_dynagroup_exprBuilder_noProperties=--No properties--
-view_dynagroup_exprBuilder_noPlugins=--No plugins--
-
-view_group_detail_failLoad=Failed to load group for group with ID [{0}]
-view_group_detail_failLoadComp=Failed to load group composite for group with ID [{0}]
-view_group_detail_recursiveChange=You successfully changed the recursive setting for
group [{0}]
-view_group_detail_failRecursiveChange=Failed to update the recursive setting for group
[{0}]
-view_group_inventory_activity_no_recent_metrics=This group has no recent metrics
-view_group_membership_failFetch=Failed to fetch Resource Group
-view_group_membership_saveFailure=Failed to update membership of group [{0}]~
-view_group_membership_saveSuccessful=You have updated the membership of group [{0}]~
-view_group_resConfig_edit_saveTooltip=Update the configurations of all group members~
-view_group_resConfig_edit_loadFail=Failed to retrieve member Resource configurations for
[{0}]
-view_group_resConfig_edit_noperm=You do not have permission to edit this group
configuration~
-view_group_resConfig_edit_saveInitiated_concise=The group configuration updates have been
initiated~
-view_group_resConfig_edit_saveInitiated_full=The group configuration updates have been
initiated for the [{0}] compatible group named [{1}]~
-view_group_resConfig_edit_saveFailure=Failed to initiate group configuration update for
[{0}] compatible group named [{1}]~
-view_group_resConfig_edit_valid=All configuration properties have valid values, so the
configuration can now be saved~
-view_group_resConfig_edit_invalid=The following configuration properties have invalid
values and must be corrected before the configuration can be saved: [{0}]~
-
-view_group_resConfig_view_noperm=You do not have permissions to see the resource
configuration settings
-view_group_resConfig_view_groupProperties=Group Properties
-view_group_resConfig_table_title=Group Resource Configuration History
-view_group_resConfig_table_statusDetails=Status Details
-view_group_resConfig_table_viewSettings=View Settings
-view_group_resConfig_table_viewMemberHistory=View Member History
-view_group_resConfig_table_msg1=View Member History for status of each individual
resource
-view_group_resConfig_table_failFetch=Failed to get group resource config history
-view_group_resConfig_table_deleteSuccessful=You have deleted [{0}] history items
-view_group_resConfig_table_deleteFailure=Failed to delete group resource config history
-view_group_resConfig_table_statusSuccess=This group configuration update was successful
-view_group_resConfig_table_statusInprogress=This group configuration update is still in
progress
-view_group_resConfig_table_statusNochange=No changes were made to this group
configuration
-view_group_resConfig_table_statusFailure=This group configuration update failed
-view_group_resConfig_table_clickStatusIcon=Click the status icon for full details
-view_group_resConfig_members_title=Group Resource Configuration Member Histories
-view_group_resConfig_members_fetchFailure=Failed to get resource config update history
for members of group [{0}]
-view_group_resConfig_members_fetchFailureConfig=Failed to retrieve member resource
configuration settings for [{0}]
-view_group_resConfig_members_fetchFailureConfigInProgress=A group resource configuration
update is currently in progress. You must wait until the update is finished before you can
view the group settings.
-view_group_resConfig_members_statusDetails=Status Details
-view_group_resConfig_members_statusSuccess=This configuration update was successful
-view_group_resConfig_members_statusInprogress=This configuration update is still in
progress
-view_group_resConfig_members_statusNochange=No changes were made to this configuration
-view_group_resConfig_members_statusFailure=This configuration update failed for an
unknown reason
-
-view_group_pluginConfig_view_noperm=You do not have permissions to see the connection
settings~
-view_group_pluginConfig_view_groupProperties=Group Properties~
-view_group_pluginConfig_table_failFetch=Failed to get group plugin config history
-view_group_pluginConfig_table_title=Group Connection Settings History~
-view_group_pluginConfig_table_statusDetails=Status Details~
-view_group_pluginConfig_table_viewSettings=View Settings~
-view_group_pluginConfig_table_viewMemberHistory=View Member History~
-view_group_pluginConfig_table_deleteSuccessful=You have deleted [{0}] history items~
-view_group_pluginConfig_table_deleteFailure=Failed to delete group plugin config
history~
-view_group_pluginConfig_table_msg1=View Member History for status of each individual
resource~
-view_group_pluginConfig_table_statusSuccess=This group configuration update was
successful~
-view_group_pluginConfig_table_statusInprogress=This group configuration update is still
in progress~
-view_group_pluginConfig_table_statusNochange=No changes were made to this group
configuration~
-view_group_pluginConfig_table_statusFailure=This group configuration update failed~
-view_group_pluginConfig_table_clickStatusIcon=Click the status icon for full details~
-view_group_pluginConfig_members_title=Group Connection Settings Member Histories~
-view_group_pluginConfig_members_statusDetails=Status Details~
-view_group_pluginConfig_members_statusSuccess=This configuration update was successful~
-view_group_pluginConfig_members_statusInprogress=This configuration update is still in
progress~
-view_group_pluginConfig_members_statusNochange=No changes were made to this
configuration~
-view_group_pluginConfig_members_statusFailure=This configuration update failed for an
unknown reason~
-view_group_pluginConfig_members_fetchFailure=Failed to get plugin config update history
for members of group [{0}]~
-view_group_pluginConfig_members_fetchFailureConn=Failed to retrieve member connection
settings for [{0}]
-view_group_pluginConfig_members_fetchFailureConnInProgress=A group plugin configuration
update is currently in progress. You must wait until the update is finished before you can
view the group settings.
-view_group_pluginConfig_edit_currentGroupProperties=Current Group Properties~
-view_group_pluginConfig_edit_saveTooltip=Update the connection settings of all group
members~
-view_group_pluginConfig_edit_noperm=You do not have permission to edit this group
connection settings~
-view_group_pluginConfig_edit_saveInitiated_concise=The group connection setting updates
have been initiated~
-view_group_pluginConfig_edit_saveInitiated_full=The group connection setting updates have
been initiated for the [{0}] compatible group named [{1}]~
-view_group_pluginConfig_edit_saveFailure=Failed to initiate group connection setting
update for [{0}] compatible group named [{1}]~
-view_group_pluginConfig_edit_valid=All connection setting properties have valid values,
so the connection settings can now be saved~
-view_group_pluginConfig_edit_invalid=The following connection setting properties have
invalid values and must be corrected before the connection settings can be saved: [{0}]~
-view_group_meas_schedules_title=Group Metric Collection Schedules~
-view_group_summary_nameUpdateFailure=Failed to change the name of the resource group with
ID [{0}] - could not change from [{1}] to [{2}]~
-view_group_summary_nameUpdateSuccessful=You have changed the name of the resource group
with ID [{0}] from [{1}] to [{2}]~
-view_group_summary_memberType=Member Type~
-view_group_summary_memberCount=Member Count~
-view_group_summary_dynamic=Dynamic~
-view_group_summary_recursive=Recursive~
-view_group_summary_groupDefinition=Group Definition~
-view_group_summary_mixed=Mixed~
-view_group_summary_compatible=Compatible
-view_group_summary_descUpdateFailure=Failed to change the description of the resource
group with ID [{0}]~
-view_group_summary_descUpdateSuccessful=You have changed the description of this resource
group~
-view_group_summary_dynamicNote=Dynamic group names and descriptions are managed, and
therefore are not editable~
-
-# Connection Settings Details
-#------------------------------------------
-view_connectionSettingsDetails_noPermission=You do not have permission to edit this
Resource''s connection settings.~
-view_connectionSettingsDetails_error_updateFailure=Failed to update connection
settings.~
-view_connectionSettingsDetails_messageConcise_updateSuccess=Connection settings
updated.~
-view_connectionSettingsDetails_messageDetailed_updateSuccess=Connection settings updated
for Resource [{0}].~
-view_connectionSettingsDetails_allPropertiesValid=All connection settings have valid
values, so the settings can now be saved.~
-view_connectionSettingsDetails_somePropertiesInvalid=The following connection settings
have invalid values: {0}. The values must be corrected before the settings can be saved.~
-
-# Resource Resource Groups
-#-----------------------------------------
-view_resourceResourceGroupList_error_fetchFailure=Failed to fetch Resource''s
groups.~
-view_resourceResourceGroupList_error_updateFailure=Failed to update assigned Resource
groups.~
-view_resourceResourceGroupList_message_updateSuccess=Group membership updated for [{0}].
-
-# Configuration Details
-#-------------------------------
-view_configurationDetails_noPermission=You do not have permission to edit this
Resource''s configuration.~
-view_configurationDetails_error_updateFailure=Failed to update configuration.~
-view_configurationDetails_messageConcise=Configuration updated - current version is
{0}.~
-view_configurationDetails_messageDetailed=Configuration updated to version {0} for
Resource [{1}].
-view_configurationDetails_allPropertiesValid=All configuration properties have valid
values, so the configuration can now be saved.~
-view_configurationDetails_somePropertiesInvalid=The following configuration properties
have invalid values: {0}. The values must be corrected before the configuration can be
saved.~
-view_configurationDetails_configNotUpdatedDueToNoChange=Configuration was not updated,
since the new configuration is equivalent to the current configuration.
-
-# Resource Configuration History List
-#-------------------------------
-view_configurationHistoryList_title=Configuration History~
-
-# Abstract Configuration History List
-#-------------------------------
-view_configurationHistoryList_rollback=Rollback
-view_configurationHistoryList_rollback_success=You successfully rolled back the
configuration to the selected past configuration.
-view_configurationHistoryList_rollback_failure=Failed to rollback the configuration. The
original configuration is still in effect.
-view_configurationHistoryList_delete_success=You successfully deleted the selected
configuration history items.
-view_configurationHistoryList_delete_failure=Failed to delete the configuration history
items.
-view_configurationHistoryList_cannotDeleteGroupItems=One or more selected configuration
history items are part of a group configuration update. \
-You must purge that parent group history item before you can delete its individual
resource history items.
-view_configurationHistoryList_cannotDeleteCurrent=One of the selected history items
represents the current configuration - you cannot delete it.
-view_configurationHistoryList_table_statusSuccess=This configuration update was
successful
-view_configurationHistoryList_table_statusInprogress=This configuration update is still
in progress
-view_configurationHistoryList_table_statusNochange=No changes were made to this
configuration
-view_configurationHistoryList_table_statusFailure=This configuration update failed
-view_configurationHistoryList_table_clickStatusIcon=Click the status icon for full
details
-
-# Configuration History Details
-#------------------------------------------
-view_configurationHistoryDetails_error_loadFailure=Unable to load configuration
history.~
-
-
-# Operation Schedule List
-#------------------------
-xxx =
-
-# Operation Schedule Details
-#---------------------------
-view_operationScheduleDetails_operationSchedule=Operation Schedule
-view_operationScheduleDetails_field_description=Description
-view_operationScheduleDetails_field_parameters=Parameters
-view_operationScheduleDetails_field_timeout=Timeout
-view_operationScheduleDetails_fieldHelp_timeout=a time duration - if specified, if the
duration elapses before a scheduled operation execution has completed, the RHQ Server will
timeout the operation and consider it to have failed; note, it is usually not possible to
abort the underlying managed resource operation if it was already initiated
-view_operationScheduleDetails_fieldHelp_description=an optional description of this
scheduled operation (e.g. nightly maintenance app server restart)
-view_operationScheduleDetails_fieldDefault_description=Select an operation to see its
description.
-view_operationScheduleDetails_fieldDefault_parameters=Select an operation to see its
parameters.
-view_operationScheduleDetails_noParameters=This operation does not take any parameters.
-view_operationScheduleDetails_enterParametersBelow=Enter parameters below...
-
-view_group_operationScheduleDetails_failedToLoadMembers=Failed to load group member
Resources.
-view_group_operationScheduleDetails_field_execute=Execute
-view_group_operationScheduleDetails_value_parallel=in parallel
-view_group_operationScheduleDetails_value_sequential=in the order specified below (drag
and drop member Resources to change order)
-view_group_operationScheduleDetails_field_haltOnFailure=Halt on Failure?
-view_group_operationScheduleDetails_memberResource=Member Resource
-
-
-# Operation History List
-#-----------------------
-view_operationHistoryList_title=Operation History~
-view_operationHistoryList_button_runOperation=Run Operation~
-view_operationHistoryList_button_forceDelete=Force Delete
-view_operationHistoryList_notYetStarted=not yet started
-
-# Operation History Details
-#--------------------------
-view_operationHistoryDetails_error_fetchFailure=Failure loading operation history.~
-view_operationHistoryDetails_operation=Operation
-view_operationHistoryDetails_dateSubmitted=Date Submitted
-view_operationHistoryDetails_dateCompleted=Date Completed
-view_operationHistoryDetails_requestor=Requestor
-view_operationHistoryDetails_status=Status
-view_operationHistoryDetails_parameters=Parameters
-view_operationHistoryDetails_results=Results
-view_operationHistoryDetails_noResults=This operation does not return any results.
-
-
-# Summary Overview
-#-----------------------------
-view_summaryOverview_header_detectedErrors=Detected Errors~
-view_summaryOverview_tooltip_detectedErrors=Click on the rows to see the error details.~
-view_summaryOverview_title_errorDetailsWindow=Error Details~
-
-# Summary Overview Form
-#-------------------------------------
-view_summaryOverviewForm_field_type=Type~
-view_summaryOverviewForm_field_name=Name~
-view_summaryOverviewForm_field_description=Description~
-view_summaryOverviewForm_field_location=Location~
-view_summaryOverviewForm_field_version=Version~
-view_summaryOverviewForm_error_traitsLoadFailure=Failed to load traits for {0}.~
-view_summaryOverviewForm_label_plugin=Plugin:
-view_summaryOverviewForm_label_type=Type:
-view_summaryOverviewForm_header_summary=Summary~
-view_summaryOverviewForm_error_nameChangeFailure=Failed to change name of Resource with
id {0} from [{1}] to [{2}].~
-view_summaryOverviewForm_message_nameChangeSuccess=Name of Resource with id {0} was
changed from [{1}] to [{2}].~
-view_summaryOverviewForm_error_descriptionChangeFailure=Failed to change description of
Resource with id {0} from [{1}] to [{2}].~
-view_summaryOverviewForm_message_descriptionChangeSuccess=Description of Resource with id
{0} was changed from [{1}] to [{2}].~
-view_summaryOverviewForm_error_locationChangeFailure=Failed to change location of
Resource with id {0} from [{1}] to [{2}].~
-view_summaryOverviewForm_message_locationChangeSuccess=Location of Resource with id {0}
was changed from [{1}] to [{2}].~
-
-# Summary Dashboard
-#-----------------------------
-view_summaryDashboard_resetConfirm=Reset to default summary dashboard (lose local
changes)?
-
-# Group Inventory>Members subtab
-#-----------------------------------------
-view_groupInventoryMembers_button_updateMembership=Update Membership...
-view_groupInventoryMembers_title_updateMembership=Update Membership
-
-
-#==================== Reports ======================
-
-view_reportsTop_title=Relat\u00F3rios~
-view_reportsTop_description=This section provides access to global reports.~
-view_reports_platforms=Utiliza\u00E7\u00E3o de Mem\u00F3ria e CPU~
-view_reports_subsystems=Subsistemas~
-view_reports_alertDefinitions=Defini\u00E7\u00E3o de Alertas~
-
-view_measurementOob_title=M\u00E9tricas Suspeitas~
-
-view_tagCloud_title=Nuvem de Tags~
-view_tagCloud_error_fetchFailure=Falha ao carregar etiquetas (tags).~
-view_tagCloud_error_tagUsedCount=Etiqueta (tag) usada {0} vezes.~
-view_tagCloud_deleteTag=Delete Tag
-view_tagCloud_deleteTagFailure=Failed to delete the tag [{0}]
-view_tagCloud_deleteTagSuccess=You successfully deleted the tag [{0}]
-
-view_reports_inventorySummary_failFetch=Failed to get inventory summary
-
-view_taggedResources_title=Recursos Etiquetados~
-
-view_reports_alertDefinitions_parentHover=Click to go to the parent alert definition
-view_reports_alertDefinitions_resTypeLoadError=Cannot get the template resource type -
unable to view the alert template.
-
-#==================== Help ======================
-
-view_helpTop_description=This section provides access to documentation, tutorials,
version, and other helpful information.
-view_help_section_product=Product
-view_help_section_product_about=About
-
-
-#===================== Test =======================
-view_testTop_title=Teste~
-view_testTop_description=Esta se\u00E7\u00E3o cont\u00E9m p\u00E1ginas para
realiza\u00E7\u00E3o de testes em v\u00E1rios componentes UI.~
-
-#=================== Top Level =====================
-
-# About Box
-#----------
-view_aboutBox_allRightsReserved=Todos os Direitos Reservados.~
-view_aboutBox_buildNumber=N\u00FAmero do Build\:~
-view_aboutBox_failedToLoad=Falha ao carregar informa\u00E7oes do produto.~
-view_aboutBox_homepage=P\u00E1gina Inicial~
-view_aboutBox_jbossByRedHat=JBoss by Red Hat~
-view_aboutBox_title=Sobre {0}~
-view_aboutBox_version=Vers\u00E3o\:~
-
-# CoreGUI
-#--------------
-view_core_error_1=Falha ao perquisar novos alertas~
-#view_core_loggedInAs = Logged in as {0}
-view_core_loggedOut=Logged out~
-view_core_recentAlerts=[{0}] alertas recentes~
-view_core_noRecentAlerts=There are no recent alerts to report
-view_core_uncaught=Exce\u00E7\u00E3o n\u00E3o capturada~
-
-# Login
-#--------------
-view_login_invalidEmail=Endere\u00E7o de e-mail inv\u00E1lido~
-view_login_login=Login~
-view_login_logout=Logout~
-view_login_noBackend=Fonte de Dados indispon\u00EDvel.~
-view_login_noLdap=Note: Optional retrieval of ldap details unsuccessful. Manual entry is
required.~
-view_login_noUser=Usu\u00E1rio ou senha inv\u00E1lidos.~
-view_login_prompt=Favor efetuar Login~
-view_login_registerLater=(Logout - Concluir registro mais tarde.)~
-view_login_registerLdapSuccess=Novo usu\u00E1rios do LDAP registrado com sucesso.~
-view_login_registerUser=Registrar Usu\u00E1rio~
-view_login_welcome=Bem Vindo~
-view_login_welcomeMsg=Seja Bem Vindo ao JBoss ON\! <br/><br/> Informe ou
altere os seguintes campos para completar o processo de registro.<br/> Clique em
"OK" para acessar o sistema.<br/><br/>~
-
-# Menu Bar
-#--------------
-view_menuBar_logout=Logout~
-
-# Search Bar, GUI
-#-----------------
-view_searchBar_resources=Recursos~
-view_searchBar_resourceGroups=Grupos de Recursos~
-# TODO: i18n pluralization
-view_searchBar_welcomeMessage=procurar por {0}s~
-view_searchBar_defaultPattern=definir nome para o padr\u00E3o~
-view_searchBar_error_selectSavedSearch=''Erro ao selecionar a
pesquisa''~
-view_searchBar_query=Query~
-
-view_searchGUI_loginStatus=Imposs\u00EDvel determinar o status do login, verifique o
status do servidor~
-
-# Message Center
-#--------------------------
-view_messageCenter_messageTitle=Centro de Mensagens~
-view_messageCenter_noRecentMessages=N\u00E3o existem Mensagens Recentes~
-view_messageCenter_maxMessages=Max Messages
-view_messageCenter_lastNMessages=Last {0} Messages
-view_messageCenter_clearAllMessages=Clear All Messages
-view_messageCenter_messageTime=Tempo~
-view_messageCenter_messageSeverity=Severidade~
-view_messageCenter_messageDetail=Detalhe~
-view_messageCenter_stackTraceFollows=--- STACK TRACE FOLLOWS ---
-view_messageCenter_messageBarShowDetails=Show Details
-common_title_favorites=Favoritos
-common_title_summary_counts=Sum\u00E1rio de Contagem
-dataSource_traits_group_field_memberResource=Recurso Membro
-
-
-# Problem Resources
-#------------------------------
-dataSource_problemResources_field_resource=Recurso
-dataSource_problemResources_field_location=Local
-
-# Configuration History
-#-------------------------------
-dataSource_configurationHistory_field_id=ID
-dataSource_configurationHistory_field_resource=Recurso
-dataSource_configurationHistory_field_createdTime=Criado
-dataSource_configurationHistory_field_status=Status
-dataSource_configurationHistory_field_subject=Assunto
-dataSource_resourceErrors_field_detail=Mensagem detalhada
-view_adminConfig_license=Licen\u00E7a
-view_adminRoles_roleExists=O perfil com nome [{0}] j\u00E1 existe.
-view_alerts_field_ack_status_empty=Ainda n\u00E3o verificado
-view_alerts_field_ack_status_filled={0} verificado em {1}
-view_alerts_field_resource=Recurso
-view_alert_details_breadcrumb=Detalhes
-TODO=PAREI AQUI\!\!\!
-view_alert_common_tab_notifications_all_emails=Todos os Emails
-view_alert_common_tab_notifications_bad_emails=Emails recusados
-view_measureRange_day=1 Dia
-view_measureRange_days={0} Dias
-view_measureRange_hour=1 Hora
-view_measureRange_hours={0} Horas
-view_measureRange_minutes={0} Minutos
-view_measureRange_range=Faixa
-view_tags_title=Tags:~
-view_upload_tooltip_1=Select a file to upload, then click Upload or Next~
-# // dup in common
-view_dashboardsManager_inventory_title=Inventory Summary~
-view_dashboardsManager_mashup_title=RHQ News~
-view_dashboardsManager_message_title=Welcome To RHQ~
-view_dashboardsManager_tagcloud_title=Tag Cloud~
-view_portlet_autodiscovery_config_platform_selection=Number of platforms to display~
-view_portlet_autodiscovery_help_msg=This portlet offers the ability to import newly
discovered resources into the inventory for monitoring and management or to ignore them
from further action.~
-view_portlet_autodiscovery_title=Discovery Queue~
-view_portlet_favoriteResources_msg=This portlet displays your favorite resources~
-view_portlet_favoriteResources_title=Favorite Resources~
-view_portlet_generic_help=No help available for this portlet~
-view_portlet_generic_unconfigured=No settings available for this portlet~
-view_portlet_graph_configure_title=Graph Config~
-view_portlet_graph_configure_title_desc=Configuration of the graph portlet~
-view_portlet_graph_help_msg=This Portlet supports the graphing of a resource metric.~
-view_portlet_graph_help_title=Graph Portlet~
-view_portlet_graph_help_unconfigured=This graph is unconfigured, click the settings
button to configure.~
-view_portlet_graph_title=Resource Graph~
-view_portlet_mashup_config_title=MashupPorlet Configuration~
-view_portlet_mashup_config_title_desc=The configuration settings for the mashup
portlet.~
-view_portlet_mashup_help=This portlet can include a web page via an HTTP request into an
iframe on the dashboard.~
-view_portlet_mashup_unconfigured=Page address not yet configured, click the settings
button to setup this portlet.~
-view_portlet_message_config_title=MessagePortlet Configuration~
-view_portlet_message_config_title_desc=The configuration settings for the message
portlet.~
-view_portlet_message_help=This portlet can display an HTML message on the dashboard.~
-view_portlet_message_unconfigured=Message not yet configured, click the settings button
to setup this portlet.~
-view_portlet_operations_config_title=OperationsPortlet Configuration~
-view_portlet_operations_config_title_desc=The configuration settings for the Operations
portlet.~
-view_portlet_operations_help_msg=This portlet displays both operations that have occurred
and are scheduled to occur.~
-view_portlet_platform_help_msg=This portlet displays information about platforms in
inventory.~
-view_portlet_platform_title=Platforms Summary~
-view_portlet_problem_resources_config_display_maximum=Maximum number of Problem resources
to display.~
-view_portlet_problem_resources_config_display_range=Show problem resources going back
this many hours.~
-view_portlet_problem_resources_config_display_range2=From {0} to {1}~
-view_portlet_problem_resources_config_problem_label=problem resources on dashboard.~
-view_portlet_problem_resources_config_title=ProblemResourcesPortlet Configuration~
-view_portlet_problem_resources_config_title_desc=The configuration settings for the
Problem resources portlet.~
-view_portlet_problem_resources_help=This portlet displays resources that have reported
alerts or Down availability.~
-view_portlet_problem_resources_title=Has Alerts or Currently Unavailable~
-view_portlet_recentAlerts_help_msg=Displays recent alerts fired on resources visible to
the current user login.~
-# // dup in common
-view_portlet_recentAlerts_title=Recent Alerts~
-view_portlet_recentlyAdded_approved_platforms=recently approved platforms on dashboard.~
-view_portlet_recentlyAdded_help_msg=This portlet displays resources that have recently
been imported into the inventory.~
-view_portlet_recentlyAdded_title=Recently Added Portlet~
-view_portlet_tagCloud_help=portlet displays the relative tag counts in the system visible
to the current user.~
-view_portlet_tagCloud_title=TagCloud~
-view_inventory_cannotGetGlobalPerms=Could not determine global permissions - assuming
none.~
-view_inventory_downServers=Down Servers~
-view_tree_common_contextMenu_pluginConfiguration=Plugin Configuration~
-view_tree_common_contextMenu_chart=Chart~
-view_tabs_common_scheduled=Scheduled~
-view_dynagroup_permUnknown=Could not determine if you have the proper permissions -
access is denied~
-view_configurationHistoryList_itemNamePlural=configuration history items
-
-# Configuration History Details
-#------------------------------------------
-view_configurationHistoryDetails_dialogTitle=Configuration Details~
-
-# Operation Create Wizard
-#-------------------------------------
-view_operationCreateWizard_title=Operation Wizard~
-view_operationCreateWizard_header=Execute {0} on {1}~
-view_operationCreateWizard_button_execute=Execute~
-view_operationCreateWizard_button_executeImmediately=Execute Immediately~
-view_operationCreateWizard_error_scheduleOperationFailure=Failed to schedule operation
execution.~
-view_operationCreateWizard_message_scheduleOperationSuccess=Schedule operation [{0}] on
Resource [{1}] with cron string [{2}].~
-view_operationCreateWizard_parametersStep_name=Operation Parameters~
-view_operationCreateWizard_parametersStep_noParameters=This operation does not take any
parameters.~
-view_operationCreateWizard_schedulingStep_name=Schedule~
-view_operationCreateWizard_schedulingStep_label_start=Start~
-view_operationCreateWizard_schedulingStep_label_schedule=Schedule~
-view_operationCreateWizard_schedulingStep_label_recurrence=Recurrence~
-view_operationCreateWizard_schedulingStep_label_runAt=Run At~
-view_operationCreateWizard_schedulingStep_label_nMinutes=n Minutes~
-view_operationCreateWizard_schedulingStep_label_hourly=Hourly~
-view_operationCreateWizard_schedulingStep_label_daily=Daily~
-view_operationCreateWizard_schedulingStep_label_weekly=Weekly~
-view_operationCreateWizard_schedulingStep_label_monthly=Monthly~
-view_operationCreateWizard_schedulingStep_label_timePeriod=Time Period~
-view_operationCreateWizard_schedulingStep_label_startDate=Start Date~
-view_operationCreateWizard_schedulingStep_label_recurrenceEnd=Recurrence End~
-view_operationCreateWizard_schedulingStep_label_endDate=End Date~
-view_operationCreateWizard_schedulingStep_label_willExecuteImmediately=Will execute
immediately~
-view_operationCreateWizard_schedulingStep_label_onceAt=Once At~
-view_operationCreateWizard_schedulingStep_label_date=Date~
-view_operationCreateWizard_schedulingStep_label_time=Time~
-view_operationCreateWizard_schedulingStep_label_everyNMinutes=Every n Minutes~
-view_operationCreateWizard_schedulingStep_label_minuteInterval=Minute Interval~
-view_operationCreateWizard_schedulingStep_label_hourlyAt=Hourly At~
-view_operationCreateWizard_schedulingStep_label_minuteOfHour=Minute of Hour~
-view_operationCreateWizard_schedulingStep_label_dailyAt=Daily At~
-view_operationCreateWizard_schedulingStep_label_timeOfDay=Time of Day~
-view_operationCreateWizard_schedulingStep_label_weeklyOn=Weekly On~
-view_operationCreateWizard_schedulingStep_label_dayOfWeek=Day of Week~
-view_operationCreateWizard_schedulingStep_label_monthlyOn=Monthly On~
-view_operationCreateWizard_schedulingStep_label_dayOfMonth=Day of Month~
-view_summaryOverviewForm_field_parent=Parent~
-view_core_loggedInAs=Logado como {0}~
-
-
-# Menu Bar
-#--------------
-view_menuBar_help=Ajuda~
-
-# Message Center
-#--------------------------
-view_messageCenter_button_messages=Mensagens~
commit 2f899cdbf7ceb8ff749edda600a6db0a514a1132
Author: Rafael Torres Coelho Soares <rsoares(a)redhat.com>
Date: Mon May 23 11:12:39 2011 +0200
First batch of Brasil Portuguese (pt_BR) translations
diff --git
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt_BR.properties
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt_BR.properties
new file mode 100755
index 0000000..65514b0
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt_BR.properties
@@ -0,0 +1,2315 @@
+#
+# RHQ GUI i18n Messages - pt-BR
+###################################
+
+#************************************** SHARED ****************************************
+
+#=================== Common =====================
+
+#
+# Build Info
+#
+common_buildInfo_gwtVersion=${gwt.version}
+
+# Button Labels
+#--------------
+common_button_ack=Confirmar
+common_button_ack_all=Confirmar Todos
+common_button_add=Adicionar
+common_button_advanced=Avan\u00E7ado...
+common_button_apply=Aplicar
+common_button_cancel=Cancelar
+common_button_close=Fechar
+common_button_compare=Comparar
+common_button_create_child=Criar filho
+common_button_delete=Excluir
+common_button_delete_all=Excluir Todos
+common_button_disable=Desabilitar
+common_button_edit=Editar
+common_button_enable=Habilitar
+common_button_finish=Finalizar
+common_button_import=Importar
+common_button_new=Novo
+common_button_next=Pr\u00F3ximo
+common_button_ok=OK
+common_button_previous=Anterior
+common_button_purgeAll=Purge All
+common_button_refresh=Refresh
+common_button_reset=Limpar
+common_button_save=Salvar
+common_button_schedule=Schedule
+common_button_search=Procurar
+common_button_set=Set
+common_button_showDetails=Mostrar Detalhes...
+common_button_uninventory=Remover do Invent\u00E1rio
+
+# Common Labels
+#------------------------
+common_label_ago=ago
+common_label_all=TODOS
+common_label_all_resources=todos os recursos
+common_label_day=dia
+common_label_days=dias
+common_label_hour=hora
+common_label_hours=horas
+common_label_item=item
+common_label_items=itens
+common_label_milliseconds=milisegundos
+common_label_minutes=minutos
+common_label_month=m\u00EAs
+common_label_none=nenhum
+common_label_role=perfil
+common_label_roles=perfis
+common_label_scheduled_operations=opera\u00E7\u00F5es agendadas
+common_label_seconds=segundos
+common_label_selected_resources=recursos selecionados
+common_label_unlimited=ilimitado
+common_label_user=usu\u00E1rio
+common_label_users=usu\u00E1rios
+common_label_week=semana
+common_label_weeks=semanas
+common_label_yesterday=Yesterday
+
+# Common Units
+#-------------
+common_unit_times=times
+common_unit_milliseconds=milliseconds
+common_unit_seconds=seconds
+common_unit_minutes=minutes
+common_unit_hours=hours
+common_unit_days=days
+common_unit_weeks=weeks
+common_unit_months=months
+common_unit_years=years
+
+# Common Severities
+#------------------
+common_severity_debug=Debug
+common_severity_info=Info
+common_severity_warn=Warn
+common_severity_error=Error
+common_severity_fatal=Fatal
+
+# Common Titles
+#--------------
+common_title_address=Endere\u00E7o
+common_title_add_column=Adicionar Coluna
+common_title_add_graph_to_view=Add Graph to Monitor View
+common_title_add_portlet=Adicionar Portlet
+common_title_alert_range=S\u00E9rie de Alertas
+common_title_ancestry=Ancestry
+common_title_availability=Disponibilidade
+common_title_average_metrics=M\u00E9tricas da m\u00E9dia por Minuto
+common_title_available_resources=Recursos Dispon\u00EDveis
+common_title_background=Background
+common_title_bundle=Bundle
+common_title_bundles=Bundles
+common_title_category=Categoria
+common_title_change_refresh_time=Refresh Interval
+common_title_columns=Colunas
+common_title_configuration=Configura\u00E7\u00E3o
+common_title_compare_metrics=Compare Metrics
+common_title_compatibleGroups=Grupos Compat\u00EDveis
+common_title_compatibleGroups_total=Total de Grupos Compat\u00EDveis
+common_title_component_errors=Componentes com erro
+common_title_config_update_status=Update Status
+common_title_count=Count
+common_title_custom=Personalizado
+common_title_dashboard_name=Nome do Painel de Controle
+common_title_dateCreated=Data de Cria\u00E7\u00E3o
+common_title_dateRange=Date Range
+common_title_default=Padr\u00E3o
+common_title_description=Descri\u00E7\u00E3o
+common_title_details=Detalhes
+common_title_display=Display
+common_title_display_name=Nome do Display
+common_title_duration=Dura\u00E7\u00E3o
+common_title_edit_mode=Modo Edi\u00E7\u00E3o
+common_title_enabled=Habilitado?
+common_title_end=Fim
+common_title_error=Error
+common_title_generalProp=Propriedades Gerais
+common_title_group=Group
+common_title_groups=Groups
+common_title_group_def_total=Total de Defini\u00E7\u00E3o de Grupos
+common_title_group_member_health=Group Member Health
+common_title_icon=\u00EDcone
+common_title_id=ID
+common_title_id_parent=ID do Recurso pai
+common_title_info=Info
+common_title_help=Help
+common_title_host=Host
+common_title_inventory=Invent\u00E1rio
+common_title_inventorySummary=Sum\u00E1rio do Invent\u00E1rio
+common_title_lastUpdated=\u00DAltima Atualiza\u00E7\u00E3o
+common_title_lastUpdatedBy=\u00DAltima Atualiza\u00E7\u00E3o feita por
+common_title_ldapGroups=LDAP Groups
+common_title_mashup=Mashup
+common_title_members_reporting=Members Reporting
+common_title_message=Mensagem
+common_title_metric=M\u00E9trica
+common_title_metric_chart=Metric Chart
+common_title_mixedGroups=Grupos Mistos
+common_title_mixedGroups_total=Total de Grupos Mistos
+common_title_name=Nome
+common_title_new_dashboard=Novo Painel de Controle
+common_title_numeric_metrics=Numeric Metrics
+common_title_numeric_type=Tipo Num\u00E9rico
+common_title_operation_status=Operation Status
+common_title_operations=Opera\u00E7\u00F5es
+common_title_operations_range=S\u00E9rie de Opera\u00E7\u00F5es
+common_title_over=Execesso
+common_title_password=Senha
+common_title_path=Path
+common_title_permissions=Permissions
+common_title_platform=Plataforma
+common_title_platform_total=Total de Plataformas
+common_title_plugin=Plugin
+common_title_port=Porta
+common_title_providers=Provedores
+common_title_recent_alerts=Alertas Recentes
+common_title_recent_bundle_deployments=Recent Bundle Deployments
+common_title_recent_configuration_updates=Recent Configuration Updates
+common_title_recent_event_counts=Recent Event Counts
+common_title_recent_measurements=Recent Measurements
+common_title_recent_oob_metrics=Recent Out of Bound metrics
+common_title_recent_operations=Opera\u00E7\u00F5es Recentes
+common_title_recent_pkg_history=Recent Package History
+common_title_recently_added=Recursos Adicionados Recentemente
+common_title_remove_column=Remover Coluna
+common_title_repositories=Reposit\u00F3rios
+common_title_resource=Recursos
+common_title_resources=Resources
+common_title_resource_group=Grupo de Recursos
+common_title_resourceGroups=Resource Groups
+common_title_resource_inventory=Invent\u00E1rio de Recursos
+common_title_resource_id=ID do Recurso
+common_title_resource_name=Nome do Recurso
+common_title_resource_key=Resource Key
+common_title_resource_type=Resource Type
+common_title_results_count=Results Count
+common_title_results_count_tooltip=Displays this number of results
+common_title_role=Role
+common_title_roles=Roles
+common_title_search=Procurar
+common_title_scheduled_operations=Opera\u00E7\u00F5es Agendadas
+common_title_selected_resources=Recursos Selecionados
+common_title_server=Server
+common_title_server_total=Total de Servidores
+common_title_service=Service
+common_title_service_total=Total de Servi\u00E7os
+common_title_settings=Configura\u00E7\u00F5es
+common_title_show=Visualizar
+common_title_show_more=Visualizar mais...
+common_title_sort_order=Sort Order
+common_title_sort_order_tooltip=Sets sort order for results.
+common_title_start=Iniciar
+common_title_status=Status
+common_title_stop=Stop
+common_title_summary=Sum\u00E1rio
+common_title_tag_cloud=Nuvem de Tags
+common_title_the=O
+common_title_timestamp=Data/Hora
+common_title_total=Total
+common_title_type=Tipo
+common_title_units=Unidades
+common_title_user=Usu\u00E1rio
+common_title_users=Users
+common_title_value=Valor
+common_title_version=Vers\u00E3o
+common_title_view_mode=Modo vis\u00E3o
+common_title_web_address=Endere\u00E7o Web
+common_title_welcome=Bem Vindo
+
+# Common Messages
+#--------------
+common_msg_areYouSure=Tem certeza?
+common_msg_changeAutoDetected=Change auto-detected
+common_msg_deleteConfirm=Tem certeza de que deseja excluir o \# selecionado {0}?
+common_msg_emphasizedNotePrefix=NOTA\:
+common_msg_loading=Carregando...
+common_msg_noItemsToShow=N\u00E3o existem itens para apresentar
+common_msg_notYetImplemented=Not Yet Implemented
+common_msg_see_more=see more...
+common_msg_step_x_of_y=Step {0} of {1}
+common_msg_asyncTimeout={0}. This occurred because the server is taking a long time to
complete this request. \
+Please be aware that the server may still be processing your request and it may complete
shortly. \
+You can check the server logs to see if any abnormal errors occurred.
+
+# Common Values
+#--------------
+common_val_for=para
+common_val_no=N\u00E3o
+common_val_no_lower=n\u00E3o
+common_val_yes=Sim
+common_val_yes_lower=sim
+common_val_never=Nunca
+common_val_na=N/A
+common_val_none=Nenhum
+
+# Common Statuses
+common_status_canceled=Canceled
+common_status_deferred=Deferred
+common_status_failed=Failed
+common_status_inprogress=In Progress
+common_status_nochange=No Change
+common_status_success=Success
+common_status_unknown=Unknown
+common_status_timedOut=Timed Out
+common_status_partial=Partial
+
+# 1st, 2nd, 3rd, 4th, etc.
+common_val_n1st={0}st
+common_val_n2nd={0}nd
+common_val_n3rd={0}rd
+common_val_nth={0}th
+
+# Common Alert Priorities
+#------------------------
+common_alert_high=High
+common_alert_medium=Medium
+common_alert_low=Low
+
+# Common Calendar
+#--------------
+common_calendar_january_short=jan
+common_calendar_february_short=fev
+common_calendar_march_short=mar
+common_calendar_april_short=abr
+common_calendar_may_short=mai
+common_calendar_june_short=jun
+common_calendar_july_short=jul
+common_calendar_august_short=ago
+common_calendar_september_short=set
+common_calendar_october_short=out
+common_calendar_november_short=nov
+common_calendar_december_short=dez
+
+
+#=================== Widgets =====================
+
+# Favorites
+#--------------
+favorites=Favorites
+favorites_resources=Favorite Resources
+favorites_groups=Favorite Groups
+favorites_recentlyViewed=Recently Viewed
+
+# Record Editor
+#--------------
+widget_recordEditor_title_view=Visualizar {0} [{1}]
+widget_recordEditor_title_edit=Editar {0} [{1}]
+widget_recordEditor_title_new=Criar Novo {0}
+# // dup in common
+widget_recordEditor_label_loading=Carregar...
+widget_recordEditor_error_invalidViewPath=Caminho inv\u00E1lido\: [{0}]
+widget_recordEditor_error_noRecords=Nenhum registro encontrado - era esperado exatamente
um.
+widget_recordEditor_error_multipleRecords=Foram encontrados v\u00E1rios registros - era
esperado apenas um.
+widget_recordEditor_info_recordCreatedConcise={0} criado.
+widget_recordEditor_info_recordCreatedDetailed={0} [{1}] criado.
+widget_recordEditor_info_recordUpdatedConcise={0} atualizado.
+widget_recordEditor_info_recordUpdatedDetailed={0} [{1}] atualizado.
+widget_recordEditor_info_recordsDeletedConcise={0} {1} exclu\u00EDdo.
+widget_recordEditor_info_recordsDeletedDetailed={0} {1} exclu\u00EDdo\: {2}.
+widget_recordEditor_error_operation=Operation failed. An error occurred
+widget_recordEditor_error_operationInvalidValues=Operation failed - one or more fields
have invalid values
+widget_recordEditor_error_unsupportedOperationType=Tipo de opera\u00E7\u00E3o n\u00E3o
suportada\: [{0}]
+widget_recordEditor_error_permissionCreate=You do not have the permissions required to
create a new [{0}]
+widget_recordEditor_warn_validation=One or more fields have invalid values. This [{0}]
cannot be saved until these values are corrected
+
+# Resource Selector/Picker
+#--------------------------------
+widget_resourceSelector_selectResource=Selecionar um Recurso
+widget_resourceSelector_pleaseSelectResource=Favor selecionar um recurso
+widget_resourceSelector_selectMultipleResources=Selecionar Recursos
+widget_resourceSelector_pleaseSelectMultipleResource=Favor selecionar um ou mais
recursos
+widget_resourceSelector_groupCategory=Categoria do Grupo
+
+# Resource Factory Wizard
+#--------------------------------
+widget_resourceFactoryWizard_uploadInProgress=Upload em andamento... Esse processo pode
demorar alguns minutos para ser finalizado em caso de arquivos muito grandes.
+widget_resourceFactoryWizard_uploadFileStepName=Upload do Arquivo do Recurso
+widget_resourceFactoryWizard_uploadFailure=Falha ao realizar o upload do arquivo
+widget_resourceFactoryWizard_editConfigStepName=Editar Configura\u00E7\u00E3o
+widget_resourceFactoryWizard_editConfigStep_nothingToDo=There is no configuration that
you need to define for this resource.
+widget_resourceFactoryWizard_infoStepName=Informa\u00E7\u00E3o do Recurso
+widget_resourceFactoryWizard_infoStep_loadFail=Failed to get available Architectures
+widget_resourceFactoryWizard_namePrompt=Novo Nome do Recurso
+widget_resourceFactoryWizard_templatePrompt=Modelo de Propriedades para Conex\u00E3o
+widget_resourceFactoryWizard_contentTemplatePrompt=Modelos de Configura\u00E7\u00E3o do
Tempo de Deploy
+widget_resourceFactoryWizard_configTemplatePrompt=Modelo de Configura\u00E7\u00E3o de
Recurso
+widget_resourceFactoryWizard_archPrompt=Arquitetura do Pacote
+widget_resourceFactoryWizard_versionPrompt=Vers\u00E3o do Pacote
+widget_resourceFactoryWizard_importWizardWindowTitle=Assistente para Importa\u00E7\u00E3o
de Recurso
+widget_resourceFactoryWizard_importWizardTitle=Importar Recursos do Tipo [{0}]
+widget_resourceFactoryWizard_importFailure=Falha ao importar recursos manualmente
+widget_resourceFactoryWizard_importSubmitted=Uma requisi\u00E7\u00E3o para importar um
novo recurso do tipo [{0}] foi submetida
+widget_resourceFactoryWizard_createWizardWindowTitle=Assistente para Cria\u00E7\u00E3o de
Recurso
+widget_resourceFactoryWizard_createWizardTitle=Criar novo recurso do tipo [{0}]
+widget_resourceFactoryWizard_execute1=Falha ao criar novo recurso - vers\u00E3o do pacote
inexistente
+widget_resourceFactoryWizard_execute2=Falha ao criar novo recurso
+widget_resourceFactoryWizard_createSubmitType=A requisi\u00E7\u00E3o para
cria\u00E7\u00E3o de um recurso do tipo [{0}] foi submetida com sucesso.
+widget_resourceFactoryWizard_createSubmit=A requisi\u00E7\u00E3o para cria\u00E7\u00E3o
de um recurso com nome [{0}] foi submetida com sucesso.
+widget_resourceFactoryWizard_failedToGetType=Falha ao recuperar o tipo de pacote para o
novo recurso
+widget_resourceFactoryWizard_failedToDeleteVersion=Falha ao excluir a vers\u00E3o do
pacote durante o cancelamento da cria\u00E7\u00E3o do recurso
+
+widget_typeCache_loadFail=Failed to load resource type metadata
+
+widget_typeTree_badTemplateType=Invalid URL. Unknown template type [{0}]
+widget_typeTree_badTypeId=Invalid URL. Bad resource type ID [{0}]
+widget_typeTree_loadFail=Failed to load resource types
+
+# Color Picker
+#--------------
+widget_colorPicker_tooltip=Click to select a new color
+
+# Job Trigger Editor
+#--------------------
+widget_jobTriggerEditor_field_mode=Schedule using
+widget_jobTriggerEditor_value_calendar=Calendar
+widget_jobTriggerEditor_value_cronExpression=Cron Expression
+widget_jobTriggerEditor_value_now=Now
+widget_jobTriggerEditor_value_nowAndRepeat=Now & Repeat
+widget_jobTriggerEditor_value_later=Later
+widget_jobTriggerEditor_value_laterAndRepeat=Later & Repeat
+widget_jobTriggerEditor_field_cronExpression=Cron Expression
+widget_jobTriggerEditor_tab_format=Format
+widget_jobTriggerEditor_tab_examples=Examples
+widget_jobTriggerEditor_field_repeatInterval_now=Run now and every
+widget_jobTriggerEditor_field_repeatInterval_later=Repeat every
+widget_jobTriggerEditor_fieldHelp_repeatInterval=how often the operation should be
executed
+widget_jobTriggerEditor_value_for=For
+widget_jobTriggerEditor_value_until=Until
+widget_jobTriggerEditor_value_indefinitely=Indefinitely
+widget_jobTriggerEditor_fieldHelp_repeatDuration=keep running this operation this many
times or until this amount of time has elapsed
+widget_jobTriggerEditor_field_startType=Run
+widget_jobTriggerEditor_value_on=on
+widget_jobTriggerEditor_value_in=in
+widget_jobTriggerEditor_fieldHelp_startDelay=start executing the operation after this
amount of time has elapsed
+widget_jobTriggerEditor_message_startTimeMustBeInFuture=Start time must be in the
future.
+widget_jobTriggerEditor_message_endTimeMustBeAfterStartTime=End time must be after start
time.
+widget_jobTriggerEditor_message_endTimeMustBeInFuture=End time must be in the future.
+
+# Duration Item
+#---------------
+widget_durationItem_inputUnitLessThanTargetUnit=Input unit is less than target unit.
+widget_durationItem_unitTypeNotSupported=Unit type [{0}] is not supported by this
DurationItem.
+
+
+#===================== Utils ======================
+
+# Ancestry
+#-------------------------------------------------
+util_ancestry_parentAncestry=Parent Ancestry for:
+
+# Disambiguation Report Decorator
+#-------------------------------------------------
+util_disambiguationReportDecorator_pluginSuffix=({0} plugin)
+
+# Monitoring Request Callback
+#------------------------------------------
+util_monitoringRequestCallback_error_checkServerStatusFailure=Imposs\u00EDvel verificar o
status do login - verifique o estatdo do Servidor.
+
+# RPC Manager
+#----------------------
+util_rpcManager_activeRequests={0} Requisi\u00E7\u00F5es ativas
+
+# User Permissions Manager
+#--------------------------
+util_userPerm_loadFailGlobal=Falha ao carregar permiss\u00F5es globais - nenhuma
permiss\u00E3o concedida.
+util_userPerm_loadFailGroup=Falha ao carregar suas permiss\u00F5es para o Grupo de
Recursos com id [{0}] - nenhum permiss\u00E3o concedida.
+util_userPerm_loadFailResource=Falha ao carregar suas permiss\u00F5es para o Recurso com
id [{0}] - nenhuma permiss\u00E3o concedida.
+
+# User Session Manager
+#--------------------------
+util_userSession_loadFailSubject=UserSessionManager\: Falha ao carregar a credencial do
usu\u00E1rio
+util_userSession_logoutFail=Falha durante o logout.
+
+# Error Handler
+#--------------------
+util_errorHandler_nullException=Exce\u00E7\u00E3o nula
+
+# Widgets Field
+#---------------------
+util_widgetsField_unlimited=Ilimitado
+
+
+#================== DataSources ====================
+
+# RPC (abstract)
+#-----------------------
+dataSource_bundle_loadFailed=Failed to load Bundle data
+
+
+# RPC (abstract)
+#-----------------------
+dataSource_rpc_error_transformRequestFailure=Ocorreu uma falha na fonte de dados durante
o processamento da requisi\u00E7\u00E3o {0}.
+dataSource_rpc_error_unsupportedArrayFilterType=Sem suporte para passing de array filters
do tipo {0}.
+dataSource_rpc_error_unsupportedEnumType=Favor adicionar um trecho de c\u00F3digo
apropriado para a enum {0} para RPCDataSource.getEnumArray(Class)
+dataSource_rpc_yes=sim
+dataSource_rpc_no=n\u00E3o
+
+# ContentRepositoryTree
+#------
+dataSource_ContentRepoTree_error_load=Erro ao carregar os reposit\u00F3rios
+dataSource_ContentRepoTree_field_parentId=Parent ID
+
+
+# Users
+#------
+###### dup in common
+dataSource_users_field_id=ID
+dataSource_users_field_name=Nome do Usu\u00E1rio
+dataSource_users_field_ldap=LDAP Login?
+dataSource_users_field_password=Senha
+dataSource_users_field_passwordVerify=Verifique a Senha
+dataSource_users_field_firstName=Primeiro Nome
+dataSource_users_field_lastName=\u00DAltimo Nome
+dataSource_users_field_emailAddress=Endere\u00E7o de Email
+dataSource_users_field_phoneNumber=N\u00FAmero de Telefone
+dataSource_users_field_department=Departamento
+dataSource_users_field_factive=Login Habilitado?
+dataSource_users_delete=Deleted user [{0}]
+dataSource_users_deleteFailed=Failed to delete user [{0}]
+dataSource_users_passwordsDoNotMatch=Passwords do not match.
+dataSource_users_invalidEmailAddress=Invalid email address.
+
+# Roles
+#------
+datasource_roles_field_resourceGroups=Resource Groups
+datasource_roles_field_permissions=Permissions
+datasource_roles_field_subjects=Subjects
+datasource_roles_field_ldapGroups=LDAP Groups
+
+# Platforms
+#-----------
+dataSource_platforms_field_cpu=CPU
+dataSource_platforms_field_memory=Mem\u00F3ria
+dataSource_platforms_field_swap=Swap
+
+# Traits
+#------
+dataSource_traits_failFetch=Failed to fetch traits for criteria [{0}].
+dataSource_traits_field_primaryKey=Chave Prim\u00E1ria
+dataSource_traits_field_definitionID=Definition ID
+dataSource_traits_field_lastChanged=\u00DAltima Altera\u00E7\u00E3o
+dataSource_traits_field_trait=Propriedade
+dataSource_traits_group_field_groupId=ID de Grupo
+
+# Measurement OOBs
+#---------------------------------
+dataSource_measurementOob_field_scheduleName=M\u00E9trica
+dataSource_measurementOob_field_resourceName=Recurso
+dataSource_measurementOob_field_parentName=Pai
+dataSource_measurementOob_field_formattedBaseband=Faixa
+dataSource_measurementOob_field_formattedOutlier=Fora de s\u00E9rie
+dataSource_measurementOob_field_factor=Fator fora da faixa (%)
+dataSource_measurementOob_error_fetchFailure=Falha ao carregar informa\u00E7\u00F5es das
m\u00E9tricas OOB
+
+# Measurements
+#----------------------
+dataSource_definitions_loadFailed=Falha ao carregar defini\u00E7\u00E3o de m\u00E9tricas
+dataSource_schedules_loadFailed=Falha ao carregar agendamento de m\u00E9tricas
+dataSource_schedules_loadFailedCriteria=Failed to load metric schedules for criteria
[{0}]
+dataSource_schedules_loadFailedContext=Failed to load metric schedules for context [{0}]
+dataSource_schedules_field_resourceGroupId=ID de Grupo
+
+dataSource_schedules_enableFailure_resource=Falha ao habilitar a coleta de m\u00E9tricas
de [{0}] para o recurso com ID [{1}]. As m\u00E9tricas s\u00E3o\: [{2}]
+dataSource_schedules_enableFailure_group=Falha ao habilitar a coleta de m\u00E9tricas de
[{0}] para o grupo com ID [{1}]. As m\u00E9tricas s\u00E3o\: [{2}]
+
+dataSource_schedules_enableSuccessful_concise=Voce habilitou a coleta de m\u00E9tricas de
[{0}]
+dataSource_schedules_enableSuccessful_full_resource=Voc\u00EA habilitou a coleta de
m\u00E9tricas de [{0}] para o recurso com ID [{1}]. As m\u00E9tricas habilitadas foram\:
[{2}]
+dataSource_schedules_enableSuccessful_full_group=Voc\u00EA habilitou a coleta de
m\u00E9tricas de [{0}] para o grupo de recursos com ID [{1}]. As m\u00E9tricas habilitadas
foram\: [{2}]
+
+dataSource_schedules_disableFailure_resource=Falha ao desabilitar a coleta de
m\u00E9tricas de [{0}] para o recurso com ID [{1}]. As m\u00E9tricas eram\: [{2}]
+dataSource_schedules_disableFailure_group=Falha ao desabilitar a coleta de m\u00E9tricas
de [{0}] para o grupo de recursos com ID [{1}]. As m\u00E9tricas eram\: [{2}]
+
+dataSource_schedules_disableSuccessful_concise=Voc\u00EA desabilitou a coleta de
m\u00E9tricas de [{0}]
+dataSource_schedules_disableSuccessful_full_resource=Voc\u00EA desabilitou a coleta de
m\u00E9tricas de[{0}] para o recurso com ID [{1}]. As m\u00E9tricas desabilitadas
s\u00E3o\: [{2}]
+dataSource_schedules_disableSuccessful_full_group=Voc\u00EA desabilitou a coleta de
m\u00E9tricas de[{0}] para o grupo de recursos com ID [{1}]. As m\u00E9tricas
desabilitadas s\u00E3o\: [{2}]
+
+dataSource_schedules_updateFailure_resource=Falha ao configurar o intervalo para coleta
de m\u00E9tricas de [{0}] para o recurso com ID [{1}]. M\u00E9tricas\: [{2}]. O intervalo
de coleta seria de [{3}] segundos.
+dataSource_schedules_updateFailure_group=Falha ao configurar o intervalo para coleta de
m\u00E9tricas de [{0}] para o grupo de recursos com ID [{1}]. M\u00E9tricas\: [{2}]. O
intervalo de coleta seria de [{3}] segundos.
+
+dataSource_schedules_updateSuccessful_concise=Um novo intervalo de coleta de [{0}]
segundos foi configurado para m\u00E9tricas de [{1}]
+dataSource_schedules_updateSuccessful_full_resource=Um novo intervalo de coleta de [{0}]
segundos foi configurado para m\u00E9tricas de [{1}] para o recurso com ID [{2}].
M\u00E9tricas atualizadas\: [{3}]
+dataSource_schedules_updateSuccessful_full_group=Um novo intervalo de coleta de [{0}]
segundos foi configurado para m\u00E9tricas de [{1}] para o grupo de recursos com ID
[{2}]. M\u00E9tricas atualizadas\: [{3}]
+
+# Resources
+#-----------------------
+dataSource_resources_field_location=Location
+dataSource_resources_field_key=Key
+dataSource_resources_field_discoveryTime=Discovery Time
+dataSource_resources_field_importTime=Import Time
+dataSource_resources_field_lastModifiedTime=Last Modified Time
+dataSource_resources_field_lastModifier=Last Modifier
+
+# Resource Groups
+#-----------------------
+dataSource_resourceGroups_loadFailed=Failed to load Resource Groups
+
+# Problem Resources
+#------------------------------
+dataSource_problemResources_field_alerts=Alertas
+dataSource_problemResources_field_available=Disponibilidade Atual
+dataSource_problemResources_error_fetchFailure=Falha com carregar Recursos com
alertas/indisponibilidade.
+
+# Recent Operations
+#----------------------------
+dataSource_recentOperations_field_resource=Recurso
+dataSource_recentOperations_field_location=Localiza\u00E7\u00E3o
+dataSource_recentOperations_field_operation=Opera\u00E7\u00E3o
+dataSource_recentOperations_field_time=Data/Hora
+dataSource_recentOperations_field_status=Status
+dataSource_recentOperations_error_fetchFailure=Falha ao carregar a lista de
opera\u00E7\u00F5es finalizadas recentemente.
+
+# Scheduled Operations (ResourceOperationScheduleComposites)
+#------------------------------------------------------------
+dataSource_scheduledOperations_field_resource=Recurso
+dataSource_scheduledOperations_field_location=Localiza\u00E7\u00E3o
+dataSource_scheduledOperations_field_operation=Opera\u00E7\u00E3o
+dataSource_scheduledOperations_field_time=Data/Hora
+dataSource_scheduledOperations_error_fetchFailure=Falha ao carregar a lista de
opera\u00E7\u00F5es agendadas
+
+# Operation Schedules
+#--------------------
+dataSource_operationSchedule_field_id=Schedule ID
+dataSource_operationSchedule_field_operationName=Operation
+dataSource_operationSchedule_field_operationDisplayName=Operation
+dataSource_operationSchedule_field_subject=Owner
+dataSource_operationSchedule_field_description=Notes
+dataSource_operationSchedule_field_nextFireTime=Next Execution
+dataSource_operationSchedule_field_timeout=Timeout (in seconds)
+
+# Operation Histories
+#--------------------
+dataSource_operationHistory_field_operationName=Operation Name
+dataSource_operationHistory_field_createdTime=Created Time
+dataSource_operationHistory_field_startedTime=Started Time
+dataSource_operationHistory_field_subject=Requester
+dataSource_operationHistory_error_fetchFailure=Falha ao carregar o hist\u00F3rico de
opera\u00E7\u00F5es.
+
+# Configuration History
+#-------------------------------
+dataSource_configurationHistory_dateSubmitted=Date Submitted
+dataSource_configurationHistory_dateCompleted=Date Completed
+dataSource_configurationHistory_updateType=Update Type
+dataSource_configurationHistory_updateType_individual=Individual
+dataSource_configurationHistory_updateType_group=Group
+dataSource_configurationHistory_currentConfig=This is the current configuration
+dataSource_configurationHistory_clickToSeeError=Double click to see error message...
+dataSource_configurationHistory_error_fetchFailure=N\u00E3o foi poss\u00EDvel carregar o
hist\u00F3rico de configura\u00E7\u00E3o.
+
+# Resource Errors
+#-------------------------
+dataSource_resourceErrors_field_summary=Sum\u00E1rio
+dataSource_resourceErrors_field_errorType=Tipo de Erro
+dataSource_resourceErrors_field_timeOccured=Tempo
+dataSource_resourceErrors_error_fetchFailure=Falha ao procurar por erros para o Recurso
com ID [{0}].
+dataSource_resourceErrors_clickStatusIcon=Click the icon for more details
+dataSource_resourceErrors_deleteSuccess=You have successfully deleted [{0}] resource
error messages.
+dataSource_resourceErrors_deleteFailure=Failed to delete resource errors
+
+# Template Schedules
+#-------------------------
+datasource_templateSchedules_disabled=Disabled collection of selected metric [{0}].
+datasource_templateSchedules_disabled_detailed=Disabled collection of metric [{0}] [{1}]
by default for ResourceType with id [{2}].
+datasource_templateSchedules_disabled_failed=Failed to disable collection of metric [{0}]
[{1}] by default for ResourceType with id [{2}].
+datasource_templateSchedules_enabled=Enabled collection of selected metric [{0}].
+datasource_templateSchedules_enabled_detailed=Enabled collection of metric [{0}] [{1}] by
default for ResourceType with id [{2}].
+datasource_templateSchedules_enabled_failed=Failed to enable collection of metric [{0}]
[{1}] by default for ResourceType with id [{2}].
+datasource_templateSchedules_updated=Updated collection intervals of selected metric
[{0}].
+datasource_templateSchedules_updated_detail=Collection interval for metric [{0}] [{1}] by
default for ResourceType with id [{2}] set to [{3}] seconds.
+datasource_templateSchedules_updated_failed=Failed to set collection interval to [{0}]
seconds for metric [{1}] [{2}] by default for ResourceType with id [{3}].
+
+
+#********************************** VIEW-SPECIFIC *************************************
+
+#================= Administration ==================
+
+view_admin_administration=Administra\u00E7\u00E3o
+view_admin_landing=Nesta se\u00E7\u00E3o \u00E9 poss\u00EDvel administrar propriedades
globais do RHQ. Isso inclui configura\u00E7\u00F5es de Seguran\u00E7a, Plugins, e
gerenciamento de servidores RHQ e agentes.
+view_admin_configuration=Configura\u00E7\u00E3o
+view_admin_security=Seguran\u00E7a
+view_admin_topology=Topologia
+view_admin_content=Content
+
+view_adminSecurity_users=Usu\u00E1rios
+view_adminSecurity_roles=Perfis
+
+view_adminTopology_affinityGroups=Grupos de Afinidade
+view_adminTopology_agents=Agentes
+view_adminTopology_partitionEvents=Eventos na Parti\u00E7\u00E3o
+view_adminTopology_remoteAgentInstall=Instala\u00E7\u00E3o Remota de Agentes
+view_adminTopology_servers=Servidores
+
+view_adminConfig_downloads=Downloads
+view_adminConfig_plugins=Plugins
+view_adminConfig_systemSettings=Propriedades de Sistema
+view_adminConfig_templates=Modelos
+
+view_adminContent_contentSources=Content Sources
+view_adminContent_repositories=Repositories
+
+# Administration/Templates
+#--------------------------------
+
+view_adminTemplates_platforms=Platforms
+view_adminTemplates_platformServices=Platform Services
+view_adminTemplates_servers=Servers
+view_adminTemplates_enabledAlertTemplates=Enabled Alert Templates
+view_adminTemplates_disabledAlertTemplates=Disabled Alert Templates
+view_adminTemplates_enabledMetricTemplates=Enabled Metric Templates
+view_adminTemplates_disabledMetricTemplates=Disabled Metric Templates
+view_adminTemplates_editAlertTemplate=Edit Alert Template
+view_adminTemplates_editMetricTemplate=Edit Metric Template
+view_adminTemplates_prompt_enabledAlertTemplates=Number of alert templates that are
enabled on this resource type
+view_adminTemplates_prompt_disabledAlertTemplates=Number of alert templates that are
created but disabled on this resource type
+view_adminTemplates_prompt_enabledMetricTemplates=Number of metric schedules that are
enabled by default on this resource type
+view_adminTemplates_prompt_disabledMetricTemplates=Number of metric schedules that are
disabled by default on this resource type
+
+# Administration/Security/Users
+#--------------------------------
+view_adminUsersList_dataTypeName=usu\u00E1rio
+view_adminUsersList_dataTypeNamePlural=usu\u00E1rios
+
+# Administration/Security/Users/#
+#--------------------------------
+view_adminUsersDetails_dataTypeName=usu\u00E1rio
+
+# Administration/Security/Roles/#
+#--------------------------------
+view_adminRoles_assignedGroups=Grupos de Recursos Associados
+view_adminRoles_assignedSubjects=Perfis Associados
+view_adminRoles_failLdap=Falha ao determinar se o LDAP foi configurado - assumindo como
LDAP n\u00E3o configurado.
+view_adminRoles_failLdapGroups=Falha ao recuperar os grupos dispon\u00EDveis no LDAP -
assumindo como LDAP sem grupos.
+view_adminRoles_failLdapGroupsRole=Falha ao carregar grupos do LDAP dispon\u00EDveis para
o perfil.
+view_adminRoles_failRoles=Falha ao recuperar perfis.
+view_adminRoles_globalPerms=Permiss\u00F5es Globais
+view_adminRoles_ldapGroups=Grupos LDAP
+view_adminRoles_ldapGroupsReadOnly=Informa\u00E7\u00F5es do grupo LDAP com
permiss\u00F5es apenas de leitura
+view_adminRoles_noItems=Sem itens para apresentar
+view_adminRoles_noLdap=A integra\u00E7\u00E3o com o LDAP ainda n\u00E3o foi configurada.
Para configurar o LDAP acesse <a {0}>{1}</a>.
+view_adminRoles_perms=Permiss\u00F5es
+view_adminRoles_resourcePerms=Permiss\u00F5es do Recurso
+view_adminRoles_roleAdded=Perfil [{0}] adicionado.
+view_adminRoles_roleDeleteFailed=Falha ao excluir o perfil [{0}].
+view_adminRoles_roleDeleted=Perfil [{0}] exclu\u00EDdo.
+view_adminRoles_roleUpdateFailed=Falha ao atualizar o perfil [{0}].
+view_adminRoles_roleUpdated=Perfil [{0}] atualizado.
+view_adminRoles_permissions_globalPermissions=Global Permissions
+view_adminRoles_permissions_resourcePermissions=Resource Permissions
+view_adminRoles_permissions_readAccessImplied=Read access for the {0} permission is
implied and cannot be disabled.
+view_adminRoles_permissions_isAuthorized=Authorized?
+view_adminRoles_permissions_isRead=Read?
+view_adminRoles_permissions_isWrite=Write?
+view_adminRoles_permissions_read=Read:
+view_adminRoles_permissions_write=Write:
+view_adminRoles_permissions_perm_manageSecurity=Manage Security
+view_adminRoles_permissions_permDesc_manageSecurity=can create, update, or delete users
and roles (viewing is implied for everyone)
+view_adminRoles_permissions_perm_manageInventory=Manage Inventory
+view_adminRoles_permissions_permDesc_manageInventory=has all Resource permissions, as
described below, for all Resources; can create, update, and delete groups; and can import
auto-discovered or manually discovered Resources
+view_adminRoles_permissions_perm_manageSettings=Manage Settings
+view_adminRoles_permissions_permDesc_manageSettings=can modify the RHQ Server
configuration and perform any Server-related functionality
+view_adminRoles_permissions_perm_manageBundles=Manage Bundles
+view_adminRoles_permissions_permDesc_manageBundles=can create, update, or delete
provisioning bundles (viewing is implied for everyone)
+view_adminRoles_permissions_perm_manageRepositories=Manage Repositories
+view_adminRoles_permissions_permDesc_manageRepositories=can create, update, or delete
repositories of any user (everyone can create their own repositories), can associate
content sources to repositories.
+view_adminRoles_permissions_perm_inventory=Inventory
+view_adminRoles_permissions_permReadDesc_inventory=(IMPLIED) view Resource properties
(name, description, version, etc.), connection settings, and connection settings history
+view_adminRoles_permissions_permWriteDesc_inventory=update Resource name, version,
description, and connection settings; delete connection settings history items
+view_adminRoles_permissions_perm_manageMeasurements=Manage Measurements
+view_adminRoles_permissions_permReadDesc_manageMeasurements=(IMPLIED) view metric data
and collection schedules
+view_adminRoles_permissions_permWriteDesc_manageMeasurements=update metric collection
schedules
+view_adminRoles_permissions_perm_manageAlerts=Manage Alerts
+view_adminRoles_permissions_permReadDesc_manageAlerts=(IMPLIED) view alert definitions
and alert history
+view_adminRoles_permissions_permWriteDesc_manageAlerts=create, update, and delete alert
definitions; acknowledge and delete alert history items
+view_adminRoles_permissions_perm_configure=Configure
+view_adminRoles_permissions_permReadDesc_configure=view Resource configuration and
Resource configuration revision history
+view_adminRoles_permissions_permWriteDesc_configure=update Resource configuration; delete
Resource configuration revision history items
+view_adminRoles_permissions_perm_control=Control
+view_adminRoles_permissions_permReadDesc_control=(IMPLIED) view available operations and
operation execution history
+view_adminRoles_permissions_permWriteDesc_control=execute operations; delete operation
execution history items
+view_adminRoles_permissions_perm_manageEvents=Manage Events
+view_adminRoles_permissions_permReadDesc_manageEvents=(IMPLIED) view events
+view_adminRoles_permissions_permWriteDesc_manageEvents=delete events
+view_adminRoles_permissions_perm_manageContent=Manage Content
+view_adminRoles_permissions_permReadDesc_manageContent=(IMPLIED) view installed and
available packages; view package installation history
+view_adminRoles_permissions_permWriteDesc_manageContent=subscribe to content sources;
install and uninstall packages
+view_adminRoles_permissions_perm_createChildResources=Create Child Resources
+view_adminRoles_permissions_permReadDesc_createChildResources=(IMPLIED) view child
Resource creation history
+view_adminRoles_permissions_permWriteDesc_createChildResources=create new child Resources
(for child Resources of types that are creatable)
+view_adminRoles_permissions_perm_deleteChildResources=Delete Child Resources
+view_adminRoles_permissions_permReadDesc_deleteChildResources=(IMPLIED) view child
Resource deletion history
+view_adminRoles_permissions_permWriteDesc_deleteChildResources=uninventory resources;
delete Resources (for Resources of types that are deletable)
+view_adminRoles_permissions_autoselecting_manageSecurity_implied=Autoselected unselected
permissions, since MANAGE_SECURITY implies all other permissions...
+view_adminRoles_permissions_autoselecting_manageInventory_implied=Autoselected unselected
Resource permissions, since MANAGE_INVENTORY implies all Resource permissions...
+view_adminRoles_permissions_autoselecting_configureWrite_implied=Autoselected
CONFIGURE_READ permission, since CONFIGURE_WRITE implies it...
+view_adminRoles_permissions_autoselecting_configureRead_implied=Autodeselected
CONFIGURE_WRITE permission, since lack of CONFIGURE_READ implies lack of it...
+view_adminRoles_permissions_illegalDeselectionDueToManageSecuritySelection={0} permission
cannot be deselected, unless the Manage Security permission, which implies all other
permissions, is deselected first.
+view_adminRoles_permissions_illegalDeselectionDueToManageInventorySelection={0}
permission cannot be deselected, unless Manage Inventory, which implies all Resource
permissions, is deselected first.
+view_adminRoles_permissions_illegalDeselectionDueToCorrespondingWritePermSelection={0}
read permission cannot be deselected, unless the {0} write permission, which implies the
read permission, is deselected first.
+
+# Administration/Topology/RemoteAgentInstall/#
+#--------------------------------
+view_remoteAgentInstall_agentStatus=Status do Agente
+view_remoteAgentInstall_agentStatusDefault=-Pressione o Bot\u00E3o Atualizar Status-
+view_remoteAgentInstall_connInfo=Informa\u00E7\u00E3o de Conex\u00E3o
+view_remoteAgentInstall_buttonFindAgent=Procurar Agente
+view_remoteAgentInstall_error_1=Ocorreu um erro ao tentar localizar o caminho de
instala\u00E7\u00E3o do agente
+view_remoteAgentInstall_error_2=N\u00E3o foi poss\u00EDvel encontrar uma
instala\u00E7\u00E3o do agente nos locais comuns
+view_remoteAgentInstall_error_3=N\u00E3o foi poss\u00EDvel encontar a
instala\u00E7\u00E3o do agente em [{0}]
+view_remoteAgentInstall_error_4=Falha ao instalar o agente
+view_remoteAgentInstall_error_5=Falha a iniciar o agente
+view_remoteAgentInstall_error_6=Falha ao parar o agente
+
+view_remoteAgentInstall_installAgent=Instalar Agente
+view_remoteAgentInstall_installInfo=Informa\u00E7\u00E3o sobre a instala\u00E7\u00E3o do
Agente
+view_remoteAgentInstall_installPath=Caminho de Instala\u00E7\u00E3o do Agente
+view_remoteAgentInstall_owner=Propriet\u00E1rio
+view_remoteAgentInstall_promptInstallPath=Onde o agente est\u00E1 ou ser\u00E1 instalado.
Caso n\u00E3o tenha certeza onde o agente est\u00E1 instalado, informe um diret\u00F3rio
pai e clique em ''Procurar Agente'' para encontrar o agente. Caso informe
um diret\u00F3rio vazio, a busca pelo agente ser\u00E1 realizada em locais de
instala\u00E7\u00E3o comuns.
+view_remoteAgentInstall_promptHost=O host onde o agente est\u00E1 ou ser\u00E1 instalado
+view_remoteAgentInstall_promptPassword=Credenciais usadas para autentica\u00E7\u00E3o do
usu\u00E1rio no host via SSH
+view_remoteAgentInstall_promptPort=Porta onde o servidor SSH escuta. Se n\u00E3o
especificada, o padr\u00E3o \u00E9 22
+view_remoteAgentInstall_promptUser=Nome do usu\u00E1rio informado nas credenciais
passadas ao host via SSH
+view_remoteAgentInstall_result=Resultado
+view_remoteAgentInstall_resultCode=ResultCode
+view_remoteAgentInstall_startAgent=Iniciar Agente
+view_remoteAgentInstall_startAgentResults=resultado da inicializa\u00E7\u00E3o do
Agente\: [{0}]
+view_remoteAgentInstall_step=Step
+view_remoteAgentInstall_stopAgent=Parar Agente
+view_remoteAgentInstall_stopAgentResults=resultado do encerramento do Agente\: [{0}]
+view_remoteAgentInstall_success=Instala\u00E7\u00E3o do Agente finalizada
+view_remoteAgentInstall_updateStatus=Status da Atualiza\u00E7\u00E3o
+
+# Administration/SystemSettings
+#------------------------------
+view_admin_systemSettings_cannotLoadSettings=Cannot obtain the current system settings
+view_admin_systemSettings_savedSettings=You successfully saved the system properties
+view_admin_systemSettings_saveFailure=Failed to save the system settings
+view_admin_systemSettings_fixBeforeSaving=Please fix the invalid values before saving
+view_admin_systemSettings_group_general=General Configuration Properties
+view_admin_systemSettings_group_dataMgr=Data Manager Configuration Properties
+view_admin_systemSettings_group_baseline=Automatic Baseline Configuration Properties
+view_admin_systemSettings_group_ldap=LDAP Configuration Properties
+view_admin_systemSettings_cannotLoadServerDetails=Cannot load server details
+view_admin_systemSettings_serverDetails=Server Details
+view_admin_systemSettings_serverDetails_buildNumber=Build Number
+view_admin_systemSettings_serverDetails_tz=Server Time Zone
+view_admin_systemSettings_serverDetails_time=Server Local Time
+view_admin_systemSettings_serverDetails_installDir=Server Installation Directory
+view_admin_systemSettings_serverDetails_dbUrl=Database Connection URL
+view_admin_systemSettings_serverDetails_dbName=Database Product Name
+view_admin_systemSettings_serverDetails_dbVersion=Database Product Version
+view_admin_systemSettings_serverDetails_dbDriverName=Database Driver Name
+view_admin_systemSettings_serverDetails_dbDriverVersion=Database Driver Version
+view_admin_systemSettings_serverDetails_currentTable=Current Measurement Raw Table
+view_admin_systemSettings_serverDetails_nextRotation=Next Measurement Table Rotation
+view_admin_systemSettings_BaseURL_name=GUI Console URL
+view_admin_systemSettings_BaseURL_desc=A URL to the server GUI, used mainly within alert
email notifications.
+view_admin_systemSettings_AgentMaxQuietTimeAllowed_name=Agent Max Quiet Time Allowed
+view_admin_systemSettings_AgentMaxQuietTimeAllowed_desc=If this amount of time passes
without hearing from an agent, that quiet agent will be considered down. This value is
specified in minutes.
+view_admin_systemSettings_EnableAgentAutoUpdate_name=Enable Agent Auto-Updates
+view_admin_systemSettings_EnableAgentAutoUpdate_desc=Determines if the server will allow
agents to auto-update themselves. You will not be able to download agent distributions
from the server if this is disabled.
+view_admin_systemSettings_EnableDebugMode_name=Enable Debug Mode
+view_admin_systemSettings_EnableDebugMode_desc=If enabled, the server will enter debug
mode.
+view_admin_systemSettings_EnableExperimentalFeatures_name=Enable Experimental Features
+view_admin_systemSettings_EnableExperimentalFeatures_desc=If enabled, any experimental
features that exist in the current product will be available.
+view_admin_systemSettings_DataMaintenance_name=Database Maintenance Period
+view_admin_systemSettings_DataMaintenance_desc=How often database maintenance is
performed (for example, vacuuming if using Postgres). This is specified in hours.
+view_admin_systemSettings_AvailabilityPurge_name=Delete Availability Data Older Than
+view_admin_systemSettings_AvailabilityPurge_desc=How old availability data must be before
being purged from the database. This is specified in days.
+view_admin_systemSettings_AlertPurge_name=Delete Alerts Older Than
+view_admin_systemSettings_AlertPurge_desc=How old alert history items must be before
being purged from the database. This is specified in days.
+view_admin_systemSettings_TraitPurge_name=Delete Measurement Traits Older Than
+view_admin_systemSettings_TraitPurge_desc=How old measurement trait data must be before
being purged from the database. This is specified in days.
+view_admin_systemSettings_RtDataPurge_name=Delete Response Time Data Older Than
+view_admin_systemSettings_RtDataPurge_desc=How old response time data must be before
being purged from the database. This is specified in days.
+view_admin_systemSettings_EventPurge_name=Delete Events Older Than
+view_admin_systemSettings_EventPurge_desc=How old event data must be before being purged
from the database. This is specified in days.
+view_admin_systemSettings_DataReindex_name=Reindex Data Tables Nightly
+view_admin_systemSettings_DataReindex_desc=If enabled, certain database tables will be
re-indexed periodically.
+view_admin_systemSettings_BaselineFrequency_name=Baseline Calculation Frequency
+view_admin_systemSettings_BaselineFrequency_desc=The frequency which the auto-calculation
of baselines will be performed. If 0, baseline auto-calculation is disabled. This is
specified in days.
+view_admin_systemSettings_BaselineDataSet_name=Baseline Dataset
+view_admin_systemSettings_BaselineDataSet_desc=The amount of past measurement data that
is used to determine a baseline. This is specified in days.
+view_admin_systemSettings_JAASProvider_name=Enable LDAP
+view_admin_systemSettings_JAASProvider_desc=Should LDAP be used to determine user
identity?
+view_admin_systemSettings_LDAPUrl_name=LDAP URL
+view_admin_systemSettings_LDAPUrl_desc=URL to the LDAP Server
+view_admin_systemSettings_LDAPProtocol_name=SSL
+view_admin_systemSettings_LDAPProtocol_desc=Should communication with the LDAP server be
done over SSL?
+view_admin_systemSettings_LDAPLoginProperty_name=Login Property
+view_admin_systemSettings_LDAPLoginProperty_desc=The LDAP property that contains the user
name. Defaults to "cn". If multiple matches are found, the first entry found is
used.
+view_admin_systemSettings_LDAPFilter_name=Search Filter
+view_admin_systemSettings_LDAPFilter_desc=Any additional filters to apply when doing the
LDAP search. This is useful if the population to authenticate can be identified via a
given LDAP property, e.g. RHQUser=true
+view_admin_systemSettings_LDAPGroupFilter_name=Group Search Filter
+view_admin_systemSettings_LDAPGroupFilter_desc=LDAP search filter that must return all
LDAP groups available for authorization. This is used for LDAP group authorization.
+view_admin_systemSettings_LDAPGroupMember_name=Group Member Filter
+view_admin_systemSettings_LDAPGroupMember_desc=LDAP search filter that is used in
conjunction with the group search filter to determine user authorization. This is used for
LDAP group authorization.
+view_admin_systemSettings_LDAPBaseDN_name=Search Base
+view_admin_systemSettings_LDAPBaseDN_desc=The base of the directory tree to search for
usernames and passwords while authenticating users, e.g. ou=People,dc=redhat,dc=com
+view_admin_systemSettings_LDAPBindDN_name=Username
+view_admin_systemSettings_LDAPBindDN_desc=The username to connect to the LDAP server when
querying the LDAP user database. This is typically the full LDAP distinguished name (DN)
of a manager user, e.g. cn=Manager,dc=redhat,dc=com
+view_admin_systemSettings_LDAPBindPW_name=Password
+view_admin_systemSettings_LDAPBindPW_desc=The credentials of the user used to connect to
the LDAP server when querying the LDAP user database.
+
+# Administration/Downloads
+#------------------------------
+view_admin_downloads_agentDownload=Agent Download
+view_admin_downloads_cliDownload=Command Line Client Download
+view_admin_downloads_bundleDownload=Bundle Deployer Download
+view_admin_downloads_connectorsDownload=Connectors Download
+
+view_admin_downloads_agent_loadError=Cannot get agent version info
+view_admin_downloads_agent_version=Agent Version
+view_admin_downloads_agent_buildNumber=Agent Build
+view_admin_downloads_agent_md5=Agent MD5
+view_admin_downloads_agent_link_label=Link
+view_admin_downloads_agent_link_value=Download Agent {0} ({1})
+view_admin_downloads_agent_help=<p> \
+ This is the RHQ Agent Update Binary jar file. The purpose of this \
+ jar file is to allow you to install a fresh agent on a machine \
+ where an agent does not yet exist and to allow you to update \
+ an agent that is already installed on a machine. \
+ For more details, run this agent download jar with the --help command line
option:<br/> \
+ <b>java -jar <agent-download.jar> --help</b> \
+ </p> \
+ <h3>Agent Install</h3> \
+ <p> \
+ <b>java -jar <agent-download.jar> --install[=<new agent
directory>]</b><br/> \
+ This command will install a new agent. If you do not specify the new agent
directory, the default will be "." \
+ </p> \
+ <h3>Agent Update</h3> \
+ <p> \
+ <b>java -jar <agent-download.jar> --update[=<old agent
home>]</b><br/> \
+ This will update an existing agent that was already installed. \
+ If you do not specify the directory where the old, existing agent was installed, it
will assumed to be "rhq-agent". \
+ </p>
+
+view_admin_downloads_cli_loadError=Cannot get CLI version info
+view_admin_downloads_cli_version=CLI Version
+view_admin_downloads_cli_buildNumber=CLI Build
+view_admin_downloads_cli_md5=CLI MD5
+view_admin_downloads_cli_link_label=Link
+view_admin_downloads_cli_link_value=Download CLI {0} ({1})
+view_admin_downloads_cli_help=<p> \
+ This is the Command Line Client tool, otherwise known as the CLI. \
+ It is a standalone tool that runs from within a console and provides a \
+ command line interface to the RHQ Server. You can invoke commands via the CLI \
+ as well as run scripts to perform automated tasks. See the documentation for \
+ more information on how to install and use the CLI. \
+ </p>
+
+view_admin_downloads_bundle_loadError=Cannot get bundle deployer info
+view_admin_downloads_bundle_link_label=Link
+view_admin_downloads_bundle_link_value=Download Bundle Deployer {0}
+view_admin_downloads_bundle_help=<p> \
+ This is the Bundle Deployer tool. It is for use by developers and packagers of RHQ
bundles. \
+ This standalone tool allows you to test your bundles and their recipes from a console.
\
+ </p>
+
+view_admin_downloads_connectors_loadError=Cannot get connectors info
+view_admin_downloads_connectors_none=No connectors are available for download
+view_admin_downloads_connectors_help=Connectors are software that is needed in order for
some products to be manageable by RHQ. You install connectors into some managed products
so RHQ agents can talk to them. See the documentation for more information.
+
+# Measurement Templates view
+view_admin_measTemplates_title=Template Metric Collection Schedules
+view_admin_measTemplates_updateExisting_title=Update Existing Schedules
+view_admin_measTemplates_updateExisting_tooltip=Check this box to update the collection
schedules for the selected metrics on all existing resources of this type. If this is not
checked, the template schedules will only be applied to new resources of this type that
are added to inventory in the future.
+
+#==================== Alerts ======================
+view_alerts_table_title_group=Hist\u00F3rico de Alertas do Grupo
+view_alerts_table_title_resource=Hist\u00F3rico de Alertas do Recurso
+view_alerts_table_filter_priority=Filtro de Prioridade
+view_alerts_field_created_time=Data de Cria\u00E7\u00E3o
+view_alerts_field_modified_time=Data de Altera\u00E7\u00E3o
+view_alerts_field_enabled=Habilitado
+view_alerts_field_ack_time=Data de Verifica\u00E7\u00E3o
+view_alerts_field_ack_subject=Assunto da Verifica\u00E7\u00E3o
+view_alerts_field_ack_status=Status
+view_alerts_field_ack_status_noAck=No Ack
+view_alerts_field_ack_status_noAckHover=Not yet Acknowledged
+view_alerts_field_ack_status_ack=Ack ({0})
+view_alerts_field_ack_status_ackHover=Acknowledged by {0} at {1}
+view_alerts_field_name=Nome
+view_alerts_field_condition_text=Condi\u00E7\u00E3o
+view_alerts_field_condition_text_none=Sem condi\u00E7\u00F5es
+view_alerts_field_condition_text_many=M\u00FAltiplas condi\u00E7\u00F5es
+view_alerts_field_condition_value=Valor da Condi\u00E7\u00E3o
+view_alerts_field_priority=Prioridade
+view_alerts_field_parent=Pai
+view_alerts_field_protected=Protegido
+view_alerts_field_protected_tooltip=Se verdadeiro, esta defini\u00E7\u00E3o \u00E9
protegida de altera\u00E7\u00F5es feitas na defini\u00E7\u00E3o pai, ou seja,
altera\u00E7\u00F5es realizadas no pai n\u00E3o sobrescrevem esta defini\u00E7\u00E3o.
+view_alerts_loadFailed=Falha ao carregar dados dos alertas
+view_alerts_delete_confirm=Excluir o(s) alerta(s) selecionado(s)?
+view_alerts_delete_confirm_all=Excluir todos os alertas?
+view_alerts_delete_success=Alertas {0} exclu\u00EDdos com sucesso
+view_alerts_delete_failure=Falha ao excluir alertas com os seguintes IDs\: {0}
+view_alerts_delete_failure_all=N\u00E3o foi poss\u00EDvel excluir os alertas
+view_alerts_ack_confirm=Confirma o(s) alerta(s) selecionado(s)?
+view_alerts_ack_confirm_all=Confirma todos os alertas?
+view_alerts_ack_success=Alertas {0} confirmados com sucesso
+view_alerts_ack_failure=Falha ao confirmar alertas com os seguintes IDs\: {0}
+view_alerts_ack_failure_all=N\u00E3o foi poss\u00EDvel confirmar todos os alertas
+view_alert_details_loadFailed=Falha ao recuperar detalhes do alerta
+view_alert_details_field_ack_by=Verificado por
+view_alert_details_field_ack_at=Verificado em
+view_alert_details_field_recovery_info=Informa\u00E7\u00E3o de Recupera\u00E7\u00E3o
+view_alert_definition_for_type=Visualizar Template
+view_alert_definition_for_group=Visualizar Defini\u00E7\u00E3o de Grupo
+view_alert_definitions_table_title_group=Defini\u00E7\u00F5es de Alertas para Grupo
+view_alert_definitions_table_title_resource=Defini\u00E7\u00F5es de Alerta para Recurso
+view_alert_definitions_loadFailed=Falha ao obter a defini\u00E7\u00E3o do alerta
+view_alert_definitions_loadFailed_single=Falha ao obter a defini\u00E7\u00E3o do alerta
com ID {0}
+view_alert_definitions_enable_confirm=Habilitar a(s) defini\u00E7\u00E3o(\u00F5es) para o
alerta selecionado?
+view_alert_definitions_enable_success=Defini\u00E7\u00F5es do alerta {0} habilitados com
sucesso
+view_alert_definitions_enable_failure=Falha ao habilitar defini\u00E7\u00F5es para o
alerta selecionado
+view_alert_definitions_disable_confirm=Desabilitar as defini\u00E7\u00F5es para o alerta
selecionado?
+view_alert_definitions_disable_success=Defini\u00E7\u00F5es do alerta {0} desabilitadas
com sucesso
+view_alert_definitions_disable_failure=Falha ao desabilitar defini\u00E7\u00F5es para o
alerta selecionado
+view_alert_definitions_delete_confirm=Excluir defini\u00E7\u00F5es para o alerta
selecionado?
+view_alert_definitions_delete_success=Defini\u00E7\u00F5es do alerta {0} exclu\u00EDdas
com sucesso
+view_alert_definitions_delete_failure=Falha aos excluir as defini\u00E7\u00F5es do alerta
selecionado
+view_alert_definitions_create_success=Defini\u00E7\u00E3o do alerta criada com sucesso
+view_alert_definitions_create_failure=Falha na cria\u00E7\u00E3o da defini\u00E7\u00E3o
do alerta
+view_alert_definitions_update_success=Defini\u00E7\u00E3o do alerta atualizada com
sucesso
+view_alert_definitions_update_failure=Falha ao atualizar a defini\u00E7\u00E3o do alerta
+view_alert_definition_condition_editor_option_label=Tipo de Condi\u00E7\u00E3o
+view_alert_definition_condition_editor_option_availability=Mudan\u00E7a de
Disponibilidade
+view_alert_definition_condition_editor_option_metric_threshold=Threshold (valor absoluto)
da M\u00E9trica
+view_alert_definition_condition_editor_option_metric_baseline=Threshold base da
M\u00E9trica
+view_alert_definition_condition_editor_option_metric_change=Mudan\u00E7a no valor da
M\u00E9trica
+view_alert_definition_condition_editor_option_metric_calltime_threshold=Tempo limite da
chamada
+view_alert_definition_condition_editor_option_metric_calltime_change=Mudan\u00E7a no
tempo de chamada
+view_alert_definition_condition_editor_option_metric_trait_change=Mudan\u00E7a de
Carcter\u00EDstica
+view_alert_definition_condition_editor_option_operation=Execu\u00E7\u00E3o de
Opera\u00E7\u00E3o
+view_alert_definition_condition_editor_option_resource_configuration=Mudan\u00E7a na
Configura\u00E7\u00E3o do Recurso
+view_alert_definition_condition_editor_option_event=Detec\u00E7\u00E3o de Evento
+view_alert_definition_condition_editor_avilability_tooltip=Especifica a mudan\u00E7a de
estado na disponibilidade do recurso que ir\u00E1 disparar a condi\u00E7\u00E3o.
+view_alert_definition_condition_editor_avilability_value=Disponibilidade
+view_alert_definition_condition_editor_avilability_option_up=DISPON\u00CDVEL
+view_alert_definition_condition_editor_avilability_option_down=INDISPON\u00CDVEL
+view_alert_definition_condition_editor_metric_common_definition_not_found=Deve existir
uma defini\u00E7\u00E3o para a m\u00E9trica - algo est\u00E1 incorreto
+view_alert_definition_condition_editor_metric_threshold_tooltip=Especifica um threshold
que, quando alcan\u00E7ado, dispara a condi\u00E7\u00E3o. O valor especificado deve ser
absoluto e com uma unidade de medida opcional.
+view_alert_definition_condition_editor_metric_threshold_name=M\u00E9trica
+view_alert_definition_condition_editor_metric_threshold_value=Valor da M\u00E9trica
+view_alert_definition_condition_editor_metric_threshold_value_tooltip=Limiar (threshold)
da m\u00E9trica utilizado na compara\u00E7\u00E3o como condi\u00E7\u00E3o de disparo.
+view_alert_definition_condition_editor_metric_threshold_comparator=Mecanismo de
Compara\u00E7\u00E3o
+view_alert_definition_condition_editor_metric_threshold_comparator_less=Menor que
+view_alert_definition_condition_editor_metric_threshold_comparator_equal=Igual \u00E0
+view_alert_definition_condition_editor_metric_threshold_comparator_greater=Maior que
+view_alert_definition_condition_editor_metric_threshold_comparator_tooltip=Como a
m\u00E9trica coletada deve ser comparada ao threshold estabelecido
+view_alert_definition_condition_editor_metric_baseline_tooltip=Especifica a linha de base
que, quando violada, dispara a condi\u00E7\u00E3o. O valor especificado \u00E9 o
percentual do valor da linha de base informado.
+view_alert_definition_condition_editor_metric_baseline_percentage=Percentual da linha de
base
+view_alert_definition_condition_editor_metric_baseline_percentage_tooltip=Valor da
m\u00E9trica coletada usada para disparo da condi\u00E7\u00E3o quando comparado ao valor
da linha de base selecionada
+view_alert_definition_condition_editor_metric_baseline_value=Linha de base
(<i>baseline</i>)
+view_alert_definition_condition_editor_metric_change_tooltip=Especifica a m\u00E9trica
cujo valor deve ser alterado para disparar a condi\u00E7\u00E3o.
+view_alert_definition_condition_editor_metric_calltime_threshold_tooltip=Especifica um
tempo limite para a chamada que, quando alcan\u00E7ado, dispara a condi\u00E7\u00E3o. O
valor especificado deve ser absoluto e com uma unidade de medida opcional. \u00C9
necess\u00E1rio especificar o tempo limite da chamada para compar\u00E1-lo ao valor\:
m\u00EDnimo, m\u00E1ximo ou m\u00E9dio.
+view_alert_definition_condition_editor_metric_calltime_common_name=M\u00E9trica do tempo
de chamada
+view_alert_definition_condition_editor_metric_calltime_common_limit=Tempo limite da
chamada
+view_alert_definition_condition_editor_metric_calltime_common_limit_tooltip=Tempo de
chamada limite a ser comparado com o valor informado
+view_alert_definition_condition_editor_metric_calltime_common_regex=Express\u00E3o
Regular
+view_alert_definition_condition_editor_metric_calltime_common_regex_tooltip=Se
especificada, essa \u00E9 a express\u00E3o regular a ser satisfeita pela chamada para
disparar a condi\u00E7\u00E3o.
+view_alert_definition_condition_editor_metric_calltime_common_comparator=Compara\u00E7\u00E3o
+view_alert_definition_condition_editor_metric_calltime_common_comparator_shrinks=Redu\u00E7\u00F5es
+view_alert_definition_condition_editor_metric_calltime_common_comparator_grows=Ganhos
+view_alert_definition_condition_editor_metric_calltime_common_comparator_changes=Mudan\u00E7as
+view_alert_definition_condition_editor_metric_calltime_common_comparator_tooltip=Como o
valor do tempo de chamada deve ser comparado ao valor limite
+view_alert_definition_condition_editor_metric_calltime_threshold_value=Valor do tempo de
chamada
+view_alert_definition_condition_editor_metric_calltime_threshold_value_tooltip=O valor do
limiar (<i>threshold</i>) da m\u00E9trica usado para disparar a
condi\u00E7\u00E3o quando comparado ao mecanismo de compara\u00E7\u00E3o escolhido.
+view_alert_definition_condition_editor_metric_calltime_change_tooltip=Especifica o valor
do tempo de chamada que, quanto alterado, dispara a condi\u00E7\u00E3o. \u00C9
necess\u00E1rio especificar o tempo limite para a chamada (m\u00EDnimo, m\u00E1ximo ou
m\u00E9dio) e o percental de mudan\u00E7a que deve ocorrer.
+view_alert_definition_condition_editor_metric_calltime_change_percentage=Percentual de
Mudan\u00E7a
+view_alert_definition_condition_editor_metric_calltime_change_percentage_tooltip=Valor do
tempo de chamada coletado usado para disparar a condi\u00E7\u00E3o quando diferir do
percentual do valor limite do tempo de chamada definido.
+view_alert_definition_condition_editor_metric_trait_change_tooltip=Specify the trait
whose value must change to trigger the condition.
+view_alert_definition_condition_editor_metric_trait_change_value=Caracter\u00EDstica
+view_alert_definition_condition_editor_operation_tooltip=Define o resultado esperado
quando a opera\u00E7\u00E3o selecionada for executada para dispararo da
confi\u00E7\u00E3o.
+view_alert_definition_condition_editor_operation_value=Opera\u00E7\u00E3o
+view_alert_definition_condition_editor_operation_status=Status da Opera\u00E7\u00E3o
+view_alert_definition_condition_editor_operation_status_inprogress=Em andamento
+view_alert_definition_condition_editor_operation_status_success=Sucesso
+view_alert_definition_condition_editor_operation_status_failure=Falha
+view_alert_definition_condition_editor_operation_status_canceled=Cancelada
+view_alert_definition_condition_editor_resource_configuration_tooltip=Essa
condi\u00E7\u00E3o \u00E9 disparada quando a configura\u00E7\u00E3o do recurso for
alterada.
+view_alert_definition_condition_editor_event_tooltip=Define a severeidade do evento para
disparar a condi\u00E7\u00E3o. Caso seja definida uma express\u00E3o regular, a
condi\u00E7\u00E3o somente ser\u00E1 disparada se o evento satisfazer a express\u00E3o.
+view_alert_definition_condition_editor_event_severity=Severidade do Evento
+view_alert_definition_condition_editor_event_severity_debug=Debug
+view_alert_definition_condition_editor_event_severity_info=Info
+view_alert_definition_condition_editor_event_severity_warn=Warn
+view_alert_definition_condition_editor_event_severity_error=Error
+view_alert_definition_condition_editor_event_severity_fatal=Fatal
+view_alert_definition_condition_editor_event_regex=Express\u00E3o Regular
+view_alert_definition_condition_editor_event_regex_tooltip=Se definida, a
condi\u00E7\u00E3o somente ser\u00E1 disparada caso o evento satisfa\u00E7a a
express\u00E3o.
+view_alert_definition_condition_editor_common_min=M\u00EDnimo
+view_alert_definition_condition_editor_common_avg=M\u00E9dio
+view_alert_definition_condition_editor_common_max=M\u00E1ximo
+view_alert_definition_condition_editor_delete_confirm=Delete the selected alert
condition(s)?
+view_alert_definition_notification_editor_title_add=Adicionar Notifica\u00E7\u00E3o
+view_alert_definition_notification_editor_title_edit=Editar Notifica\u00E7\u00E3o
+view_alert_definition_notification_editor_sender=Remetente da Notifica\u00E7\u00E3o
+view_alert_definition_notification_editor_none_available=Remetentes n\u00E3o
dispon\u00EDveis
+view_alert_definition_notification_editor_loadFailed=N\u00E3o \u00E9 poss\u00EDvel obter
remetentes
+view_alert_definition_notification_editor_loadFailed_single=N\u00E3o \u00E9 poss\u00EDvel
obter a configura\u00E7\u00E3o do remetente
+view_alert_definition_notification_editor_saveFailed=N\u00E3o foi poss\u00EDvel salvar a
configura\u00E7\u00E3o
+view_alert_definition_notification_editor_field_sender=Remetente
+view_alert_definition_notification_editor_field_configuration=Configura\u00E7\u00E3o
+view_alert_definition_notification_editor_field_configuration_not_loaded=Desconhecido
+view_alert_definition_notification_editor_field_configuration_loadFailed=Falha ao obter a
configura\u00E7\u00E3o
+view_alert_definition_notification_editor_delete_confirm=Tem certeza de que deseja
excluir as notifica\u00E7\u00F5es selecionadas?
+view_alert_definition_notification_operation_editor_mode_title=Modo de Sele\u00E7\u00E3o
do Recurso
+view_alert_definition_notification_operation_editor_mode_this=Este Recurso
+view_alert_definition_notification_operation_editor_mode_specific=Recurso
Espec\u00EDfico
+view_alert_definition_notification_operation_editor_mode_relative=Recurso parente
+view_alert_definition_notification_operation_editor_mode_unknown=OP\u00C7\u00C3O
INV\u00C1LIDA - BUG\!
+view_alert_definition_notification_operation_editor_common_operation=Opera\u00E7\u00E3o
+view_alert_definition_notification_operation_editor_specific_resource=Recurso
+view_alert_definition_notification_operation_editor_specific_pick_button=Selecionar
+view_alert_definition_notification_operation_editor_specific_pick_text=Selecione um
recurso...
+view_alert_definition_notification_operation_editor_specific_pick_error_invalid=Favor
selecionar um recurso
+view_alert_definition_notification_operation_editor_specific_pick_error_no_operation=Selecione
um recurso que possua um ou mais opera\u00E7\u00F5es
+view_alert_definition_notification_operation_editor_relative_ancestor=Iniciar a busca a
partir de
+view_alert_definition_notification_operation_editor_relative_ancestor_tooltip=Selecione o
topo da hierarquia para buscar a \u00E1rvore de descendentes para Filtro por Tipo
+view_alert_definition_notification_operation_editor_relative_ancestor_loadFailed=N\u00E3o
\u00E9 poss\u00EDvel obter a ascend\u00EAncia do tipo
+view_alert_definition_notification_operation_editor_relative_ancestor_root=Tipo do
Ancestral Raiz
+view_alert_definition_notification_operation_editor_relative_descendant=Ent\u00E3o
procure por
+view_alert_definition_notification_operation_editor_relative_descendant_tooltip=Tipo do
recurso a ser procurado a baixo do tipo raiz definido na sele\u00E7\u00E3o 'Inicia a
Pesquesa a partir de'.
+view_alert_definition_notification_operation_editor_relative_descendant_filter_tooltip=Um
nome especifico para identificar unicamente um recurso quando existir mais de um do mesmo
tipo. Isso \u00E9 opcional, se definido, sempre ser\u00E1 um recurso do tipo slecionda na
hierarquia.
+view_alert_definition_notification_operation_editor_relative_descendant_loadFailed=N\u00E3o
\u00E9 poss\u00EDvel obter os tipos de descendentes
+view_alert_definition_notification_operation_editor_operations_loadFailed=Falha ao
carregar a lista de opera\u00E7\u00F5es dispon\u00EDveis
+view_alert_definition_notification_operation_editor_operations_no_parameters=Esta
opera\u00E7\u00E3o n\u00E3o recebe par\u00E2metros
+view_alert_definition_notification_role_editor_loadFailed=N\u00E3o \u00E9 poss\u00EDvel
determinar os perfis atuais - iniciando vazio
+view_alert_definition_notification_role_editor_restoreFailed=N\u00E3o \u00E9
poss\u00EDvel usar os perfis atuais - iniciando vazio
+view_alert_definition_notification_role_editor_saveFailed=N\u00E3o foi poss\u00EDvel
salvar os perfis selecionados
+view_alert_definition_notification_user_editor_loadFailed=N\u00E3o \u00E9 poss\u00EDvel
determinar os usu\u00E1rios atuais - iniciando vazio
+view_alert_definition_notification_user_editor_restoreFailed=N\u00E3o foi poss\u00EDvel
usar os usu\u00E1rios atuais - iniciando vazio
+view_alert_definition_notification_user_editor_saveFailed=N\u00E3o foi poss\u00EDvel
salvar os usu\u00E1rios seleciondados
+view_alert_definition_notification_cliScript_editor_repository=Repository
+view_alert_definition_notification_cliScript_editor_script=Script
+view_alert_definition_notification_cliScript_editor_whichUser=User To Run The Script As
+view_alert_definition_notification_cliScript_editor_thisUser=Myself
+view_alert_definition_notification_cliScript_editor_anotherUser=Another User
+view_alert_definition_notification_cliScript_editor_verifyAuthentication=Verify
+view_alert_definition_notification_cliScript_editor_loadFailed=Loading the CLI
Notification Editor Failed.
+view_alert_definition_notification_cliScript_editor_selectRepoFirst=Select a repository
first.
+view_alert_definition_notification_cliScript_editor_existingScript=Existing Script
+view_alert_definition_notification_cliScript_editor_uploadNewScript=Upload New Script
+view_alert_definition_notification_cliScript_editor_newScriptVersion=Version
+view_alert_definition_notification_cliScript_editor_selectRepo=Select the repository
where the script should reside
+view_alert_definition_recovery_editor_disable_when_fired=Desabilitar quando disparado
+view_alert_definition_recovery_editor_disable_when_fired_tooltip=Indica se este alerta
deve ser desabilitado ap\u00F3s ser disparado. Uma vez desabilitado, o alerta pode ser
reativado manualmente ou um alerta de recupera\u00E7\u00E3o pode ser definido para
reativ\u00E1-lo automaticamente. If this alert is a recovery alert itself, this setting
cannot be turned on.
+view_alert_definition_recovery_editor_recovery_alert=Alerta de Recupera\u00E7\u00E3o
+view_alert_definition_recovery_editor_recovery_alert_tooltip=O Alerta a ser recuperado
(reativado) ap\u00F3s o disparo deste alerta. N\u00E3o selecione um alerta aqui caso
n\u00E3o esteja definindo um alerta de recupera\u00E7\u00E3o.
+view_alert_definition_recovery_editor_loadFailed=N\u00E3o foi poss\u00EDvel construir o
menu de recupera\u00E7\u00E3o
+view_alert_definition_recovery_editor_none_available=Nenhum
+view_alert_common_tab_general=Propriedades Gerais
+view_alert_common_tab_conditions=Condi\u00E7\u00F5es
+view_alert_common_tab_conditions_modal_title=Adicionar nova condi\u00E7\u00E3o.
+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_text=Condi\u00E7\u00E3o
+view_alert_common_tab_conditions_value=Valor
+view_alert_common_tab_conditions_type_availability=Mudan\u00E7a na Disponibilidade
+view_alert_common_tab_conditions_type_availability_down=Indispon\u00EDvel
+view_alert_common_tab_conditions_type_availability_up=Dispon\u00EDvel
+view_alert_common_tab_conditions_type_metric_threshold=Valor da M\u00E9trica excede o
limiar (threshold)
+view_alert_common_tab_conditions_type_metric_calltime_threshold=Tempo de chamada excede o
limiar (threshold)
+view_alert_common_tab_conditions_type_metric_calltime_destination=com o destino da
chamada correspondente
+view_alert_common_tab_conditions_type_metric_calltime_change=Mudan\u00E7a no tempo de
chamada
+view_alert_common_tab_conditions_type_metric_calltime_change_verb=ao menos
+view_alert_common_tab_conditions_type_metric_calltime_delta_grows=Aumento
+view_alert_common_tab_conditions_type_metric_calltime_delta_shrinks=Redu\u00E7\u00E3o
+view_alert_common_tab_conditions_type_metric_calltime_delta_other=Mudan\u00E7a
+view_alert_common_tab_conditions_type_metric_baseline=Valor da m\u00E9trica excede a
linha de base (baseline)
+view_alert_common_tab_conditions_type_metric_baseline_verb=de
+view_alert_common_tab_conditions_type_metric_change=Mudan\u00E7a no valor da
m\u00E9trica
+view_alert_common_tab_conditions_type_metric_trait_change=Mudan\u00E7a de
Carater\u00EDstica
+view_alert_common_tab_conditions_type_operation=Execu\u00E7\u00E3o de Opera\u00E7\u00E3o
+view_alert_common_tab_conditions_type_operation_status=resultado com status
+view_alert_common_tab_conditions_type_resource_configuration=Mudan\u00E7a na
Configura\u00E7\u00E3o do Recurso
+view_alert_common_tab_conditions_type_event=Detec\u00E7\u00E3o de Envento
+view_alert_common_tab_conditions_type_event_matching=combinando com o evento de origem
+view_alert_common_tab_conditions_recovery_enabled=''{0}'' disparado para
ser reativado.
+view_alert_common_tab_conditions_recovery_disabled=Este alerta desativou a sua
defini\u00E7\u00E3o.
+view_alert_common_tab_notifications=Notifica\u00E7\u00F5es
+view_alert_common_tab_notifications_sender=Remetente
+view_alert_common_tab_notifications_status=Status
+view_alert_common_tab_notifications_message=Mensagem
+view_alert_common_tab_dampening=Sensibilidade
+view_alert_common_tab_dampening_category_none=N\u00E3o definido
+view_alert_common_tab_dampening_category_none_tooltip=Sensibilidade desabilitada. Cada
vez que o conjunto de condi\u00E7\u00F5es for satisfeito, um alerta ser\u00E1 disparado.
+view_alert_common_tab_dampening_category_consecutive_count=Consecutivos
+view_alert_common_tab_dampening_category_consecutive_count_tooltip=Um alerta \u00E9
disparado a cada X ocorr\u00EAncias consecutivas em que o conjunto de condi\u00E7\u1E4Des
for satisfeito.
+view_alert_common_tab_dampening_category_partial_count=\u00DAltimas N
verifica\u00E7\u00F5es
+view_alert_common_tab_dampening_category_partial_count_tooltip=Um alerta \u00E9 disparado
a cada X ocorr\u00EAncias em que o conjunto de condi\u00E7\u00F5es \u00E9 satisfeito
durante as \u00FAltimas N verifica\u00E7\u00F5es.
+view_alert_common_tab_dampening_category_duration_count=Per\u00EDodo de Tempo
+view_alert_common_tab_dampening_category_duration_count_tooltip=Um alerta \u00E9
disparado a cada X ocorr\u00EAncias em que o conjunto de condi\u00E7\u00F5es \u00E9
satisfeito dentro de um dado per\u00EDodo de tempo.
+view_alert_common_tab_dampening_consecutive_occurrences_label=Ocorr\u00EAcias
+view_alert_common_tab_dampening_consecutive_occurrences_label_tooltip=O n\u00FAmero de
vezes que o conjunto de condi\u00E7\u00F5es deve ser satisfeito antes do alerta ser
disparado.
+view_alert_common_tab_dampening_partial_occurrences_label=Ocorr\u00EAncias
+view_alert_common_tab_dampening_partial_occurrences_label_tooltip=O n\u00FAmero de vezes
que o conjunto de condi\u00E7\u00F5es deve ser satisfeito durante as \u00FAltimas N
verifica\u00E7\u00F5es antes do alerta ser disparado.
+view_alert_common_tab_dampening_partial_evalatuions_label=Verifica\u00E7\u00F5es
+view_alert_common_tab_dampening_partial_evalatuions_label_tooltip=O total de vezes que o
conjunto de condi\u00E7\u00F5es ser\u00E1 testado para certificar-se de que o n\u00FAmero
de ocorr\u00EAncias definido foi satisfeito.
+view_alert_common_tab_dampening_duration_occurrences_label=Ocorr\u00EAncias
+view_alert_common_tab_dampening_duration_occurrences_label_tooltip=O n\u00FAmero de vezes
que o conjunto de condi\u00E7\u00F5es deve ser satisfeito durante o per\u00EDodo de tempo
definido antes do alerta ser disparado.
+view_alert_common_tab_dampening_duration_period_label=Per\u00EDodo de Tempo
+view_alert_common_tab_dampening_duration_period_label_tooltip=Espa\u00E7o de tempo em que
o conjunto de condi\u00E7\u00F5es ser\u00E1 testado para verificar se o n\u00FAmero de
ocorr\u00EAncias definido \u00E9 satisfeito.
+view_alert_common_tab_recovery=Recupera\u00E7\u00E3o~
+view_alert_common_tab_invalid_condition_category=Categoria de condi\u00E7\u00E3o
inv\u00E1lida - favor reportar como um bug\: {0}
+view_alert_common_tab_invalid_dampening_category=Categora de sensibilidade inv\u00E1lida
- favor reportar como um bug\: {0}
+view_alert_common_tab_invalid_time_units=Unidade de tempo inv\u00E1lida - favor reportar
como um bug\: {0}
+
+# Auto Discovery Queue
+#----------------------------
+view_autoDiscoveryQ_title=Fila de Autodescoberta
+view_autoDiscoveryQ_import=Importar
+view_autoDiscoveryQ_ignore=Ignorar
+view_autoDiscoveryQ_ignored=Ignorado
+view_autoDiscoveryQ_unignore=N\u00E3o ignorar
+view_autoDiscoveryQ_committed=Committed
+view_autoDiscoveryQ_deleted=Deleted
+view_autoDiscoveryQ_uninventoried=Uninventoried
+view_autoDiscoveryQ_new=Novo
+view_autoDiscoveryQ_newAndIgnored=Novo e Ignorado
+view_autoDiscoveryQ_importFailure=Falha ao importar recursos
+view_autoDiscoveryQ_importSuccessful=Os recursos selecionados foram importados com
sucesso.
+view_autoDiscoveryQ_ignoreFailure=Falha ao ignorar recursos.
+view_autoDiscoveryQ_ignoreSuccessful=Os recursos selecionados foram ignorados com
sucesso.
+view_autoDiscoveryQ_unignoreFailure=Falha ao reimportar os recursos
+view_autoDiscoveryQ_unignoreSuccessful=You have successfully unignored the selected
resources.~
+view_autoDiscoveryQ_noperm=(Required manage inventory permissions missing. See
Administrator to change)~
+view_autoDiscoveryQ_noItems=N\u00E3o h\u00E1 itens a serem mostrados
+view_autoDiscoveryQ_field_parentId=ID Pai
+view_autoDiscoveryQ_field_name=Nome do Recurso
+view_autoDiscoveryQ_field_key=Chave do Recurso
+view_autoDiscoveryQ_field_discoveryTime=Data e Hora da Descoberta
+view_autoDiscoveryQ_field_inventoryStatus=Status do Invet\u00E1rio
+view_autoDiscoveryQ_loadFailure=Falha ao carregar a fila de descoberta do
invent\u00E1rio
+view_autoDiscoveryQ_showStatus=Show
+view_autoDiscoveryQ_confirmSelect=Also select the platform children?
+
+#==================== Bundles ======================
+
+# some common bundle terms
+view_bundle_bundle=Bundle~
+view_bundle_bundles=Bundles~
+view_bundle_bundleDestinations=Bundle Destinations~
+view_bundle_bundleDeployment=Bundle Deployment~
+view_bundle_bundleDeployments=Bundle Deployments~
+view_bundle_bundleFiles=Bundle Files~
+view_bundle_bundleType=Bundle Type~
+view_bundle_bundleVersion=Bundle Version~
+view_bundle_bundleVersions=Bundle Versions~
+view_bundle_deploy=Deploy~
+view_bundle_deployed=Deployed~
+view_bundle_deployDir=Deploy Directory~
+view_bundle_deployments=Deployments~
+view_bundle_destinations=Destinations~
+view_bundle_files=Files~
+view_bundle_latestVersion=Latest Version~
+view_bundle_recipe=Recipe~
+view_bundle_revert=Revert~
+view_bundle_purge=Purge
+view_bundle_versions=Versions~
+view_bundle_deleteConfirm=Are you sure you want to delete this bundle? All versions,
destinations and deployments for this bundle will also be deleted.
+
+# individual bundle views/wizards
+view_bundle_fileListView_fileSize=File Size~
+view_bundle_fileListView_md5=MD5
+view_bundle_fileListView_sha256=SHA256
+view_bundle_fileListView_loadFailure=Failed to load bundle file data~
+view_bundle_version_backToBundle=Back to Bundle~
+view_bundle_version_bundleVersionTagUpdateFailure=Failed to update bundle version tags~
+view_bundle_version_bundleVersionTagUpdateSuccessful=You have successfully updated the
bundle version tags~
+view_bundle_version_deleteConfirm=Are you sure you want to delete this bundle version?
+view_bundle_version_deleteFailure=Failed to delete the bundle version [{0}]
+view_bundle_version_deleteSuccessful=You successfully deleted the bundle version [{0}]
+view_bundle_version_loadFailure=Failed to load bundle version~
+view_bundle_tree_loadFailure=Failed to load bundle data~
+view_bundle_revertWizard_title=Bundle Revert~
+view_bundle_revertWizard_windowTitle=Bundle Revert Wizard~
+view_bundle_revertWizard_getInfoStep_name=Provide Revert Information~
+view_bundle_revertWizard_getInfoStep_revertDeployName=Revert Deploy Name~
+view_bundle_revertWizard_getInfoStep_revertDeployDesc=Revert Deploy Description~
+view_bundle_revertWizard_getInfoStep_revertDeployDescFull=[REVERT
From]\\n{0}\\n\\n[REVERT To]\\n{1}~
+view_bundle_revertWizard_getInfoStep_cleanDeploy=Clean Deployment? (this will delete an
old, existing deploy directory prior to starting the revert deployment)~
+view_bundle_revertWizard_getInfoStep_getNameFailure=Failed to get revert deployment
name~
+view_bundle_revertWizard_confirmStep_name=Revert Deployment Confirmation~
+view_bundle_revertWizard_confirmStep_noLiveDeployment_concise=No live deployment was
found for the destination
+view_bundle_revertWizard_confirmStep_noLiveDeployment=No live deployment was found for
the destination [{0}]~
+view_bundle_revertWizard_confirmStep_noPriorDeployment_concise=The live deployment cannot
be reverted because there is no prior deployment
+view_bundle_revertWizard_confirmStep_noPriorDeployment=The live deployment [{0}] cannot
be reverted because there is no prior deployment for the destination [{1}]~
+view_bundle_revertWizard_confirmStep_failedToFindLiveDeployment=Failed to find live
deployment; cannot revert~
+view_bundle_revertWizard_confirmStep_liveDeployment=Live Deployment~
+view_bundle_revertWizard_confirmStep_prevDeployment=Previous Deployment~
+view_bundle_revertWizard_confirmStep_confirmation=Reverting Live Deployment to Previous
Deployment. Click "Next" to continue...~
+view_bundle_revertWizard_revertStep_name=Deploy Bundle to Destination Platforms~
+view_bundle_revertWizard_revertStep_reverting=Reverting...~
+view_bundle_revertWizard_revertStep_scheduled=You have successfully scheduled the revert
deployment!~
+view_bundle_revertWizard_revertStep_scheduledDetails=You have successfully scheduled to
revert the bundle deployment [{0}] from resource group [{1}]~
+view_bundle_revertWizard_revertStep_scheduledFailure=Failed to schedule revert
deployment!~
+view_bundle_list_loadFailure=Failed to load the bundle to be deployed [{0}]~
+view_bundle_list_singleLoadFailure=Failed to get a single bundle to be deployed [{0}]~
+view_bundle_list_versionsCount=Versions Count~
+view_bundle_list_destinationsCount=Destinations Count~
+view_bundle_list_loadWithLatestFailure=Failed to load bundle with the latest version
data~
+view_bundleVersion_loadFailure=Failed to load bundle version data~
+view_bundle_list_backToAll=Back to All Bundles~
+view_bundle_list_tagUpdateFailure=Failed to update bundle tags~
+view_bundle_list_tagUpdateSuccessful=You have successfully updated the bundle tags~
+view_bundle_list_deleteConfirm=Are you sure you want to delete this bundle?~
+view_bundle_list_deletesFailure=Failed to delete the bundles
+view_bundle_list_deletesSuccessful=You successfully deleted the bundles
+view_bundle_list_deleteFailure=Failed to delete the bundle [{0}]~
+view_bundle_list_deleteSuccessful=You successfully deleted the bundle named [{0}]~
+view_bundle_list_error1=Failed to load bundle to deploy [{0}]~
+view_bundle_list_error2=Failed to get a single bundle to deploy [{0}]~
+view_bundle_list_error3=Failed to load bundle~
+view_bundle_dest_group=Group~
+view_bundle_dest_created=Created~
+view_bundle_dest_deployDir=Deploy Directory~
+view_bundle_dest_lastDeployedVersion=Last Deployed Version~
+view_bundle_dest_lastDeploymentDate=Last Deployment Date~
+view_bundle_dest_lastDeploymentStatus=Last Deployment Status~
+view_bundle_dest_loadFailure=Failed to load bundle destinations~
+view_bundle_dest_loadFailureVersionInfo=Failed to load bundle destination deployed
version information~
+view_bundle_dest_backToBundle=Back to Bundle~
+view_bundle_dest_tagUpdateFailure=Failed to update bundle destination tags~
+view_bundle_dest_tagUpdateSuccessful=You have successfully updated the bundle destination
tags~
+view_bundle_dest_purgeConfirm=This will purge the bundle content from all remote
machines. Are you sure you want to do this?
+view_bundle_dest_purgeFailure=Failed to purge the bundle destination [{0}] from some or
all of the remote machines.
+view_bundle_dest_purgeSuccessful=You successfully purged the bundle destination [{0}]
from all of the remote machines.
+view_bundle_dest_revertConfirm=This will revert all remote machines back to the previous
bundle deployment. Are you sure you want to do this?
+view_bundle_dest_deleteConfirm=Are you sure you want to delete this bundle destination?
This only deletes it from the database; all bundle content that was deployed to this
destination on remote machines will remain.
+view_bundle_dest_deleteFailure=Failed to delete the bundle destination [{0}]
+view_bundle_dest_deleteSuccessful=You successfully deleted the bundle destination [{0}]
+view_bundle_resDeployDS_loadFailure=Failed to load bundle resource deployments~
+view_bundle_deploy_name=Deployment Name~
+view_bundle_deploy_time=Deployment Time~
+view_bundle_deploy_loadDeployFailure=Failed to load bundle deployments~
+view_bundle_deploy_action=Action~
+view_bundle_deploy_installDetails=Install Details~
+view_bundle_deploy_backButton=Back to Destination~
+view_bundle_deploy_tagUpdateFailure=Failed to update bundle deployment tags~
+view_bundle_deploy_tagUpdateSuccessful=You have successfully updated the bundle
deployment tags~
+view_bundle_deploy_deploymentPlatforms=Deployment Platforms~
+view_bundle_deploy_selectARow=Select a row to show installation details~
+view_bundle_deploy_operatingSystem=Operating System~
+view_bundle_deploy_loadFailure=Failed to load bundle deployment~
+view_bundle_deploy_loadBundleFailure=Failed to find bundle~
+view_bundle_deploy_deployedBy=Deployed By
+view_bundle_deploy_clickForError=Click the icon for the error message
+view_bundle_deploy_deleteConfirm=Are you sure you want to delete this bundle deployment?
+view_bundle_deploy_deleteFailure=Failed to delete the bundle deployment [{0}]
+view_bundle_deploy_deleteSuccessful=You successfully deleted the bundle deployment [{0}]
+view_bundle_createWizard_title=Create Bundle~
+view_bundle_createWizard_windowTitle=Bundle Creation Wizard~
+view_bundle_createWizard_cancelSuccessful=Canceled the creation of bundle [{0}],
version=[{1}]~
+view_bundle_createWizard_cancelFailure=Failed to fully cancel the creation of bundle
[{0}], version=[{1}] - the bundle may still exist in the database~
+view_bundle_createWizard_noBundleTypesSupported=No bundle types are supported - you must
deploy a valid plugin that supports bundle deployments~
+view_bundle_createWizard_noBundleTypesAvail=No bundle types are available~
+view_bundle_createWizard_loadBundleFileFailure=Cannot obtain bundle file information from
server~
+view_bundle_createWizard_enterUrl=Please enter a valid URL where the bundle distribution
file can be downloaded from
+view_bundle_createWizard_enterRecipe=Please supply a valid recipe
+view_bundle_createWizard_uploadInProgress=Upload is in progress... This can take several
minutes for large files~
+view_bundle_createWizard_uploadStepName=Provide a Bundle Distribution~
+view_bundle_createWizard_noAdditionalFilesNeeded=No additional files need to be uploaded
for this bundle~
+view_bundle_createWizard_failedToUploadFile=Failed to upload bundle file~
+view_bundle_createWizard_failedToUploadDistroFile=Failed to upload bundle distribution
file~
+view_bundle_createWizard_bundleDistro=Bundle Distribution~
+view_bundle_createWizard_youMustChooseOne=You must choose one option in order to create a
bundle!
+view_bundle_createWizard_urlOption=URL~
+view_bundle_createWizard_uploadOption=Upload~
+view_bundle_createWizard_recipeOption=Recipe~
+view_bundle_createWizard_provideBundleDistro=Provide a Bundle Distribution
+view_bundle_createWizard_clickToUploadRecipe=Click to upload a recipe file~
+view_bundle_createWizard_createFailure=Failed to create the bundle~
+view_bundle_createWizard_createSuccessful=You have successfully created a bundle named
[{0}] with a version of [{1}]~
+
+view_bundle_deployWizard_deploying=Deploying...~
+view_bundle_deployWizard_deployStep=Deploy Bundle to Destination Platforms~
+view_bundle_deployWizard_deploymentCreated=Created Deployment...~
+view_bundle_deployWizard_deploymentCreatedDetail=Created deployment [{0}] description
[{1}]~
+view_bundle_deployWizard_deploymentCreatedDetail_concise=You have created the deployment
[{0}]
+view_bundle_deployWizard_destinationCreatedDetail=Created destination [{0}] description
[{1}]~
+view_bundle_deployWizard_destinationCreatedDetail_concise=You have created the
destination [{0}]
+view_bundle_deployWizard_deploymentScheduled=Bundle Deployment Scheduled!~
+view_bundle_deployWizard_deploymentScheduledDetail=Scheduled bundle deployment [{0}]
destination group [{1}]~
+view_bundle_deployWizard_deploymentScheduledDetail_concise=You have scheduled the bundle
deployment
+view_bundle_deployWizard_error_1=Failed to delete new deployment on Cancel:
+view_bundle_deployWizard_error_2=Failed to delete new destination on Cancel:
+view_bundle_deployWizard_error_3=Failed to Schedule Deployment!~
+view_bundle_deployWizard_error_4=Failed to schedule deployment: {0}~
+view_bundle_deployWizard_error_5=Failed to Create Deployment!~
+view_bundle_deployWizard_error_6=Failed to create deployment: {0}~
+view_bundle_deployWizard_error_7=Failed to get deployment name.~
+view_bundle_deployWizard_error_8=You must select a valid resource group from the drop
down~
+view_bundle_deployWizard_error_9=Failed to delete new destination in nextPage:~
+view_bundle_deployWizard_error_10=Failed to create destination, it may already exist.
(Note, for an existing destination deploy from the Destination view)~
+view_bundle_deployWizard_error_11=Failed to find defined deployments.~
+view_bundle_deployWizard_error_12=Failed to find defined bundles.~
+view_bundle_deployWizard_getConfigStep=Set Deployment Configuration~
+view_bundle_deployWizard_getConfigSkip=No configuration needed for this bundle version.~
+view_bundle_deployWizard_getDestStep=New Destination~
+view_bundle_deployWizard_getDest_name=Destination Name~
+view_bundle_deployWizard_getDest_desc=Destination Description~
+view_bundle_deployWizard_getDest_deployDir=Root Deployment Directory (on destination
platforms)~
+view_bundle_deployWizard_getInfoStep=Provide Deployment Information~
+view_bundle_deployWizard_getInfo_clean=Clean Deployment? (wipe deploy directory on
destination platform)~
+view_bundle_deployWizard_getInfo_deploymentDesc=Deployment Description~
+view_bundle_deployWizard_getInfo_deploymentName=Deployment Name~
+view_bundle_deployWizard_getOptionsStep=Deploy Options~
+view_bundle_deployWizard_getOptions_deployLater=Deploy Later~
+view_bundle_deployWizard_getOptions_deployNow=Deploy Now~
+view_bundle_deployWizard_getOptions_deployTime=Deployment Time~
+view_bundle_deployWizard_selectBundleStep=Select Deployment Bundle~
+view_bundle_deployWizard_selectBundle_single=Select only a single bundle for
deployment.~
+view_bundle_deployWizard_selectVersionStep=Select Deployment Bundle Version~
+view_bundle_deployWizard_selectVersion_latest=Latest Version [{0}]~
+view_bundle_deployWizard_selectVersion_live=Live Version [{0}]~
+view_bundle_deployWizard_selectVersion_select=Select Version from List:~
+view_bundle_deployWizard_title=Bundle Deployment Wizard~
+
+# =================== Measurement Views =====================
+
+view_measureTable_chartMetricValues=Chart Selected Metrics
+view_measureTable_getLive=Get Live Value
+view_measureTable_getLive_failure=Cannot get live values for those metrics. Make sure the
agent is running and the managed resource is up.
+view_measureTable_live_title=Live Data
+
+# =================== Components =====================
+
+view_configCompare_comparingConfigs=Comparando Configura\u00E7\u00F5es
+view_configCompare_configCompare=Compara\u00E7\u00E3o de Configura\u00E7\u00F5es
+
+view_configEdit_addItem=Adicionar Item \u00E0 Lista
+view_configEdit_confirm_1=Tem certeza de que deseja excluir as propriedades
selecionadas?
+view_configEdit_confirm_2=Tem certeza de que deseja excluir esta linha?
+view_configEdit_confirm_3=Tem certeza de que deseja excluir [{0}] selecionado [{1}]?
+view_configEdit_viewRow=View Row
+view_configEdit_editRow=Editar Linha de Configura\u00E7\u00E3o
+view_configEdit_enterPropName=Informe o nome da propriedade a ser adicionada.
+view_configEdit_error_1=Este recurso n\u00E3o suporta Configura\u00E7\u00E3o.
+view_configEdit_error_2=Este recurso n\u00E3o possui suporte \u00E0 propriedades de
conex\u00E3o.
+view_configEdit_error_3=N\u00E3o f\u00F3 poss\u00EDvel adicionar a propriedade com nome
[{0}]. Nome de propriedade j\u00E1 utilizada neste conjunto.
+view_configEdit_files=Arquivos
+view_configEdit_hideAll=Ocultar todos
+view_configEdit_jumpToSection=Ir direto para a Sele\u00E7\u00E3o
+view_configEdit_msg_1=Propriedade [{0}] adicionada ao conjunto.
+view_configEdit_msg_2=Propriedades removidas do conjunto.
+view_configEdit_msg_3=[{0} {1}] removido da lista.
+view_configEdit_msg_4=Item adicionado \u00E0 lista.
+view_configEdit_properties=Propriedades
+view_configEdit_tooltip_1=Remove os itens selecionados da lista.
+view_configEdit_tooltip_2=Adiciona um item \u00E0 lista.
+
+view_groupConfigEdit_member=Membro
+view_groupConfigEdit_noListProps=Lista de propriedades n\u00E3o suportada atualmente para
configura\u00E7\u00F5es em grupo.
+view_groupConfigEdit_tooltip_1=Valores dos membros diferem - clique no \u00EDcone para
edit\u00E1-los.
+view_groupConfigEdit_setAll=Atribuir todos os valores \u00E0\:
+view_groupConfigEdit_unset=Remover atribui\u00E7\u00E3o
+view_groupConfigEdit_valsDiff=valores dos membros diferem
+view_groupConfigEdit_valsDiffForProp=Valores dos membros para a Propriedade [{0}]
+
+view_leftNav_unknownPage=P\u00E1gina desconhecida [{0}] para a se\u00E7\u00E3o [{1}] -
URL inv\u00E1lida.
+
+view_measure_nan=--dados indispon\u00EDveis--
+
+# Measurement Range Selector
+view_measureRange_last=\u00DAltimo
+view_measureRange_start=Time Range - Start
+view_measureRange_simple=Simples...
+
+view_selector_assigned=Associado {0}
+view_selector_available=Dispon\u00EDvel {0}
+
+view_subTab_error_disabled=N\u00E3o \u00E9 poss\u00EDvel selecionar uma subTab
desabilidada [{0}].
+
+view_table_drawFail=Failed to draw Table [{0}].
+view_table_matchingRows=Matching Rows: {0} (selected: {1})
+view_table_totalRows=Total de Linhas\: {0} (selecionada\: {1})
+view_tableSection_backButton=Voltar \u00E0 Lista
+view_tableSection_error_noId=Table [{0}] record is missing 'id' attribute -
please report this bug.~
+view_tableSection_error_badId=Can not show detail for [{0}]. Illegal 'id': [{1}].
Please report this bug~
+
+view_tags_tags=Tags~
+view_tags_error_1=Failed to load Tags~
+view_tags_tooltip_1=Click to remove this Tag~
+view_tags_tooltip_2=Click to edit Tags~
+view_tags_tooltip_3=Enter a Tag in the format: (namespace:)(semantic=)tagname (e.g.
it:env=QA, or owner=John)
+
+# File Upload (various)
+view_upload_alreadyUploaded=File has already been uploaded~
+view_upload_bundleDistFile=Distribution File~
+view_upload_error_bundleDistFile=Error uploading Bundle Distribution File~
+view_upload_error_file=Error uploading file~
+view_upload_error_fileName=Error uploading file [{0}]~
+view_upload_error_fileName_2=Error uploading file [{0}], check for invalid file path.~
+view_upload_error_packageVersionFile=Error uploading Package Version File~
+view_upload_error_results=Error uploading file, unexpected results: [{0}]~
+view_upload_inProgress=Can not submit, upload is currently in progress~
+view_upload_prompt_1=[{0}] File to Upload~
+view_upload_prompt_2=File to Upload~
+view_upload_tooltip_1a=Select a file to upload, then click Upload or Next
+view_upload_tooltip_1b=Select a file to upload, then click Next
+view_upload_tooltip_2=File upload had previously failed~
+view_upload_success=File successfully uploaded~
+view_upload_upload=Upload~
+view_upload_uploadFile=UploadFile~
+
+# Group Create Wizard
+view_groupCreateWizard_membersStepName=Select Members~
+view_groupCreateWizard_createStepName=Group Settings~
+view_groupCreateWizard_createStep_recursive=Recursive~
+view_groupCreateWizard_title=Create Group~
+view_groupCreateWizard_windowTitle=Create Group~
+view_groupCreateWizard_createFailure=Failed to create the resource group~
+view_groupCreateWizard_createSuccessful_concise=You have created a new resource group.
[<a href="{0}">View Group</a>]~
+view_groupCreateWizard_createSuccessful_full=You have created a new [{0}] resource group
with the name [{1}] that contains [{2}] member resources~
+
+# Resource Type / Plugin View/Datasources
+view_type_resourceTypes=Resource Types~
+view_type_parentId=Parent ID~
+view_type_typeTreeLoadFailure=Failed to load resource type tree data~
+
+# Tabs
+view_tabs_invalidSubTab=Invalid subtab: {0}
+view_tabs_invalidTab=Invalid tab: {0}
+
+# Group Tree
+group_tree_partialClusterTooltip={0} out of {1} group members have a
''{2}'' resource
+
+#=================== Dashboard =====================
+view_dashboard_favorites_error1=Failed to load favorite Resources.~
+view_dashboardManager_error=Failed to save dashboard to server~
+view_dashboardManager_saved=Saved dashboard {0} to server~
+view_dashboardManager_success=Saved dashboard~
+view_dashboardManager_deleteFail=Failed to delete dashboard.
+view_dashboardManager_deleted=Successfully deleted dashboard {0}~
+view_dashboards_title=Dashboard~
+view_dashboards_confirm1=Are you sure you want to delete~
+view_dashboards_portlets_refresh_fail1=Failed to update interval for portlets that
auto-refresh
+view_dashboards_portlets_refresh_fail2=Failed to disable reload for portlets that
auto-refresh
+view_dashboards_portlets_refresh_none=No Refresh
+view_dashboards_portlets_refresh_one_min=1 minute
+view_dashboards_portlets_refresh_multiple_min={0} minutes
+view_dashboards_portlets_refresh_success1=Updated interval for portlets that
auto-refresh
+view_dashboards_portlets_refresh_success2=Stopping reload for portlets that auto-refresh
+view_dashboardsManager_error1=Failed to add new dashboard~
+view_dashboardsManager_message_title_details=<h1>Welcome to
RHQ</h1>\n<p>The RHQ project is an abstraction and plug-in based systems
management suite that provides extensible and integrated systems management for multiple
products and platforms across a set of core features. The project is designed with layered
modules that provide a flexible architecture for deployment. It delivers a core user
interface that delivers audited and historical management across an entire enterprise. A
Server/Agent architecture provides remote management and plugins implement all specific
support for managed products.</p>\n <p>This default dashboard can be edited by
clicking the (edit mode) button above.</p>~
+
+view_portlet_factory_invalidPortlet=This is an obsolete portlet that is no longer valid.
Please delete it.
+
+view_portlet_defaultName_autodiscovery=Discovery Queue
+view_portlet_defaultName_favoriteResources=Favorite Resources
+view_portlet_defaultName_resourceMetric=Resource Metric Graph
+view_portlet_defaultName_groupMetric=Resource Group Metric Graph
+view_portlet_defaultName_inventorySummary=Inventory Summary
+view_portlet_defaultName_mashup=Mashup
+view_portlet_defaultName_message=Message
+view_portlet_defaultName_operations=Recent Operations
+view_portlet_defaultName_platformSummary=Platform Utilization
+view_portlet_defaultName_problemResources=Alerted or Unavailable Resources
+view_portlet_defaultName_recentAlerts=Recent Alerts
+view_portlet_defaultName_recentlyAddedResources=Recently Added Resources
+view_portlet_defaultName_tagCloud=Tag Count
+
+view_portlet_defaultName_group_alerts=Group: Alerts
+view_portlet_defaultName_group_bundles=Group: Bundle Deployments
+view_portlet_defaultName_group_config_updates=Group: Configuration Updates
+view_portlet_defaultName_group_events=Group: Event Counts
+view_portlet_defaultName_group_metrics=Group: Metrics
+view_portlet_defaultName_group_oobs=Group: OOB Conditions
+view_portlet_defaultName_group_operations=Group: Operations
+view_portlet_defaultName_group_pkg_hisory=Group: Package History
+view_portlet_defaultName_resource_alerts=Resource: Alerts
+view_portlet_defaultName_resource_bundles=Resource: Bundle Deployments
+view_portlet_defaultName_resource_config_updates=Resource: Configuration Updates
+view_portlet_defaultName_resource_events=Resource: Event Counts
+view_portlet_defaultName_resource_metrics=Resource: Measurements
+view_portlet_defaultName_resource_oobs=Resource: OOB Metrics
+view_portlet_defaultName_resource_operations=Resource: Operations
+view_portlet_defaultName_resource_pkg_hisory=Resource: Package History
+
+view_portlet_help_autodiscovery=This portlet allows import or ignore of newly discovered
resources. Imported resources are added to inventory for monitoring and management.
Ignored resources are not imported and are hidden from view unless explicitly unignored.
+view_portlet_help_bundle_deps=This portlet shows relevant bundle deployments based on
display criteria configured.
+view_portlet_help_config_updates=This portlet displays recent configuration changes
consistent with configuration settings.
+view_portlet_help_eventcounts=This portlet displays Event counts consistent with display
criteria configured.
+view_portlet_help_favoriteResources=This portlet displays the current user''s
favorite resources.
+view_portlet_help_graph=This portlet displays the resource metric graph.
+view_portlet_help_inventorySummary=This portlet displays a short summary of the current
user''s viewable inventory and metric collection rate.
+view_portlet_help_mashup=This portlet displays the returned content of a remote HTTP
request (via an iframe).
+view_portlet_help_metrics=This portlet graphs relevant recent metric data based on
display criteria configured.
+view_portlet_help_message=This portlet displays a static HTML message. The
<i>message</i> property must be configured.
+view_portlet_help_oobs=This portlet displays OOB(Out of Bound) metric conditions.
+view_portlet_help_operations=This portlet displays the most recently executed operations
for the current user''s inventory.
+view_portlet_help_scheduledOperations=This portlet displays the next scheduled operations
for the current user''s inventory.
+view_portlet_help_operations_criteria=This portlet displays Operations consistent with
display criteria configured.
+view_portlet_help_pkg_history=This portlet shows relevant package history based on
display criteria configured.
+view_portlet_help_platformSummary=This portlet displays utilization data (such as current
CPU and memory usage) for platform resources that are accessible by the current user.
+view_portlet_help_problemResources=This portlet displays the current user''s
alerted or unavailable resources.
+view_portlet_help_recentAlerts=This portlet displays alerts recently fired on the current
user''s viewable inventory.
+view_portlet_help_recentlyAdded=This portlet displays resources that have recently been
imported into inventory.
+view_portlet_help_tagCloud=This portlet displays the relative tag counts for the current
user''s inventory.
+view_portlet_help_none=There is no help available for this portlet.
+
+view_portlet_configure_needed=Click the Settings button to configure this portlet.
+view_portlet_configure_notNeeded=Configuration is not necessary for this portlet.
+view_portlet_configure_definitionTitle=Portlet Configuration
+view_portlet_configure_definitionDesc=The configuration settings for the portlet.
+
+view_portlet_autodiscovery_setting_platforms=discovered platforms
+
+view_portlet_graph_configure_resource_graph=The resource to graph~
+view_portlet_graph_configure_metricDefinition_graph=The metric definition id to graph~
+
+view_portlet_inventory_error1=Failed to retrieve inventory summary~
+view_portlet_inventory_tooltip_expand=Click to show more details for this resource.
+view_portlet_inventory_tooltip_collapse=Click to hide details for this resource.
+
+view_portlet_message_title=Message~
+
+view_portlet_operations_config_completed_maximum=Maximum number of Completed operations
to display.~
+view_portlet_operations_config_completed_enable=Whether to enable completed operations
results grouping for dashboard.~
+view_portlet_operations_config_scheduled_enable=Whether to enable scheduled operations
results grouping for dashboard.~
+view_portlet_operations_config_scheduled_maximum=Maximum number of Scheduled operations
to display.~
+view_portlet_operations_config_completed=completed operations~
+view_portlet_operations_config_show_last=show Last~
+view_portlet_operations_config_show_next=show Next~
+view_portlet_operations_disabled=(Results currently disabled. Change settings to enable
results.~
+
+view_portlet_platform_platform_error_1=Failed to load platform metrics~
+view_portlet_platform_type_error_1=Could not load type data~
+
+view_portlet_problemResources_config_display_maximum=Maximum number of Problem resources
to display.
+view_portlet_problemResources_config_display_range=Show problem resources going back this
many hours.
+view_portlet_problemResources_config_display_range2=From {0} to {1}
+view_portlet_problemResources_maxDisplaySetting=maximum resources.
+
+view_portlet_recentAlerts_config_members=Select Members~
+view_portlet_recentAlerts_config_priority_label=priority Alerts,~
+view_portlet_recentAlerts_config_when=within the past~
+view_portlet_recentAlerts_fail_msg=Failed to load resources assigned for alert
filtering.
+
+view_portlet_recentlyAdded_setting_addedPlatforms=recently added platforms
+view_portlet_recentlyAdded_error1=Failed to load recently added resources~
+view_portlet_results_empty=No results found using specified criteria.
+
+# =================== Inventory =====================
+view_inventory_adq=Discovery Queue~
+view_inventory_sectionHelp=From this section, newly discovered Resources, inventoried
Resources, and Groups can be viewed and managed.~
+view_inventory_problemGroups=Problem Groups~
+view_inventory_collectionInterval=Collection Interval~
+view_inventory_mixed=mixed~
+view_inventory_unavailableServers=Unavailable Servers
+view_inventory_groups=Groups~
+view_inventory_allGroups=All Groups~
+view_inventory_allResources=All Resources~
+view_inventory_platforms=Platforms~
+view_inventory_servers=Servers~
+view_inventory_services=Services~
+view_inventory_summary_agent_error1=Failed to locate agent managing resource id~
+view_inventory_summary_agent_error2=Failed to ping agent managing resource id~
+view_inventory_summary_agent_error3=You do not have permission to view details for this
Agent.
+view_inventory_summary_agent_fullEnpoint=Full Endpoint~
+view_inventory_summary_agent_fullEnpoint_err1=!No remote endpoint associated with this
resource!~
+view_inventory_summary_agent_last_title=Last Received Availability Report~
+view_inventory_summary_agent_status_title=Agent Communications Status~
+view_inventory_summary_agent_title=Agent Managing this Resource~
+view_inventory_dynagroupDefs=Dynagroup Definitions~
+view_metric_traits=Traits~
+view_metric_viewTraitHistory=Value History for Trait [{0}]~
+view_inventory_eventHistory_groupEventHistory=Group Event History~
+view_inventory_eventHistory_resourceEventHistory=Resource Event History~
+view_inventory_eventHistory_sourceFilter=Source Filter~
+view_inventory_eventHistory_detailsFilter=Details Filter~
+view_inventory_eventHistory_severityFilter=Severity Filter~
+view_inventory_eventHistory_timestamp=Timestamp~
+view_inventory_eventHistory_severity=Severity~
+view_inventory_eventHistory_details=Details~
+view_inventory_eventHistory_sourceLocation=Source Location~
+view_inventory_eventHistory_deleteSuccessful=You have successfully deleted [{0}] events
for [{1}]~
+view_inventory_eventHistory_deleteFailed=Failed to deleted selected events for [{0}]~
+view_inventory_eventHistory_purgeSuccessful=You have successfully purged [{0}] events for
[{1}]~
+view_inventory_eventHistory_purgeFailed=Failed to purge events for [{0}]~
+view_inventory_eventDetails_loadFailed=An error occurred loading the event details~
+view_inventory_groups_resourceGroups=Resource Groups~
+view_inventory_groups_children=Children~
+view_inventory_groups_descendants=Descendants~
+view_inventory_groups_deleteSuccessful=You have successfully deleted the selected
resource groups~
+view_inventory_groups_deleteFailed=Failed to delete the selected resource groups~
+view_inventory_groups_loadFailed=Failed to load group composite data~
+view_inventory_resource_loadFailed=Resource with id [{0}] does not exist or is not
accessible~
+view_inventory_resources_deleteConfirm=Are you sure you want to delete the selected
resources?~
+view_inventory_resources_deleteSuccessful=You have successfully deleted the selected
resources~
+view_inventory_resources_deleteFailed=Failed to delete the selected resources~
+view_inventory_resources_uninventoryConfirm=Are you sure you want to uninventory the
selected resources? Note that if a selected resource still exists, then it will get
rediscovered during its agent''s next discovery scan.
+view_inventory_resources_uninventorySuccessful=You have successfully uninventoried the
selected resources
+view_inventory_resources_uninventoryFailed=Failed to uninventory the selected resources
+view_inventory_resources_loadFailed=Failed to load resource composite data~
+view_inventory_resources_title=Member Resources~
+view_inventory_resources_title_children=Child Resources~
+view_inventory_resources_title_members=Member Resources~
+view_resource_inventory_activity_changed_by=Changed by
+view_resource_inventory_activity_criteria_no_recent_events=No event counts based off
display criteria.
+view_resource_inventory_activity_no_recent_alerts=No recent alerts
+view_resource_inventory_activity_no_recent_bundle_deploy=No recent bundle deployments
+view_resource_inventory_activity_no_recent_config_history=No configuration change
history
+view_resource_inventory_activity_no_recent_events=No events in the last 24 hours
+view_resource_inventory_activity_no_recent_metrics=This resource has no recent metrics
+view_resource_inventory_activity_no_recent_oob=No OOB conditions found
+view_resource_inventory_activity_no_recent_operations=No recent operation history
+view_resource_inventory_activity_no_recent_pkg_history=No recent package history
+view_resource_inventory_childhistory_createdChild=Created Child
+view_resource_inventory_childhistory_deletedChild=Deleted Child
+view_resource_inventory_childhistory_status_invalidArtifact=Invalid Artifact
+view_resource_inventory_childhistory_status_invalidConfig=Invalid Configuration
+view_resource_inventory_childhistory_filterTitle=Past N Days
+view_resource_monitor_availability_loadFailed=Failed to load availability history~
+view_resource_monitor_graphs_noneAvailable=No graphs available~
+view_resource_monitor_graphs_loadFailed=Failed to load graph data~
+view_resource_monitor_graphs_lookupFailed=Failed to find resource for graph~
+view_resource_monitor_graph_instructions=Point your mouse to a data point on the chart~
+view_resource_monitor_graph_live_tooltip=Click for a live graph of current values~
+view_resource_monitor_table_min=Minimum
+view_resource_monitor_table_max=Maximum
+view_resource_monitor_table_avg=Average
+view_resource_monitor_table_last=Last
+view_resource_monitor_table_alerts=Alerts
+view_resource_monitor_detailed_graph_label=Detailed Graph~
+view_resource_monitor_calltime_title=Call Time Data~
+view_resource_monitor_calltime_destination=Call Destination~
+view_resource_monitor_calltime_count=Count~
+view_resource_monitor_calltime_minimum=Minimum~
+view_resource_monitor_calltime_average=Average~
+view_resource_monitor_calltime_maximum=Maximum~
+view_resource_monitor_calltime_total=Total~
+view_resource_monitor_calltime_loadFailed=Could not load call time data~
+view_resource_monitor_calltime_lookupFailed=Could not load resource for call time~
+view_resource_monitor_calltime_editFailed=Call time data can not be edited~
+view_resource_monitor_schedules_title=Resource Metric Collection Schedules~
+view_resource_title_tagUpdateFailed=Failed to update resource tags~
+view_resource_title_component_errors_tooltip=Shows managed component errors. Click for
details~
+view_tree_common_loadFailed_generic=Failed to load data for tree~
+view_tree_common_loadFailed_root=Failed to load root for tree~
+view_tree_common_loadFailed_descendants=Failed to load descendants for tree~
+view_tree_common_loadFailed_children=Failed to load children for node~
+view_tree_common_createFailed_autoCluster=Failed to create or update autocluster backing
group
+view_tree_common_loadFailed_group=Failed to load group with id [{0}]
+view_tree_common_loadFailed_groupTree=Failed to load group tree
+view_tree_common_loadFailed_selection=Failed to select this node~
+view_tree_common_loadFailed_node=Failed to load data for this node~
+view_tree_common_loadFailed_create=Failed to create view for this node~
+view_tree_common_loadFailed_update=Failed to update view for this node~
+view_tree_common_contextMenu_loadFail_children=Failed to load platform manual add
children
+view_tree_common_contextMenu_loadFail_dashboards=Failed to load user dashboards
+view_tree_common_contextMenu_loadFail_group=Failed to load group for context menu
+view_tree_common_contextMenu_type_name_label=Type: {0}
+view_tree_common_contextMenu_resourceConfiguration=Resource Configuration~
+view_tree_common_contextMenu_editPluginConfiguration=Edit [{0}] Plugin Configuration~
+view_tree_common_contextMenu_editResourceConfiguration=Edit [{0}] Resource
Configuration~
+view_tree_common_contextMenu_operations=Operations~
+view_tree_common_contextMenu_operations_loadFailed=Failure to start wizard for running
operations~
+view_tree_common_contextMenu_measurements=Measurements~
+view_tree_common_contextMenu_addChartToDashboard=Add chart to dashboard [{0}]~
+view_tree_common_contextMenu_resourceGraph=Resource Metric Graph
+view_tree_common_contextMenu_groupGraph=Group Metric Graph
+view_tree_common_contextMenu_saveChartToDashboardSuccessful=You have saved dashboard
[{0}]~
+view_tree_common_contextMenu_saveChartToDashboardFailure=Failed to save the dashboard~
+view_tree_common_contextMenu_loadFailed_dashboard=Failed to load user dashboards
+view_tree_common_contextMenu_loadFailed_manualAddChildren=Failed to load platform manual
add children~
+view_tree_group_error_updateAutoCluster=Failed to create or update autocluster backing
group. key: [{0}]
+view_tabs_common_activity=Activity
+view_tabs_common_agent=Agent
+view_tabs_common_summary=Summary~
+view_tabs_common_overview=Overview~
+view_tabs_common_dashboard=Dashboard~
+view_tabs_common_timeline=Timeline~
+view_tabs_common_monitoring=Monitoring~
+view_tabs_common_graphs=Graphs~
+view_tabs_common_tables=Tables~
+view_tabs_common_traits=Traits~
+view_tabs_common_availability=Availability~
+view_tabs_common_schedules=Schedules~
+view_tabs_common_calltime=Calltime~
+view_tabs_common_inventory=Inventory~
+view_tabs_common_groups=Groups~
+view_tabs_common_members=Members~
+view_tabs_common_group_members=Group Members
+view_tabs_common_group_membership=Group Membership~
+view_tabs_common_child_resources=Child Resources~
+view_tabs_common_child_history=Child History~
+view_tabs_common_connectionSettings=Connection Settings~
+view_tabs_common_connectionSettingsHistory=Connection Settings History~
+view_tabs_common_operations=Operations~
+view_tabs_common_schedule=Schedule
+view_tabs_common_history=History~
+view_tabs_common_alerts=Alerts~
+view_tabs_common_definitions=Definitions~
+view_tabs_common_current=Current~
+view_tabs_common_events=Events~
+view_tabs_common_configuration=Configuration~
+view_tabs_common_content=Content~
+view_tabs_common_deployed=Deployed~
+view_tabs_common_new=New~
+view_tabs_common_subscriptions=Subscriptions~
+view_titleBar_common_updateTagsSuccessful=The tags for [{0}] have been updated~
+view_titleBar_common_updateTagsFailure=Failed to update the tags for [{0}]~
+view_titleBar_common_loadTagsFailure=Failed to load the tags for [{0}]~
+view_titleBar_common_clickToRemoveFav=Click to remove this as a favorite~
+view_titleBar_common_clickToAddFav=Click to add this as a favorite~
+view_titleBar_common_removedFav=You have removed [{0}] as one of your favorites~
+view_titleBar_common_addedFav=You have added [{0}] as a favorite~
+view_titleBar_common_removedFavFailure=Failed to remove [{0}] as one of your favorites~
+view_titleBar_common_addedFavFailure=Failed to add [{0}] as a favorite~
+view_titleBar_group_failInfo=Failed to get general info on group [{0}] with ID [{1}]
+view_titleBar_group_summary_collapsedTooltip=Click to show more details for this group
+view_titleBar_group_summary_expandedTooltip=Click to hide details for this group
+view_dynagroup_expressionSet=Expression Set~
+view_dynagroup_recalculationInterval=Recalculation Interval~
+view_dynagroup_lastCalculationTime=Last Calculation Time~
+view_dynagroup_nextCalculationTime=Next Calculation Time~
+view_dynagroup_definitionCreated=You have successfully created a group definition named
[{0}]~
+view_dynagroup_definitionLoadFailure=Failed to load group definitions~
+view_dynagroup_definitionAlreadyExists=A group definition already exists with this name~
+view_dynagroup_saveSuccessful=You have successfully saved the group definition named
[{0}]~
+view_dynagroup_saveFailure=Failed to save the group definition named [{0}]~
+view_dynagroup_singleSaveFailure=An error occurred - there should have been one created,
but instead there were [{0}] created~
+view_dynagroup_saveAndRecalculate=Save & Recalculate~
+view_dynagroup_recalculate=Recalculate~
+view_dynagroup_recalcSuccessful=You have successfully recalculated this group
definition~
+view_dynagroup_recalcFailure=Failed to recalculated this group definition~
+view_dynagroup_recalcSuccessfulSelection=You have successfully recalculated [{0}] group
definitions~
+view_dynagroup_recalcFailureSelection=Failed to recalculated the selected group
definitions~
+view_dynagroup_deleteSuccessfulSelection=You have successfully deleted [{0}] group
definitions~
+view_dynagroup_deleteFailureSelection=Failed to delete the selected group definitions~
+view_dynagroup_children=DynaGroup Children~
+view_dynagroup_newGroupDefinition=New Group Definition~
+view_dynagroup_editing=Editing [{0}]~
+view_dynagroup_expression=Expression~
+view_dynagroup_recursive=Recursive~
+view_dynagroup_loadDefinitionFailure=Failed to load group definition [{0}]~
+view_dynagroup_loadDefinitionMissing=There is no group definition with the ID of [{0}]~
+view_dynagroup_permDenied=You do not have permission to view group definitions~
+view_dynagroup_definitions=DynaGroup Definitions~
+view_dynagroup_template_customExpression=Custom Expression...
+view_dynagroup_template_jbossas4_clusters=JBossAS 4 - Clusters
+view_dynagroup_template_jbossas5_clusters=JBossAS 5/6 - Clusters
+view_dynagroup_template_jbossas4_earClusters=JBossAS 4 - Clustered EARs
+view_dynagroup_template_jbossas4_uniqueVersions=JBossAS 4 - Unique versions
+view_dynagroup_template_platforms=Platform resources in inventory
+view_dynagroup_template_uniqueResourceTypes=Unique resource types in inventory
+view_dynagroup_template_jbossas4_hostingApp=JBossAS 4 - All hosting any version of
"my" app
+view_dynagroup_template_jbossas4_nonsecured=JBossAS 4 - All non-secured
+view_dynagroup_template_downedResources=All resources currently down
+view_dynagroup_mixed=Mixed
+view_dynagroup_compatible=Compatible
+view_dynagroup_expressionBuilderIconTooltip=Expression Builder...
+view_dynagroup_exprBuilder_title=Expression Builder
+view_dynagroup_exprBuilder_expression=Expression
+view_dynagroup_exprBuilder_expression_tooltip=This is the full expression that is
represented by the selections in the form below. This text will be added to your group
definition expression text when you click the "Add Expression" button.
+view_dynagroup_exprBuilder_addExpression=Add Expression
+view_dynagroup_exprBuilder_value_tooltip=The string value for the expression to query
+view_dynagroup_exprBuilder_comparisonType=Comparison Type
+view_dynagroup_exprBuilder_comparisonType_tooltip=Comparison Type
+view_dynagroup_exprBuilder_unset=Unset
+view_dynagroup_exprBuilder_unset_tooltip=Unset will find all of the values that have a
null value in the database. This is not possible using the "=" operator because
of how databases store and query data.
+view_dynagroup_exprBuilder_propertyName=Property Name
+view_dynagroup_exprBuilder_propertyName_tooltip=The name of the property to query. This
is defined by the expression type as well as the resource type.
+view_dynagroup_exprBuilder_resourceType=Resource Type
+view_dynagroup_exprBuilder_resourceType_tooltip=The type of resource
+view_dynagroup_exprBuilder_definingPlugin=Defining Plugin
+view_dynagroup_exprBuilder_definingPlugin_tooltip=The plugin to search
+view_dynagroup_exprBuilder_expressionType=Expression Type
+view_dynagroup_exprBuilder_expressionType_tooltip=The type of property this expression
switches on:<br/> \
+<b>Resource</b>: A resource property such as its name or version<br/>
\
+<b>Resource Type</b>: Search for resources of a specific type<br/> \
+<b>Resource Category</b>: Search for resources by category: platform, server,
service<br/> \
+<b>Trait</b>: Resources that have selected values for a monitored
trait<br/> \
+<b>Plugin Configuration</b>: Search by the plugin component configuration
setting of the component<br/> \
+<b>Resource Configuration</b>: Search by the configuration setting of the
managed resource
+view_dynagroup_exprBuilder_resource=Resource
+view_dynagroup_exprBuilder_resource_tooltip=Choose the level of the resource you wish to
select. For example, select "parent" will find resources whose parent resource
matches the rest of the expression.
+view_dynagroup_exprBuilder_groupBy=Group by
+view_dynagroup_exprBuilder_groupBy_tooltip=GroupBy will cause the system to pivot on the
values from the entered expressions creating a separate group for each value. For example,
GroupBy on the cluster name to create a group for each cluster with all cluster members in
it.
+view_dynagroup_exprBuilder_resource_resource=Resource
+view_dynagroup_exprBuilder_resource_child=Child
+view_dynagroup_exprBuilder_resource_parent=Parent
+view_dynagroup_exprBuilder_resource_grandparent=Grandparent
+view_dynagroup_exprBuilder_resource_greatGrandparent=GreatGrandparent
+view_dynagroup_exprBuilder_resource_greatGreatGrandparent=GreatGreatGrandparent
+view_dynagroup_exprBuilder_comparisonType_equals=equals
+view_dynagroup_exprBuilder_comparisonType_startsWith=starts with
+view_dynagroup_exprBuilder_comparisonType_endsWith=ends with
+view_dynagroup_exprBuilder_comparisonType_contains=contains
+view_dynagroup_exprBuilder_expressionType_resource=Resource
+view_dynagroup_exprBuilder_expressionType_resourceType=Resource Type
+view_dynagroup_exprBuilder_expressionType_resourceCategory=Resource Category
+view_dynagroup_exprBuilder_expressionType_trait=Trait
+view_dynagroup_exprBuilder_expressionType_pluginConfig=Plugin Configuration
+view_dynagroup_exprBuilder_expressionType_resourceConfig=Resource Configuration
+view_dynagroup_exprBuilder_pluginLoadFailure=Cannot get the list of plugins
+view_dynagroup_exprBuilder_resTypeLoadFailure=Cannot get list of resource types for
plugin [{0}]
+view_dynagroup_exprBuilder_propLoadFailure=Cannot get list of properties
+view_dynagroup_exprBuilder_noResourceTypes=--No resource types--
+view_dynagroup_exprBuilder_noProperties=--No properties--
+view_dynagroup_exprBuilder_noPlugins=--No plugins--
+
+view_group_detail_failLoad=Failed to load group for group with ID [{0}]
+view_group_detail_failLoadComp=Failed to load group composite for group with ID [{0}]
+view_group_detail_recursiveChange=You successfully changed the recursive setting for
group [{0}]
+view_group_detail_failRecursiveChange=Failed to update the recursive setting for group
[{0}]
+view_group_inventory_activity_no_recent_metrics=This group has no recent metrics
+view_group_membership_failFetch=Failed to fetch Resource Group
+view_group_membership_saveFailure=Failed to update membership of group [{0}]~
+view_group_membership_saveSuccessful=You have updated the membership of group [{0}]~
+view_group_resConfig_edit_saveTooltip=Update the configurations of all group members~
+view_group_resConfig_edit_loadFail=Failed to retrieve member Resource configurations for
[{0}]
+view_group_resConfig_edit_noperm=You do not have permission to edit this group
configuration~
+view_group_resConfig_edit_saveInitiated_concise=The group configuration updates have been
initiated~
+view_group_resConfig_edit_saveInitiated_full=The group configuration updates have been
initiated for the [{0}] compatible group named [{1}]~
+view_group_resConfig_edit_saveFailure=Failed to initiate group configuration update for
[{0}] compatible group named [{1}]~
+view_group_resConfig_edit_valid=All configuration properties have valid values, so the
configuration can now be saved~
+view_group_resConfig_edit_invalid=The following configuration properties have invalid
values and must be corrected before the configuration can be saved: [{0}]~
+
+view_group_resConfig_view_noperm=You do not have permissions to see the resource
configuration settings
+view_group_resConfig_view_groupProperties=Group Properties
+view_group_resConfig_table_title=Group Resource Configuration History
+view_group_resConfig_table_statusDetails=Status Details
+view_group_resConfig_table_viewSettings=View Settings
+view_group_resConfig_table_viewMemberHistory=View Member History
+view_group_resConfig_table_msg1=View Member History for status of each individual
resource
+view_group_resConfig_table_failFetch=Failed to get group resource config history
+view_group_resConfig_table_deleteSuccessful=You have deleted [{0}] history items
+view_group_resConfig_table_deleteFailure=Failed to delete group resource config history
+view_group_resConfig_table_statusSuccess=This group configuration update was successful
+view_group_resConfig_table_statusInprogress=This group configuration update is still in
progress
+view_group_resConfig_table_statusNochange=No changes were made to this group
configuration
+view_group_resConfig_table_statusFailure=This group configuration update failed
+view_group_resConfig_table_clickStatusIcon=Click the status icon for full details
+view_group_resConfig_members_title=Group Resource Configuration Member Histories
+view_group_resConfig_members_fetchFailure=Failed to get resource config update history
for members of group [{0}]
+view_group_resConfig_members_fetchFailureConfig=Failed to retrieve member resource
configuration settings for [{0}]
+view_group_resConfig_members_fetchFailureConfigInProgress=A group resource configuration
update is currently in progress. You must wait until the update is finished before you can
view the group settings.
+view_group_resConfig_members_statusDetails=Status Details
+view_group_resConfig_members_statusSuccess=This configuration update was successful
+view_group_resConfig_members_statusInprogress=This configuration update is still in
progress
+view_group_resConfig_members_statusNochange=No changes were made to this configuration
+view_group_resConfig_members_statusFailure=This configuration update failed for an
unknown reason
+
+view_group_pluginConfig_view_noperm=You do not have permissions to see the connection
settings~
+view_group_pluginConfig_view_groupProperties=Group Properties~
+view_group_pluginConfig_table_failFetch=Failed to get group plugin config history
+view_group_pluginConfig_table_title=Group Connection Settings History~
+view_group_pluginConfig_table_statusDetails=Status Details~
+view_group_pluginConfig_table_viewSettings=View Settings~
+view_group_pluginConfig_table_viewMemberHistory=View Member History~
+view_group_pluginConfig_table_deleteSuccessful=You have deleted [{0}] history items~
+view_group_pluginConfig_table_deleteFailure=Failed to delete group plugin config
history~
+view_group_pluginConfig_table_msg1=View Member History for status of each individual
resource~
+view_group_pluginConfig_table_statusSuccess=This group configuration update was
successful~
+view_group_pluginConfig_table_statusInprogress=This group configuration update is still
in progress~
+view_group_pluginConfig_table_statusNochange=No changes were made to this group
configuration~
+view_group_pluginConfig_table_statusFailure=This group configuration update failed~
+view_group_pluginConfig_table_clickStatusIcon=Click the status icon for full details~
+view_group_pluginConfig_members_title=Group Connection Settings Member Histories~
+view_group_pluginConfig_members_statusDetails=Status Details~
+view_group_pluginConfig_members_statusSuccess=This configuration update was successful~
+view_group_pluginConfig_members_statusInprogress=This configuration update is still in
progress~
+view_group_pluginConfig_members_statusNochange=No changes were made to this
configuration~
+view_group_pluginConfig_members_statusFailure=This configuration update failed for an
unknown reason~
+view_group_pluginConfig_members_fetchFailure=Failed to get plugin config update history
for members of group [{0}]~
+view_group_pluginConfig_members_fetchFailureConn=Failed to retrieve member connection
settings for [{0}]
+view_group_pluginConfig_members_fetchFailureConnInProgress=A group plugin configuration
update is currently in progress. You must wait until the update is finished before you can
view the group settings.
+view_group_pluginConfig_edit_currentGroupProperties=Current Group Properties~
+view_group_pluginConfig_edit_saveTooltip=Update the connection settings of all group
members~
+view_group_pluginConfig_edit_noperm=You do not have permission to edit this group
connection settings~
+view_group_pluginConfig_edit_saveInitiated_concise=The group connection setting updates
have been initiated~
+view_group_pluginConfig_edit_saveInitiated_full=The group connection setting updates have
been initiated for the [{0}] compatible group named [{1}]~
+view_group_pluginConfig_edit_saveFailure=Failed to initiate group connection setting
update for [{0}] compatible group named [{1}]~
+view_group_pluginConfig_edit_valid=All connection setting properties have valid values,
so the connection settings can now be saved~
+view_group_pluginConfig_edit_invalid=The following connection setting properties have
invalid values and must be corrected before the connection settings can be saved: [{0}]~
+view_group_meas_schedules_title=Group Metric Collection Schedules~
+view_group_summary_nameUpdateFailure=Failed to change the name of the resource group with
ID [{0}] - could not change from [{1}] to [{2}]~
+view_group_summary_nameUpdateSuccessful=You have changed the name of the resource group
with ID [{0}] from [{1}] to [{2}]~
+view_group_summary_memberType=Member Type~
+view_group_summary_memberCount=Member Count~
+view_group_summary_dynamic=Dynamic~
+view_group_summary_recursive=Recursive~
+view_group_summary_groupDefinition=Group Definition~
+view_group_summary_mixed=Mixed~
+view_group_summary_compatible=Compatible
+view_group_summary_descUpdateFailure=Failed to change the description of the resource
group with ID [{0}]~
+view_group_summary_descUpdateSuccessful=You have changed the description of this resource
group~
+view_group_summary_dynamicNote=Dynamic group names and descriptions are managed, and
therefore are not editable~
+
+# Connection Settings Details
+#------------------------------------------
+view_connectionSettingsDetails_noPermission=You do not have permission to edit this
Resource''s connection settings.~
+view_connectionSettingsDetails_error_updateFailure=Failed to update connection
settings.~
+view_connectionSettingsDetails_messageConcise_updateSuccess=Connection settings
updated.~
+view_connectionSettingsDetails_messageDetailed_updateSuccess=Connection settings updated
for Resource [{0}].~
+view_connectionSettingsDetails_allPropertiesValid=All connection settings have valid
values, so the settings can now be saved.~
+view_connectionSettingsDetails_somePropertiesInvalid=The following connection settings
have invalid values: {0}. The values must be corrected before the settings can be saved.~
+
+# Resource Resource Groups
+#-----------------------------------------
+view_resourceResourceGroupList_error_fetchFailure=Failed to fetch Resource''s
groups.~
+view_resourceResourceGroupList_error_updateFailure=Failed to update assigned Resource
groups.~
+view_resourceResourceGroupList_message_updateSuccess=Group membership updated for [{0}].
+
+# Configuration Details
+#-------------------------------
+view_configurationDetails_noPermission=You do not have permission to edit this
Resource''s configuration.~
+view_configurationDetails_error_updateFailure=Failed to update configuration.~
+view_configurationDetails_messageConcise=Configuration updated - current version is
{0}.~
+view_configurationDetails_messageDetailed=Configuration updated to version {0} for
Resource [{1}].
+view_configurationDetails_allPropertiesValid=All configuration properties have valid
values, so the configuration can now be saved.~
+view_configurationDetails_somePropertiesInvalid=The following configuration properties
have invalid values: {0}. The values must be corrected before the configuration can be
saved.~
+view_configurationDetails_configNotUpdatedDueToNoChange=Configuration was not updated,
since the new configuration is equivalent to the current configuration.
+
+# Resource Configuration History List
+#-------------------------------
+view_configurationHistoryList_title=Configuration History~
+
+# Abstract Configuration History List
+#-------------------------------
+view_configurationHistoryList_rollback=Rollback
+view_configurationHistoryList_rollback_success=You successfully rolled back the
configuration to the selected past configuration.
+view_configurationHistoryList_rollback_failure=Failed to rollback the configuration. The
original configuration is still in effect.
+view_configurationHistoryList_delete_success=You successfully deleted the selected
configuration history items.
+view_configurationHistoryList_delete_failure=Failed to delete the configuration history
items.
+view_configurationHistoryList_cannotDeleteGroupItems=One or more selected configuration
history items are part of a group configuration update. \
+You must purge that parent group history item before you can delete its individual
resource history items.
+view_configurationHistoryList_cannotDeleteCurrent=One of the selected history items
represents the current configuration - you cannot delete it.
+view_configurationHistoryList_table_statusSuccess=This configuration update was
successful
+view_configurationHistoryList_table_statusInprogress=This configuration update is still
in progress
+view_configurationHistoryList_table_statusNochange=No changes were made to this
configuration
+view_configurationHistoryList_table_statusFailure=This configuration update failed
+view_configurationHistoryList_table_clickStatusIcon=Click the status icon for full
details
+
+# Configuration History Details
+#------------------------------------------
+view_configurationHistoryDetails_error_loadFailure=Unable to load configuration
history.~
+
+
+# Operation Schedule List
+#------------------------
+xxx =
+
+# Operation Schedule Details
+#---------------------------
+view_operationScheduleDetails_operationSchedule=Operation Schedule
+view_operationScheduleDetails_field_description=Description
+view_operationScheduleDetails_field_parameters=Parameters
+view_operationScheduleDetails_field_timeout=Timeout
+view_operationScheduleDetails_fieldHelp_timeout=a time duration - if specified, if the
duration elapses before a scheduled operation execution has completed, the RHQ Server will
timeout the operation and consider it to have failed; note, it is usually not possible to
abort the underlying managed resource operation if it was already initiated
+view_operationScheduleDetails_fieldHelp_description=an optional description of this
scheduled operation (e.g. nightly maintenance app server restart)
+view_operationScheduleDetails_fieldDefault_description=Select an operation to see its
description.
+view_operationScheduleDetails_fieldDefault_parameters=Select an operation to see its
parameters.
+view_operationScheduleDetails_noParameters=This operation does not take any parameters.
+view_operationScheduleDetails_enterParametersBelow=Enter parameters below...
+
+view_group_operationScheduleDetails_failedToLoadMembers=Failed to load group member
Resources.
+view_group_operationScheduleDetails_field_execute=Execute
+view_group_operationScheduleDetails_value_parallel=in parallel
+view_group_operationScheduleDetails_value_sequential=in the order specified below (drag
and drop member Resources to change order)
+view_group_operationScheduleDetails_field_haltOnFailure=Halt on Failure?
+view_group_operationScheduleDetails_memberResource=Member Resource
+
+
+# Operation History List
+#-----------------------
+view_operationHistoryList_title=Operation History~
+view_operationHistoryList_button_runOperation=Run Operation~
+view_operationHistoryList_button_forceDelete=Force Delete
+view_operationHistoryList_notYetStarted=not yet started
+
+# Operation History Details
+#--------------------------
+view_operationHistoryDetails_error_fetchFailure=Failure loading operation history.~
+view_operationHistoryDetails_operation=Operation
+view_operationHistoryDetails_dateSubmitted=Date Submitted
+view_operationHistoryDetails_dateCompleted=Date Completed
+view_operationHistoryDetails_requestor=Requestor
+view_operationHistoryDetails_status=Status
+view_operationHistoryDetails_parameters=Parameters
+view_operationHistoryDetails_results=Results
+view_operationHistoryDetails_noResults=This operation does not return any results.
+
+
+# Summary Overview
+#-----------------------------
+view_summaryOverview_header_detectedErrors=Detected Errors~
+view_summaryOverview_tooltip_detectedErrors=Click on the rows to see the error details.~
+view_summaryOverview_title_errorDetailsWindow=Error Details~
+
+# Summary Overview Form
+#-------------------------------------
+view_summaryOverviewForm_field_type=Type~
+view_summaryOverviewForm_field_name=Name~
+view_summaryOverviewForm_field_description=Description~
+view_summaryOverviewForm_field_location=Location~
+view_summaryOverviewForm_field_version=Version~
+view_summaryOverviewForm_error_traitsLoadFailure=Failed to load traits for {0}.~
+view_summaryOverviewForm_label_plugin=Plugin:
+view_summaryOverviewForm_label_type=Type:
+view_summaryOverviewForm_header_summary=Summary~
+view_summaryOverviewForm_error_nameChangeFailure=Failed to change name of Resource with
id {0} from [{1}] to [{2}].~
+view_summaryOverviewForm_message_nameChangeSuccess=Name of Resource with id {0} was
changed from [{1}] to [{2}].~
+view_summaryOverviewForm_error_descriptionChangeFailure=Failed to change description of
Resource with id {0} from [{1}] to [{2}].~
+view_summaryOverviewForm_message_descriptionChangeSuccess=Description of Resource with id
{0} was changed from [{1}] to [{2}].~
+view_summaryOverviewForm_error_locationChangeFailure=Failed to change location of
Resource with id {0} from [{1}] to [{2}].~
+view_summaryOverviewForm_message_locationChangeSuccess=Location of Resource with id {0}
was changed from [{1}] to [{2}].~
+
+# Summary Dashboard
+#-----------------------------
+view_summaryDashboard_resetConfirm=Reset to default summary dashboard (lose local
changes)?
+
+# Group Inventory>Members subtab
+#-----------------------------------------
+view_groupInventoryMembers_button_updateMembership=Update Membership...
+view_groupInventoryMembers_title_updateMembership=Update Membership
+
+
+#==================== Reports ======================
+
+view_reportsTop_title=Relat\u00F3rios~
+view_reportsTop_description=This section provides access to global reports.~
+view_reports_platforms=Utiliza\u00E7\u00E3o de Mem\u00F3ria e CPU~
+view_reports_subsystems=Subsistemas~
+view_reports_alertDefinitions=Defini\u00E7\u00E3o de Alertas~
+
+view_measurementOob_title=M\u00E9tricas Suspeitas~
+
+view_tagCloud_title=Nuvem de Tags~
+view_tagCloud_error_fetchFailure=Falha ao carregar etiquetas (tags).~
+view_tagCloud_error_tagUsedCount=Etiqueta (tag) usada {0} vezes.~
+view_tagCloud_deleteTag=Delete Tag
+view_tagCloud_deleteTagFailure=Failed to delete the tag [{0}]
+view_tagCloud_deleteTagSuccess=You successfully deleted the tag [{0}]
+
+view_reports_inventorySummary_failFetch=Failed to get inventory summary
+
+view_taggedResources_title=Recursos Etiquetados~
+
+view_reports_alertDefinitions_parentHover=Click to go to the parent alert definition
+view_reports_alertDefinitions_resTypeLoadError=Cannot get the template resource type -
unable to view the alert template.
+
+#==================== Help ======================
+
+view_helpTop_description=This section provides access to documentation, tutorials,
version, and other helpful information.
+view_help_section_product=Product
+view_help_section_product_about=About
+
+
+#===================== Test =======================
+view_testTop_title=Teste~
+view_testTop_description=Esta se\u00E7\u00E3o cont\u00E9m p\u00E1ginas para
realiza\u00E7\u00E3o de testes em v\u00E1rios componentes UI.~
+
+#=================== Top Level =====================
+
+# About Box
+#----------
+view_aboutBox_allRightsReserved=Todos os Direitos Reservados.~
+view_aboutBox_buildNumber=N\u00FAmero do Build\:~
+view_aboutBox_failedToLoad=Falha ao carregar informa\u00E7oes do produto.~
+view_aboutBox_homepage=P\u00E1gina Inicial~
+view_aboutBox_jbossByRedHat=JBoss by Red Hat~
+view_aboutBox_title=Sobre {0}~
+view_aboutBox_version=Vers\u00E3o\:~
+
+# CoreGUI
+#--------------
+view_core_error_1=Falha ao perquisar novos alertas~
+#view_core_loggedInAs = Logged in as {0}
+view_core_loggedOut=Logged out~
+view_core_recentAlerts=[{0}] alertas recentes~
+view_core_noRecentAlerts=There are no recent alerts to report
+view_core_uncaught=Exce\u00E7\u00E3o n\u00E3o capturada~
+
+# Login
+#--------------
+view_login_invalidEmail=Endere\u00E7o de e-mail inv\u00E1lido~
+view_login_login=Login~
+view_login_logout=Logout~
+view_login_noBackend=Fonte de Dados indispon\u00EDvel.~
+view_login_noLdap=Note: Optional retrieval of ldap details unsuccessful. Manual entry is
required.~
+view_login_noUser=Usu\u00E1rio ou senha inv\u00E1lidos.~
+view_login_prompt=Favor efetuar Login~
+view_login_registerLater=(Logout - Concluir registro mais tarde.)~
+view_login_registerLdapSuccess=Novo usu\u00E1rios do LDAP registrado com sucesso.~
+view_login_registerUser=Registrar Usu\u00E1rio~
+view_login_welcome=Bem Vindo~
+view_login_welcomeMsg=Seja Bem Vindo ao JBoss ON\! <br/><br/> Informe ou
altere os seguintes campos para completar o processo de registro.<br/> Clique em
"OK" para acessar o sistema.<br/><br/>~
+
+# Menu Bar
+#--------------
+view_menuBar_logout=Logout~
+
+# Search Bar, GUI
+#-----------------
+view_searchBar_resources=Recursos~
+view_searchBar_resourceGroups=Grupos de Recursos~
+# TODO: i18n pluralization
+view_searchBar_welcomeMessage=procurar por {0}s~
+view_searchBar_defaultPattern=definir nome para o padr\u00E3o~
+view_searchBar_error_selectSavedSearch=''Erro ao selecionar a
pesquisa''~
+view_searchBar_query=Query~
+
+view_searchGUI_loginStatus=Imposs\u00EDvel determinar o status do login, verifique o
status do servidor~
+
+# Message Center
+#--------------------------
+view_messageCenter_messageTitle=Centro de Mensagens~
+view_messageCenter_noRecentMessages=N\u00E3o existem Mensagens Recentes~
+view_messageCenter_maxMessages=Max Messages
+view_messageCenter_lastNMessages=Last {0} Messages
+view_messageCenter_clearAllMessages=Clear All Messages
+view_messageCenter_messageTime=Tempo~
+view_messageCenter_messageSeverity=Severidade~
+view_messageCenter_messageDetail=Detalhe~
+view_messageCenter_stackTraceFollows=--- STACK TRACE FOLLOWS ---
+view_messageCenter_messageBarShowDetails=Show Details
+common_title_favorites=Favoritos
+common_title_summary_counts=Sum\u00E1rio de Contagem
+dataSource_traits_group_field_memberResource=Recurso Membro
+
+
+# Problem Resources
+#------------------------------
+dataSource_problemResources_field_resource=Recurso
+dataSource_problemResources_field_location=Local
+
+# Configuration History
+#-------------------------------
+dataSource_configurationHistory_field_id=ID
+dataSource_configurationHistory_field_resource=Recurso
+dataSource_configurationHistory_field_createdTime=Criado
+dataSource_configurationHistory_field_status=Status
+dataSource_configurationHistory_field_subject=Assunto
+dataSource_resourceErrors_field_detail=Mensagem detalhada
+view_adminConfig_license=Licen\u00E7a
+view_adminRoles_roleExists=O perfil com nome [{0}] j\u00E1 existe.
+view_alerts_field_ack_status_empty=Ainda n\u00E3o verificado
+view_alerts_field_ack_status_filled={0} verificado em {1}
+view_alerts_field_resource=Recurso
+view_alert_details_breadcrumb=Detalhes
+TODO=PAREI AQUI\!\!\!
+view_alert_common_tab_notifications_all_emails=Todos os Emails
+view_alert_common_tab_notifications_bad_emails=Emails recusados
+view_measureRange_day=1 Dia
+view_measureRange_days={0} Dias
+view_measureRange_hour=1 Hora
+view_measureRange_hours={0} Horas
+view_measureRange_minutes={0} Minutos
+view_measureRange_range=Faixa
+view_tags_title=Tags:~
+view_upload_tooltip_1=Select a file to upload, then click Upload or Next~
+# // dup in common
+view_dashboardsManager_inventory_title=Inventory Summary~
+view_dashboardsManager_mashup_title=RHQ News~
+view_dashboardsManager_message_title=Welcome To RHQ~
+view_dashboardsManager_tagcloud_title=Tag Cloud~
+view_portlet_autodiscovery_config_platform_selection=Number of platforms to display~
+view_portlet_autodiscovery_help_msg=This portlet offers the ability to import newly
discovered resources into the inventory for monitoring and management or to ignore them
from further action.~
+view_portlet_autodiscovery_title=Discovery Queue~
+view_portlet_favoriteResources_msg=This portlet displays your favorite resources~
+view_portlet_favoriteResources_title=Favorite Resources~
+view_portlet_generic_help=No help available for this portlet~
+view_portlet_generic_unconfigured=No settings available for this portlet~
+view_portlet_graph_configure_title=Graph Config~
+view_portlet_graph_configure_title_desc=Configuration of the graph portlet~
+view_portlet_graph_help_msg=This Portlet supports the graphing of a resource metric.~
+view_portlet_graph_help_title=Graph Portlet~
+view_portlet_graph_help_unconfigured=This graph is unconfigured, click the settings
button to configure.~
+view_portlet_graph_title=Resource Graph~
+view_portlet_mashup_config_title=MashupPorlet Configuration~
+view_portlet_mashup_config_title_desc=The configuration settings for the mashup
portlet.~
+view_portlet_mashup_help=This portlet can include a web page via an HTTP request into an
iframe on the dashboard.~
+view_portlet_mashup_unconfigured=Page address not yet configured, click the settings
button to setup this portlet.~
+view_portlet_message_config_title=MessagePortlet Configuration~
+view_portlet_message_config_title_desc=The configuration settings for the message
portlet.~
+view_portlet_message_help=This portlet can display an HTML message on the dashboard.~
+view_portlet_message_unconfigured=Message not yet configured, click the settings button
to setup this portlet.~
+view_portlet_operations_config_title=OperationsPortlet Configuration~
+view_portlet_operations_config_title_desc=The configuration settings for the Operations
portlet.~
+view_portlet_operations_help_msg=This portlet displays both operations that have occurred
and are scheduled to occur.~
+view_portlet_platform_help_msg=This portlet displays information about platforms in
inventory.~
+view_portlet_platform_title=Platforms Summary~
+view_portlet_problem_resources_config_display_maximum=Maximum number of Problem resources
to display.~
+view_portlet_problem_resources_config_display_range=Show problem resources going back
this many hours.~
+view_portlet_problem_resources_config_display_range2=From {0} to {1}~
+view_portlet_problem_resources_config_problem_label=problem resources on dashboard.~
+view_portlet_problem_resources_config_title=ProblemResourcesPortlet Configuration~
+view_portlet_problem_resources_config_title_desc=The configuration settings for the
Problem resources portlet.~
+view_portlet_problem_resources_help=This portlet displays resources that have reported
alerts or Down availability.~
+view_portlet_problem_resources_title=Has Alerts or Currently Unavailable~
+view_portlet_recentAlerts_help_msg=Displays recent alerts fired on resources visible to
the current user login.~
+# // dup in common
+view_portlet_recentAlerts_title=Recent Alerts~
+view_portlet_recentlyAdded_approved_platforms=recently approved platforms on dashboard.~
+view_portlet_recentlyAdded_help_msg=This portlet displays resources that have recently
been imported into the inventory.~
+view_portlet_recentlyAdded_title=Recently Added Portlet~
+view_portlet_tagCloud_help=portlet displays the relative tag counts in the system visible
to the current user.~
+view_portlet_tagCloud_title=TagCloud~
+view_inventory_cannotGetGlobalPerms=Could not determine global permissions - assuming
none.~
+view_inventory_downServers=Down Servers~
+view_tree_common_contextMenu_pluginConfiguration=Plugin Configuration~
+view_tree_common_contextMenu_chart=Chart~
+view_tabs_common_scheduled=Scheduled~
+view_dynagroup_permUnknown=Could not determine if you have the proper permissions -
access is denied~
+view_configurationHistoryList_itemNamePlural=configuration history items
+
+# Configuration History Details
+#------------------------------------------
+view_configurationHistoryDetails_dialogTitle=Configuration Details~
+
+# Operation Create Wizard
+#-------------------------------------
+view_operationCreateWizard_title=Operation Wizard~
+view_operationCreateWizard_header=Execute {0} on {1}~
+view_operationCreateWizard_button_execute=Execute~
+view_operationCreateWizard_button_executeImmediately=Execute Immediately~
+view_operationCreateWizard_error_scheduleOperationFailure=Failed to schedule operation
execution.~
+view_operationCreateWizard_message_scheduleOperationSuccess=Schedule operation [{0}] on
Resource [{1}] with cron string [{2}].~
+view_operationCreateWizard_parametersStep_name=Operation Parameters~
+view_operationCreateWizard_parametersStep_noParameters=This operation does not take any
parameters.~
+view_operationCreateWizard_schedulingStep_name=Schedule~
+view_operationCreateWizard_schedulingStep_label_start=Start~
+view_operationCreateWizard_schedulingStep_label_schedule=Schedule~
+view_operationCreateWizard_schedulingStep_label_recurrence=Recurrence~
+view_operationCreateWizard_schedulingStep_label_runAt=Run At~
+view_operationCreateWizard_schedulingStep_label_nMinutes=n Minutes~
+view_operationCreateWizard_schedulingStep_label_hourly=Hourly~
+view_operationCreateWizard_schedulingStep_label_daily=Daily~
+view_operationCreateWizard_schedulingStep_label_weekly=Weekly~
+view_operationCreateWizard_schedulingStep_label_monthly=Monthly~
+view_operationCreateWizard_schedulingStep_label_timePeriod=Time Period~
+view_operationCreateWizard_schedulingStep_label_startDate=Start Date~
+view_operationCreateWizard_schedulingStep_label_recurrenceEnd=Recurrence End~
+view_operationCreateWizard_schedulingStep_label_endDate=End Date~
+view_operationCreateWizard_schedulingStep_label_willExecuteImmediately=Will execute
immediately~
+view_operationCreateWizard_schedulingStep_label_onceAt=Once At~
+view_operationCreateWizard_schedulingStep_label_date=Date~
+view_operationCreateWizard_schedulingStep_label_time=Time~
+view_operationCreateWizard_schedulingStep_label_everyNMinutes=Every n Minutes~
+view_operationCreateWizard_schedulingStep_label_minuteInterval=Minute Interval~
+view_operationCreateWizard_schedulingStep_label_hourlyAt=Hourly At~
+view_operationCreateWizard_schedulingStep_label_minuteOfHour=Minute of Hour~
+view_operationCreateWizard_schedulingStep_label_dailyAt=Daily At~
+view_operationCreateWizard_schedulingStep_label_timeOfDay=Time of Day~
+view_operationCreateWizard_schedulingStep_label_weeklyOn=Weekly On~
+view_operationCreateWizard_schedulingStep_label_dayOfWeek=Day of Week~
+view_operationCreateWizard_schedulingStep_label_monthlyOn=Monthly On~
+view_operationCreateWizard_schedulingStep_label_dayOfMonth=Day of Month~
+view_summaryOverviewForm_field_parent=Parent~
+view_core_loggedInAs=Logado como {0}~
+
+
+# Menu Bar
+#--------------
+view_menuBar_help=Ajuda~
+
+# Message Center
+#--------------------------
+view_messageCenter_button_messages=Mensagens~
commit e69d6068f2cf82605f9776ff4191e84f47980e92
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Mon May 23 10:09:31 2011 +0200
More German translations
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 dfaf432..3576dcf 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
@@ -1,18 +1,7 @@
-#
-# RHQ GUI i18n Messages - English
-###################################
-
-#************************************** SHARED ****************************************
-
-#=================== Common =====================
-
-#
-# Build Info
-#
+common_alert_high = HOCH
+common_alert_low = NIEDRIG
+common_alert_medium = MITTEL
common_buildInfo_gwtVersion = ${gwt.version}
-
-# Button Labels
-#--------------
common_button_ack = Bestätigen
common_button_ack_all = Alle bestätigen
common_button_add = Hinzufügen
@@ -33,425 +22,377 @@ common_button_new = Neu
common_button_next = Weiter
common_button_ok = OK
common_button_previous = Zurück
-common_button_purgeAll=Alle löschen
+common_button_purgeAll = Alle löschen
common_button_refresh = Neu laden
common_button_reset = Zurücksetzen
common_button_save = Speichern
+common_button_schedule = Planen
common_button_search = Suchen
+common_button_set = Setzen
common_button_showDetails = Details anzeigen...
common_button_uninventory = Aus dem Inventar löschen
-
-# Common Labels
-#------------------------
+common_calendar_april_short = Apr
+common_calendar_august_short = Aug
+common_calendar_december_short = Dez
+common_calendar_february_short = Feb
+common_calendar_january_short = Jan
+common_calendar_july_short = Jul
+common_calendar_june_short = Jun
+common_calendar_march_short = Mär
+common_calendar_may_short = Mai
+common_calendar_november_short = Nov
+common_calendar_october_short = Okt
+common_calendar_september_short = Sept
common_label_all = ALLE
common_label_all_resources = Alle Ressourcen
-common_label_day= Tag
-common_label_days=Tage
-common_label_hour=Stunde
-common_label_hours=Stunden
-common_label_item=Eintrag
-common_label_items=Einträge
-common_label_milliseconds=Millisekunden
-common_label_minutes=Minuten
-common_label_month=Monat
+common_label_day = Tag
+common_label_days = Tage
+common_label_hour = Stunde
+common_label_hours = Stunden
+common_label_item = Eintrag
+common_label_items = Einträge
+common_label_milliseconds = Millisekunden
+common_label_minutes = Minuten
+common_label_month = Monat
common_label_none = keine
common_label_role = Rolle
common_label_roles = Rollen
-common_label_scheduled_operations=Geplante Operationen
-common_label_seconds=Sekunden
+common_label_scheduled_operations = Geplante Operationen
+common_label_seconds = Sekunden
common_label_selected_resources = Ausgewählte Ressourcen
-# TODO common_label_unlimited = unbeschränkt
+common_label_unlimited = unbeschränkt
common_label_user = Benutzer
common_label_users = Benutzer
-common_label_week=Woche
-common_label_weeks=Wochen
-
-# Common Titles
-#--------------
-common_title_add_column=Spalte hinzufügen
-common_title_add_portlet=Portlet hinzufügen
-common_title_alert_range=Alert Range~
+common_label_week = Woche
+common_label_weeks = Wochen
+common_label_yesterday = Gestern
+common_msg_areYouSure = Sind Sie sicher?
+common_msg_changeAutoDetected=Änderung automatisch entdeckt
+common_msg_emphasizedNotePrefix = Achtung:
+common_msg_loading = Laden...
+common_msg_noItemsToShow = Keine Einträge vorhanden
+common_msg_notYetImplemented = Noch nicht implementiert
+common_msg_see_more = mehr ...
+common_msg_step_x_of_y = Schritt {0} von {1}
+common_status_canceled = Abgebrochen
+common_status_deferred = Verzögert
+common_status_failed = Fehlgeschlagen
+common_status_inprogress = In Bearbeitung
+common_status_nochange = Keine Änderung
+common_status_partial = partiell
+common_status_success = Erfolg
+common_status_timedOut = Zeitüberschreitung aufgetreten
+common_status_unknown = Unbekannt
+common_title_add_column = Spalte hinzufügen
+common_title_add_graph_to_view=Graph zum Monitoring-Tab hinzufügen
+common_title_add_portlet = Portlet hinzufügen
+common_title_address = Adresse
+common_title_ancestry=Abstammung
common_title_availability = Verfügbar
-common_title_average_metrics=Durchsch. Anzahl Metriken pro Minute
-common_title_available_resources=Verfügbare Ressourcen
-common_title_background=Hintergrund
+common_title_available_resources = Verfügbare Ressourcen
+common_title_average_metrics = Durchsch. Anzahl Metriken pro Minute
+common_title_background = Hintergrund
+common_title_bundle = Bundle
+common_title_bundles = Bundles
common_title_category = Kategorie
-common_title_columns=Spalten
-common_title_configuration = Konfiguration
+common_title_change_refresh_time=Aktualisierungsabstand
+common_title_columns = Spalten
+common_title_compare_metrics = Metriken vergleichen
common_title_compatibleGroups = Kompatible Gruppen
-common_title_compatibleGroups_total=Anzahl kompatible Gruppen
-common_title_custom=Eigen
-common_title_dashboard_name=Dashboard-Name
-common_title_dateCreated=Zeitpunkt d. Erzeugung
-common_title_default=Standard
-common_title_description=Beschreibung
-common_title_details=Details
-common_title_display=Display~
-common_title_display_name=Anzeigename
-common_title_duration=Dauer
-common_title_edit_mode=Bearbeitungsmodus
-common_title_enabled=Aktiviert?
+common_title_compatibleGroups_total = Anzahl kompatible Gruppen
+common_title_component_errors = Fehler der Komponente
+common_title_config_update_status = Status aktualisieren
+common_title_configuration = Konfiguration
+common_title_count = Anzahl
+common_title_custom = Eigen
+common_title_dashboard_name = Dashboard-Name
+common_title_dateCreated = Zeitpunkt d. Erstellung
+common_title_dateRange = Zeitraum
+common_title_default = Standard
+common_title_description = Beschreibung
+common_title_details = Details
+common_title_display = Anzeige
+common_title_display_name = Anzeigename
+common_title_duration = Dauer
+common_title_edit_mode = Bearbeitungsmodus
+common_title_enabled = Aktiviert?
common_title_end = Ende
+common_title_error = Fehler
common_title_generalProp = Allgemeine Eigenschaften
-common_title_group_def_total=Anzahl Gruppen-Definitionen
+common_title_group = Gruppe
+common_title_group_def_total = Anzahl Gruppen-Definitionen
+common_title_group_member_health = Zustand der Gruppenmitglieder
+common_title_groups = Gruppen
+common_title_help = Hilfe
+common_title_host = Rechner
common_title_icon = Ikone
common_title_id = ID
common_title_id_parent = ID des Vaters
common_title_info = Info
-common_title_help = Hilfe
-common_title_host = Rechner
common_title_inventory = Inventar
common_title_inventorySummary = Inventar Zusammenfassung
-common_title_lastUpdated=Zuletzt aktualisiert
-common_title_lastUpdatedBy=Zuletzt aktualisiert durch
-common_title_mashup=Mashup~
-common_title_message=Nachricht
+common_title_lastUpdated = Zuletzt aktualisiert
+common_title_lastUpdatedBy = Zuletzt aktualisiert durch
+common_title_ldapGroups = LDAP-Gruppen
+common_title_members_reporting = Anzahl berichtender Mitglieder
+common_title_message = Nachricht
common_title_metric = Metrik
+common_title_metric_chart = Metrik-Diagramm
common_title_mixedGroups = Gemischte Gruppen
-common_title_mixedGroups_total=Anzahl gemischter Gruppen
+common_title_mixedGroups_total = Anzahl gemischter Gruppen
common_title_name = Name
-common_title_new_dashboard=Neues Dashboard
-common_title_numeric_type=Numerischer Typ
-common_title_operations=Operationen
-common_title_operations_range=Operation Range~
-common_title_over=Ãœber
+common_title_new_dashboard = Neues Dashboard
+common_title_numeric_metrics = Numerische Metriken
+common_title_numeric_type = Numerischer Typ
+common_title_operation_status = Status der Operation
+common_title_operations = Operationen
+common_title_over = Ãœber
common_title_password = Passwort
common_title_path = Pfad
-common_title_platform=Plattform
-common_title_platform_total=Anzahl Platformen
+common_title_permissions = Rechte
+common_title_platform = Plattform
+common_title_platform_total = Anzahl Platformen
common_title_plugin = Plugin
common_title_port = Port
-common_title_providers=Provider
-common_title_recently_added = Kürzlich hinzugefügte Ressourcen
+common_title_providers = Provider
common_title_recent_alerts = Kürzlich ausgelöste Alarme
-common_title_recent_operations=Kürzlich ausgeführte Operationen
-common_title_remove_column=Spalte löschen
-common_title_repositories=Repositories~
+common_title_recent_bundle_deployments = Kürzliche Bundle-Deployments
+common_title_recent_configuration_updates = Frische Konfigurationsaktualisierungen
+common_title_recent_event_counts = Anzahl frischer Events
+common_title_recent_measurements = Frische Messwerte
+common_title_recent_oob_metrics = Kürzlich aus dem Ruder gelaufene Metriken
+common_title_recent_operations = Kürzlich ausgeführte Operationen
+common_title_recently_added = Kürzlich hinzugefügte Ressourcen
+common_title_remove_column = Spalte löschen
common_title_resource = Ressource
+common_title_resourceGroups = Ressourcen-Gruppen
common_title_resource_group = Ressourcen-Gruppe
-common_title_resource_inventory=Ressourcen-spezifisces Inventar
-common_title_resource_id=Ressourcen-ID
-common_title_resource_name=Ressurcen-Name
+common_title_resource_id = Ressourcen-ID
+common_title_resource_inventory = Ressourcen-spezifisces Inventar
+common_title_resource_key = Ressourcen-Schlüssel
+common_title_resource_name = Ressurcen-Name
+common_title_resource_type = Ressourcen-Typ
+common_title_resources = Ressourcen
+common_title_results_count = Anzahl Ergebnisse
+common_title_results_count_tooltip = Zeige diese Anzahl Ergebnisse an
+common_title_role = Rolle
+common_title_roles = Rollen
+common_title_scheduled_operations = Geplante Operationen
common_title_search = Suche
-common_title_scheduled_operations=Geplante Operationen
-common_title_selected_resources=Ausgewählte Ressourcen
-common_title_server_total=Anzahl Server
-common_title_service_total=Anzahl Dienste
-common_title_settings=Einstellungen
-common_title_show=Anzeigen
+common_title_selected_resources = Ausgewählte Ressourcen
+common_title_server = Server
+common_title_server_total = Anzahl Server
+common_title_service = Dienste
+common_title_service_total = Anzahl Dienste
+common_title_settings = Einstellungen
+common_title_show = Anzeigen
+common_title_show_more = Mehr anzeigen...
+common_title_sort_order = Sortierreihenfolge
+common_title_sort_order_tooltip = Legt die Sortierreihenfolge für Ergebnisse fest.
common_title_start = Start
-common_title_status=Status
-common_title_summary=Zusammenfassung
-common_title_tag_cloud=Tag-Wolke
-common_title_the=Die
-common_title_timestamp =Zeitpunkt
-common_title_total=Total
+common_title_status = Status
+common_title_stop = Stop
+common_title_summary = Zusammenfassung
+common_title_tag_cloud = Tag-Wolke
+common_title_the = Die
+common_title_timestamp = Zeitpunkt
+common_title_total = Total
common_title_type = Typ
common_title_units = Einheiten
-common_title_user=Benutzer
+common_title_user = Benutzer
+common_title_users = Benutzer
common_title_value = Wert
common_title_version = Version
-common_title_view_mode=Anzeigemodus
-common_title_web_address=Webaddresse
-common_title_welcome=Willkommen
-
-# Common Messages
-#--------------
-common_msg_areYouSure = Sind Sie sicher?
-common_msg_deleteConfirm = Are you sure you want to delete the # selected {0}?~
-common_msg_emphasizedNotePrefix = Achtung:
-common_msg_loading = Laden...
-common_msg_noItemsToShow=Keine Einträge vorhanden
-common_msg_step_x_of_y = Schritt {0} von {1}
-
-
-# Common Values
-#--------------
+common_title_view_mode = Anzeigemodus
+common_title_web_address = Webaddresse
+common_title_welcome = Willkommen
+common_unit_days = Tage
+common_unit_hours = Stunden
+common_unit_milliseconds = Millisekunden
+common_unit_minutes = Minuten
+common_unit_months = Monate
+common_unit_seconds = Sekunden
+common_unit_times = mal
+common_unit_weeks = Wochen
+common_unit_years = Jahre
common_val_for=für
+common_val_n1st = {0}er
+common_val_n2nd = {0}er
+common_val_n3rd = {0}er
+common_val_na = entf.
+common_val_never = Nie
common_val_no = Nein
common_val_no_lower = nein
+common_val_none = Kein(e)
+common_val_nth = {0}er
common_val_yes = Ja
common_val_yes_lower = ja
-common_val_never = Nie
-common_val_na = entf.
-common_val_none = Kein(e)
-
-# Common Calendar
-#--------------
-common_calendar_january_short= Jan
-common_calendar_february_short=Feb
-common_calendar_march_short=Mär
-common_calendar_april_short=Apr
-common_calendar_may_short=Mai
-common_calendar_june_short=Jun
-common_calendar_july_short=Jul
-common_calendar_august_short=Aug
-common_calendar_september_short=Sept
-common_calendar_october_short=Okt
-common_calendar_november_short=Nov
-common_calendar_december_short=Dez
-
-
-#=================== Widgets =====================
-
-# Record Editor
-#--------------
-widget_recordEditor_title_view = Anzeigen {0} [{1}]
-widget_recordEditor_title_edit = Bearbeiten {0} [{1}]
-widget_recordEditor_title_new = Neue {0} anlegen
-# // dup in common
-widget_recordEditor_label_loading = Laden...
-widget_recordEditor_error_invalidViewPath = Ungültiger Anzeigepfad: [{0}]
-widget_recordEditor_error_noRecords = Keine Datensätze gefunden - erwartet wurde genau
einer.
-widget_recordEditor_error_multipleRecords = Mehrere Datensätze gefunden - erwartet wurde
genau einer.
-widget_recordEditor_info_recordCreatedConcise = {0} angelegt.
-widget_recordEditor_info_recordCreatedDetailed = {0} [{1}] angelegt.
-widget_recordEditor_info_recordUpdatedConcise = {0} aktualisiert.
-widget_recordEditor_info_recordUpdatedDetailed = {0} [{1}] aktualisiert.
-widget_recordEditor_info_recordsDeletedConcise = {0} {1} gelöscht.
-widget_recordEditor_info_recordsDeletedDetailed = {0} {1} gelöscht: {2}.
-widget_recordEditor_error_unsupportedOperationType = Der Typ [{0}] der Operation wird
nicht unterstützt
-
-# Resource Selector/Picker
-#--------------------------------
-widget_resourceSelector_selectResource=Wählen Sie eine Ressource aus
-widget_resourceSelector_pleaseSelectResource=Bitte wählen sie eine Ressource aus
-widget_resourceSelector_selectMultipleResources=Wählen sie Ressourcen aus
-widget_resourceSelector_pleaseSelectMultipleResource=Bitte wählen Sie eine oder merere
Ressourcen aus
-widget_resourceSelector_groupCategory=Kategorie der Gruppe
-
-# Resource Factory Wizard
-#--------------------------------
-widget_resourceFactoryWizard_uploadInProgress=The upload is in progress... This can take
several minutes to complete for large distribution files.~
-widget_resourceFactoryWizard_uploadFileStepName=Upload Resource Content File~
-widget_resourceFactoryWizard_uploadFailure=Failed to upload file~
-widget_resourceFactoryWizard_editConfigStepName=Edit Configuration~
-widget_resourceFactoryWizard_infoStepName=Resource Information~
-widget_resourceFactoryWizard_namePrompt=New Resource Name~
-widget_resourceFactoryWizard_templatePrompt=Connection Settings Template~
-widget_resourceFactoryWizard_contentTemplatePrompt=Deployment Time Configuration
Templates~
-widget_resourceFactoryWizard_configTemplatePrompt=Resource Configuration Templates~
-widget_resourceFactoryWizard_archPrompt=Package Architecture~
-widget_resourceFactoryWizard_versionPrompt=Package Version~
-widget_resourceFactoryWizard_importWizardWindowTitle=Resource Import Wizard~
-widget_resourceFactoryWizard_importWizardTitle=Importieren von Ressourcen des Typs [{0}]
-widget_resourceFactoryWizard_importFailure=Failed to manually import resource~
-widget_resourceFactoryWizard_importSubmitted=A request to import a new resource of type
[{0}] has been submitted~
-widget_resourceFactoryWizard_createWizardWindowTitle=Resource Create Wizard~
-widget_resourceFactoryWizard_createWizardTitle=Create New Resource of Type [{0}]~
-widget_resourceFactoryWizard_execute1=Failed to create a new resource - there is no
package version~
-widget_resourceFactoryWizard_execute2=Konnte keine neue Ressource anlegen
-widget_resourceFactoryWizard_createSubmitType=A request to create a resource of type
[{0}] has been submitted successfully.~
-widget_resourceFactoryWizard_createSubmit=A request to create a resource with the name of
[{0}] has been submitted successfully.~
-widget_resourceFactoryWizard_failedToGetType=Failed to get backing package type for new
resource~
-widget_resourceFactoryWizard_failedToDeleteVersion=Failed to delete package version while
canceling a resource create~
-
-#===================== Utils ======================
-
-# Disambiguation Report Decorator
-#-------------------------------------------------
-util_disambiguationReportDecorator_pluginSuffix = ({0} Plugin)
-
-# Monitoring Request Callback
-#------------------------------------------
-util_monitoringRequestCallback_error_checkServerStatusFailure = Unable to determine login
status - check Server status.~
-
-# RPC Manager
-#----------------------
-util_rpcManager_activeRequests = {0} Aktive Anfragen
-
-# User Permissions Manager
-#--------------------------
-util_userPerm_loadFailGlobal = Failed to load your global permissions - none granted.~
-util_userPerm_loadFailGroup = Failed to load your permissions for Resource Group with id
[{0}] - none granted.~
-util_userPerm_loadFailResource = Failed to load your permissions for Resource with id
[{0}] - none granted.~
-
-# User Session Manager
-#--------------------------
-util_userSession_loadFailSubject = UserSessionManager: Konnte das 'Subject' des
Benutzers nicht laden.
-util_userSession_logoutFail = Ausloggen fehlgeschlagen
-
-# Error Handler
-#--------------------
-util_errorHandler_nullException = Exception war null
-
-# Widgets Field
-#---------------------
-util_widgetsField_unlimited = Unbeschränkt
-
-
-#================== DataSources ====================
-
-# RPC (abstract)
-#-----------------------
-dataSource_rpc_error_transformRequestFailure = Failure in datasource while processing {0}
request.~
-dataSource_rpc_error_unsupportedArrayFilterType = No support for passing array filters of
type {0}.~
-dataSource_rpc_error_unsupportedEnumType = Please add an appropriate code block for enum
{0} to RPCDataSource.getEnumArray(Class)~
-dataSource_rpc_yes = ja
-dataSource_rpc_no = nein
-
-# ContentRepositoryTree
-#------
-dataSource_ContentRepoTree_error_load = Error loading repositories~
-dataSource_ContentRepoTree_field_parentId = Parent ID~
-
-
-# Users
-#------
-###### dup in common
-dataSource_users_field_id = ID
-dataSource_users_field_name = Benutzername
-dataSource_users_field_ldap = LDAP Login?
-dataSource_users_field_password = Passwort
-dataSource_users_field_passwordVerify = Passwort überprüfen
-dataSource_users_field_firstName = Vorname
-dataSource_users_field_lastName = Nachname
-dataSource_users_field_emailAddress = E-Mail-Addresse
-dataSource_users_field_phoneNumber = Telefonnummer
-dataSource_users_field_department = Abteilung
-dataSource_users_field_factive = Darf sich einloggen?
-
-# Platforms
-#------
-dataSource_platforms_field_cpu=CPU
-dataSource_platforms_field_memory=Speicher
-dataSource_platforms_field_swap=Swap
-
-# Traits
-#------
-dataSource_traits_field_primaryKey=Primärschlüssel
-dataSource_traits_field_definitionID=Definition-ID
-dataSource_traits_field_lastChanged=Zuletzt geändert
-dataSource_traits_field_trait=Trait
-dataSource_traits_group_field_groupId=Gruppen-ID
-
-# Measurement OOBs
-#---------------------------------
-dataSource_measurementOob_field_scheduleName = Metrik
-dataSource_measurementOob_field_resourceName = Ressource
-dataSource_measurementOob_field_parentName = Parent~
+dataSource_bundle_loadFailed = Konnte die Bundle-Daten nicht laden
+dataSource_configurationHistory_clickToSeeError = Doppelklicken, um die Fehlermeldung zu
sehen...
+dataSource_configurationHistory_currentConfig = Dies ist die aktuelle Konfiguration
+dataSource_configurationHistory_error_fetchFailure = Konnte den Verlauf der
Ressourcen-Konfiguration nicht laden.
+dataSource_configurationHistory_updateType_group = Gruppe
+dataSource_configurationHistory_updateType_individual = einzeln
+dataSource_measurementOob_error_fetchFailure = Konnte die Informationen über Ausreißer
nicht laden
+dataSource_measurementOob_field_factor = Ausreißer-Faktor (%)
dataSource_measurementOob_field_formattedBaseband = Band
dataSource_measurementOob_field_formattedOutlier = Ausreißer
-dataSource_measurementOob_field_factor = Ausreißer-Faktor (%)
-dataSource_measurementOob_error_fetchFailure = Konnte die Informationen über Ausreißer
nicht laden
-
-# Measurements
-#----------------------
-dataSource_definitions_loadFailed = Failed to load metric definitions~
-dataSource_schedules_loadFailed = Konte die Zeitpläne für das Erfassen der Metriken nicht
laden
-dataSource_schedules_field_resourceGroupId = Gruppen-ID
-
-dataSource_schedules_enableFailure_resource=Failed to enable the collection of [{0}]
metrics for resource with ID [{1}]. The metrics were: [{2}]~
-dataSource_schedules_enableFailure_group=Failed to enable the collection of [{0}] metrics
for group with ID [{1}]. The metrics were: [{2}]~
-
-dataSource_schedules_enableSuccessful_concise=You have enabled the collection of [{0}]
measurements~
-dataSource_schedules_enableSuccessful_full_resource=You have enabled the collection of
[{0}] measurements for the resource with ID [{1}]. The enabled measurements are: [{2}]~
-dataSource_schedules_enableSuccessful_full_group=You have enabled the collection of [{0}]
measurements for the resource group with ID [{1}]. The enabled measurements are: [{2}]~
-
-dataSource_schedules_disableFailure_resource=Failed to disable the collection of [{0}]
metrics for resource with ID [{1}]. The metrics were: [{2}]~
-dataSource_schedules_disableFailure_group=Failed to disable the collection of [{0}]
metrics for resource group with ID [{1}]. The metrics were: [{2}]~
-
-dataSource_schedules_disableSuccessful_concise=You have disabled the collection of [{0}]
measurements~
-dataSource_schedules_disableSuccessful_full_resource=You have disabled the collection of
[{0}] measurements for the resource with ID [{1}]. The disabled measurements are: [{2}]~
-dataSource_schedules_disableSuccessful_full_group=You have disabled the collection of
[{0}] measurements for the resource group with ID [{1}]. The disabled measurements are:
[{2}]~
-
-dataSource_schedules_updateFailure_resource=Failed to set the collection interval of
[{0}] metrics for resource with ID [{1}]. The metrics were: [{2}]. The collection interval
was to be [{3}] seconds.~
-dataSource_schedules_updateFailure_group=Failed to set the collection interval of [{0}]
metrics for resource group with ID [{1}]. The metrics were: [{2}]. The collection interval
was to be [{3}] seconds.~
-
-dataSource_schedules_updateSuccessful_concise=A new collection interval of [{0}] seconds
has been set on [{1}] measurements~
-dataSource_schedules_updateSuccessful_full_resource=A new collection interval of [{0}]
seconds has been set on [{1}] measurements for resource with ID [{2}]. The updated
measurements are: [{3}]~
-dataSource_schedules_updateSuccessful_full_group=A new collection interval of [{0}]
seconds has been set on [{1}] measurements for resource group with ID [{2}]. The updated
measurements are: [{3}]~
-
-
-# Problem Resources
-#------------------------------
+dataSource_measurementOob_field_resourceName = Ressource
+dataSource_measurementOob_field_scheduleName = Metrik
+dataSource_operationHistory_error_fetchFailure = Konnte den Verlauf der Operationen nicht
laden.
+dataSource_operationHistory_field_createdTime = Erstellungszeitpunkt
+dataSource_operationHistory_field_operationName = Name der Operation
+dataSource_operationHistory_field_startedTime = Startzeitpunkt
+dataSource_operationHistory_field_subject = Ersteller
+dataSource_operationSchedule_field_description = Notizen
+dataSource_operationSchedule_field_nextFireTime = Nächste Ausführung
+dataSource_operationSchedule_field_operationDisplayName = Operation
+dataSource_operationSchedule_field_operationName = Operation
+dataSource_operationSchedule_field_subject = Eigentümer
+dataSource_operationSchedule_field_timeout = Timeout (in Sekunden)
+dataSource_platforms_field_cpu = CPU
+dataSource_platforms_field_memory = Speicher
+dataSource_platforms_field_swap = Swap
+dataSource_problemResources_error_fetchFailure = Konnte die Liste der Ressourcen mit
Alarmen oder unverfügbarkeit nicht laden.
dataSource_problemResources_field_alerts = Alarme
dataSource_problemResources_field_available = Aktuelle Verfügbarkeit
-dataSource_problemResources_error_fetchFailure = Konnte die Liste der Ressourcen mit
Alarmen oder unverfügbarkeit nicht laden.
-
-# Recent Operations
-#----------------------------
-dataSource_recentOperations_field_resource = Ressource
+dataSource_recentOperations_error_fetchFailure = Konnte die Liste der kürzlich
vollendeten Operationen nicht laden.
dataSource_recentOperations_field_location = Ort
dataSource_recentOperations_field_operation = Operation
-dataSource_recentOperations_field_time = Zeitpunkt
+dataSource_recentOperations_field_resource = Ressource
dataSource_recentOperations_field_status = Status
-dataSource_recentOperations_error_fetchFailure = Konnte die Liste der kürzlich
vollendeten Operationen nicht laden.
-
-# Scheduled Operations
-#---------------------------------
-dataSource_scheduledOperations_field_resource = Ressource
+dataSource_recentOperations_field_time = Zeitpunkt
+dataSource_resourceErrors_clickStatusIcon = Für mehr Details auf das Icon klicken
+dataSource_resourceErrors_deleteFailure = Konnte die Ressourcen-Fehler nicht löschen
+dataSource_resourceErrors_deleteSuccess = Sie haben erfolgreich [{0}]
Ressourcen-Fehlermeldungen gelöscht.
+dataSource_resourceErrors_error_fetchFailure = Konnte die spezifischen Fehler für die
Ressource mit id [{0}] nicht laden.
+dataSource_resourceErrors_field_errorType = Fehlertyp
+dataSource_resourceErrors_field_summary = Zsuammenfassung
+dataSource_resourceErrors_field_timeOccured = Zeitpunkt
+dataSource_resourceGroups_loadFailed = Konnte die Ressourcen-Gruppe nicht laden
+dataSource_resources_field_discoveryTime = Zeitpunkt des Auffindens
+dataSource_resources_field_importTime = Zeitpunkt des Imports
+dataSource_resources_field_key = Schlüssel
+dataSource_resources_field_lastModifiedTime = Zeitpunkt letzte Änderung
+dataSource_resources_field_lastModifier=Letzter Bearbeiter
+dataSource_resources_field_location = Ort
+dataSource_rpc_no = nein
+dataSource_rpc_yes = ja
+dataSource_scheduledOperations_error_fetchFailure = Konnte die Liste der geplanten
Operationen nicht laden.
dataSource_scheduledOperations_field_location = Ort
dataSource_scheduledOperations_field_operation = Operation
+dataSource_scheduledOperations_field_resource = Ressource
dataSource_scheduledOperations_field_time = Zeitpunkt
-dataSource_scheduledOperations_error_fetchFailure = Konnte die Liste der geplanten
Operationen nicht laden.
-
-# Operation History
-#---------------------------
-dataSource_operationHistory_error_fetchFailure = Konnte den Verlauf der Operationen nicht
laden.
-
-# Configuration History
-#-------------------------------
-dataSource_configurationHistory_field_id = ID
-dataSource_configurationHistory_field_createdTime = Angelegt
-dataSource_configurationHistory_field_status = Status
-dataSource_configurationHistory_field_subject = Benutzer
-dataSource_configurationHistory_error_fetchFailure = Konnte den Verlauf der
Ressourcen-Konfiguration nicht laden.
-
-# Resource Errors
-#-------------------------
-dataSource_resourceErrors_field_summary = Zsuammenfassung
-dataSource_resourceErrors_field_errorType = Fehlertyp
-dataSource_resourceErrors_field_timeOccured = Zeitpunkt
-dataSource_resourceErrors_error_fetchFailure = Konnte die spezifischen Fehler für die
Ressource mit id [{0}] nicht laden.
-
-
-#********************************** VIEW-SPECIFIC *************************************
-
-#================= Administration ==================
-
-view_admin_administration = Verwaltung
-view_admin_landing = In dieser Sektion können die globalen Einstellungen für RHQ
verwaltet werden. Dies schließt Sicherheitseinstellungen und Plugins ein, sowie die
Verwaltung der RHQ Server- und Agentplugins.
-view_admin_configuration = Konfiguration
-view_admin_security = Sicherheit
-view_admin_topology = Topologie
-
-view_adminSecurity_users = Benutzer
-view_adminSecurity_roles = Rollen
-
-view_adminTopology_affinityGroups = Affinity Groups~
-view_adminTopology_agents = Agenten
-view_adminTopology_partitionEvents = Partition Events~
-view_adminTopology_remoteAgentInstall = Installation entfernter Agenten
-view_adminTopology_servers = Server
-
+dataSource_schedules_field_resourceGroupId = Gruppen-ID
+dataSource_schedules_loadFailed = Konte die Zeitpläne für das Erfassen der Metriken nicht
laden
+dataSource_schedules_loadFailedContext = Konnte die Zeitpläne für Metriken für den
Kontext [{0}] nicht laden
+dataSource_schedules_loadFailedCriteria = Konnte die Zeitpläne für Metriken für die
Kriterien [{0}] nicht laden
+dataSource_traits_failFetch = Konnte die Traits für das Kiriterium [{0}] nicht
ermitteln.
+dataSource_traits_field_definitionID = Definition-ID
+dataSource_traits_field_lastChanged = Zuletzt geändert
+dataSource_traits_field_primaryKey = Primärschlüssel
+dataSource_traits_field_trait = Trait
+dataSource_traits_group_field_groupId = Gruppen-ID
+dataSource_users_delete = Benutzer [{0}] wurde gelöscht
+dataSource_users_deleteFailed = Konnte den Benutzer [{0}] nicht löschen
+dataSource_users_field_department = Abteilung
+dataSource_users_field_emailAddress = E-Mail-Addresse
+dataSource_users_field_factive = Darf sich einloggen?
+dataSource_users_field_firstName = Vorname
+dataSource_users_field_id = ID
+dataSource_users_field_lastName = Nachname
+dataSource_users_field_ldap = LDAP Login?
+dataSource_users_field_name = Benutzername
+dataSource_users_field_password = Passwort
+dataSource_users_field_passwordVerify = Passwort überprüfen
+dataSource_users_field_phoneNumber = Telefonnummer
+dataSource_users_invalidEmailAddress = Ungültige E-Mail-Adresse
+dataSource_users_passwordsDoNotMatch = Passworte stimmen nicht überein.
+datasource_roles_field_ldapGroups = LDAP-Gruppen
+datasource_roles_field_permissions = Berechtigungen
+datasource_roles_field_resourceGroups = Ressourcen-Gruppen
+datasource_templateSchedules_disabled = Das Erfassen der Messwerte für [{0}] wurde
eingestellt.
+datasource_templateSchedules_disabled_detailed = Sammeln der Daten für Metrik [{0}] [{1}]
als Standard für Ressource-Tpypen mit ID [{2}] eingestellt.
+datasource_templateSchedules_disabled_failed = Konnte das Sammeln der Daten für die
Metrik [{0}] [{1}] als Standard für Ressourcen-Typ [{2}] nicht einstellen.
+datasource_templateSchedules_enabled = Sammeln der Daten für Metrik [{0}] gestartet.
+datasource_templateSchedules_enabled_detailed = Sammeln der Daten für Metrik [{0}] [{1}]
als Standard für Ressourcen mit Typ-ID [{2}] gestartet.
+datasource_templateSchedules_enabled_failed = Konnte das Sammeln der Daten für die Metrik
[{0}] [{1}] als Standard für Ressourcen mit Type-ID [{2}] nicht beginnen.
+datasource_templateSchedules_updated = Zeitpläne für die ausgewählte Metrik [{0}]
aktualisiert.
+datasource_templateSchedules_updated_detail = Zeitplan für das Sammeln von Daten für
Metrik [{0}] [{1}] als Standard für Ressourcen mit Typ-ID [{2}] auf [{3}] Sekunden
gesetzt.
+datasource_templateSchedules_updated_failed = Aktualisieren des Zeitplans auf [{0}]
Sekunden für das Sammeln von Daten für Metrik [{1}] [{2}] als Standard für Ressourcen mit
Typ-ID [{3}] ist fehlgeschlagen.
+favorites = Lesezeichen
+favorites_groups = Gemerkte Gruppen
+favorites_recentlyViewed = Kürzlich angesehen
+favorites_resources = Gemerkte Ressourcen
+group_tree_partialClusterTooltip = {0} der {1} Gruppenmitglieder haben eine
''{2}'' Ressource
+util_ancestry_parentAncestry=Abstammung für:
+util_disambiguationReportDecorator_pluginSuffix = ({0} Plugin)
+util_errorHandler_nullException = Exception war null
+util_rpcManager_activeRequests = {0} Aktive Anfragen
+util_userSession_loadFailSubject = UserSessionManager: Konnte das 'Subject' des
Benutzers nicht laden.
+util_userSession_logoutFail = Ausloggen fehlgeschlagen
+util_widgetsField_unlimited = Unbeschränkt
+view_aboutBox_buildNumber = Build-Nummer:
+view_aboutBox_failedToLoad = Kann die Produktinformation nicht laden
+view_aboutBox_homepage = Homepage
+view_aboutBox_title = Ãœber {0}
+view_aboutBox_version = Version:
view_adminConfig_downloads = Downloads
view_adminConfig_plugins = Plugins
view_adminConfig_systemSettings = Systemeinstellungen
view_adminConfig_templates = Voreinstellungen
-
-# Administration/Security/Users
-#--------------------------------
-view_adminUsersList_dataTypeName = Benutzer
-view_adminUsersList_dataTypeNamePlural = Benutzer
-
-# Administration/Security/Users/#
-#--------------------------------
-view_adminUsersDetails_dataTypeName = Benutzer
-
-# Administration/Security/Roles/#
-#--------------------------------
view_adminRoles_assignedGroups = Zugewiesene Ressourcen-Gruppen
view_adminRoles_assignedSubjects = Zugewisene Benutzer
view_adminRoles_failLdap = Konnte nicht ermitteln, ob LDAP konfiguriert ist - gehe von
keiner LDAP-Konfiguration aus.
-view_adminRoles_failLdapGroups = Failed to retrieve available LDAP groups - assuming no
LDAP groups.~
-view_adminRoles_failLdapGroupsRole = Failed to load LDAP groups available for role.~
view_adminRoles_failRoles = Konnte die Rollen nicht laden.
view_adminRoles_globalPerms = Applikationsweite Rechte
view_adminRoles_ldapGroups = LDAP-Gruppen
view_adminRoles_ldapGroupsReadOnly = LDAP Gruppendaten können nur gelesen werden
view_adminRoles_noItems = Keine Einträge vorhanden
view_adminRoles_noLdap = Die LDAP-Integration ist nicht konfiguriert. Um LDAP zu
konfigurieren, wechseln sie zu <a {0}>{1}</a>.
+view_adminRoles_permissions_globalPermissions = Globale Rechte
+view_adminRoles_permissions_isAuthorized = Berechtigt?
+view_adminRoles_permissions_isRead = Lesen?
+view_adminRoles_permissions_isWrite = Schreiben?
+view_adminRoles_permissions_permDesc_manageBundles = Kann Bundles anlegen, aktualisieren
und löschen (Ansehen ist für alle implizit erlaubt).
+view_adminRoles_permissions_permDesc_manageInventory = Hat alle Rechte auf alle
Ressourcen, wie unten beschrieben. Kann Gruppen anlegen, aktualisieren und löschen. Kann
Ressourcen in das Inventar aufnehmen.
+view_adminRoles_permissions_permDesc_manageSecurity = Kann Benutzer und Rollen anlegen,
aktualisieren oder löschen (Anschauen ist für alle implizit erlaubt)
+view_adminRoles_permissions_permDesc_manageSettings = Kann die Konfiguration des
RHQ-Servers ändern und jegliche Server-bezogene Funktionalität ausführen.
+view_adminRoles_permissions_permReadDesc_configure = Ansehen der Ressourcen-Konfiguration
und des Verlaufs derselben.
+view_adminRoles_permissions_permReadDesc_control = (IMPLIZIT) Ansehen der verfügbaren
Operationen und des Verlaufs der ausgeführen Operationen
+view_adminRoles_permissions_permReadDesc_createChildResources = (IMPLIZIT) Ansehen des
Verlaufs des Anlegens von Kind-Ressourcen
+view_adminRoles_permissions_permReadDesc_deleteChildResources = (IMPLIZIT) Ansicht des
Verlaufs der Löschung von Kind-Ressourcen
+view_adminRoles_permissions_permReadDesc_inventory = (IMPLIZIT) Ansehen der Eigenschaft
einer Ressource (Name, Beschreibung, Version etc.), Verbindungseinstellungen, Verlauf
derselben
+view_adminRoles_permissions_permReadDesc_manageAlerts = (IMPLIZIT) Ansehen von
Alarm-Definitionen und ausgelösten Alarmen
+view_adminRoles_permissions_permReadDesc_manageContent = (IMPLIZIT) Installierte und
verfügbare Pakete ansehen; Verlauf der Installation von Paketen ansehen
+view_adminRoles_permissions_permReadDesc_manageEvents = (IMPLIZIT) Ereignisse ansehen
+view_adminRoles_permissions_permReadDesc_manageMeasurements = (IMPLIZIT) Monitoringdaten
und -zeitplan ansehen
+view_adminRoles_permissions_permWriteDesc_configure = Bearbeiten der
Ressourcen-Konfiguration; Löschen einzelner Einträge im Verlauf der
Ressourcen-Konfiguration
+view_adminRoles_permissions_permWriteDesc_control = Ausführen von Operationen; Löschen
einzelner Einträge im Verlauf der Operationen
+view_adminRoles_permissions_permWriteDesc_createChildResources = Neue Kind-Ressourcen
anlegen (für Ressource-Typen, die das Erzeugen von Kind-Ressourcen erlauben)
+view_adminRoles_permissions_permWriteDesc_deleteChildResources = Löschen von
Kind-Ressourcen (für Ressource-Typen, die das Löschen zulassen)
+view_adminRoles_permissions_permWriteDesc_inventory = Aktualisieren von Ressourcename,
Beschreibung und Verbindungseinstellungen. Löschen einzelner Einträge des Verlaufs der
Verbindungseinstellungen.
+view_adminRoles_permissions_permWriteDesc_manageAlerts = Anlegen, Bearbeiten und Löschen
von Alarm-Definitionen. Bestätigen und Löschen von ausgelösten Alarmen.
+view_adminRoles_permissions_permWriteDesc_manageContent = Abonnieren von Content-Quellen;
Pakete installieren und deinstallieren
+view_adminRoles_permissions_permWriteDesc_manageEvents = Ereignisse löschen
+view_adminRoles_permissions_permWriteDesc_manageMeasurements = Zeitplan für das
Monitoring bearbeiten
+view_adminRoles_permissions_perm_configure = Konfiguration
+view_adminRoles_permissions_perm_control = Operationen
+view_adminRoles_permissions_perm_createChildResources = Kind-Ressourcen erzeugen
+view_adminRoles_permissions_perm_deleteChildResources = Löschen von Kind-Ressourcen
+view_adminRoles_permissions_perm_inventory = Inventar
+view_adminRoles_permissions_perm_manageAlerts = Alarme verwalten
+view_adminRoles_permissions_perm_manageBundles = Bundles verwalten
+view_adminRoles_permissions_perm_manageContent = Content verwalten
+view_adminRoles_permissions_perm_manageEvents = Ereignisse verwalten
+view_adminRoles_permissions_perm_manageInventory = Inventar verwalten
+view_adminRoles_permissions_perm_manageMeasurements = Monitoring verwalten
+view_adminRoles_permissions_perm_manageSecurity = Sicherheitseinstellungen verwalten
+view_adminRoles_permissions_perm_manageSettings = Einstellungen verwalten
+view_adminRoles_permissions_read = Lesen
+view_adminRoles_permissions_readAccessImplied = Lesezugriff für das Recht {0} ist
implizit und kann nicht abgeschaltet werden.
+view_adminRoles_permissions_resourcePermissions = Rechte für Ressourcen
+view_adminRoles_permissions_write = Schreiben:
view_adminRoles_perms = Rechte
view_adminRoles_resourcePerms = Rechte auf Ressourcen
view_adminRoles_roleAdded = Rolle [{0}] hinzugefügt
@@ -459,1271 +400,646 @@ view_adminRoles_roleDeleteFailed = Konnte die Rolle [{0}] nicht
löschen.
view_adminRoles_roleDeleted = Rolle [{0}] gelöscht.
view_adminRoles_roleUpdateFailed = Konnte die Rolle [{0}] nicht aktualisieren.
view_adminRoles_roleUpdated = Rolle [{0}] aktualisiert.
-
-# Administration/Topology/RemoteAgentInstall/#
-#--------------------------------
-view_remoteAgentInstall_agentStatus = Status des Agenten
-view_remoteAgentInstall_agentStatusDefault = -Click Update Status Button-~
-view_remoteAgentInstall_connInfo = Connection Information~
-view_remoteAgentInstall_buttonFindAgent = Agent suchen
-view_remoteAgentInstall_error_1 = Error occurred while trying to find agent install
path~
-view_remoteAgentInstall_error_2 = Could not find an agent installed when looking in
common locations
-view_remoteAgentInstall_error_3 = Could not find an agent installed at or under [{0}]
-view_remoteAgentInstall_error_4 = Konnte den Agent nicht installieren
-view_remoteAgentInstall_error_5 = Konnte den Agent nicht starten
-view_remoteAgentInstall_error_6 = Konnte den Agent nicht stoppen
-
-view_remoteAgentInstall_installAgent = Agent installieren
-view_remoteAgentInstall_installInfo = Agent Installation Information~
-view_remoteAgentInstall_installPath = Agent Install Path~
-view_remoteAgentInstall_owner = Eigentümer
-view_remoteAgentInstall_promptInstallPath = Where the agent is or will be installed. If
you aren''t sure where an agent is installed, enter a parent directory and click
the ''Find Agent'' button to scan that directory and below. If you enter
an empty path, common locations are searched on the host for an agent install.~
-view_remoteAgentInstall_promptHost = The host where the agent is or will be installed~
-view_remoteAgentInstall_promptPassword =The credentials that are used to authenticate the
user on the host via SSH~
-view_remoteAgentInstall_promptPort = The port the SSH server is listening to. If not
specified, the default is 22~
-view_remoteAgentInstall_promptUser = The name of the user whose credentials are passed to
the host via SSH~
-view_remoteAgentInstall_result = Resultat
-view_remoteAgentInstall_resultCode = ResultCode~
-view_remoteAgentInstall_startAgent = Agent starten
-view_remoteAgentInstall_startAgentResults = Agent start results: [{0}]~
-view_remoteAgentInstall_step = Schritt
-view_remoteAgentInstall_stopAgent = Agent anhalten
-view_remoteAgentInstall_stopAgentResults = Agent stop results: [{0}]~
-view_remoteAgentInstall_success = Agent installation complete~
-view_remoteAgentInstall_updateStatus = Update Status~
-
-#==================== Alerts ======================
-view_alerts_table_title_group=Verlauf Gruppen-Alarme
-view_alerts_table_title_resource=Verlauf Ressourcen-Alarme
-view_alerts_table_filter_priority=Filter nach Priorität
-view_alerts_field_created_time=Erstellungszeitpunkt
-view_alerts_field_modified_time=Zuletzt geändert
-view_alerts_field_enabled=Aktiviert
-view_alerts_field_ack_time=Zeitpunkt Bestätigung
-view_alerts_field_ack_subject=Bestätigender Benutzer
-view_alerts_field_ack_status=Status
-view_alerts_field_name=Name
-view_alerts_field_condition_text=Bedingung(en)
-view_alerts_field_condition_text_none=Keine Bedingungen
-view_alerts_field_condition_text_many=Mehrere Bedingungen
-view_alerts_field_condition_value=Bedingung
-view_alerts_field_priority=Priorität
-view_alerts_field_parent=Eltern
-view_alerts_field_protected=Geschützt
-view_alerts_field_protected_tooltip=If true, this definition is protected from being
changed by the parent definition. In other words, the parent definition settings will not
override this definition.~
-view_alerts_loadFailed=Konnte die Daten für die Alarme nicht laden
-view_alerts_delete_confirm=Die ausgewählten Alarme löschen?
-view_alerts_delete_confirm_all=Alle Alarme aus dieser Quele löschen?
-view_alerts_delete_success=Erfolgreich {0} Alarme gelöscht
-view_alerts_delete_failure=Konnte die Alarme mit den IDs {0} nicht löschen
-view_alerts_delete_failure_all=Löschen aller Alarme dieser Quelle fehlgeschlagen
-view_alerts_ack_confirm=Die ausgewählten Alarme bestätigen?
-view_alerts_ack_confirm_all=Alle Alarme dieser Quelle bestätigen?
-view_alerts_ack_success=Erfolgreich {0} Alarme bestätigt
-view_alerts_ack_failure=Bestätigen der Alarme mit den IDs {0} fehlgeschlagen
-view_alerts_ack_failure_all=Bestätigung aller Alarme deiser Quelle fehlgeschlagen
-view_alert_details_loadFailed=Laden der Details für den Alarm fehlgeschlagen
-view_alert_details_field_ack_by=Bestätigt durch
-view_alert_details_field_ack_at=Bestätigt um
-view_alert_details_field_recovery_info=Info zur Erholung
-view_alert_definition_for_type=Vorlage ansehen
-view_alert_definition_for_group=View Group Definition~
-view_alert_definitions_table_title_group=Alarm-Definitionen für Gruppen
-view_alert_definitions_table_title_resource=Alarm-Definitionen für Ressourcen
-view_alert_definitions_loadFailed=Failed to fetch alert definition data~
-view_alert_definitions_loadFailed_single=Failed to fetch data for alert definition with
id {0}~
-view_alert_definitions_enable_confirm=Die auusgewählten Alarm-Definitionen aktivieren?
-view_alert_definitions_enable_success=Successfully enabled {0} alert definitions~
-view_alert_definitions_enable_failure=Failed to enable the selected alert definitions~
-view_alert_definitions_disable_confirm=Die ausgewählten Alram-Definitionen deaktivieren?
-view_alert_definitions_disable_success=Successfully disabled {0} alert definitions~
-view_alert_definitions_disable_failure=Failed to disable the selected alert definitions~
-view_alert_definitions_delete_confirm=Die ausgewählten Alarm-Definitionen löschen?
-view_alert_definitions_delete_success=Successfully deleted {0} alert definitions~
-view_alert_definitions_delete_failure=Failed to deleted the selected alert definitions~
-view_alert_definitions_create_success=Alarm-Definition erfolgreich angelegt
-view_alert_definitions_create_failure=Anlegen der Alarm-Definition fehlgeschlagen
-view_alert_definitions_update_success=Alarm-Definition erfolgreich aktualisiert
-view_alert_definitions_update_failure=Aktualisieren der Alarm-Definition fehlgeschlagen
-view_alert_definition_condition_editor_option_label=Typ der Bedingung
-view_alert_definition_condition_editor_option_availability=Änderung der Verfügbarkeit
-view_alert_definition_condition_editor_option_metric_threshold=Absoluter
Metrikschwellwert
-view_alert_definition_condition_editor_option_metric_baseline=Schwelle des Referenzbands
-view_alert_definition_condition_editor_option_metric_change=Wert der Metrik ändert sich
-view_alert_definition_condition_editor_option_metric_calltime_threshold=Call Time Value
Threshold~
-view_alert_definition_condition_editor_option_metric_calltime_change=Änderung des
Call-Time-Werts
-view_alert_definition_condition_editor_option_metric_trait_change=Änderung des
Trait-Werts
-view_alert_definition_condition_editor_option_operation=Ausführung der Operation
-view_alert_definition_condition_editor_option_resource_configuration=Änderung der
Konfiguration der Ressource
-view_alert_definition_condition_editor_option_event=Event Detection~
-view_alert_definition_condition_editor_avilability_tooltip=Specify the availability state
change that will trigger the condition.~
-view_alert_definition_condition_editor_avilability_value=Verfügbarkeit
-view_alert_definition_condition_editor_avilability_option_up=Wird verfügbar
-view_alert_definition_condition_editor_avilability_option_down=Wird unverfügbar
-view_alert_definition_condition_editor_metric_common_definition_not_found=Should have
found metric definition - something is wrong~
-view_alert_definition_condition_editor_metric_threshold_tooltip=Specify the threshold
value that, when violated, triggers the condition. The value you specify is an absolute
value with an optional units specifier.~
-view_alert_definition_condition_editor_metric_threshold_name=Metrik
-view_alert_definition_condition_editor_metric_threshold_value=Wert der Metrik
-view_alert_definition_condition_editor_metric_threshold_value_tooltip=The threshold value
of the metric that will trigger the condition when compared using the selected
comparator.~
-view_alert_definition_condition_editor_metric_threshold_comparator=Komparator
-view_alert_definition_condition_editor_metric_threshold_comparator_less=Kleiner als
-view_alert_definition_condition_editor_metric_threshold_comparator_equal=Gleich
-view_alert_definition_condition_editor_metric_threshold_comparator_greater=Größer als
-view_alert_definition_condition_editor_metric_threshold_comparator_tooltip=How a
collected metric value should be compared to the given threshold value~
-view_alert_definition_condition_editor_metric_baseline_tooltip=Specify the baseline value
that must be violated to trigger the condition. The value you specify is a percentage of
the given baseline value.~
-view_alert_definition_condition_editor_metric_baseline_percentage=Baseline Percentage~
-view_alert_definition_condition_editor_metric_baseline_percentage_tooltip=A collected
metric value will trigger this condition when compared to this percentage of the selected
baseline value using the selected comparator~
-view_alert_definition_condition_editor_metric_baseline_value=Referenzband~
-view_alert_definition_condition_editor_metric_change_tooltip=Specify the metric whose
value must change to trigger the condition.~
-view_alert_definition_condition_editor_metric_calltime_threshold_tooltip=Specify the
calltime threshold value that, when violated, triggers the condition. The value you
specify is an absolute value with an optional units specifier. You also must specify which
calltime limit to compare the value with (minimum, maximum or average calltime value).~
-view_alert_definition_condition_editor_metric_calltime_common_name=Call Time Metric~
-view_alert_definition_condition_editor_metric_calltime_common_limit=Call Time Limit~
-view_alert_definition_condition_editor_metric_calltime_common_limit_tooltip=The calltime
limit value that is to be compared with the given value~
-view_alert_definition_condition_editor_metric_calltime_common_regex=Regulärer Ausdruck
-view_alert_definition_condition_editor_metric_calltime_common_regex_tooltip=If specified,
this is a regular expression that must match a call destination in order to trigger the
condition.~
-view_alert_definition_condition_editor_metric_calltime_common_comparator=Komparator
-view_alert_definition_condition_editor_metric_calltime_common_comparator_shrinks=Schrumpft
-view_alert_definition_condition_editor_metric_calltime_common_comparator_grows=Wächst
-view_alert_definition_condition_editor_metric_calltime_common_comparator_changes=Ändert
sich
-view_alert_definition_condition_editor_metric_calltime_common_comparator_tooltip=How a
collected calltime value should be compared to the given calltime limit~
-view_alert_definition_condition_editor_metric_calltime_threshold_value=Call Time Value~
-view_alert_definition_condition_editor_metric_calltime_threshold_value_tooltip=The
threshold value of the metric that will trigger the condition when compared using the
selected comparator.~
-view_alert_definition_condition_editor_metric_calltime_change_tooltip=Specify the
calltime value that, when changed at least a specified amount, triggers the condition. You
must specify which calltime limit to check (minimum, maximum or average calltime value)
and the percentage of change that must occur.~
-view_alert_definition_condition_editor_metric_calltime_change_percentage=Percentage
Change~
-view_alert_definition_condition_editor_metric_calltime_change_percentage_tooltip=A
collected calltime value will trigger this condition when it differs by at least this
percentage of the selected calltime limit value~
-view_alert_definition_condition_editor_metric_trait_change_tooltip=Specify the trait
whose value must change to trigger the condition.~
-view_alert_definition_condition_editor_metric_trait_change_value=Trait~
-view_alert_definition_condition_editor_operation_tooltip=Specify the result that must
occur when the selected operation is executed in order to trigger the condition.~
-view_alert_definition_condition_editor_operation_value=Operation
-view_alert_definition_condition_editor_operation_status=Zustand der Operation
-view_alert_definition_condition_editor_operation_status_inprogress=In Ausführung
-view_alert_definition_condition_editor_operation_status_success=Erfolg
-view_alert_definition_condition_editor_operation_status_failure=Fehler
-view_alert_definition_condition_editor_operation_status_canceled=Abgebrochen
-view_alert_definition_condition_editor_resource_configuration_tooltip=This condition is
triggered when the resource configuration changes.~
-view_alert_definition_condition_editor_event_tooltip=Specify the event severity that an
event message must be reported with in order to trigger this condition. If you specify an
optional regular expression, the event message must also match that regular expression in
order for the condition to trigger.~
-view_alert_definition_condition_editor_event_severity=Schwere des Ereignisses
-view_alert_definition_condition_editor_event_severity_debug=Debug
-view_alert_definition_condition_editor_event_severity_info=Info
-view_alert_definition_condition_editor_event_severity_warn=Warn
-view_alert_definition_condition_editor_event_severity_error=Error
-view_alert_definition_condition_editor_event_severity_fatal=Fatal
-view_alert_definition_condition_editor_event_regex=Regulärer Ausdruck
-view_alert_definition_condition_editor_event_regex_tooltip=If specified, this is a
regular expression that must match a collected event message in order to trigger the
condition.~
-view_alert_definition_condition_editor_common_min=Minimum
-view_alert_definition_condition_editor_common_avg=Durchschnitt
-view_alert_definition_condition_editor_common_max=Maximum
-view_alert_definition_notification_editor_title_add=Benachrichtigung hinzufügen
-view_alert_definition_notification_editor_title_edit=Benachrichtigung bearbeiten
-view_alert_definition_notification_editor_sender=Notification Sender~
-view_alert_definition_notification_editor_none_available=Keine Alarm-Sender verfügbar
-view_alert_definition_notification_editor_loadFailed=Cannot get alert senders~
-view_alert_definition_notification_editor_loadFailed_single=Cannot get alert sender
configuration definition~
-view_alert_definition_notification_editor_saveFailed=Cannot save the notification
configuration~
-view_alert_definition_notification_editor_field_sender=Sender
-view_alert_definition_notification_editor_field_configuration=Konfiguration
-view_alert_definition_notification_editor_field_configuration_not_loaded=Unbekannt
-view_alert_definition_notification_editor_field_configuration_loadFailed=Failed to get
notification configuration preview~
-view_alert_definition_notification_editor_delete_confirm=Are you sure you want to delete
the selected alert notifications?~
-view_alert_definition_notification_operation_editor_mode_title=Resource Selection Mode~
-view_alert_definition_notification_operation_editor_mode_this=Diese Ressource
-view_alert_definition_notification_operation_editor_mode_specific=Spezifische Ressource
-view_alert_definition_notification_operation_editor_mode_relative=Relative Ressource
-view_alert_definition_notification_operation_editor_mode_unknown=UNKNOWN OPTION - THIS IS
A BUG~
-view_alert_definition_notification_operation_editor_common_operation=Operation
-view_alert_definition_notification_operation_editor_specific_resource=Ressource
-view_alert_definition_notification_operation_editor_specific_pick_button=Auswählen
-view_alert_definition_notification_operation_editor_specific_pick_text=Ressource
auswählen...
-view_alert_definition_notification_operation_editor_specific_pick_error_invalid=Bitte
wählen Sie eine Ressource aus...
-view_alert_definition_notification_operation_editor_specific_pick_error_no_operation=Please
pick a resource that has one or more operations~
-view_alert_definition_notification_operation_editor_relative_ancestor=Start Search From~
-view_alert_definition_notification_operation_editor_relative_ancestor_tooltip=Select the
top of the type hierarchy from which to search its descedant tree for the Filter By type~
-view_alert_definition_notification_operation_editor_relative_ancestor_loadFailed=Cannot
get type ancestry~
-view_alert_definition_notification_operation_editor_relative_ancestor_root=Root Ancestor
Type~
-view_alert_definition_notification_operation_editor_relative_descendant=Then Filter By~
-view_alert_definition_notification_operation_editor_relative_descendant_tooltip=The
resource type to search for under the root type defined in the Start Search From
selection.~
-view_alert_definition_notification_operation_editor_relative_descendant_filter_tooltip=A
specific name to uniquely identify a resource when more than one resource of the selected
type might exist. This is optional if there will only ever be one resource of the resource
type in the selected type hierarchy.~
-view_alert_definition_notification_operation_editor_relative_descendant_loadFailed=Cannot
get type descendants~
-view_alert_definition_notification_operation_editor_operations_loadFailed=Failed to load
the list of available operations~
-view_alert_definition_notification_operation_editor_operations_no_parameters=This
operation does not take any parameters~
-view_alert_definition_notification_role_editor_loadFailed=Cannot determine current roles
- starting empty~
-view_alert_definition_notification_role_editor_restoreFailed=Cannot use current roles -
starting empty~
-view_alert_definition_notification_role_editor_saveFailed=Cannot save the selected
roles~
-view_alert_definition_notification_user_editor_loadFailed=Cannot determine current users
- starting empty~
-view_alert_definition_notification_user_editor_restoreFailed=Cannot use current users -
starting empty~
-view_alert_definition_notification_user_editor_saveFailed=Cannot save the selected
users~
-view_alert_definition_recovery_editor_disable_when_fired=Nach dem Auslösen inaktiv
schalten
-view_alert_definition_recovery_editor_disable_when_fired_tooltip=Indicates if this alert
will be disabled after it fires. Once disabled, the alert can be manually re-enabled or a
recovery alert can be set up to automatically re-enable it. If this alert is a recovery
alert itself, this setting cannot be turned on.~
-view_alert_definition_recovery_editor_recovery_alert=Recover Alert~
-view_alert_definition_recovery_editor_recovery_alert_tooltip=The target alert that will
be recovered (i.e. re-enabled) after this alert triggers. Do not select an alert here if
you are not defining a recovery alert.~
-view_alert_definition_recovery_editor_loadFailed=Cannot build recovery menu~
-view_alert_definition_recovery_editor_none_available=Keiner
-view_alert_common_tab_general=Allgemeine Eigenschaften
-view_alert_common_tab_conditions=Bedingungen
-view_alert_common_tab_conditions_modal_title=Bedingung hinzufügen
-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_text=Bedingung
-view_alert_common_tab_conditions_value=Wert
-view_alert_common_tab_conditions_type_availability=Änderung der Verfügbarkeit
-view_alert_common_tab_conditions_type_availability_down=Wurde unverfügbar
-view_alert_common_tab_conditions_type_availability_up=Wurde wieder verfügbar
-view_alert_common_tab_conditions_type_metric_threshold=Metrik überschreitet Schwellwert
-view_alert_common_tab_conditions_type_metric_calltime_threshold=Call-Time überschreitet
Schwellwert
-view_alert_common_tab_conditions_type_metric_calltime_destination=with call destination
matching~
-view_alert_common_tab_conditions_type_metric_calltime_change=Call-Time-Wert ändert sich
-view_alert_common_tab_conditions_type_metric_calltime_change_verb=um mindestens
-view_alert_common_tab_conditions_type_metric_calltime_delta_grows=Wächst
-view_alert_common_tab_conditions_type_metric_calltime_delta_shrinks=Schrumpft
-view_alert_common_tab_conditions_type_metric_calltime_delta_other=Ändert sich
-view_alert_common_tab_conditions_type_metric_baseline=Metrik überschreitet Referenzband
-view_alert_common_tab_conditions_type_metric_baseline_verb=von
-view_alert_common_tab_conditions_type_metric_change=Wert der Metrik ändert sich
-view_alert_common_tab_conditions_type_metric_trait_change=Trait-Änderung
-view_alert_common_tab_conditions_type_operation=Ausführung der Operation
-view_alert_common_tab_conditions_type_operation_status=mit Ergebnis-Status
-view_alert_common_tab_conditions_type_resource_configuration=Resource Configuration
Change~
-view_alert_common_tab_conditions_type_event=Event Detection~
-view_alert_common_tab_conditions_type_event_matching=with event source matching~
-view_alert_common_tab_conditions_recovery_enabled=Triggered ''{0}'' to be
re-enabled~
-view_alert_common_tab_conditions_recovery_disabled=Dieser Alarm hat seine Definition
deaktiviert.
-view_alert_common_tab_notifications=Benachrichtigung
-view_alert_common_tab_notifications_sender=Sender
-view_alert_common_tab_notifications_status=Status
-view_alert_common_tab_notifications_message=Nachricht
-view_alert_common_tab_dampening=Dämpfung
-view_alert_common_tab_dampening_category_none=Keine
-view_alert_common_tab_dampening_category_none_tooltip=Dämpfung ist abgeschaltet. Jedes
Mal wenn die Bedingungen zutreffen wird ein Alarm ausgelöst.
-view_alert_common_tab_dampening_category_consecutive_count=Aufeinanderfolgend
-view_alert_common_tab_dampening_category_consecutive_count_tooltip=Ein Alarm wird
ausgelöst, wenn bei X aufeinanderfolgenden Werten die Bedingungen zutreffen.
-view_alert_common_tab_dampening_category_partial_count=Letzt N Auswertungen
-view_alert_common_tab_dampening_category_partial_count_tooltip=Ein Alarm wird ausgelöst,
wenn die Bedingungen X-Mal innerhalb der letzten N Werte zutreffen.
-view_alert_common_tab_dampening_category_duration_count=Zeitraum
-view_alert_common_tab_dampening_category_duration_count_tooltip=Ein Alarm wird ausgelöst,
wenn die Bedingungen X-Mal innerhalb des gegebenen Zeitraums zutreffen.
-view_alert_common_tab_dampening_consecutive_occurrences_label=Anzahl Vorkommen
-view_alert_common_tab_dampening_consecutive_occurrences_label_tooltip=Anzahl wie oft die
Bedingungen aufeinandefolgend wahr sein müssen, befor der Alarm ausgelöst wird.
-view_alert_common_tab_dampening_partial_occurrences_label=Anzahl Vorkommen
-view_alert_common_tab_dampening_partial_occurrences_label_tooltip=Anzahl wie oft die
Bedingungen innerhalb der letzten N Auswertungen wahr sein müssen, bevor der Alarm
ausgelöst wird.
-view_alert_common_tab_dampening_partial_evalatuions_label=Auswertungen
-view_alert_common_tab_dampening_partial_evalatuions_label_tooltip=Anzahl wie oft die
Bedingungen ausgewertet werden, um zu prüfen, ob sie 'Vorkommen' mal zutreffen.
-view_alert_common_tab_dampening_duration_occurrences_label=Anzahl Vorkommen
-view_alert_common_tab_dampening_duration_occurrences_label_tooltip=Anzahl wie oft die
Bedingungen im gegebenen Zeitraum zutreffen müssen, um den Alarm auszulösen.
-view_alert_common_tab_dampening_duration_period_label=Zeitraum
-view_alert_common_tab_dampening_duration_period_label_tooltip=Der Zeitraum in dem die
Bedingungen geprüft werden, ob sie 'Vorkommen' mal zutreffen.
-view_alert_common_tab_recovery=Erholung
-view_alert_common_tab_invalid_condition_category=Invalid condition category - please
report this as a bug: {0}~
-view_alert_common_tab_invalid_dampening_category=Invalid dampening category - please
report this as a bug: {0}~
-view_alert_common_tab_invalid_time_units=Ungültige Zeiteinheit - bitte berichten Sie
diesen Fehler: {0}
-
-# Auto Discovery Queue
-#----------------------------
-view_autoDiscoveryQ_title=Autodiscovery-Warteschlange
-view_autoDiscoveryQ_import=Importieren
-view_autoDiscoveryQ_ignore=Ignorieren
-view_autoDiscoveryQ_ignored=Ignoriert
-view_autoDiscoveryQ_unignore=Ignorieren aufheben
-view_autoDiscoveryQ_new=Neu
-view_autoDiscoveryQ_newAndIgnored=Neu und Ignoriert
-view_autoDiscoveryQ_importFailure=Konnte die Ressourcen nicht importieren
-view_autoDiscoveryQ_importSuccessful=Sie haben die ausgewählten Ressourcen erfolgreich
importiert
-view_autoDiscoveryQ_ignoreFailure=Konnte die Ressourcen nicht ignorieren
-view_autoDiscoveryQ_ignoreSuccessful=Sie haben die ausgewählten Ressourcen erfolgreich
ignoriert
-view_autoDiscoveryQ_unignoreFailure=Konnte das Ignorieren für die Ressourcen nicht
aufheben.
-view_autoDiscoveryQ_unignoreSuccessful=Sie haben erfolgreich das Ignorieren der
ausgewählten Ressourcen aufgehoben.
-view_autoDiscoveryQ_noperm=(Die erforderlichen "manage inventory" Rechte
fehlen. Kontaktieren Sie den Administrator)
-view_autoDiscoveryQ_noItems=Keine Einträge gefunden
-view_autoDiscoveryQ_field_parentId=Eltern-ID
-view_autoDiscoveryQ_field_name=Ressourcen-Name
-view_autoDiscoveryQ_field_key=Ressourcen-Schlüssel
-view_autoDiscoveryQ_field_discoveryTime=Zeitpunkt des Auffindens
-view_autoDiscoveryQ_field_inventoryStatus=Inventar-Status
-view_autoDiscoveryQ_loadFailure=Failed to load the inventory discovery queue~
-
-#==================== Bundles ======================
-
-# some common bundle terms
+view_adminSecurity_roles = Rollen
+view_adminSecurity_users = Benutzer
+view_adminTemplates_disabledAlertTemplates=Deaktivierte Alarmvorlagen
+view_adminTemplates_disabledMetricTemplates=Deaktivierte Metrik-Vorlagen
+view_adminTemplates_editAlertTemplate = Vorlagen für Alarme bearbeiten
+view_adminTemplates_editMetricTemplate = Vorlagen für Metriken bearbeiten
+view_adminTemplates_enabledAlertTemplates = Vorlagen für Alarme aktiv
+view_adminTemplates_enabledMetricTemplates=Aktivierte Metrik-Vorlagen
+view_adminTemplates_platformServices=Plattformdienste
+view_adminTemplates_platforms = Platformen
+view_adminTemplates_prompt_enabledAlertTemplates = Anzahl der Alarm-Vorlagen, die für
diesen Ressourcen-Typ aktiviert sind
+view_adminTemplates_servers = Server
+view_adminTopology_affinityGroups = Affinitätsgruppen
+view_adminTopology_agents = Agenten
+view_adminTopology_partitionEvents = Partitionierungs-Ereignisse
+view_adminTopology_remoteAgentInstall = Installation entfernter Agenten
+view_adminTopology_servers = Server
+view_adminUsersDetails_dataTypeName = Benutzer
+view_adminUsersList_dataTypeName = Benutzer
+view_adminUsersList_dataTypeNamePlural = Benutzer
+view_admin_administration = Verwaltung
+view_admin_configuration = Konfiguration
+view_admin_content = Inhalte
+view_admin_downloads_agent_buildNumber = Build-Nummer des Agents
+view_admin_downloads_agent_link_value = Agent {0} ({1}) herunterladen
+view_admin_downloads_agent_md5 = MD5 Prüfsumme des Agents
+view_admin_downloads_agent_version = Version des Agents
+view_admin_downloads_cli_link_value = CLI {0} ({1}) herunterladen
+view_admin_downloads_cli_md5 = MD5 Prüfsumme des CLI
+view_admin_downloads_cli_version = Version des CLI
+view_admin_landing = In dieser Sektion können die globalen Einstellungen für RHQ
verwaltet werden. Dies schließt Sicherheitseinstellungen und Plugins ein, sowie die
Verwaltung der RHQ Server- und Agentplugins.
+view_admin_measTemplates_updateExisting_title = Vorhandene Zeitpläne aktualisieren
+view_admin_security = Sicherheit
+view_admin_systemSettings_AlertPurge_name = Lösche Alarme, die älter sind als
+view_admin_systemSettings_AvailabilityPurge_name = Lösche Verfügbarkeitsdaten, die älter
sind als
+view_admin_systemSettings_EnableExperimentalFeatures_desc = Wenn diese Option aktiviert
ist, werden eventuell vorhandene experimentelle Features verfügbar gemacht.
+view_admin_systemSettings_EnableExperimentalFeatures_name = Experimentelle Features
nutzen
+view_admin_systemSettings_LDAPBindDN_name = Benutzername
+view_admin_systemSettings_LDAPBindPW_name = Passwort
+view_admin_systemSettings_TraitPurge_name = Lösche Trait-Daten, die älter sind als
+view_admin_systemSettings_cannotLoadSettings=Kann die aktuellen Systemeinstellungen nicht
laden
+view_admin_systemSettings_fixBeforeSaving=Bitte korrigieren Sie die ungültigen Werte vor
dem Sichern
+view_admin_systemSettings_saveFailure = Das Speichern der Systemeinstellungen ist
fehlgeschlagen
+view_admin_systemSettings_savedSettings = Sie haben die Systemeinstellungen erfolgreich
gespeichert
+view_admin_systemSettings_serverDetails = Serverdetails
+view_admin_systemSettings_serverDetails_buildNumber = Nummer des Builds
+view_admin_systemSettings_serverDetails_currentTable = Aktuelle Datenbanktablee für
Metrikdaten
+view_admin_systemSettings_serverDetails_dbDriverName = Name des Datenbanktreibers
+view_admin_systemSettings_serverDetails_dbDriverVersion = Version des Datenbanktreibers
+view_admin_systemSettings_serverDetails_dbName = Produktname der Datenbank
+view_admin_systemSettings_serverDetails_dbUrl = URL der Datenbankverbindung
+view_admin_systemSettings_serverDetails_dbVersion = Produktversion der Datenbank
+view_admin_systemSettings_serverDetails_installDir = Installationsverzeichnis des
Servers
+view_admin_systemSettings_serverDetails_nextRotation = Nächste Rotation der
Metrik-Tabellen
+view_admin_systemSettings_serverDetails_time = Lokale Zeit des Servers
+view_admin_systemSettings_serverDetails_tz = Zeitzone des Servers
+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_modal_title = Bedingung hinzufügen
+view_alert_common_tab_conditions_recovery_disabled = Dieser Alarm hat seine Definition
deaktiviert.
+view_alert_common_tab_conditions_text = Bedingung
+view_alert_common_tab_conditions_type_availability = Änderung der Verfügbarkeit
+view_alert_common_tab_conditions_type_availability_down = Wurde unverfügbar
+view_alert_common_tab_conditions_type_availability_up = Wurde wieder verfügbar
+view_alert_common_tab_conditions_type_metric_baseline = Metrik überschreitet
Referenzband
+view_alert_common_tab_conditions_type_metric_baseline_verb = von
+view_alert_common_tab_conditions_type_metric_calltime_change = Call-Time-Wert ändert
sich
+view_alert_common_tab_conditions_type_metric_calltime_change_verb = um mindestens
+view_alert_common_tab_conditions_type_metric_calltime_delta_grows = Wächst
+view_alert_common_tab_conditions_type_metric_calltime_delta_other = Ändert sich
+view_alert_common_tab_conditions_type_metric_calltime_delta_shrinks = Schrumpft
+view_alert_common_tab_conditions_type_metric_calltime_threshold = Call-Time überschreitet
Schwellwert
+view_alert_common_tab_conditions_type_metric_change = Wert der Metrik ändert sich
+view_alert_common_tab_conditions_type_metric_threshold = Metrik überschreitet
Schwellwert
+view_alert_common_tab_conditions_type_metric_trait_change = Trait-Änderung
+view_alert_common_tab_conditions_type_operation = Ausführung der Operation
+view_alert_common_tab_conditions_type_operation_status = mit Ergebnis-Status
+view_alert_common_tab_conditions_value = Wert
+view_alert_common_tab_dampening = Dämpfung
+view_alert_common_tab_dampening_category_consecutive_count = Aufeinanderfolgend
+view_alert_common_tab_dampening_category_consecutive_count_tooltip = Ein Alarm wird
ausgelöst, wenn bei X aufeinanderfolgenden Werten die Bedingungen zutreffen.
+view_alert_common_tab_dampening_category_duration_count = Zeitraum
+view_alert_common_tab_dampening_category_duration_count_tooltip = Ein Alarm wird
ausgelöst, wenn die Bedingungen X-Mal innerhalb des gegebenen Zeitraums zutreffen.
+view_alert_common_tab_dampening_category_none = Keine
+view_alert_common_tab_dampening_category_none_tooltip = Dämpfung ist abgeschaltet. Jedes
Mal wenn die Bedingungen zutreffen wird ein Alarm ausgelöst.
+view_alert_common_tab_dampening_category_partial_count = Letzt N Auswertungen
+view_alert_common_tab_dampening_category_partial_count_tooltip = Ein Alarm wird
ausgelöst, wenn die Bedingungen X-Mal innerhalb der letzten N Werte zutreffen.
+view_alert_common_tab_dampening_consecutive_occurrences_label = Anzahl Vorkommen
+view_alert_common_tab_dampening_consecutive_occurrences_label_tooltip = Anzahl wie oft
die Bedingungen aufeinandefolgend wahr sein müssen, befor der Alarm ausgelöst wird.
+view_alert_common_tab_dampening_duration_occurrences_label = Anzahl Vorkommen
+view_alert_common_tab_dampening_duration_occurrences_label_tooltip = Anzahl wie oft die
Bedingungen im gegebenen Zeitraum zutreffen müssen, um den Alarm auszulösen.
+view_alert_common_tab_dampening_duration_period_label = Zeitraum
+view_alert_common_tab_dampening_duration_period_label_tooltip = Der Zeitraum in dem die
Bedingungen geprüft werden, ob sie 'Vorkommen' mal zutreffen.
+view_alert_common_tab_dampening_partial_evalatuions_label = Auswertungen
+view_alert_common_tab_dampening_partial_evalatuions_label_tooltip = Anzahl wie oft die
Bedingungen ausgewertet werden, um zu prüfen, ob sie 'Vorkommen' mal zutreffen.
+view_alert_common_tab_dampening_partial_occurrences_label = Anzahl Vorkommen
+view_alert_common_tab_dampening_partial_occurrences_label_tooltip = Anzahl wie oft die
Bedingungen innerhalb der letzten N Auswertungen wahr sein müssen, bevor der Alarm
ausgelöst wird.
+view_alert_common_tab_general = Allgemeine Eigenschaften
+view_alert_common_tab_invalid_time_units = Ungültige Zeiteinheit - bitte berichten Sie
diesen Fehler: {0}
+view_alert_common_tab_notifications = Benachrichtigung
+view_alert_common_tab_notifications_message = Nachricht
+view_alert_common_tab_notifications_sender = Sender
+view_alert_common_tab_notifications_status = Status
+view_alert_common_tab_recovery = Erholung
+view_alert_definition_condition_editor_avilability_option_down = Wird unverfügbar
+view_alert_definition_condition_editor_avilability_option_up = Wird verfügbar
+view_alert_definition_condition_editor_avilability_value = Verfügbarkeit
+view_alert_definition_condition_editor_common_avg = Durchschnitt
+view_alert_definition_condition_editor_common_max = Maximum
+view_alert_definition_condition_editor_common_min = Minimum
+view_alert_definition_condition_editor_delete_confirm = Die ausgewählte(n)
Alarm-Bedingung(en) löschen?
+view_alert_definition_condition_editor_event_regex = Regulärer Ausdruck
+view_alert_definition_condition_editor_event_severity = Schwere des Ereignisses
+view_alert_definition_condition_editor_event_severity_debug = Debug
+view_alert_definition_condition_editor_event_severity_error = Error
+view_alert_definition_condition_editor_event_severity_fatal = Fatal
+view_alert_definition_condition_editor_event_severity_info = Info
+view_alert_definition_condition_editor_event_severity_warn = Warn
+view_alert_definition_condition_editor_metric_calltime_common_comparator = Komparator
+view_alert_definition_condition_editor_metric_calltime_common_comparator_changes = Ändert
sich
+view_alert_definition_condition_editor_metric_calltime_common_comparator_grows = Wächst
+view_alert_definition_condition_editor_metric_calltime_common_comparator_shrinks =
Schrumpft
+view_alert_definition_condition_editor_metric_calltime_common_regex = Regulärer Ausdruck
+view_alert_definition_condition_editor_metric_threshold_comparator = Komparator
+view_alert_definition_condition_editor_metric_threshold_comparator_equal = Gleich
+view_alert_definition_condition_editor_metric_threshold_comparator_greater = Größer als
+view_alert_definition_condition_editor_metric_threshold_comparator_less = Kleiner als
+view_alert_definition_condition_editor_metric_threshold_name = Metrik
+view_alert_definition_condition_editor_metric_threshold_value = Wert der Metrik
+view_alert_definition_condition_editor_operation_status = Zustand der Operation
+view_alert_definition_condition_editor_operation_status_canceled = Abgebrochen
+view_alert_definition_condition_editor_operation_status_failure = Fehler
+view_alert_definition_condition_editor_operation_status_inprogress = In Ausführung
+view_alert_definition_condition_editor_operation_status_success = Erfolg
+view_alert_definition_condition_editor_operation_value = Operation
+view_alert_definition_condition_editor_option_availability = Änderung der Verfügbarkeit
+view_alert_definition_condition_editor_option_label = Typ der Bedingung
+view_alert_definition_condition_editor_option_metric_baseline = Schwelle des
Referenzbands
+view_alert_definition_condition_editor_option_metric_calltime_change = Änderung des
Call-Time-Werts
+view_alert_definition_condition_editor_option_metric_change = Wert der Metrik ändert
sich
+view_alert_definition_condition_editor_option_metric_threshold = Absoluter
Metrikschwellwert
+view_alert_definition_condition_editor_option_metric_trait_change = Änderung des
Trait-Werts
+view_alert_definition_condition_editor_option_operation = Ausführung der Operation
+view_alert_definition_condition_editor_option_resource_configuration = Änderung der
Konfiguration der Ressource
+view_alert_definition_for_type = Vorlage ansehen
+view_alert_definition_notification_cliScript_editor_anotherUser = Anderer Benutzer
+view_alert_definition_notification_cliScript_editor_existingScript = Vorhandenes Skript
+view_alert_definition_notification_cliScript_editor_newScriptVersion = Version
+view_alert_definition_notification_cliScript_editor_script = Skript
+view_alert_definition_notification_cliScript_editor_selectRepoFirst = Wählen Sie zunächst
ein Repository aus
+view_alert_definition_notification_cliScript_editor_thisUser = Aktueller Benutzer
+view_alert_definition_notification_cliScript_editor_uploadNewScript = Neues Skript
hochladen
+view_alert_definition_notification_cliScript_editor_verifyAuthentication = Überprüfen
+view_alert_definition_notification_cliScript_editor_whichUser=Benutzer, unter dem das
Skript ausgeführt werden soll
+view_alert_definition_notification_editor_field_configuration = Konfiguration
+view_alert_definition_notification_editor_field_configuration_not_loaded = Unbekannt
+view_alert_definition_notification_editor_field_sender = Sender
+view_alert_definition_notification_editor_none_available = Keine Alarm-Sender verfügbar
+view_alert_definition_notification_editor_title_add = Benachrichtigung hinzufügen
+view_alert_definition_notification_editor_title_edit = Benachrichtigung bearbeiten
+view_alert_definition_notification_operation_editor_common_operation = Operation
+view_alert_definition_notification_operation_editor_mode_relative = Relative Ressource
+view_alert_definition_notification_operation_editor_mode_specific = Spezifische
Ressource
+view_alert_definition_notification_operation_editor_mode_this = Diese Ressource
+view_alert_definition_notification_operation_editor_specific_pick_button = Auswählen
+view_alert_definition_notification_operation_editor_specific_pick_error_invalid = Bitte
wählen Sie eine Ressource aus...
+view_alert_definition_notification_operation_editor_specific_pick_text = Ressource
auswählen...
+view_alert_definition_notification_operation_editor_specific_resource = Ressource
+view_alert_definition_recovery_editor_disable_when_fired = Nach dem Auslösen inaktiv
schalten
+view_alert_definition_recovery_editor_none_available = Keiner
+view_alert_definitions_create_failure = Anlegen der Alarm-Definition fehlgeschlagen
+view_alert_definitions_create_success = Alarm-Definition erfolgreich angelegt
+view_alert_definitions_delete_confirm = Die ausgewählten Alarm-Definitionen löschen?
+view_alert_definitions_disable_confirm = Die ausgewählten Alram-Definitionen
deaktivieren?
+view_alert_definitions_enable_confirm = Die auusgewählten Alarm-Definitionen aktivieren?
+view_alert_definitions_table_title_group = Alarm-Definitionen für Gruppen
+view_alert_definitions_table_title_resource = Alarm-Definitionen für Ressourcen
+view_alert_definitions_update_failure = Aktualisieren der Alarm-Definition
fehlgeschlagen
+view_alert_definitions_update_success = Alarm-Definition erfolgreich aktualisiert
+view_alert_details_field_ack_at = Bestätigt um
+view_alert_details_field_ack_by = Bestätigt durch
+view_alert_details_field_recovery_info = Info zur Erholung
+view_alert_details_loadFailed = Laden der Details für den Alarm fehlgeschlagen
+view_alerts_ack_confirm = Die ausgewählten Alarme bestätigen?
+view_alerts_ack_confirm_all = Alle Alarme dieser Quelle bestätigen?
+view_alerts_ack_failure = Bestätigen der Alarme mit den IDs {0} fehlgeschlagen
+view_alerts_ack_failure_all = Bestätigung aller Alarme deiser Quelle fehlgeschlagen
+view_alerts_ack_success = Erfolgreich {0} Alarme bestätigt
+view_alerts_delete_confirm = Die ausgewählten Alarme löschen?
+view_alerts_delete_confirm_all = Alle Alarme aus dieser Quele löschen?
+view_alerts_delete_failure = Konnte die Alarme mit den IDs {0} nicht löschen
+view_alerts_delete_failure_all = Löschen aller Alarme dieser Quelle fehlgeschlagen
+view_alerts_delete_success = Erfolgreich {0} Alarme gelöscht
+view_alerts_field_ack_status = Status
+view_alerts_field_ack_status_ack = Best. ({0})
+view_alerts_field_ack_status_ackHover = Bestätigt durch {0} um {1}
+view_alerts_field_ack_status_noAck = Unbest.
+view_alerts_field_ack_status_noAckHover = Noch nicht bestätigt
+view_alerts_field_ack_subject = Bestätigender Benutzer
+view_alerts_field_ack_time = Zeitpunkt Bestätigung
+view_alerts_field_condition_text = Bedingung(en)
+view_alerts_field_condition_text_many = Mehrere Bedingungen
+view_alerts_field_condition_text_none = Keine Bedingungen
+view_alerts_field_condition_value = Bedingung
+view_alerts_field_created_time = Erstellungszeitpunkt
+view_alerts_field_enabled = Aktiviert
+view_alerts_field_modified_time = Zuletzt geändert
+view_alerts_field_name = Name
+view_alerts_field_parent = Eltern
+view_alerts_field_priority = Priorität
+view_alerts_field_protected = Geschützt
+view_alerts_loadFailed = Konnte die Daten für die Alarme nicht laden
+view_alerts_table_filter_priority = Filter nach Priorität
+view_alerts_table_title_group = Verlauf Gruppen-Alarme
+view_alerts_table_title_resource = Verlauf Ressourcen-Alarme
+view_autoDiscoveryQ_committed = Eingetragen
+view_autoDiscoveryQ_confirmSelect = Sollen auch die Kinder der Platform ausgewählt
werden?
+view_autoDiscoveryQ_deleted = Gelöscht
+view_autoDiscoveryQ_field_discoveryTime = Zeitpunkt des Auffindens
+view_autoDiscoveryQ_field_inventoryStatus = Inventar-Status
+view_autoDiscoveryQ_field_key = Ressourcen-Schlüssel
+view_autoDiscoveryQ_field_name = Ressourcen-Name
+view_autoDiscoveryQ_field_parentId = Eltern-ID
+view_autoDiscoveryQ_ignore = Ignorieren
+view_autoDiscoveryQ_ignoreFailure = Konnte die Ressourcen nicht ignorieren
+view_autoDiscoveryQ_ignoreSuccessful = Sie haben die ausgewählten Ressourcen erfolgreich
ignoriert
+view_autoDiscoveryQ_ignored = Ignoriert
+view_autoDiscoveryQ_import = Importieren
+view_autoDiscoveryQ_importFailure = Konnte die Ressourcen nicht importieren
+view_autoDiscoveryQ_importSuccessful = Sie haben die ausgewählten Ressourcen erfolgreich
importiert
+view_autoDiscoveryQ_new = Neu
+view_autoDiscoveryQ_newAndIgnored = Neu und Ignoriert
+view_autoDiscoveryQ_noItems = Keine Einträge gefunden
+view_autoDiscoveryQ_noperm = (Die erforderlichen "manage inventory" Rechte
fehlen. Kontaktieren Sie den Administrator)
+view_autoDiscoveryQ_showStatus = Zeige
+view_autoDiscoveryQ_title = Autodiscovery-Warteschlange
+view_autoDiscoveryQ_unignore = Ignorieren aufheben
+view_autoDiscoveryQ_unignoreFailure = Konnte das Ignorieren für die Ressourcen nicht
aufheben.
+view_autoDiscoveryQ_unignoreSuccessful = Sie haben erfolgreich das Ignorieren der
ausgewählten Ressourcen aufgehoben.
+view_autoDiscoveryQ_uninventoried = Aus dem Inventory gelöscht
view_bundle_bundle = Bundle
+view_bundle_bundleDestinations = Bundle-Ziele
+view_bundle_bundleFiles = Bundle-Dateien
+view_bundle_bundleType = Bundle-Type
+view_bundle_bundleVersion = Bundle-Version
+view_bundle_bundleVersions = Bundle-Versionen
view_bundle_bundles = Bundles
-view_bundle_bundleDestinations=Bundle-Ziele
-view_bundle_bundleDeployment=Bundle Deployment~
-view_bundle_bundleDeployments=Bundle Deployments~
-view_bundle_bundleFiles=Bundle-Dateien
-view_bundle_bundleType=Bundle-Type
-view_bundle_bundleVersion=Bundle-Version
-view_bundle_bundleVersions=Bundle-Versionen
-view_bundle_deploy=Deploy
-view_bundle_deployed=Deployed
-view_bundle_deployDir=Deploy-Verzeichnis
-view_bundle_deployments=Deployments
-view_bundle_destinations=Ziele
-view_bundle_files=Dateien
-view_bundle_latestVersion=Aktuelle Version
-view_bundle_recipe=Recipe~
-view_bundle_revert=Revert~
-view_bundle_versions=Versionen
-
-# individual bundle views/wizards
-view_bundle_fileListView_fileSize=Dateigröße
-view_bundle_fileListView_loadFailure=Failed to load bundle file data~
-view_bundle_version_backToBundle=Zurück zum Bundle
-view_bundle_version_bundleVersionTagUpdateFailure=Failed to update bundle version tags~
-view_bundle_version_bundleVersionTagUpdateSuccessful=You have successfully updated the
bundle version tags~
-view_bundle_version_loadFailure=Failed to load bundle version~
-view_bundle_tree_loadFailure=Failed to load bundle data~
-view_bundle_revertWizard_title=Bundle Revert~
-view_bundle_revertWizard_windowTitle=Bundle Revert Wizard~
-view_bundle_revertWizard_getInfoStep_name=Provide Revert Information~
-view_bundle_revertWizard_getInfoStep_revertDeployName=Revert Deploy Name~
-view_bundle_revertWizard_getInfoStep_revertDeployDesc=Revert Deploy Description~
-view_bundle_revertWizard_getInfoStep_revertDeployDescFull=[REVERT
From]\\n{0}\\n\\n[REVERT To]\\n{1}~
-view_bundle_revertWizard_getInfoStep_cleanDeploy=Clean Deployment? (this will delete an
old, existing deploy directory prior to starting the revert deployment)~
-view_bundle_revertWizard_getInfoStep_getNameFailure=Failed to get revert deployment
name~
-view_bundle_revertWizard_confirmStep_name=Revert Deployment Confirmation~
-view_bundle_revertWizard_confirmStep_noLiveDeployment=No live deployment was found for
the destination [{0}]~
-view_bundle_revertWizard_confirmStep_noPriorDeployment=The live deployment [{0}] cannot
be reverted because there is no prior deployment for the destination [{1}]~
-view_bundle_revertWizard_confirmStep_failedToFindLiveDeployment=Failed to find live
deployment; cannot revert~
-view_bundle_revertWizard_confirmStep_liveDeployment=Live Deployment~
-view_bundle_revertWizard_confirmStep_prevDeployment=Previous Deployment~
-view_bundle_revertWizard_confirmStep_confirmation=Reverting Live Deployment to Previous
Deployment. Click "Next" to continue...~
-view_bundle_revertWizard_revertStep_name=Deploy Bundle to Destination Platforms~
-view_bundle_revertWizard_revertStep_reverting=Reverting...~
-view_bundle_revertWizard_revertStep_scheduled=You have successfully scheduled the revert
deployment!~
-view_bundle_revertWizard_revertStep_scheduledDetails=You have successfully scheduled to
revert the bundle deployment [{0}] from resource group [{1}]~
-view_bundle_revertWizard_revertStep_scheduledFailure=Failed to schedule revert
deployment!~
-view_bundle_list_loadFailure=Failed to load the bundle to be deployed [{0}]~
-view_bundle_list_singleLoadFailure=Failed to get a single bundle to be deployed [{0}]~
-view_bundle_list_versionsCount=Versions Count~
-view_bundle_list_destinationsCount=Destinations Count~
-view_bundle_list_loadWithLatestFailure=Failed to load bundle with the latest version
data~
-view_bundleVersion_loadFailure=Failed to load bundle version data~
-view_bundle_list_backToAll=Back to All Bundles~
-view_bundle_list_tagUpdateFailure=Failed to update bundle tags~
-view_bundle_list_tagUpdateSuccessful=You have successfully updated the bundle tags~
-view_bundle_list_deleteConfirm=Are you sure you want to delete this bundle?~
-view_bundle_list_deleteFailure=Failed to delete the bundle [{0}]~
-view_bundle_list_deleteSuccessful=You successfully deleted the bundle named [{0}]~
-view_bundle_list_error1=Failed to load bundle to deploy [{0}]~
-view_bundle_list_error2=Failed to get a single bundle to deploy [{0}]~
-view_bundle_list_error3=Konnte das Bundle nicht laden
-view_bundle_dest_group=Gruppe
-view_bundle_dest_created=Angelegt
-view_bundle_dest_deployDir=Deploy-Verzeichnis
-view_bundle_dest_lastDeployedVersion=Last Deployed Version~
-view_bundle_dest_lastDeploymentDate=Last Deployment Date~
-view_bundle_dest_lastDeploymentStatus=Last Deployment Status~
-view_bundle_dest_loadFailure=Failed to load bundle destinations~
-view_bundle_dest_loadFailureVersionInfo=Failed to load bundle destination deployed
version information~
-view_bundle_dest_backToBundle=Zurück zum Bundle
-view_bundle_dest_tagUpdateFailure=Failed to update bundle destination tags~
-view_bundle_dest_tagUpdateSuccessful=You have successfully updated the bundle destination
tags~
-view_bundle_resDeployDS_loadFailure=Failed to load bundle resource deployments~
-view_bundle_deploy_name=Deployment Name~
-view_bundle_deploy_time=Deployment Time~
-view_bundle_deploy_loadDeployFailure=Failed to load bundle deployments~
-view_bundle_deploy_action=Action~
-view_bundle_deploy_installDetails=Install Details~
-view_bundle_deploy_backButton=Back to Destination~
-view_bundle_deploy_tagUpdateFailure=Failed to update bundle deployment tags~
-view_bundle_deploy_tagUpdateSuccessful=You have successfully updated the bundle
deployment tags~
-view_bundle_deploy_deploymentPlatforms=Deployment Platforms~
-view_bundle_deploy_selectARow=Select a row to show installation details~
-view_bundle_deploy_operatingSystem=Operating System~
-view_bundle_deploy_loadFailure=Failed to load bundle deployment~
-view_bundle_deploy_loadBundleFailure=Failed to find bundle~
-view_bundle_createWizard_title=Create Bundle~
-view_bundle_createWizard_windowTitle=Bundle Creation Wizard~
-view_bundle_createWizard_cancelSuccessful=Canceled the creation of bundle [{0}],
version=[{1}]~
-view_bundle_createWizard_cancelFailure=Failed to fully cancel the creation of bundle
[{0}], version=[{1}] - the bundle may still exist in the database~
-view_bundle_createWizard_noBundleTypesSupported=No bundle types are supported - you must
deploy a valid plugin that supports bundle deployments~
-view_bundle_createWizard_noBundleTypesAvail=No bundle types are available~
-view_bundle_createWizard_loadBundleFileFailure=Cannot obtain bundle file information from
server~
-view_bundle_createWizard_uploadInProgress=Upload is in progress... This can take several
minutes for large files~
-view_bundle_createWizard_uploadStepName=Upload Bundle Files~
-view_bundle_createWizard_noAdditionalFilesNeeded=No additional files need to be uploaded
for this bundle~
-view_bundle_createWizard_failedToUploadFile=Failed to upload bundle file~
-view_bundle_createWizard_failedToUploadDistroFile=Failed to upload bundle distribution
file~
-view_bundle_createWizard_bundleDistro=Bundle Distribution~
-view_bundle_createWizard_youMustChooseOne=You must choose one option in order to create a
bundle!
-view_bundle_createWizard_urlOption=URL
-view_bundle_createWizard_uploadOption=Upload~
-view_bundle_createWizard_recipeOption=Recipe~
-view_bundle_createWizard_clickToUploadRecipe=Click to upload a recipe file~
-view_bundle_createWizard_createFailure=Failed to create the bundle~
-view_bundle_createWizard_createSuccessful=You have successfully created a bundle named
[{0}] with a version of [{1}]~
-
-view_bundle_deployWizard_deploying = Deploying...~
-view_bundle_deployWizard_deployStep = Deploy Bundle to Destination Platforms~
-view_bundle_deployWizard_deploymentCreated = Created Deployment...~
-view_bundle_deployWizard_deploymentCreatedDetail = Created deployment [{0}] description
[{1}]~
-view_bundle_deployWizard_destinationCreatedDetail = Created destination [{0}] description
[{1}]~
-view_bundle_deployWizard_deploymentScheduled = Bundle Deployment Scheduled!~
-view_bundle_deployWizard_deploymentScheduledDetail = Scheduled bundle deployment [{0}]
destination group [{1}]~
-view_bundle_deployWizard_error_1 = Failed to delete new deployment on Cancel ~
-view_bundle_deployWizard_error_2 = Failed to delete new destination on Cancel ~
-view_bundle_deployWizard_error_3 = Failed to Schedule Deployment!~
-view_bundle_deployWizard_error_4 = Failed to schedule deployment: {0}~
-view_bundle_deployWizard_error_5 = Failed to Create Deployment!~
-view_bundle_deployWizard_error_6 = Failed to create deployment: {0}~
-view_bundle_deployWizard_error_7 = Failed to get deployment name.~
-view_bundle_deployWizard_error_8 = You must select a valid resource group from the drop
down~
-view_bundle_deployWizard_error_9 = Failed to delete new destination in nextPage~
-view_bundle_deployWizard_error_10 = Failed to create destination, it may already exist.
(Note, for an existing destination deploy from the Destination view)~
-view_bundle_deployWizard_error_11 = Failed to find defined deployments.~
-view_bundle_deployWizard_error_12 = Failed to find defined bundles.~
-view_bundle_deployWizard_getConfigStep = Set Deployment Configuration~
-view_bundle_deployWizard_getConfigSkip = No configuration needed for this bundle
version.~
-view_bundle_deployWizard_getDestStep = New Destination~
-view_bundle_deployWizard_getDest_name = Destination Name~
-view_bundle_deployWizard_getDest_desc = Destination Description~
-view_bundle_deployWizard_getDest_deployDir = Root Deployment Directory (on destination
platforms)~
-view_bundle_deployWizard_getInfoStep = Provide Deployment Information~
-view_bundle_deployWizard_getInfo_clean = Clean Deployment? (wipe deploy directory on
destination platform)~
-view_bundle_deployWizard_getInfo_deploymentDesc = Deployment Description~
-view_bundle_deployWizard_getInfo_deploymentName = Deployment Name~
-view_bundle_deployWizard_getOptionsStep = Deploy Options~
-view_bundle_deployWizard_getOptions_deployLater = Deploy Later~
-view_bundle_deployWizard_getOptions_deployNow = Deploy Now~
-view_bundle_deployWizard_getOptions_deployTime = Deployment Time~
-view_bundle_deployWizard_selectBundleStep = Select Deployment Bundle~
-view_bundle_deployWizard_selectBundle_single = Select only a single bundle for
deployment.~
-view_bundle_deployWizard_selectVersionStep = Select Deployment Bundle Version~
-view_bundle_deployWizard_selectVersion_latest = Latest Version [{0}]~
-view_bundle_deployWizard_selectVersion_live = Live Version [{0}]~
-view_bundle_deployWizard_selectVersion_select = Select Version from List:~
-view_bundle_deployWizard_title = Bundle Deployment Wizard~
-
-
-#=================== Components =====================
-
-view_configCompare_comparingConfigs = Comparing Configurations~
-view_configCompare_configCompare = Configuration Comparison~
-
+view_bundle_createWizard_provideBundleDistro = Stellen Sie eine Bundle-Distribution
bereit
+view_bundle_createWizard_urlOption = URL
+view_bundle_createWizard_youMustChooseOne = You must choose one option in order to create
a bundle!
+view_bundle_deleteConfirm=Sind Sie sicher, dass dieses Bundle gelöscht werden soll? Alle
Versionen, Ziele und Deployments für dieses Bundle werden ebenfalls gelöscht.
+view_bundle_deploy = Deploy
+view_bundle_deployDir = Deploy-Verzeichnis
+view_bundle_deployWizard_deploymentCreatedDetail_concise =Sie haben das Deployment [{0}]
erzeugt
+view_bundle_deploy_deployedBy = Deployed durch
+view_bundle_deployed = Deployed
+view_bundle_deployments = Deployments
+view_bundle_dest_backToBundle = Zurück zum Bundle
+view_bundle_dest_created = Angelegt
+view_bundle_dest_deployDir = Deploy-Verzeichnis
+view_bundle_dest_group = Gruppe
+view_bundle_destinations = Ziele
+view_bundle_fileListView_fileSize = Dateigröße
+view_bundle_fileListView_md5 = MD5
+view_bundle_fileListView_sha256 = SHA256
+view_bundle_files = Dateien
+view_bundle_latestVersion = Aktuelle Version
+view_bundle_list_deletesFailure=Löschen der Bundles ist fehlgeschlagen
+view_bundle_list_deletesSuccessful=Sie haben die Bundles erfolgreich gelöscht
+view_bundle_list_error3 = Konnte das Bundle nicht laden
+view_bundle_purge=Löschen
+view_bundle_version_backToBundle = Zurück zum Bundle
+view_bundle_version_deleteConfirm=Sind Sie sicher, dass Sie diese Bundle-Version löschen
wollen?
+view_bundle_version_deleteFailure=Löschen der Bundle-Version [{0}] ist fehlgeschlagen
+view_bundle_version_deleteSuccessful=Sie haben die Bundle-Version [{0}] erfolgreich
gelöscht
+view_bundle_versions = Versionen
view_configEdit_addItem = Eintrag zur Liste hinzufügen
-view_configEdit_confirm_1 = Are you sure you want to delete the selected properties from
the set?~
-view_configEdit_confirm_2 = Are you sure you want to delete this row?~
-view_configEdit_confirm_3 = Are you sure you want to delete the [{0}] selected [{1}]?~
-view_configEdit_editRow = Edit Configuration Row~
-view_configEdit_enterPropName = Enter the name of the property to be added.~
-view_configEdit_error_1 = Configuration is not supported by this Resource.~
-view_configEdit_error_2 = Connection settings are not supported by this Resource.~
-view_configEdit_error_3 = Cannot add property named [{0}]. The property name is already
used in the set.~
view_configEdit_files = Dateien
-view_configEdit_hideAll= Alle verbergen
+view_configEdit_hideAll = Alle verbergen
view_configEdit_jumpToSection = Zum Abschnitt springen
-view_configEdit_msg_1 = Added property [{0}] to the set.~
-view_configEdit_msg_2 = Removed properties from the set.~
-view_configEdit_msg_3 = [{0} {1}] deleted from list.~
-view_configEdit_msg_4 = Item added to list.~
view_configEdit_properties = Eigenschaften
-view_configEdit_tooltip_1 = Delete the selected items from the list.~
-view_configEdit_tooltip_2 = Add an item to the list.~
-
-view_groupConfigEdit_member = Member~
-view_groupConfigEdit_noListProps = List properties are not currently supported for group
configurations.~
-view_groupConfigEdit_tooltip_1 = Member values differ - click icon to edit them.~
+view_configEdit_viewRow = Zeile ansehen
+view_configurationDetails_error_updateFailure = Konnte die Konfiguration nicht
aktualisieren
+view_configurationDetails_messageConcise = Konfiguration aktualisiert - aktuelle Version
is {0}
+view_configurationDetails_messageDetailed = Konfiguration der Ressource [{1}]
aktualisiert auf Version [{0}].
+view_configurationHistoryList_title = Konfigurationsänderungen
+view_core_error_1 = Konnte keine Alarminformationen laden
+view_core_loggedOut = Ausgeloggt
+view_core_noRecentAlerts = Es liegen keine frischen Alarme vor
+view_core_recentAlerts = [{0}] frische Alarme
+view_core_uncaught = Es ist eine nicht abgefangene Ausnahme aufgetreten.
+view_dashboardManager_deleteFail = Konnte das Dashboard nicht löschen.
+view_dashboardManager_success = Dashboard gespeichert
+view_dashboards_confirm1 = Sind Sie sicher, dass Sie löschen möchten
+view_dashboards_portlets_refresh_multiple_min = {0} Minuten
+view_dashboards_portlets_refresh_one_min = 1 Minute
+view_dashboards_title = Dashboard
+view_dynagroup_compatible = Kompatible
+view_dynagroup_definitions = DynaGroup-Definitionen
+view_dynagroup_exprBuilder_addExpression = Ausdruck hinzufügen
+view_dynagroup_exprBuilder_expression = Ausdruck
+view_dynagroup_exprBuilder_resource = Ressource
+view_dynagroup_exprBuilder_resource_resource = Ressource
+view_dynagroup_expression = Ausdruck
+view_dynagroup_lastCalculationTime = Zeitpunkt letzte Berechnung
+view_dynagroup_loadDefinitionFailure = Konnte die Gruppen-Definition [{0}] nicht laden
+view_dynagroup_mixed = Gemischt
+view_dynagroup_newGroupDefinition = Neue Gruppen-Definition
+view_dynagroup_nextCalculationTime = Zeitpunkt nächste Berechnung
+view_dynagroup_recalculate = Neu berechnen
+view_dynagroup_recursive = Rekursiv
+view_dynagroup_saveAndRecalculate = Speichern & neu berechnen
view_groupConfigEdit_setAll = Alle Werte setzen auf:
view_groupConfigEdit_unset = Ungesetzt
-view_groupConfigEdit_valsDiff = member values differ~
-view_groupConfigEdit_valsDiffForProp = Member Values for Property [{0}]~
-
-view_leftNav_unknownPage = Unknown page name [{0}] for section [{1}] - URL is invalid.~
-
-view_measure_nan = --keine Daten verfügbar--~
-view_measureRange_last = Letzte
-view_measureRange_simple = Einfach...
-
-view_selector_assigned = Zugewiesen {0}
-view_selector_available = Verfügbar {0}
-
-view_subTab_error_disabled = Cannot select disabled subTab [{0}].~
-
-view_table_totalRows = Anzahl Einträge: {0} Ausgewählt: {1}
-view_tableSection_backButton = Zurück zur Liste
-view_tableSection_error_noId = Table [{0}] record is missing 'id' attribute -
please report this bug.~
-view_tableSection_error_badId = Can not show detail for [{0}]. Illegal 'id':
[{1}]. Please report this bug~
-
-view_tags_error_1 = Konnte die Tags nicht laden
-view_tags_tooltip_1 = Klicken um den Tag zu löschen
-view_tags_tooltip_2 = Klicken um die Tags zu bearbeiten
-view_tags_tooltip_3 = Geben Sie ein Tag in folgenem Format ein:
(namespace:)(semantic=)tagname (z.B. it:env=QA, oder owner=John)
-
-# File Upload (various)
-view_upload_alreadyUploaded = Datein wurde bereits hochgeladen
-view_upload_bundleDistFile = Distribution File~
-view_upload_error_bundleDistFile = Error uploading Bundle Distribution File~
-view_upload_error_file = Fehler beim Hochladen der Datei
-view_upload_error_fileName = Error uploading file [{0}]~
-view_upload_error_fileName_2 = Error uploading file [{0}], check for invalid file path.~
-view_upload_error_packageVersionFile = Error uploading Package Version File~
-view_upload_error_results = Error uploading file, unexpected results: [{0}]~
-view_upload_inProgress = Can not submit, upload is currently in progress~
-view_upload_prompt_1 = [{0}] File to Upload~
-view_upload_prompt_2 = File to Upload~
-view_upload_tooltip_2 = File upload had previously failed~
-view_upload_success = File successfully uploaded~
-view_upload_upload = Hochladen
-view_upload_uploadFile = UploadFile~
-
-# Group Create Wizard
-view_groupCreateWizard_membersStepName=Wählen Sie die Gruppenmitglieder aus
-view_groupCreateWizard_createStepName=Einstellungen für die Gruppe
-view_groupCreateWizard_createStep_recursive=Rekursiv
-view_groupCreateWizard_title=Gruppe anlegen
-view_groupCreateWizard_windowTitle=Gruppe anlegen
-view_groupCreateWizard_createFailure=Konnte die Ressourcen-Gruppe nicht anlegen
-view_groupCreateWizard_createSuccessful_concise=Sie haben eine neue Ressourcen-Gruppe
angelegt. [<a href="{0}">Gruppe ansehen</a>]
-view_groupCreateWizard_createSuccessful_full=Sie haben eine neue [{0}] Gruppe mit dem
Namen [{1}] mit [{2}] Ressourcen angelegt.
-
-# Resource Type / Plugin View/Datasources
-view_type_resourceTypes=Ressourcen-Typen
-view_type_parentId=Parent ID~
-view_type_typeTreeLoadFailure=Failed to load resource type tree data~+# Tabs
-
-view_tabs_invalidSubTab = Invalid subtab: {0}~
-view_tabs_invalidTab = Ungültiger Reiter: {0}
-
-
-
-#=================== Dashboard =====================
-view_dashboard_favorites_error1=Failed to load favorite Resources.~
-view_dashboardManager_error=Failed to save dashboard to server~
-view_dashboardManager_saved=Saved dashboard {0} to server~
-view_dashboardManager_success=Dashboard gespeichert
-view_dashboardManager_deleted=Successfully deleted dashboard {0}~
-view_dashboards_title=Dashboard
-view_dashboards_confirm1=Sind Sie sicher, dass Sie löschen möchten
-view_dashboardsManager_error1=Failed to add new dashboard~
-# // dup in common
-view_dashboardsManager_message_title_details=<h1>Willkommen bei
RHQ</h1>\n<p>Das RHQ-Projekt is an abstraction and plug-in based systems
management suite that provides extensible and integrated systems management for multiple
products and platforms across a set of core features. The project is designed with layered
modules that provide a flexible architecture for deployment. It delivers a core user
interface that delivers audited and historical management across an entire enterprise. A
Server/Agent architecture provides remote management and plugins implement all specific
support for managed products.</p>\n <p>This default dashboard can be edited by
clicking the (edit mode) button above.</p>~
-view_portlet_autodiscovery_config_platform_selection = Number of platforms to display~
-view_portlet_autodiscovery_help_msg = This portlet offers the ability to import newly
discovered resources into the inventory for monitoring and management or to ignore them
from further action.~
-view_portlet_autodiscovery_title = Discovery-Warteschlange
-view_portlet_favoriteResources_msg=Dieses Potlet zeigt Ihre gemerkten Ressourcen
-view_portlet_favoriteResources_title=Gemerkete Resourcen
-view_portlet_generic_help=Für dieses Portlet liegt keine Hilfe vor
-view_portlet_generic_unconfigured=Für dieses Portlet sind keine Einstellungen möglich
-view_portlet_graph_configure_resource_graph=The resource to graph~
-view_portlet_graph_configure_metricDefinition_graph=The metric definition id to graph~
-view_portlet_graph_configure_title=Graph Config~
-view_portlet_graph_configure_title_desc=Configuration of the graph portlet~
-view_portlet_graph_help_msg = This Portlet supports the graphing of a resource metric.~
-view_portlet_graph_help_title = Graph Portlet~
-view_portlet_graph_help_unconfigured=This graph is unconfigured, click the settings
button to configure.~
-view_portlet_graph_title = Resource Graph~
-view_portlet_inventory_error1=Konnte die Inventarübersicht nicht laden
-view_portlet_mashup_config_title=MashupPorlet Configuration~
-view_portlet_mashup_config_title_desc=The configuration settings for the mashup
portlet.~
-view_portlet_mashup_help=This portlet can include a web page via an HTTP request into an
iframe on the dashboard.~
-view_portlet_mashup_unconfigured=Page address not yet configured, click the settings
button to setup this portlet.~
-view_portlet_message_config_title=MessagePortlet Configuration~
-view_portlet_message_config_title_desc=The configuration settings for the message
portlet.~
-view_portlet_message_help=This portlet can display an HTML message on the dashboard.~
-view_portlet_message_title=Nachricht
-view_portlet_message_unconfigured=Message not yet configured, click the settings button
to setup this portlet.~
-view_portlet_operations_config_completed_maximum=Maximum number of Completed operations
to display.~
-view_portlet_operations_config_completed_enable=Whether to enable completed operations
results grouping for dashboard.~
-view_portlet_operations_config_scheduled_enable=Whether to enable scheduled operations
results grouping for dashboard.~
-view_portlet_operations_config_scheduled_maximum=Maximum number of Scheduled operations
to display.~
-view_portlet_operations_config_completed=completed operations~
-view_portlet_operations_config_show_last=vorhergehende anzeigen
-view_portlet_operations_config_show_next=nächste anzeigen
-view_portlet_operations_config_title=OperationsPortlet Configuration~
-view_portlet_operations_config_title_desc=The configuration settings for the Operations
portlet.~
-view_portlet_operations_disabled=(Results currently disabled. Change settings to enable
results.~
-view_portlet_operations_help_msg=This portlet displays both operations that have occurred
and are scheduled to occur.~
-view_portlet_platform_help_msg = This portlet displays information about platforms in
inventory.~
-view_portlet_platform_platform_error_1 = Failed to load platform metrics~
-view_portlet_platform_title = Platforms Summary~
-view_portlet_platform_type_error_1 = Could not load type data~
-view_portlet_problem_resources_config_display_maximum=Maximum number of Problem resources
to display.~
-view_portlet_problem_resources_config_display_range=Show problem resources going back
this many hours.~
-view_portlet_problem_resources_config_display_range2 = Von {0} bis {1}
-view_portlet_problem_resources_config_problem_label=problem resources on dashboard.~
-view_portlet_problem_resources_config_title=ProblemResourcesPortlet Configuration~
-view_portlet_problem_resources_config_title_desc=The configuration settings for the
Problem resources portlet.~
-view_portlet_problem_resources_help=This portlet displays resources that have reported
alerts or Down availability.~
-view_portlet_problem_resources_title=Hat Alarme oder ist nicht verfügbar
-view_portlet_recentAlerts_config_members=Select Members~
-view_portlet_recentAlerts_config_priority_label = priority Alerts,~
-view_portlet_recentAlerts_config_when=innerhalb der letzten
-view_portlet_recentAlerts_help_msg = Displays recent alerts fired on resources visible to
the current user login.~
-# // dup in common
-view_portlet_recentAlerts_title = Frische Alarme
-view_portlet_recentlyAdded_approved_platforms=recently approved platforms on dashboard.~
-view_portlet_recentlyAdded_error1=Failed to load recently added resources~
-view_portlet_recentlyAdded_help_msg=This portlet displays resources that have recently
been imported into the inventory.~
-view_portlet_recentlyAdded_title =Recently Added Portlet~
-view_portlet_tagCloud_help=portlet displays the relative tag counts in the system visible
to the current user.~
-view_portlet_tagCloud_title=Tag-Wolke
-
-
-#=================== Inventory =====================
+view_groupCreateWizard_createFailure = Konnte die Ressourcen-Gruppe nicht anlegen
+view_groupCreateWizard_createStepName = Einstellungen für die Gruppe
+view_groupCreateWizard_createStep_recursive = Rekursiv
+view_groupCreateWizard_createSuccessful_concise = Sie haben eine neue Ressourcen-Gruppe
angelegt. [<a href="{0}">Gruppe ansehen</a>]
+view_groupCreateWizard_createSuccessful_full = Sie haben eine neue [{0}] Gruppe mit dem
Namen [{1}] mit [{2}] Ressourcen angelegt.
+view_groupCreateWizard_membersStepName = Wählen Sie die Gruppenmitglieder aus
+view_groupCreateWizard_title = Gruppe anlegen
+view_groupCreateWizard_windowTitle = Gruppe anlegen
+view_groupInventoryMembers_button_updateMembership = Mitgliedschaft aktualisieren...
+view_groupInventoryMembers_title_updateMembership = Mitgliedschaft aktualisieren
+view_group_detail_failLoad = Konnte die Gruppe mit der ID [{0}] nicht laden
+view_group_detail_failLoadComp = Konnte die Gruppen-Composite für die Gruppe mit der ID
[{0}] nicht laden.
+view_group_detail_failRecursiveChange = Konnte die Einstellung
''Rekursiv'' für die Gruppe [{0}] nicht aktualisieren
+view_group_detail_recursiveChange = Sie haben erfolgreich die
''Rekursiv''-Einstellung für die Gruppe [{0}] geändert.
+view_group_membership_failFetch = Konnte die Ressourcen-Gruppe nicht laden
+view_group_pluginConfig_members_statusDetails = Status Details
+view_group_pluginConfig_view_groupProperties = Gruppen-Eigenschaften
+view_group_summary_compatible = Kompatible
+view_group_summary_dynamic = Dynamisch
+view_group_summary_groupDefinition = Gruppen-Definition
+view_group_summary_memberCount = Anzahl Mitglieder
+view_group_summary_memberType = Mitglieds-Typ
+view_group_summary_mixed = Gemischt
+view_group_summary_recursive = Rekursiv
+view_helpTop_description = Dieser Abschnitt bietet Zugang zu Dokumentation, Tutorien,
Versions- und anderer hilfreicher Information.
+view_help_section_product = Produkt
+view_help_section_product_about = Ãœber
view_inventory_adq = Discovery-Warteschlange
-view_inventory_sectionHelp = In diesem Abschnitt können neu gefundene Ressourcen, sowie
Ressourcen und Gruppen im Inventar angesehen und verwaltet werden.
-view_inventory_problemGroups=Gruppen mit Problemen
-view_inventory_collectionInterval=Erfassungs-Intervall
-view_inventory_mixed=gemischt
-view_inventory_groups = Gruppen
view_inventory_allGroups = Alle Gruppen
view_inventory_allResources = Alle Ressourcen
+view_inventory_collectionInterval = Erfassungs-Intervall
+view_inventory_dynagroupDefs = Dynagroup-Definitionen
+view_inventory_eventHistory_details = Details
+view_inventory_eventHistory_detailsFilter = Filter für Details
+view_inventory_eventHistory_severity = Schwere
+view_inventory_eventHistory_severityFilter = Filter für Schwere
+view_inventory_eventHistory_sourceFilter = Filter für Quelle
+view_inventory_eventHistory_timestamp = Zeitunkt
+view_inventory_groups = Gruppen
+view_inventory_groups_resourceGroups = Ressource-Gruppen
+view_inventory_mixed = gemischt
view_inventory_platforms = Platformen
+view_inventory_problemGroups = Gruppen mit Problemen
+view_inventory_resources_title = Ressourcen
+view_inventory_resources_uninventoryFailed = Konnte die ausgewählte(n) Ressourcen nicht
aus dem Inventar löschen.
+view_inventory_sectionHelp = In diesem Abschnitt können neu gefundene Ressourcen, sowie
Ressourcen und Gruppen im Inventar angesehen und verwaltet werden.
view_inventory_servers = Server
view_inventory_services = Dienste
-view_inventory_dynagroupDefs = Dynagroup-Definitionen
-view_metric_traits=Traits
-view_metric_viewTraitHistory=Werteverlauf für Trait [{0}]
-view_inventory_eventHistory_groupEventHistory=Group Event History~
-view_inventory_eventHistory_resourceEventHistory=Resource Event History~
-view_inventory_eventHistory_sourceFilter=Filter für Quelle
-view_inventory_eventHistory_detailsFilter=Filter für Details
-view_inventory_eventHistory_severityFilter=Filter für Schwere
-view_inventory_eventHistory_timestamp=Zeitunkt
-view_inventory_eventHistory_severity=Schwere
-view_inventory_eventHistory_details=Details
-view_inventory_eventHistory_sourceLocation=Source Location~
-view_inventory_eventHistory_deleteSuccessful=You have successfully deleted [{0}] events
for [{1}]~
-view_inventory_eventHistory_deleteFailed=Failed to deleted selected events for [{0}]~
-view_inventory_eventHistory_purgeSuccessful=You have successfully purged [{0}] events for
[{1}]~
-view_inventory_eventHistory_purgeFailed=Failed to purge events for [{0}]~
-view_inventory_eventDetails_loadFailed=An error occurred loading the event details~
-view_inventory_groups_resourceGroups=Ressource-Gruppen
-view_inventory_groups_children=Children~
-view_inventory_groups_descendants=Descendants~
-view_inventory_groups_deleteSuccessful=You have successfully deleted the selected
resource groups~
-view_inventory_groups_deleteFailed=Failed to delete the selected resource groups~
-view_inventory_groups_loadFailed=Failed to load group composite data~
-view_inventory_resource_loadFailed=Resource with id [{0}] does not exist or is not
accessible~
-view_inventory_resources_deleteConfirm=Are you sure you want to delete the selected
resources?~
-view_inventory_resources_deleteSuccessful=You have successfully deleted the selected
resources~
-view_inventory_resources_deleteFailed=Failed to delete the selected resources~
-view_inventory_resources_loadFailed=Failed to load resource composite data~
-view_inventory_resources_title=Ressourcen
-view_inventory_resources_title_children=Child Resources~
-view_inventory_resources_title_members=Member Resources~
-view_resource_monitor_availability_loadFailed=Failed to load availability history~
-view_resource_monitor_graphs_noneAvailable=No graphs available~
-view_resource_monitor_graphs_loadFailed=Failed to load graph data~
-view_resource_monitor_graphs_lookupFailed=Failed to find resource for graph~
-view_resource_monitor_graph_instructions=Point your mouse to a data point on the chart~
-view_resource_monitor_graph_live_tooltip=Click for a live graph of current values~
-view_resource_monitor_detailed_graph_label=Detailed Graph~
-view_resource_monitor_calltime_title=Call Time Data~
-view_resource_monitor_calltime_destination=Call Destination~
-view_resource_monitor_calltime_count=Anzahl
-view_resource_monitor_calltime_minimum=Minimum
-view_resource_monitor_calltime_average=Durchschnitt
-view_resource_monitor_calltime_maximum=Maximum
-view_resource_monitor_calltime_total=Gesamt
-view_resource_monitor_calltime_loadFailed=Could not load call time data~
-view_resource_monitor_calltime_lookupFailed=Could not load resource for call time~
-view_resource_monitor_calltime_editFailed=Call time data can not be edited~
-view_resource_monitor_schedules_title=Resource Metric Collection Schedules~
-view_tree_common_loadFailed_generic=Failed to load data for tree~
-view_tree_common_loadFailed_root=Failed to load root for tree~
-view_tree_common_loadFailed_descendants=Failed to load descendants for tree~
-view_tree_common_loadFailed_children=Failed to load children for node~
-view_tree_common_loadFailed_selection=Failed to select this node~
-view_tree_common_loadFailed_node=Failed to load data for this node~
-view_tree_common_loadFailed_create=Failed to create view for this node~
-view_tree_common_loadFailed_update=Failed to update view for this node~
-view_tree_common_contextMenu_type_name_label=Typ: {0}
-view_tree_common_contextMenu_pluginConfiguration=Plugin-Konfiguration
-view_tree_common_contextMenu_resourceConfiguration=Resource Configuration~
-view_tree_common_contextMenu_editPluginConfiguration=Edit [{0}] Plugin Configuration~
-view_tree_common_contextMenu_editResourceConfiguration=Edit [{0}] Resource
Configuration~
-view_tree_common_contextMenu_operations=Operations~
-view_tree_common_contextMenu_operations_loadFailed=Failure to start wizard for running
operations~
-view_tree_common_contextMenu_measurements=Metriken
-view_tree_common_contextMenu_addChartToDashboard=Diagramm zum Dashboard [{0}] hinzufügen
-view_tree_common_contextMenu_resourceGraph = Resource Metric Graph~
-view_tree_common_contextMenu_groupGraph = Group Metric Graph~
-view_tree_common_contextMenu_saveChartToDashboardSuccessful=sie haben das Dashboard [{0}]
gesichert
-view_tree_common_contextMenu_saveChartToDashboardFailure=Speichern des Dashboards
fehlgeschlagen
-view_tree_common_contextMenu_loadFailed_dashboard=Failed to load user dashboards
-view_tree_common_contextMenu_loadFailed_manualAddChildren=Failed to load platform manual
add children~
-view_tabs_common_summary=Zusammenfassung
-view_tabs_common_overview=Ãœbersicht
-view_tabs_common_dashboard=Dashboard
-view_tabs_common_timeline=Zeitstrahl
-view_tabs_common_monitoring=Monitoring
-view_tabs_common_graphs=Diagramme
-view_tabs_common_tables=Tabellen
-view_tabs_common_traits=Traits
-view_tabs_common_availability=Verfügbarkeit
-view_tabs_common_schedules=Zeitplan
-view_tabs_common_calltime=Calltime~
-view_tabs_common_inventory=Inventar
-view_tabs_common_groups=Gruppen
-view_tabs_common_group_membership=Gruppenmitgliedschaft
-view_tabs_common_members=Mitglieder
-view_tabs_common_child_resources=Child Resources~
-view_tabs_common_child_history=Child History~
-view_tabs_common_connectionSettings=Verbindungs-Einstellungen
-view_tabs_common_connectionSettingsHistory=Verlauf der Verbindungs-E.
-view_tabs_common_operations=Operationen
-view_tabs_common_history=Verlauf
-view_tabs_common_scheduled=Geplant
-view_tabs_common_alerts=Alarme
-view_tabs_common_definitions=Definitionen
-view_tabs_common_current=Aktuell
-view_tabs_common_events=Ereignisse
-view_tabs_common_configuration=Konfiguration
-view_tabs_common_content=Inhalte
-view_tabs_common_deployed=Installiert
-view_tabs_common_new=Neu
-view_tabs_common_subscriptions=Abonnements
-view_titleBar_common_updateTagsSuccessful=The tags for [{0}] have been updated~
-view_titleBar_common_updateTagsFailure=Failed to update the tags for [{0}]~
-view_titleBar_common_loadTagsFailure=Failed to load the tags for [{0}]~
-view_titleBar_common_clickToRemoveFav=Click to remove this as a favorite~
-view_titleBar_common_clickToAddFav=Click to add this as a favorite~
-view_titleBar_common_removedFav=You have removed [{0}] as one of your favorites~
-view_titleBar_common_addedFav=You have added [{0}] as a favorite~
-view_titleBar_common_removedFavFailure=Failed to remove [{0}] as one of your favorites~
-view_titleBar_common_addedFavFailure=Failed to add [{0}] as a favorite~
-view_dynagroup_expressionSet=Expression Set~
-view_dynagroup_recalculationInterval=Recalculation Interval~
-view_dynagroup_lastCalculationTime=Zeitpunkt letzte Berechnung
-view_dynagroup_nextCalculationTime=Zeitpunkt nächste Berechnung
-view_dynagroup_definitionCreated=You have successfully created a group definition named
[{0}]~
-view_dynagroup_definitionLoadFailure=Failed to load group definitions~
-view_dynagroup_definitionAlreadyExists=A group definition already exists with this name~
-view_dynagroup_saveSuccessful=You have successfully saved the group definition named
[{0}]~
-view_dynagroup_saveFailure=Failed to save the group definition named [{0}]~
-view_dynagroup_singleSaveFailure=An error occurred - there should have been one created,
but instead there were [{0}] created~
-view_dynagroup_saveAndRecalculate=Speichern & neu berechnen
-view_dynagroup_recalculate=Neu berechnen
-view_dynagroup_recalcSuccessful=You have successfully recalculated this group
definition~
-view_dynagroup_recalcFailure=Failed to recalculated this group definition~
-view_dynagroup_recalcSuccessfulSelection=You have successfully recalculated [{0}] group
definitions~
-view_dynagroup_recalcFailureSelection=Failed to recalculated the selected group
definitions~
-view_dynagroup_deleteSuccessfulSelection=You have successfully deleted [{0}] group
definitions~
-view_dynagroup_deleteFailureSelection=Failed to delete the selected group definitions~
-view_dynagroup_children=DynaGroup Children~
-view_dynagroup_newGroupDefinition=Neue Gruppen-Definition
-view_dynagroup_editing=Editing [{0}]~
-view_dynagroup_expression=Ausdruck
-view_dynagroup_recursive=Rekursiv
-view_dynagroup_loadDefinitionFailure=Konnte die Gruppen-Definition [{0}] nicht laden
-view_dynagroup_loadDefinitionMissing=There is no group definition with the ID of [{0}]~
-view_dynagroup_permDenied=You do not have permission to view group definitions~
-view_dynagroup_definitions=DynaGroup-Definitionen
-view_group_membership_saveFailure=Failed to update membership of group [{0}]~
-view_group_membership_saveSuccessful=You have updated the membership of group [{0}]~
-view_group_resConfig_edit_saveTooltip=Update the configurations of all group members~
-view_group_resConfig_edit_noperm=You do not have permission to edit this group
configuration~
-view_group_resConfig_edit_saveInitiated_concise=The group configuration updates have been
initiated~
-view_group_resConfig_edit_saveInitiated_full=The group configuration updates have been
initiated for the [{0}] compatible group named [{1}]~
-view_group_resConfig_edit_saveFailure=Failed to initiate group configuration update for
[{0}] compatible group named [{1}]~
-view_group_resConfig_edit_valid=All configuration properties have valid values, so the
configuration can now be saved~
-view_group_resConfig_edit_invalid=The following configuration properties have invalid
values and must be corrected before the configuration can be saved: [{0}]~
-view_group_pluginConfig_view_noperm=You do not have permissions to see the connection
settings~
-view_group_pluginConfig_view_groupProperties=Gruppen-Eigenschaften
-view_group_pluginConfig_table_title=Group Connection Settings History~
-view_group_pluginConfig_table_statusDetails=Status Details~
-view_group_pluginConfig_table_viewSettings=View Settings~
-view_group_pluginConfig_table_viewMemberHistory=View Member History~
-view_group_pluginConfig_table_deleteSuccessful=You have deleted [{0}] history items~
-view_group_pluginConfig_table_deleteFailure=Failed to delete group plugin config
history~
-view_group_pluginConfig_table_msg1=View Member History for status of each individual
resource~
-view_group_pluginConfig_table_statusSuccess=This group configuration update was
successful~
-view_group_pluginConfig_table_statusInprogress=This group configuration update is still
in progress~
-view_group_pluginConfig_table_statusNochange=No changes were made to this group
configuration~
-view_group_pluginConfig_table_statusFailure=This group configuration update failed~
-view_group_pluginConfig_table_clickStatusIcon=Click the status icon for full details~
-view_group_pluginConfig_members_title=Group Connection Settings Member Histories~
-view_group_pluginConfig_members_statusDetails=Status Details
-view_group_pluginConfig_members_statusSuccess=This configuration update was successful~
-view_group_pluginConfig_members_statusInprogress=This configuration update is still in
progress~
-view_group_pluginConfig_members_statusNochange=No changes were made to this
configuration~
-view_group_pluginConfig_members_statusFailure=This configuration update failed for an
unknown reason~
-view_group_pluginConfig_members_fetchFailure=Failed to get plugin config update history
for members of group [{0}]~
-view_group_pluginConfig_edit_currentGroupProperties=Current Group Properties~
-view_group_pluginConfig_edit_saveTooltip=Update the connection settings of all group
members~
-view_group_pluginConfig_edit_noperm=You do not have permission to edit this group
connection settings~
-view_group_pluginConfig_edit_saveInitiated_concise=The group connection setting updates
have been initiated~
-view_group_pluginConfig_edit_saveInitiated_full=The group connection setting updates have
been initiated for the [{0}] compatible group named [{1}]~
-view_group_pluginConfig_edit_saveFailure=Failed to initiate group connection setting
update for [{0}] compatible group named [{1}]~
-view_group_pluginConfig_edit_valid=All connection setting properties have valid values,
so the connection settings can now be saved~
-view_group_pluginConfig_edit_invalid=The following connection setting properties have
invalid values and must be corrected before the connection settings can be saved: [{0}]~
-view_group_meas_schedules_title=Group Metric Collection Schedules~
-view_group_summary_nameUpdateFailure=Failed to change the name of the resource group with
ID [{0}] - could not change from [{1}] to [{2}]~
-view_group_summary_nameUpdateSuccessful=You have changed the name of the resource group
with ID [{0}] from [{1}] to [{2}]~
-view_group_summary_memberType=Mitglieds-Typ
-view_group_summary_memberCount=Anzahl Mitglieder
-view_group_summary_dynamic=Dynamisch
-view_group_summary_recursive=Rekursiv
-view_group_summary_groupDefinition=Gruppen-Definition
-view_group_summary_mixed=Gemischt
-view_group_summary_descUpdateFailure=Failed to change the description of the resource
group with ID [{0}]~
-view_group_summary_descUpdateSuccessful=You have changed the description of this resource
group~
-view_group_summary_dynamicNote=Dynamic group names and descriptions are managed, and
therefore are not editable~
-
-# Connection Settings Details
-#------------------------------------------
-view_connectionSettingsDetails_noPermission = You do not have permission to edit this
Resource''s connection settings.~
-view_connectionSettingsDetails_error_updateFailure = Failed to update connection
settings.~
-view_connectionSettingsDetails_messageConcise_updateSuccess = Connection settings
updated.~
-view_connectionSettingsDetails_messageDetailed_updateSuccess = Connection settings
updated for Resource [{0}].~
-view_connectionSettingsDetails_allPropertiesValid = All connection settings have valid
values, so the settings can now be saved.~
-view_connectionSettingsDetails_somePropertiesInvalid = The following connection settings
have invalid values: {0}. The values must be corrected before the settings can be saved.~
-
-# Resource Resource Groups
-#-----------------------------------------
-view_resourceResourceGroupList_error_fetchFailure = Failed to fetch Resource''s
groups.~
-view_resourceResourceGroupList_error_updateFailure = Failed to update assigned Resource
groups.~
-view_resourceResourceGroupList_message_updateSuccess = Group membership updated for
[{0}].
-
-# Configuration Details
-#-------------------------------
-view_configurationDetails_noPermission = You do not have permission to edit this
Resource''s configuration.~
-view_configurationDetails_error_updateFailure = Konnte die Konfiguration nicht
aktualisieren
-view_configurationDetails_messageConcise = Konfiguration aktualisiert - aktuelle Version
is {0}
-view_configurationDetails_messageDetailed = Konfiguration der Ressource [{1}]
aktualisiert auf Version [{0}].
-view_configurationDetails_allPropertiesValid = All configuration properties have valid
values, so the configuration can now be saved.~
-view_configurationDetails_somePropertiesInvalid = The following configuration properties
have invalid values: {0}. The values must be corrected before the configuration can be
saved.~
-
-# Configuration History List
-view_configurationHistoryList_title = Konfigurationsänderungen
-view_configurationHistoryList_itemNamePlural = configuration history items
-
-# Configuration History Details
-#------------------------------------------
-view_configurationHistoryDetails_dialogTitle = Details der Konfiguration
-view_configurationHistoryDetails_error_loadFailure = Unable to load configuration
history.~
-
-# Operation History List
-#---------------------------------
-view_operationHistoryList_title = Verlauf der Operationen
+view_inventory_summary_agent_error1 = Fehler beim Ermitteln des Agent, der dies Ressource
managt
+view_inventory_summary_agent_error2 = Fehler beim Kontaktieren des Agent, der diese
Ressource managt
+view_inventory_summary_agent_error3 = Sie haben nicht die Rechte, um die Details für
diesen Agent anzusehen.
+view_inventory_summary_agent_fullEnpoint = Vollständiger Kommunikationsendpunkt
+view_inventory_summary_agent_fullEnpoint_err1 = Es ist kein entfernter Endpunkt mit
dieser Ressource assoziiert
+view_inventory_summary_agent_last_title = Zeitpunkt des letzten Verfügbarkeitsberichts
+view_inventory_summary_agent_status_title = Status der Kommunikation mit dem Agent
+view_inventory_summary_agent_title = Agent, der diese Ressource managt
+view_inventory_unavailableServers = Nichtverfügbare Server
+view_login_invalidEmail = Ungültige E-Mail-Adresse
+view_login_login = Einloggen
+view_login_logout = Auslogen
+view_login_prompt = Bitte loggen Sie sich ein
+view_login_registerUser = Benutzer Anlegen
+view_login_welcome = Willkommen
+view_measureRange_last = Letzte
+view_measureRange_simple = Einfach...
+view_measureRange_start = Zeitraum - Start
+view_measureTable_chartMetricValues = Graphen für ausgewählte Metriken anzeigen
+view_measureTable_getLive = Aktuellen Wert holen
+view_measureTable_getLive_failure=Kann die aktuellen Werte für diese Metriken nicht
ermitteln. Stellen Sie sicher, dass der Agent läuft und die zu managenden Ressourcen
verfügbar sind.
+view_measureTable_live_title=Live-Daten
+view_measurementOob_title = Verdächtige Metriken
+view_menuBar_logout = Ausloggen
+view_messageCenter_clearAllMessages = Alle Nachrichten löschen
+view_messageCenter_lastNMessages = Letzte {0} Nachrichten
+view_messageCenter_maxMessages = Alle Nachrichten
+view_messageCenter_messageBarShowDetails = Details zeigen
+view_messageCenter_messageDetail = Detail
+view_messageCenter_messageSeverity = Schwere
+view_messageCenter_messageTime = Zeitpukt
+view_messageCenter_messageTitle = Nachrichtencenter
+view_messageCenter_noRecentMessages = Keine aktuellen Nachrichten
+view_messageCenter_stackTraceFollows = --- STACK TRACE FOLGT ---
+view_metric_traits = Traits
+view_metric_viewTraitHistory = Werteverlauf für Trait [{0}]
+view_operationHistoryDetails_dateCompleted = Erledigungszeitpunkt
+view_operationHistoryDetails_dateSubmitted = Absendezeitpunkt
+view_operationHistoryDetails_noResults = Diese Operation liefert keine Ergebnisse
zurück.
+view_operationHistoryDetails_operation = Operation
+view_operationHistoryDetails_parameters = Parameter
+view_operationHistoryDetails_requestor = Anforderer
+view_operationHistoryDetails_results = Ergebnisse
+view_operationHistoryDetails_status = Status
view_operationHistoryList_button_runOperation = Operation ausführen
-
-# Operation History Details
-#--------------------------------------
-view_operationHistoryDetails_error_fetchFailure = Failure loading operation history.~
-
-# Operation Create Wizard
-#-------------------------------------
-view_operationCreateWizard_title = Operationen-Assistent
-view_operationCreateWizard_header = Führe {0} auf {1} aus
-view_operationCreateWizard_button_execute = Ausführen
-view_operationCreateWizard_button_executeImmediately = Sofort ausführen
-view_operationCreateWizard_error_scheduleOperationFailure = Failed to schedule operation
execution.~
-view_operationCreateWizard_message_scheduleOperationSuccess = Schedule operation [{0}]
on Resource [{1}] with cron string [{2}].~
-view_operationCreateWizard_parametersStep_name = Parameter der Operation
-view_operationCreateWizard_parametersStep_noParameters = Diese Operation bnötigt keine
weiteren Paameter
-view_operationCreateWizard_schedulingStep_name = Zeitplan
-view_operationCreateWizard_schedulingStep_label_start = Start
-view_operationCreateWizard_schedulingStep_label_schedule = Schedule~
-view_operationCreateWizard_schedulingStep_label_recurrence = Wiederholung
-view_operationCreateWizard_schedulingStep_label_runAt = Ausführung um
-view_operationCreateWizard_schedulingStep_label_nMinutes = Alle n Minuten
-view_operationCreateWizard_schedulingStep_label_hourly = Stündlich
-view_operationCreateWizard_schedulingStep_label_daily = Täglich
-view_operationCreateWizard_schedulingStep_label_weekly = Wöchtentlich
-view_operationCreateWizard_schedulingStep_label_monthly = Monatlich
-view_operationCreateWizard_schedulingStep_label_timePeriod = Zeitdauer
-view_operationCreateWizard_schedulingStep_label_startDate = Startdatum
-view_operationCreateWizard_schedulingStep_label_recurrenceEnd = Ende der Wiederholungen
-view_operationCreateWizard_schedulingStep_label_endDate = Enddatum
-view_operationCreateWizard_schedulingStep_label_willExecuteImmediately = Wird sofort
ausgeführt
-view_operationCreateWizard_schedulingStep_label_onceAt = Einmalig um
-view_operationCreateWizard_schedulingStep_label_date = Datum
-view_operationCreateWizard_schedulingStep_label_time = Zeit
-view_operationCreateWizard_schedulingStep_label_everyNMinutes = Alle n Minuten
-view_operationCreateWizard_schedulingStep_label_minuteInterval = Minuten-Intervall
-view_operationCreateWizard_schedulingStep_label_hourlyAt = Stündlich um
-view_operationCreateWizard_schedulingStep_label_minuteOfHour = Minute
-view_operationCreateWizard_schedulingStep_label_dailyAt = Stündlich um
-view_operationCreateWizard_schedulingStep_label_timeOfDay = Zeitpunkt
-view_operationCreateWizard_schedulingStep_label_weeklyOn = Wöchentlich am
-view_operationCreateWizard_schedulingStep_label_dayOfWeek = Wochentag
-view_operationCreateWizard_schedulingStep_label_monthlyOn = Monatlich am
-view_operationCreateWizard_schedulingStep_label_dayOfMonth = Tag des Monats
-
-# Summary Overview
-#-----------------------------
-view_summaryOverview_header_detectedErrors = Detected Errors~
-view_summaryOverview_tooltip_detectedErrors = Click on the rows to see the error
details.~
-view_summaryOverview_title_errorDetailsWindow = Error Details~
-
-# Summary Overview Form
-#-------------------------------------
-view_summaryOverviewForm_field_type = Typ
-view_summaryOverviewForm_field_name = Name
+view_operationHistoryList_notYetStarted = noch nicht gestartet
+view_operationHistoryList_title = Verlauf der Operationen
+view_operationScheduleDetails_enterParametersBelow = Geben Sie die Parameter unten an...
+view_operationScheduleDetails_field_description = Beschreibung
+view_operationScheduleDetails_field_parameters = Parameter
+view_operationScheduleDetails_noParameters = Diese Operation benötigt keine Parameter.
+view_portlet_defaultName_favoriteResources = Bevorzugte Ressourcen
+view_portlet_defaultName_group_alerts = Gruppe: Alarme
+view_portlet_defaultName_group_metrics = Gruppe: Metriken
+view_portlet_defaultName_group_operations = Gruppe: Operationen
+view_portlet_defaultName_message = Nachricht
+view_portlet_defaultName_recentAlerts = Kürzlich ausgelöste Alarme
+view_portlet_defaultName_recentlyAddedResources = Kürzlich hinzugefügte Ressourcen
+view_portlet_defaultName_resource_alerts = Ressource: Alarme
+view_portlet_defaultName_resource_metrics = Ressource: Metriken
+view_portlet_defaultName_resource_operations = Ressource: Operationen
+view_portlet_defaultName_tagCloud = Schlagwortwolke
+view_portlet_help_none = Für dieses Portlet ist keine Hilfe verfügbar.
+view_portlet_inventory_error1 = Konnte die Inventarübersicht nicht laden
+view_portlet_inventory_tooltip_collapse = Klicken, um Details für diese Ressource zu
verbergen.
+view_portlet_inventory_tooltip_expand = Klicken, um mehr Details für diese Ressource zu
sehen
+view_portlet_message_title = Nachricht
+view_portlet_operations_config_show_last = vorhergehende anzeigen
+view_portlet_operations_config_show_next = nächste anzeigen
+view_portlet_problemResources_config_display_range2 = Von {0} zu {1}
+view_portlet_recentAlerts_config_when = innerhalb der letzten
+view_portlet_recentlyAdded_setting_addedPlatforms = Kürzlich hinzugefügte Plattformen
+view_remoteAgentInstall_agentStatus = Status des Agenten
+view_remoteAgentInstall_buttonFindAgent = Agent suchen
+view_remoteAgentInstall_error_2 = Could not find an agent installed when looking in
common locations
+view_remoteAgentInstall_error_3 = Could not find an agent installed at or under [{0}]
+view_remoteAgentInstall_error_4 = Konnte den Agent nicht installieren
+view_remoteAgentInstall_error_5 = Konnte den Agent nicht starten
+view_remoteAgentInstall_error_6 = Konnte den Agent nicht stoppen
+view_remoteAgentInstall_installAgent = Agent installieren
+view_remoteAgentInstall_owner = Eigentümer
+view_remoteAgentInstall_result = Resultat
+view_remoteAgentInstall_startAgent = Agent starten
+view_remoteAgentInstall_step = Schritt
+view_remoteAgentInstall_stopAgent = Agent anhalten
+view_reportsTop_description = Dieser Abschnitt bietet Zugang zu applikationsweiten
Berichten
+view_reportsTop_title = Berichte
+view_reports_alertDefinitions = Alarmierungskriterien
+view_reports_platforms = Cpu- und Speicherauslastung
+view_reports_subsystems = Subsysteme
+view_resourceResourceGroupList_message_updateSuccess = Group membership updated for
[{0}].
+view_resource_inventory_activity_changed_by = Geändert durch
+view_resource_inventory_activity_no_recent_events = Es sind keine Events in den letzen
24h aufgetreten.
+view_resource_inventory_activity_no_recent_metrics = Diese Ressource hat keine aktuellen
Metriken.
+view_resource_inventory_childhistory_createdChild = Kind angelegt
+view_resource_inventory_childhistory_deletedChild = Kind gelöscht
+view_resource_inventory_childhistory_filterTitle = Letzte N Tage
+view_resource_monitor_calltime_average = Durchschnitt
+view_resource_monitor_calltime_count = Anzahl
+view_resource_monitor_calltime_maximum = Maximum
+view_resource_monitor_calltime_minimum = Minimum
+view_resource_monitor_calltime_total = Gesamt
+view_resource_monitor_table_alerts = Alarme
+view_resource_monitor_table_avg = Durchschnitt
+view_resource_monitor_table_last = Letzter
+view_resource_monitor_table_max = Maximum
+view_resource_monitor_table_min = Minimum
+view_resource_title_component_errors_tooltip = Zeigt Fehler der gemanagten Ressource.
Klicken für Details
+view_resource_title_tagUpdateFailed = Fehler beim Aktualisieren der Ressourcen-Tags
+view_searchBar_resourceGroups = Ressource-Gruppen
+view_searchBar_resources = Ressourcen
+view_selector_assigned = Zugewiesene {0}
+view_selector_available = Verfügbare {0}
view_summaryOverviewForm_field_description = Beschreibung
view_summaryOverviewForm_field_location = Ort
+view_summaryOverviewForm_field_name = Name
+view_summaryOverviewForm_field_type = Typ
view_summaryOverviewForm_field_version = Version
-view_summaryOverviewForm_field_parent = Parent~
-view_summaryOverviewForm_error_traitsLoadFailure = Failed to load traits for {0}.~
+view_summaryOverviewForm_header_summary = Zusammenfassung
view_summaryOverviewForm_label_plugin = Plugin:
view_summaryOverviewForm_label_type = Typ:
-view_summaryOverviewForm_header_summary = Zusammenfassung
-view_summaryOverviewForm_error_nameChangeFailure = Failed to change name of Resource with
id {0} from [{1}] to [{2}].~
-view_summaryOverviewForm_message_nameChangeSuccess = "Name of Resource with id {0}
was changed from [{1}] to [{2}].~
-view_summaryOverviewForm_error_descriptionChangeFailure = Failed to change description of
Resource with id {0} from [{1}] to [{2}].~
-view_summaryOverviewForm_message_descriptionChangeSuccess = "Description of Resource
with id {0} was changed from [{1}] to [{2}].~
-view_summaryOverviewForm_error_locationChangeFailure = Failed to change location of
Resource with id {0} from [{1}] to [{2}].~
-view_summaryOverviewForm_message_locationChangeSuccess = "Location of Resource with
id {0} was changed from [{1}] to [{2}].~
-
-
-#==================== Reports ======================
-
-view_reportsTop_title = Berichte
-view_reportsTop_description = Dieser Abschnitt bietet Zugang zu applikationsweiten
Berichten
-view_reports_platforms = Cpu- und Speicherauslastung
-view_reports_subsystems = Subsysteme
-view_reports_alertDefinitions=Alarmierungskriterien
-
-view_measurementOob_title = Verdächtige Metriken
-
-view_tagCloud_title = Tag-Wolke
+view_tableSection_backButton = Zurück zur Liste
+view_table_drawFail = Konnte die Tabelle [{0}] nicht zeichnen.
+view_table_matchingRows = Zutreffende Zeilen: {0} (ausgewählt: {1})
+view_table_totalRows = Anzahl Einträge: {0} Ausgewählt: {1}
+view_tabs_common_activity = Aktivität
+view_tabs_common_agent = Agent
+view_tabs_common_alerts = Alarme
+view_tabs_common_availability = Verfügbarkeit
+view_tabs_common_configuration = Konfiguration
+view_tabs_common_connectionSettings = Verbindungs-Einstellungen
+view_tabs_common_connectionSettingsHistory = Verlauf der Verbindungs-E.
+view_tabs_common_content = Inhalte
+view_tabs_common_current = Aktuell
+view_tabs_common_dashboard = Dashboard
+view_tabs_common_definitions = Definitionen
+view_tabs_common_deployed = Installiert
+view_tabs_common_events = Ereignisse
+view_tabs_common_graphs = Diagramme
+view_tabs_common_group_members = Gruppenmitglieder
+view_tabs_common_group_membership = Gruppenmitgliedschaft
+view_tabs_common_groups = Gruppen
+view_tabs_common_history = Verlauf
+view_tabs_common_inventory = Inventar
+view_tabs_common_members = Mitglieder
+view_tabs_common_monitoring = Monitoring
+view_tabs_common_new = Neu
+view_tabs_common_operations = Operationen
+view_tabs_common_overview = Ãœbersicht
+view_tabs_common_schedule = Zeitplan
+view_tabs_common_schedules = Zeitplan
+view_tabs_common_subscriptions = Abonnements
+view_tabs_common_summary = Zusammenfassung
+view_tabs_common_tables = Tabellen
+view_tabs_common_timeline = Zeitstrahl
+view_tabs_common_traits = Traits
+view_tabs_invalidTab = Ungültiger Reiter: {0}
+view_tagCloud_deleteTag =Tag löschen
+view_tagCloud_deleteTagFailure =Löschen des Tags [{0}] fehlgeschlagen
+view_tagCloud_deleteTagSuccess =Sie haben den Tag [{0}] erfolgreich gelöscht
view_tagCloud_error_fetchFailure = Konnte die Tags nicht laden.
view_tagCloud_error_tagUsedCount = Tag {0} mal verwendet.
-
+view_tagCloud_title = Tag-Wolke
view_taggedResources_title = Markierte Ressourcen
-
-#==================== Help ======================
-
-view_helpTop_description = Dieser Abschnitt bietet Zugang zu Dokumentation, Tutorien,
Versions- und anderer hilfreicher Information.
-view_help_section_product = Produkt
-view_help_section_product_about = Ãœber
-
-#===================== Test =======================
+view_tags_error_1 = Konnte die Tags nicht laden
+view_tags_tags = Tags
+view_tags_tooltip_1 = Klicken um den Tag zu löschen
+view_tags_tooltip_2 = Klicken um die Tags zu bearbeiten
+view_tags_tooltip_3 = Geben Sie ein Tag in folgenem Format ein:
(namespace:)(semantic=)tagname (z.B. it:env=QA, oder owner=John)
view_testTop_title = Test
-view_testTop_description = This section contains pages for testing various GUI
components.~
-
-#=================== Top Level =====================
-
-# About Box
-#----------
-view_aboutBox_allRightsReserved = All Rights Reserved.~
-view_aboutBox_buildNumber = Build-Nummer:
-view_aboutBox_failedToLoad = Kann die Produktinformation nicht laden
-view_aboutBox_homepage = Homepage
-view_aboutBox_jbossByRedHat = JBoss by Red Hat~
-view_aboutBox_title = Ãœber {0}
-view_aboutBox_version = Version:
-
-# CoreGUI
-#--------------
-view_core_error_1 = Konnte keine Alarminformationen laden
-view_core_loggedOut = Ausgeloggt
-view_core_recentAlerts = [{0}] frische Alarme
-view_core_uncaught = Es ist eine nicht abgefangene Ausnahme aufgetreten.
-
-# Login
-#--------------
-view_login_invalidEmail = Ungültige E-Mail-Adresse
-view_login_login = Einloggen
-view_login_logout = Auslogen
-view_login_noBackend = The backend datasource is unavailable.~
-view_login_noLdap = Note: Optional retrieval of ldap details unsuccessful. Manual entry
is required.~
-view_login_noUser = The username or password provided does not match our records.~
-view_login_prompt = Bitte loggen Sie sich ein
-view_login_registerLater = (Logout - Complete registration later.)~
-view_login_registerLdapSuccess = Succesfully registered the new LDAP User.~
-view_login_registerUser = Benutzer Anlegen
-view_login_welcome = Willkommen
-view_login_welcomeMsg = Willkommen bei JBoss ON! <br/><br/> Enter/update the
following fields to complete your registration process.<br/> Once you click
"OK" you will be logged in.<br/><br/>~
-
-
-# Menu Bar
-#--------------
-view_menuBar_logout = Ausloggen
-
-# Search Bar, GUI
-#-----------------
-view_searchBar_resources = Ressourcen
-view_searchBar_resourceGroups = Ressource-Gruppen
-# TODO: i18n pluralization
-view_searchBar_welcomeMessage = search for {0}s~
-view_searchBar_defaultPattern = name your pattern~
-view_searchBar_error_selectSavedSearch = ''Error selecting saved
search''~
-view_searchBar_query = Query~
-
-view_searchGUI_loginStatus = Unable to determine login status, check server status~
-
-# Message Center
-#--------------------------
-view_messageCenter_button_messages = Nachrichten
-view_messageCenter_noRecentMessages = Keine aktuellen Nachrichten
-view_messageCenter_messageTitle = Nachrichtencenter
-view_messageCenter_messageSeverity = Schwere
-view_messageCenter_messageTime = Zeitpukt
-view_messageCenter_messageDetail = Detail
-common_title_address=Adresse
-common_title_component_errors=Fehler der Komponente
-common_title_show_more=Mehr anzeigen...
-view_inventory_summary_agent_error1=Fehler beim Ermitteln des Agent, der dies Ressource
managt
-view_inventory_summary_agent_error2=Fehler beim Kontaktieren des Agent, der diese
Ressource managt
-view_inventory_summary_agent_fullEnpoint=Vollständiger Kommunikationsendpunkt
-view_inventory_summary_agent_fullEnpoint_err1=Es ist kein entfernter Endpunkt mit dieser
Ressource assoziiert
-view_inventory_summary_agent_last_title=Zeitpunkt des letzten Verfügbarkeitsberichts
-view_inventory_summary_agent_status_title=Status der Kommunikation mit dem Agent
-view_inventory_summary_agent_title=Agent, der diese Ressource managt
-view_resource_title_component_errors_tooltip=Zeigt Fehler der gemanagten Ressource.
Klicken für Details
-view_resource_title_tagUpdateFailed=Fehler beim Aktualisieren der Ressourcen-Tags
-common_alert_high=HOCH
-common_alert_low=NIEDRIG
-common_alert_medium=MITTEL
-common_label_unlimited=unbeschränkt
-common_status_canceled=Abgebrochen
-common_status_failed=Fehlgeschlagen
-common_status_inprogress=In Bearbeitung
-common_status_success=Erfolg
-common_title_error=Fehler
-common_title_group=Gruppe
-common_title_groups=Gruppen
-common_title_ldapGroups=LDAP-Gruppen
-common_title_permissions=Rechte
-common_title_role=Rolle
-common_title_roles=Rollen
-common_title_resources=Ressourcen
-common_title_resourceGroups=Ressourcen-Gruppen
-common_title_server=Server
-common_title_service=Dienste
-common_title_users=Benutzer
-view_tabs_common_agent=Agent
-common_title_bundle=Bundle
-common_title_bundles=Bundles
-common_val_n1st={0}er
-common_val_n2nd={0}er
-common_val_n3rd={0}er
-common_val_nth={0}er
-view_autoDiscoveryQ_deleted=Gelöscht
-view_adminRoles_permissions_globalPermissions=Globale Rechte
-view_adminRoles_permissions_resourcePermissions=Rechte für Ressourcen
-view_adminRoles_permissions_readAccessImplied=Lesezugriff für das Recht {0} ist implizit
und kann nicht abgeschaltet werden.
-view_adminRoles_permissions_isAuthorized=Berechtigt?
-view_adminRoles_permissions_isRead=Lesen?
-view_adminRoles_permissions_isWrite=Schreiben?
-view_adminRoles_permissions_read=Lesen
-view_adminRoles_permissions_write=Schreiben:
-view_adminRoles_permissions_perm_manageInventory=Inventar verwalten
-view_adminRoles_permissions_perm_manageSecurity=Sicherheitseinstellungen verwalten
-view_adminRoles_permissions_perm_manageSettings=Einstellungen verwalten
-view_adminRoles_permissions_perm_manageBundles=Bundles verwalten
-view_tags_tags=Tags
-view_adminRoles_permissions_perm_inventory=Inventar
-view_adminRoles_permissions_perm_manageAlerts=Alarme verwalten
-view_adminRoles_permissions_perm_configure=Konfiguration
-view_adminRoles_permissions_perm_manageEvents=Ereignisse verwalten
-view_adminRoles_permissions_permDesc_manageSecurity=Kann Benutzer und Rollen anlegen,
aktualisieren oder löschen (Anschauen ist für alle implizit erlaubt)
-view_adminRoles_permissions_permDesc_manageInventory=Hat alle Rechte auf alle Ressourcen,
wie unten beschrieben. Kann Gruppen anlegen, aktualisieren und löschen. Kann Ressourcen in
das Inventar aufnehmen.
-view_adminRoles_permissions_permDesc_manageSettings=Kann die Konfiguration des
RHQ-Servers ändern und jegliche Server-bezogene Funktionalität ausführen.
-view_adminRoles_permissions_perm_control=Operationen
-view_adminRoles_permissions_permDesc_manageBundles=Kann Bundles anlegen, aktualisieren
und löschen (Ansehen ist für alle implizit erlaubt).
-view_adminRoles_permissions_permReadDesc_inventory=(IMPLIZIT) Ansehen der Eigenschaft
einer Ressource (Name, Beschreibung, Version etc.), Verbindungseinstellungen, Verlauf
derselben
-view_adminRoles_permissions_permWriteDesc_inventory=Aktualisieren von Ressourcename,
Beschreibung und Verbindungseinstellungen. Löschen einzelner Einträge des Verlaufs der
Verbindungseinstellungen.
-view_adminRoles_permissions_perm_manageMeasurements=Monitoring verwalten
-view_adminRoles_permissions_permReadDesc_manageMeasurements=(IMPLIZIT) Monitoringdaten
und -zeitplan ansehen
-view_adminRoles_permissions_permWriteDesc_manageMeasurements=Zeitplan für das Monitoring
bearbeiten
-view_adminRoles_permissions_permReadDesc_manageAlerts=(IMPLIZIT) Ansehen von
Alarm-Definitionen und ausgelösten Alarmen
-view_adminRoles_permissions_permWriteDesc_manageAlerts=Anlegen, Bearbeiten und Löschen
von Alarm-Definitionen. Bestätigen und Löschen von ausgelösten Alarmen.
-view_titleBar_group_failInfo=Konnte die allgemeinen Informationen zur Gruppe [{0}] mit
der ID [{1}] nicht ermitteln.
-view_group_detail_failLoad=Konnte die Gruppe mit der ID [{0}] nicht laden
-view_group_summary_compatible=Kompatible
-view_adminRoles_permissions_permReadDesc_configure=Ansehen der Ressourcen-Konfiguration
und des Verlaufs derselben.
-view_adminRoles_permissions_permWriteDesc_configure=Bearbeiten der
Ressourcen-Konfiguration; Löschen einzelner Einträge im Verlauf der
Ressourcen-Konfiguration
-view_adminRoles_permissions_permReadDesc_control=(IMPLIZIT) Ansehen der verfügbaren
Operationen und des Verlaufs der ausgeführen Operationen
-view_adminRoles_permissions_permWriteDesc_control=Ausführen von Operationen; Löschen
einzelner Einträge im Verlauf der Operationen
-view_adminRoles_permissions_permReadDesc_manageEvents=(IMPLIZIT) Ereignisse ansehen
-view_adminRoles_permissions_permWriteDesc_manageEvents=Ereignisse löschen
-view_adminRoles_permissions_perm_manageContent=Content verwalten
-view_adminRoles_permissions_permReadDesc_manageContent=(IMPLIZIT) Installierte und
verfügbare Pakete ansehen; Verlauf der Installation von Paketen ansehen
-view_adminRoles_permissions_permWriteDesc_manageContent=Abonnieren von Content-Quellen;
Pakete installieren und deinstallieren
-view_adminRoles_permissions_perm_createChildResources=Kind-Ressourcen erzeugen
-view_adminRoles_permissions_permReadDesc_createChildResources=(IMPLIZIT) Ansehen des
Verlaufs des Anlegens von Kind-Ressourcen
-view_adminRoles_permissions_permWriteDesc_createChildResources=Neue Kind-Ressourcen
anlegen (für Ressource-Typen, die das Erzeugen von Kind-Ressourcen erlauben)
-view_autoDiscoveryQ_uninventoried=Aus dem Inventory gelöscht
-view_bundle_createWizard_provideBundleDistro=Stellen Sie eine Bundle-Distribution bereit
-view_adminRoles_permissions_perm_deleteChildResources=Löschen von Kind-Ressourcen
-view_adminRoles_permissions_permReadDesc_deleteChildResources=(IMPLIZIT) Ansicht des
Verlaufs der Löschung von Kind-Ressourcen
-view_adminRoles_permissions_permWriteDesc_deleteChildResources=Löschen von
Kind-Ressourcen (für Ressource-Typen, die das Löschen zulassen)
-view_portlet_inventory_tooltip_expand=Klicken, um mehr Details für diese Ressource zu
sehen
-view_portlet_inventory_tooltip_collapse=Klicken, um Details für diese Ressource zu
verbergen.
-view_titleBar_group_summary_collapsedTooltip=Klicken, um mehr Details für diese Gruppe zu
zeigen
-view_titleBar_group_summary_expandedTooltip=Klicken, um Details für diese Gruppe zu
verbergen.
-view_operationHistoryDetails_status=Status
-view_autoDiscoveryQ_committed=Eingetragen
-view_group_detail_failLoadComp=Konnte die Gruppen-Composite für die Gruppe mit der ID
[{0}] nicht laden.
-view_operationHistoryDetails_operation=Operation
-view_operationHistoryDetails_dateSubmitted=Absendezeitpunkt
-view_operationHistoryDetails_dateCompleted=Erledigungszeitpunkt
-view_operationHistoryDetails_requestor=Anforderer
-view_operationHistoryDetails_parameters=Parameter
-view_operationHistoryDetails_results=Ergebnisse
-view_operationCreateWizard_executionSchedule_willExecuteOnce=Wird {0} mal ausgeführt
-view_operationCreateWizard_executionSchedule_immediately=sofort
-view_operationCreateWizard_executionSchedule_onceAtGivenTime=Einmalig um {0}
-view_operationCreateWizard_executionSchedule_everyNMinutes=Alle {0} Minuten
-view_operationCreateWizard_executionSchedule_everyDayAtGivenTime=Jeden Tag um {0}
-view_operationCreateWizard_executionSchedule_everyHourOnNthMinute=Stündlich zur {0}-ten
Minute
-view_operationCreateWizard_executionSchedule_everyMonthOnNthDayAtGivenTime=Am {0}-ten Tag
des Monats um {1}
-view_operationCreateWizard_executionSchedule_willExecuteRecurringWithEnd=Wird {0}
beginnend am {1} und endend am {2} ausgeführt.
-view_operationCreateWizard_executionSchedule_willExecuteRecurring=Wird {0} beginnend am
{1} ausgeführt.
-view_operationCreateWizard_executionSchedule_everyWeekOnGivenDayAtGivenTime=Wöchntlich an
{0} um {1}
-view_operationCreateWizard_message_scheduleOperationSuccess_short=Sie haben die Operation
[{0}] für diese Ressource geplant.
-favorites=Lesezeichen
-favorites_resources=Gemerkte Ressourcen
-favorites_groups=Gemerkte Gruppen
-favorites_recentlyViewed=Kürzlich angesehen
-common_msg_notYetImplemented=Noch nicht implementiert
-widget_recordEditor_error_operation=Die Operation ist fehlgeschlagen. Ein Fehler ist
aufgetreten.
-widget_recordEditor_error_operationInvalidValues=Die Operation ist fehlgeschlagen - ein
oder mehrere Felder haben ungültige Werte
-widget_recordEditor_error_permissionCreate=Sie haben nicht die nötigen Rechte, um ein
neues [{0}] anzulegen
-widget_recordEditor_warn_validation=Ein oder mehrere Felder haben ungültige Werte. Diese
[{0}] kann nicht gesichert werden bis die Werte korrigiert wurden.
-widget_resourceFactoryWizard_infoStep_loadFail=Konnte die verfügbaren Architekturen nicht
ermitteln
-widget_typeCache_loadFail=Konnte die Metadaten für den Ressourcen-Typ nicht laden
-widget_typeTree_badTemplateType=Ungültige URL. Unbekannter Vorlagen-Typ [{0}]
-widget_typeTree_badTypeId=Ungültige URL. Unbekannte Ressource-Typ-ID [{0}]
-widget_typeTree_loadFail=Konnte die Ressource-Typen nicht laden
-dataSource_bundle_loadFailed=Konnte die Bundle-Daten nicht laden
-dataSource_users_delete=Benutzer [{0}] wurde gelöscht
-dataSource_users_deleteFailed=Konnte den Benutzer [{0}] nicht löschen
-dataSource_traits_failFetch=Konnte die Traits für das Kiriterium [{0}] nicht ermitteln.
-dataSource_schedules_loadFailedCriteria=Konnte die Zeitpläne für Metriken für die
Kriterien [{0}] nicht laden
-dataSource_schedules_loadFailedContext=Konnte die Zeitpläne für Metriken für den Kontext
[{0}] nicht laden
-dataSource_resourceGroups_loadFailed=Konnte die Ressourcen-Gruppe nicht laden
-datasource_templateSchedules_disabled=Das Erfassen der Messwerte für [{0}] wurde
eingestellt.
-datasource_templateSchedules_disabled_detailed=Sammeln der Daten für Metrik [{0}] [{1}]
als Standard für Ressource-Tpypen mit ID [{2}] eingestellt.
-datasource_templateSchedules_disabled_failed=Konnte das Sammeln der Daten für die Metrik
[{0}] [{1}] als Standard für Ressourcen-Typ [{2}] nicht einstellen.
-datasource_templateSchedules_enabled=Sammeln der Daten für Metrik [{0}] gestartet.
-datasource_templateSchedules_enabled_detailed=Sammeln der Daten für Metrik [{0}] [{1}]
als Standard für Ressourcen mit Typ-ID [{2}] gestartet.
-datasource_templateSchedules_enabled_failed=Konnte das Sammeln der Daten für die Metrik
[{0}] [{1}] als Standard für Ressourcen mit Type-ID [{2}] nicht beginnen.
-datasource_templateSchedules_updated=Zeitpläne für die ausgewählte Metrik [{0}]
aktualisiert.
-datasource_templateSchedules_updated_detail=Zeitplan für das Sammeln von Daten für Metrik
[{0}] [{1}] als Standard für Ressourcen mit Typ-ID [{2}] auf [{3}] Sekunden gesetzt.
-datasource_templateSchedules_updated_failed=Aktualisieren des Zeitplans auf [{0}]
Sekunden für das Sammeln von Daten für Metrik [{1}] [{2}] als Standard für Ressourcen mit
Typ-ID [{3}] ist fehlgeschlagen.
-view_table_drawFail=Konnte die Tabelle [{0}] nicht zeichnen.
-view_dashboardManager_deleteFail=Konnte das Dashboard nicht löschen.
-view_tree_common_loadFailed_group=Konnte die Gruppe mit ID [{0}] nicht laden
-view_tree_common_loadFailed_groupTree=Konnte die Baumansicht der Gruppe nicht laden
-view_tree_common_contextMenu_loadFail_dashboards=Konnte die benutzerspezifischen
Dashboards nicht laden
-view_group_membership_failFetch=Konnte die Ressourcen-Gruppe nicht laden
-common_label_yesterday=Gestern
-view_admin_systemSettings_savedSettings=Sie haben die Systemeinstellungen erfolgreich
gespeichert
-view_admin_systemSettings_saveFailure=Das Speichern der Systemeinstellungen ist
fehlgeschlagen
-view_admin_content=Inhalte
-view_admin_downloads_agent_buildNumber=Build-Nummer des Agents
-view_admin_downloads_agent_md5=MD5 Prüfsumme des Agents
-view_admin_downloads_agent_version=Version des Agents
-view_admin_downloads_cli_md5=MD5 Prüfsumme des CLI
-view_admin_downloads_cli_version=Version des CLI
-view_admin_systemSettings_AlertPurge_name=Lösche Alarme, die älter sind als
-view_admin_systemSettings_AvailabilityPurge_name=Lösche Verfügbarkeitsdaten, die älter
sind als
-view_admin_systemSettings_serverDetails_time=Lokale Zeit des Servers
-view_admin_systemSettings_serverDetails_tz=Zeitzone des Servers
-view_admin_systemSettings_serverDetails_dbDriverName=Name des Datenbanktreibers
-view_admin_systemSettings_serverDetails_dbDriverVersion=Version des Datenbanktreibers
-view_admin_systemSettings_serverDetails_dbName=Produktname der Datenbank
-view_admin_systemSettings_serverDetails_dbUrl=URL der Datenbankverbindung
-view_admin_systemSettings_serverDetails_dbVersion=Produktversion der Datenbank
-view_admin_systemSettings_serverDetails_installDir=Installationsverzeichnis des Servers
-view_admin_systemSettings_serverDetails_nextRotation=Nächste Rotation der
Metrik-Tabellen
-view_admin_systemSettings_serverDetails_currentTable=Aktuelle Datenbanktablee für
Metrikdaten
-view_admin_systemSettings_TraitPurge_name=Lösche Trait-Daten, die älter sind als
-view_operationHistoryList_notYetStarted=noch nicht gestartet
-common_msg_see_more=mehr ...
-common_status_unknown=Unbekannt
-common_unit_days=Tage
-common_unit_hours=Stunden
-common_unit_milliseconds=Millisekunden
-common_unit_minutes=Minuten
-common_unit_months=Monate
-common_unit_seconds=Sekunden
-common_unit_times=mal
-common_unit_weeks=Wochen
-common_unit_years=Jahre
-view_alert_definition_notification_cliScript_editor_existingScript=Vorhandenes Skript
-view_alert_definition_notification_cliScript_editor_anotherUser=Anderer Benutzer
-view_alert_definition_notification_cliScript_editor_script=Skript
-view_alert_definition_notification_cliScript_editor_thisUser=Aktueller Benutzer
-view_autoDiscoveryQ_confirmSelect=Sollen auch die Kinder der Platform ausgewählt werden?
-view_autoDiscoveryQ_showStatus=Zeige
-common_title_count=Anzahl
-common_title_resource_key=Ressourcen-Schlüssel
-common_title_resource_type=Ressourcen-Typ
-common_title_results_count=Anzahl Ergebnisse
-common_title_results_count_tooltip=Zeige diese Anzahl Ergebnisse an
-common_title_stop=Stop
-common_title_sort_order=Sortierreihenfolge
-common_title_sort_order_tooltip=Legt die Sortierreihenfolge für Ergebnisse fest.
-common_title_metric_chart=Metrik-Diagramm
-common_title_operation_status=Status der Operation
-common_title_recent_bundle_deployments=Kürzliche Bundle-Deployments
-common_title_recent_configuration_updates=Frische Konfigurationsaktualisierungen
-common_title_recent_event_counts=Anzahl frischer Events
-common_title_recent_measurements=Frische Messwerte
-common_title_recent_oob_metrics=Kürzlich aus dem Ruder gelaufene Metriken
-dataSource_users_invalidEmailAddress=Ungültige E-Mail-Adresse
-dataSource_users_passwordsDoNotMatch=Passworte stimmen nicht überein.
-view_alerts_field_ack_status_ack=Best.\\ ({0})
-view_alerts_field_ack_status_ackHover=Bestätigt durch {0} um {1}
-view_alerts_field_ack_status_noAck=Unbest.
-view_alerts_field_ack_status_noAckHover=Noch nicht bestätigt
-view_core_noRecentAlerts=Es liegen keine frischen Alarme vor
-view_dynagroup_compatible=Kompatible
-view_dynagroup_mixed=Gemischt
-view_inventory_summary_agent_error3=Sie haben nicht die Rechte, um die Details für diesen
Agent anzusehen.
-view_inventory_unavailableServers=Nichtverfügbare Server
-view_messageCenter_clearAllMessages=Alle Nachrichten löschen
-view_messageCenter_lastNMessages=Letzte {0} Nachrichten
-view_messageCenter_messageBarShowDetails=Details zeigen
-view_messageCenter_stackTraceFollows=--- STACK TRACE FOLGT ---
-view_operationHistoryDetails_noResults=Diese Operation liefert keine Ergebnisse zurück.
-view_operationScheduleDetails_enterParametersBelow=Geben Sie die Parameter unten an...
-view_operationScheduleDetails_field_description=Beschreibung
-view_operationScheduleDetails_field_parameters=Parameter
-view_operationScheduleDetails_noParameters=Diese Operation benötigt keine Parameter.
-common_button_schedule=Planen
-common_button_set=Setzen
-common_status_deferred=Verzögert
-common_status_nochange=Keine Änderung
-common_status_partial=partiell
-common_title_compare_metrics=Metriken vergleichen
-common_title_config_update_status=Status aktualisieren
-common_title_dateRange=Zeitraum
-common_title_members_reporting=Anzahl berichtender Mitglieder
-common_title_group_member_health=Zustand der Gruppenmitglieder
-common_title_numeric_metrics=Numerische Metriken
-dataSource_operationHistory_field_createdTime=Erstellungszeitpunkt
-dataSource_operationHistory_field_operationName=Name der Operation
-dataSource_operationHistory_field_startedTime=Startzeitpunkt
-dataSource_operationHistory_field_subject=Ersteller
-dataSource_operationSchedule_field_description=Notizen
-dataSource_operationSchedule_field_nextFireTime=Nächste Ausführung
-dataSource_operationSchedule_field_operationDisplayName=Operation
-dataSource_operationSchedule_field_operationName=Operation
-dataSource_operationSchedule_field_subject=Eigentümer
-dataSource_operationSchedule_field_timeout=Timeout (in Sekunden)
-dataSource_resourceErrors_clickStatusIcon=Für mehr Details auf das Icon klicken
-dataSource_resourceErrors_deleteFailure=Konnte die Ressourcen-Fehler nicht löschen
-dataSource_resourceErrors_deleteSuccess=Sie haben erfolgreich [{0}]
Ressourcen-Fehlermeldungen gelöscht.
-group_tree_partialClusterTooltip={0} der {1} Gruppenmitglieder haben eine
''{2}'' Ressource
-view_adminTemplates_servers=Server
-view_adminTemplates_platforms=Platformen
-view_alert_definition_condition_editor_delete_confirm=Die ausgewählte(n)
Alarm-Bedingung(en) löschen?
-view_bundle_fileListView_md5=MD5
-view_bundle_fileListView_sha256=SHA256
-view_group_detail_failRecursiveChange=Konnte die Einstellung ''Rekursiv''
für die Gruppe [{0}] nicht aktualisieren
-view_group_detail_recursiveChange=Sie haben erfolgreich die
''Rekursiv''-Einstellung für die Gruppe [{0}] geändert.
-view_groupInventoryMembers_button_updateMembership=Mitgliedschaft aktualisieren...
-view_groupInventoryMembers_title_updateMembership=Mitgliedschaft aktualisieren
-view_measureRange_start=Zeitraum - Start
-view_measureTable_chartMetricValues=Graphen für ausgewählte Metriken anzeigen
-view_measureTable_getLive=Aktuellen Wert holen
-view_messageCenter_maxMessages=Alle Nachrichten
-view_resource_monitor_table_alerts=Alarme
-view_resource_monitor_table_avg=Durchschnitt
-view_resource_monitor_table_last=Letzter
-view_resource_monitor_table_max=Maximum
-view_resource_monitor_table_min=Minimum
-view_table_matchingRows=Zutreffende Zeilen: {0} (ausgewählt: {1})
-view_tabs_common_activity=Aktivität
-view_tabs_common_group_members=Gruppenmitglieder
-view_tabs_common_schedule=Zeitplan
-widget_resourceFactoryWizard_editConfigStep_nothingToDo=Es gibt keine Konfiguration, die
Sie für diese Ressource bearbeiten können.
-
-
-
-
+view_titleBar_group_failInfo = Konnte die allgemeinen Informationen zur Gruppe [{0}] mit
der ID [{1}] nicht ermitteln.
+view_titleBar_group_summary_collapsedTooltip = Klicken, um mehr Details für diese Gruppe
zu zeigen
+view_titleBar_group_summary_expandedTooltip = Klicken, um Details für diese Gruppe zu
verbergen.
+view_tree_common_contextMenu_addChartToDashboard = Diagramm zum Dashboard [{0}]
hinzufügen
+view_tree_common_contextMenu_loadFail_dashboards = Konnte die benutzerspezifischen
Dashboards nicht laden
+view_tree_common_contextMenu_loadFailed_dashboard = Failed to load user dashboards
+view_tree_common_contextMenu_measurements = Metriken
+view_tree_common_contextMenu_saveChartToDashboardFailure = Speichern des Dashboards
fehlgeschlagen
+view_tree_common_contextMenu_saveChartToDashboardSuccessful = sie haben das Dashboard
[{0}] gesichert
+view_tree_common_contextMenu_type_name_label = Typ: {0}
+view_tree_common_loadFailed_group = Konnte die Gruppe mit ID [{0}] nicht laden
+view_tree_common_loadFailed_groupTree = Konnte die Baumansicht der Gruppe nicht laden
+view_tree_group_error_updateAutoCluster =Anlegen oder Aktualisieren der
Autocluser-Backing-Gruppe fehlgeschlagen. Schlüssel: [{0}]
+view_type_resourceTypes = Ressourcen-Typen
+view_type_typeTreeLoadFailure = Failed to load resource type tree data~+# Tabs
+view_upload_alreadyUploaded = Datein wurde bereits hochgeladen
+view_upload_error_file = Fehler beim Hochladen der Datei
+view_upload_tooltip_1a=Wählen Sie eine Datei zum Hochladen aus und drücken Sie dann
"Hochladen" oder "Weiter"
+view_upload_tooltip_1b=Wählen Sie eine Datei zum Hochladen aus und drücken Sie dann
"Weiter"
+view_upload_upload = Hochladen
+widget_colorPicker_tooltip = Klicken, um eine neue Farbe auszuwählen
+widget_durationItem_unitTypeNotSupported=Die Einheit [{0}] ist für diesen Zeitraum nicht
unterstützt.
+widget_jobTriggerEditor_fieldHelp_repeatInterval=wie oft die Operation ausgeführt werden
soll
+widget_jobTriggerEditor_field_cronExpression = Cron-Ausdruck
+widget_jobTriggerEditor_field_mode = Planen via
+widget_jobTriggerEditor_field_repeatInterval_later = Wiederholen alle
+widget_jobTriggerEditor_field_repeatInterval_now=Jetzt starten und dann jede
+widget_jobTriggerEditor_message_endTimeMustBeAfterStartTime = Der Endzeitpunkt muss nach
dem Startzeitpunkt liegen
+widget_jobTriggerEditor_message_endTimeMustBeInFuture = Endzeitpunkt muss in der Zukunft
liegen
+widget_jobTriggerEditor_message_startTimeMustBeInFuture = Startzeitpunkt muss in der
Zukunft liegen
+widget_jobTriggerEditor_tab_examples = Beispiele
+widget_jobTriggerEditor_tab_format = Format
+widget_jobTriggerEditor_value_calendar = Kalender
+widget_jobTriggerEditor_value_cronExpression = Cron-Ausdruck
+widget_jobTriggerEditor_value_indefinitely = Unendlich
+widget_jobTriggerEditor_value_later = Später
+widget_jobTriggerEditor_value_laterAndRepeat = Später & Wiederholen
+widget_jobTriggerEditor_value_now = Jetzt
+widget_jobTriggerEditor_value_nowAndRepeat = Jetzt & Wiederholen
+widget_jobTriggerEditor_value_until = Bis
+widget_recordEditor_error_invalidViewPath = Ungültiger Anzeigepfad: [{0}]
+widget_recordEditor_error_multipleRecords = Mehrere Datensätze gefunden - erwartet wurde
genau einer.
+widget_recordEditor_error_noRecords = Keine Datensätze gefunden - erwartet wurde genau
einer.
+widget_recordEditor_error_operation = Die Operation ist fehlgeschlagen. Ein Fehler ist
aufgetreten.
+widget_recordEditor_error_operationInvalidValues = Die Operation ist fehlgeschlagen - ein
oder mehrere Felder haben ungültige Werte
+widget_recordEditor_error_permissionCreate = Sie haben nicht die nötigen Rechte, um ein
neues [{0}] anzulegen
+widget_recordEditor_error_unsupportedOperationType = Der Typ [{0}] der Operation wird
nicht unterstützt
+widget_recordEditor_info_recordCreatedConcise = {0} angelegt.
+widget_recordEditor_info_recordCreatedDetailed = {0} [{1}] angelegt.
+widget_recordEditor_info_recordUpdatedConcise = {0} aktualisiert.
+widget_recordEditor_info_recordUpdatedDetailed = {0} [{1}] aktualisiert.
+widget_recordEditor_info_recordsDeletedConcise = {0} {1} gelöscht.
+widget_recordEditor_info_recordsDeletedDetailed = {0} {1} gelöscht: {2}.
+widget_recordEditor_label_loading = Laden...
+widget_recordEditor_title_edit = Bearbeiten {0} [{1}]
+widget_recordEditor_title_new = Neue {0} anlegen
+widget_recordEditor_title_view = Anzeigen {0} [{1}]
+widget_recordEditor_warn_validation = Ein oder mehrere Felder haben ungültige Werte.
Diese [{0}] kann nicht gesichert werden bis die Werte korrigiert wurden.
+widget_resourceFactoryWizard_createWizardTitle = Neue Ressource des Typs [{0}] anlegen
+widget_resourceFactoryWizard_editConfigStepName = Konfiguration bearbeiten
+widget_resourceFactoryWizard_editConfigStep_nothingToDo = Es gibt keine Konfiguration,
die Sie für diese Ressource bearbeiten können.
+widget_resourceFactoryWizard_execute2 = Konnte keine neue Ressource anlegen
+widget_resourceFactoryWizard_importWizardTitle = Importieren von Ressourcen des Typs
[{0}]
+widget_resourceFactoryWizard_infoStep_loadFail = Konnte die verfügbaren Architekturen
nicht ermitteln
+widget_resourceFactoryWizard_uploadFailure = Das Hochladen der Datei ist fehlgeschlagen
+widget_resourceSelector_groupCategory = Kategorie der Gruppe
+widget_resourceSelector_pleaseSelectMultipleResource = Bitte wählen Sie eine oder merere
Ressourcen aus
+widget_resourceSelector_pleaseSelectResource = Bitte wählen sie eine Ressource aus
+widget_resourceSelector_selectMultipleResources = Wählen sie Ressourcen aus
+widget_resourceSelector_selectResource = Wählen Sie eine Ressource aus
+widget_typeCache_loadFail = Konnte die Metadaten für den Ressourcen-Typ nicht laden
+widget_typeTree_badTemplateType = Ungültige URL. Unbekannter Vorlagen-Typ [{0}]
+widget_typeTree_badTypeId = Ungültige URL. Unbekannte Ressource-Typ-ID [{0}]
+widget_typeTree_loadFail = Konnte die Ressource-Typen nicht laden
+view_upload_success=Die Datei wurde erfolgreich hochgeladen
+common_title_mashup=Mashup
+common_msg_deleteConfirm=Sind Sie sicher, dass sie die ausgewählte # {0} löschen wollen?
+widget_jobTriggerEditor_value_for=für
+view_remoteAgentInstall_connInfo=Verbindungsinformation
+view_type_parentId=ID der übergeortneten Ressource
+view_tabs_invalidSubTab=Ungültiger Subtab: {0}
+view_dashboardManager_error=Konnte das Dashboard nicht im Server speichern
+view_dashboardManager_saved=Dashboard {0} erfolgreich im Server gespeichert
+view_dashboardManager_deleted=Dashboard {0} erfolgreich gelöscht
+view_portlet_defaultName_inventorySummary=Inventarübersicht
+view_portlet_defaultName_operations=Geplante Operationen
+view_portlet_defaultName_platformSummary=Plattformauslastung
+view_portlet_defaultName_problemResources=Nicht-verfügbare oder alarmierte Ressourcen
+view_portlet_defaultName_autodiscovery=Discovery-Warteschlange
+view_portlet_factory_invalidPortlet=Dies ist ein veraltetes Portlet, das nicht mehr
gültig ist. Bitte löschen Sie es.
+view_portlet_defaultName_resourceMetric=Metrik-Graph (Ressource)
+view_portlet_defaultName_groupMetric=Metrik-Graph (Gruppe)
+view_portlet_results_empty=Für die angegebenen Kriterien wurden keine Daten gefunden.
+view_inventory_eventHistory_groupEventHistory=Verlauf der Gruppen-Ereignisse
+view_inventory_eventHistory_resourceEventHistory=Verlauf der Ressourcen-Ereignisse
+view_inventory_groups_children=Kinder
+view_inventory_groups_descendants=Abkömlinge
+view_inventory_groups_deleteSuccessful=Sie haben die ausgewählten Gruppen erfolgreich
gelöscht
+view_inventory_groups_deleteFailed=Das Löschen der ausgewählten Gruppen ist
fehlgeschlagen
+view_inventory_resources_title_children=Kind-Ressourcen
+view_inventory_resources_title_members=Gruppenmitglieder
+view_resource_inventory_activity_no_recent_alerts=Keine frischen Alarme
+widget_jobTriggerEditor_field_startType=Start
+widget_jobTriggerEditor_value_on=am
+widget_jobTriggerEditor_fieldHelp_startDelay=Starte die Operation nach der angegebenen
Zeit
+widget_jobTriggerEditor_value_in=in
+widget_jobTriggerEditor_fieldHelp_repeatDuration=Die operation X mal ausführen oder bis
die zeit abgelaufen ist.
+dataSource_configurationHistory_dateSubmitted=Absendezeitpunkt
+dataSource_configurationHistory_dateCompleted=Erledigungszeitpunkt
+dataSource_configurationHistory_updateType=Art der Aktualisierung
commit 7d84152e490035435582d545da6ee05a2331e2a4
Author: Jijun Liu <lxjijun(a)gmail.com>
Date: Mon May 23 09:29:22 2011 +0200
First batch of chinese translations by Jijun Liu and ZhongqiangLee
diff --git
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/MessageConstants_zh.properties
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/MessageConstants_zh.properties
new file mode 100644
index 0000000..2d1c954
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/MessageConstants_zh.properties
@@ -0,0 +1,53 @@
+#
+# RHQ GUI i18n Message Constants - Chinese
+# This is used specifically for properties needing lookup by name, at runtime. These
+# constant properties can be localized but can not have arguments.
+###################################
+
+#=================== Help URLs =====================
+# The Help sections and entries are table driven via property lookups. The following
property
+# names are expected:
+#
+# The number of help sections:
+#
+# view_help_section_count = numSectionsInteger
+#
+# For each section:
+# N = 1..numSections
+#
+# view_help_section_N_title = localized title for section in the sectionStack
+# view_help_section_N_item_count = numSectionItemsInteger
+#
+# For each url entry in the section N:
+# M = 1..numSectionItems
+#
+# view_help_section_N_propTitle_M = localized title for the help (required)
+# view_help_section_N_propIcon_M = icon path (optional, defaults to document icon)
+# view_help_section_N_propUrl_M = url for the help (required)
+#
+view_help_section_count = 2
+
+view_help_section_1_title = \u6587\u6863
+view_help_section_1_item_count = 3
+
+view_help_section_1_propTitle_1 = \u7591\u96be\u89e3\u7b54 (FAQ)
+view_help_section_1_propUrl_1 =
http://www.rhq-project.org/display/JOPR2/FAQ
+view_help_section_1_propTitle_2 = \u6587\u6863\u96c6
+view_help_section_1_propUrl_2 =
http://www.rhq-project.org/display/JOPR2/Home
+view_help_section_1_propTitle_3 = API Javadoc
+view_help_section_1_propUrl_3 =
http://www.rhq-project.org/display/JOPR2/API+Documentation
+
+view_help_section_2_title = \u6559\u7a0b
+view_help_section_2_item_count = 4
+
+view_help_section_2_propTitle_1 = \u6f14\u793a: \u6240\u6709\u6f14\u793a
+view_help_section_2_propUrl_1 =
http://www.rhq-project.org/display/JOPR2/Demos
+view_help_section_2_propTitle_2 = \u6f14\u793a: Bundle Provisioning
+view_help_section_2_propUrl_2 =
http://management-platform.blogspot.com/2011/01/bundle-provisioning-via-r...
+view_help_section_2_propTitle_3 = How to build Group Definitions
+view_help_section_2_propIcon_3 = [SKIN]/../actions/help.png
+view_help_section_2_propUrl_3 =
http://docs.redhat.com/docs/en-US/JBoss_Operations_Network/2.4/html/Basic...
+view_help_section_2_propTitle_4 = \u5982\u4f55\u4f7f\u7528\u68c0\u7d22\u6846
+view_help_section_2_propIcon_4 = [SKIN]/../actions/help.png
+view_help_section_2_propUrl_4 =
http://www.rhq-project.org/display/JOPR2/Search
+
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
new file mode 100644
index 0000000..cdefe55
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
@@ -0,0 +1,2172 @@
+#
+# RHQ GUI i18n Messages - Chinese
+###################################
+
+#************************************** SHARED ****************************************
+
+#=================== Common =====================
+
+#
+# Build Info
+#
+common_buildInfo_gwtVersion = ${gwt.version}
+
+# Button Labels
+#--------------
+common_button_ack = \u786e\u8ba4
+common_button_ack_all = \u786e\u8ba4\u6240\u6709
+common_button_add = \u6dfb\u52a0
+common_button_advanced = \u9ad8\u7ea7...
+common_button_apply = \u63a5\u53d7
+common_button_cancel = \u53d6\u6d88
+common_button_close = \u5173\u95ed
+common_button_compare = \u5bf9\u6bd4
+common_button_create_child = Create Child
+common_button_delete = \u5220\u9664
+common_button_delete_all = \u5220\u9664\u6240\u6709
+common_button_disable = \u7981\u7528
+common_button_edit = \u7f16\u8f91
+common_button_enable = \u542f\u7528
+common_button_finish = \u5b8c\u6210
+common_button_import = \u5bfc\u5165
+common_button_new = \u65b0\u5efa
+common_button_next = \u4e0b\u4e00\u6b65
+common_button_ok = OK
+common_button_previous = \u4e0a\u4e00\u6b65
+common_button_purgeAll = \u6e05\u9664\u6240\u6709
+common_button_refresh = \u5237\u65b0
+common_button_reset = \u91cd\u7f6e
+common_button_save = \u4fdd\u5b58
+common_button_schedule = \u8ba1\u5212
+common_button_search = \u68c0\u7d22
+common_button_set = Set
+common_button_showDetails = \u67e5\u770b\u8be6\u60c5...
+common_button_uninventory = Uninventory
+
+# Common Labels
+#------------------------
+common_label_ago=ago
+common_label_all = \u6240\u6709
+common_label_all_resources = \u6240\u6709\u8d44\u6e90
+common_label_day = \u5929
+common_label_days = \u5929
+common_label_hour = \u5c0f\u65f6
+common_label_hours = \u5c0f\u65f6
+common_label_item = \u9879
+common_label_items = \u9879
+common_label_milliseconds = \u6beb\u79d2
+common_label_minutes = \u5206\u949f
+common_label_month = \u6708
+common_label_none = none
+common_label_role = \u89d2\u8272
+common_label_roles = \u89d2\u8272
+common_label_scheduled_operations = \u8ba1\u5212\u64cd\u4f5c
+common_label_seconds = \u79d2
+common_label_selected_resources = selected resources
+common_label_unlimited = unlimited
+common_label_user = \u7528\u6237
+common_label_users = \u7528\u6237
+common_label_week = \u5468
+common_label_weeks = \u5468
+common_label_yesterday=\u6628\u5929
+
+# Common Units
+#-------------
+common_unit_times = \u6b21
+common_unit_milliseconds = \u6beb\u79d2
+common_unit_seconds = \u79d2
+common_unit_minutes = \u5206\u949f
+common_unit_hours = \u5c0f\u65f6
+common_unit_days = \u5929
+common_unit_weeks = \u5468
+common_unit_months = \u6708
+common_unit_years = \u5e74
+
+# Common Severities
+#------------------
+common_severity_debug = Debug
+common_severity_info = Info
+common_severity_warn = Warn
+common_severity_error = Error
+common_severity_fatal = Fatal
+
+# Common Titles
+#--------------
+common_title_address = \u5730\u5740
+common_title_add_column = \u6dfb\u52a0\u5217
+common_title_add_graph_to_view = Add Graph to Monitor View
+common_title_add_portlet = \u6dfb\u52a0Portlet
+common_title_alert_range = \u544a\u8b66\u8303\u56f4
+common_title_ancestry = \u7956\u5148
+common_title_availability = \u53ef\u7528\u6027
+common_title_average_metrics = \u5e73\u5747\u6bcf\u5206\u949f\u6307\u6807
+common_title_available_resources = \u53ef\u7528\u7684\u8d44\u6e90
+common_title_background = \u80cc\u666f\u8272
+common_title_bundle = \u63d2\u4ef6
+common_title_bundles = \u63d2\u4ef6\u96c6
+common_title_category = \u7c7b\u522b
+common_title_change_refresh_time=\u5237\u65b0\u95f4\u9694
+common_title_columns = \u5217
+common_title_configuration = \u914d\u7f6e
+common_title_compare_metrics = \u6307\u6807\u5bf9\u6bd4
+common_title_compatibleGroups = \u517c\u5bb9\u7ec4
+common_title_compatibleGroups_total = \u6240\u6709\u517c\u5bb9\u7ec4
+common_title_component_errors = \u7ec4\u4ef6\u9519\u8bef
+common_title_config_update_status = \u66f4\u65b0\u72b6\u6001
+common_title_count = \u6570
+common_title_custom = \u81ea\u5b9a\u4e49
+common_title_dashboard_name = \u7edf\u8ba1\u8868\u76d8\u540d
+common_title_dateCreated = \u521b\u5efa\u65e5\u671f
+common_title_dateRange = \u65e5\u671f\u8303\u56f4
+common_title_default = \u9ed8\u8ba4
+common_title_description = \u63cf\u8ff0
+common_title_details = \u8be6\u7ec6
+common_title_display = \u663e\u793a
+common_title_display_name = \u663e\u793a\u540d
+common_title_duration = \u95f4\u9694
+common_title_edit_mode = \u7f16\u8f91\u6a21\u5f0f
+common_title_enabled = \u542f\u7528?
+common_title_end = End
+common_title_error = Error
+common_title_generalProp = \u57fa\u672c\u5c5e\u6027
+common_title_group = \u7ec4
+common_title_groups = \u7ec4
+common_title_group_def_total = \u5b9a\u4e49\u7ec4\u603b\u6570
+common_title_group_member_health = Group Member Health
+common_title_icon =
+common_title_id = ID
+common_title_id_parent = \u7236ID
+common_title_info = Info
+common_title_help = \u5e2e\u52a9
+common_title_host = \u4e3b\u673a
+common_title_inventory = \u6e05\u5355
+common_title_inventorySummary = \u6e05\u5355\u6c47\u603b
+common_title_lastUpdated = \u6700\u8fd1\u66f4\u65b0
+common_title_lastUpdatedBy = \u6700\u8fd1\u66f4\u65b0\u8005
+common_title_ldapGroups = LDAP\u7ec4
+common_title_mashup = Mashup
+common_title_members_reporting = Members Reporting
+common_title_message = \u6d88\u606f
+common_title_metric = Metric
+common_title_metric_chart = Metric\u56fe\u8868
+common_title_mixedGroups = \u6df7\u5408\u7ec4
+common_title_mixedGroups_total = \u6240\u6709\u6df7\u5408\u7ec4
+common_title_name = \u540d\u79f0
+common_title_new_dashboard = \u65b0\u5efa\u7edf\u8ba1\u8868\u76d8
+common_title_numeric_metrics = \u6570\u5b57\u578b\u6307\u6807
+common_title_numeric_type = \u6570\u5b57\u7c7b\u578b
+common_title_operation_status = \u64cd\u4f5c\u72b6\u6001
+common_title_operations = \u64cd\u4f5c
+common_title_operations_range = \u64cd\u4f5c\u8303\u56f4
+common_title_over = Over
+common_title_password = \u5bc6\u7801
+common_title_path = Path
+common_title_permissions = \u6743\u9650
+common_title_platform = \u5e73\u53f0
+common_title_platform_total = \u6240\u6709\u5e73\u53f0
+common_title_plugin = \u63d2\u4ef6
+common_title_port = \u7aef\u53e3
+common_title_providers = \u63d0\u4f9b\u8005
+common_title_recent_alerts = \u6700\u8fd1\u544a\u8b66
+common_title_recent_bundle_deployments = Recent Bundle Deployments
+common_title_recent_configuration_updates = Recent Configuration Updates
+common_title_recent_event_counts = \u6700\u8fd1\u4e8b\u4ef6\u6570
+common_title_recent_measurements = Recent Measurements
+common_title_recent_oob_metrics = Recent Out of Bound metrics
+common_title_recent_operations = \u6700\u8fd1\u64cd\u4f5c
+common_title_recent_pkg_history = \u6700\u8fd1\u5386\u53f2\u5305
+common_title_recently_added = \u6700\u8fd1\u6dfb\u52a0
+common_title_remove_column = \u79fb\u9664\u5217
+common_title_repositories = \u5e93
+common_title_resource = \u8d44\u6e90
+common_title_resources = \u8d44\u6e90
+common_title_resource_group = \u8d44\u6e90\u7ec4
+common_title_resourceGroups = \u8d44\u6e90\u7ec4
+common_title_resource_inventory = \u8d44\u6e90\u6e05\u5355
+common_title_resource_id = \u8d44\u6e90ID
+common_title_resource_name = \u8d44\u6e90\u540d
+common_title_resource_key = \u8d44\u6e90Key
+common_title_resource_type = \u8d44\u6e90\u7c7b\u578b
+common_title_results_count = \u7ed3\u679c\u6570\u91cf
+common_title_results_count_tooltip = \u663e\u793a\u7ed3\u679c\u6570\u91cf
+common_title_role = \u89d2\u8272
+common_title_roles = \u89d2\u8272
+common_title_search = \u641c\u7d22
+common_title_scheduled_operations = \u8ba1\u5212\u64cd\u4f5c
+common_title_selected_resources = \u9009\u62e9\u7684\u8d44\u6e90
+common_title_server = \u670d\u52a1\u5668
+common_title_server_total = \u670d\u52a1\u5668\u603b\u6570
+common_title_service = \u670d\u52a1
+common_title_service_total = \u670d\u52a1\u603b\u6570
+common_title_settings = \u8bbe\u7f6e
+common_title_show = \u663e\u793a
+common_title_show_more = \u663e\u793a\u6240\u6709...
+common_title_sort_order = \u6392\u5e8f
+common_title_sort_order_tooltip = \u8bbe\u7f6e\u6392\u5e8f\u65b9\u5f0f.
+common_title_start = \u5f00\u59cb
+common_title_status = \u72b6\u6001
+common_title_stop= \u505c\u6b62
+common_title_summary = \u7edf\u8ba1
+common_title_tag_cloud = \u6807\u7b7e\u4e91
+common_title_the = The
+common_title_timestamp = \u65e5\u671f/\u65f6\u95f4
+common_title_total = \u603b\u6570
+common_title_type = \u7c7b\u578b
+common_title_units = \u5355\u4f4d
+common_title_user = \u7528\u6237
+common_title_users = \u7528\u6237
+common_title_value = \u503c
+common_title_version = \u7248\u672c
+common_title_view_mode = \u67e5\u770b\u6a21\u5f0f
+common_title_web_address = Web\u5730\u5740
+common_title_welcome = \u6b22\u8fce
+
+# Common Messages
+#--------------
+common_msg_areYouSure = \u4f60\u786e\u5b9a?
+common_msg_changeAutoDetected = Change auto-detected
+common_msg_deleteConfirm = \u4f60\u786e\u5b9a\u8981\u5220\u9664# selected {0}?
+common_msg_emphasizedNotePrefix = \u6ce8\u610f:
+common_msg_loading = \u52a0\u8f7d\u4e2d...
+common_msg_noItemsToShow = \u6ca1\u6709\u6761\u76ee\u663e\u793a
+common_msg_notYetImplemented = \u5c1a\u672a\u5b9e\u73b0
+common_msg_see_more = \u67e5\u770b\u66f4\u591a...
+common_msg_step_x_of_y = Step {0} of {1}
+common_msg_asyncTimeout = {0}.
\u56e0\u4e3a\u670d\u52a1\u5668\u54cd\u5e94\u65f6\u95f4\u592a\u957f. \
+\u8bf7\u6ce8\u610f\u670d\u52a1\u5668\u53ef\u80fd\u4ecd\u5728\u5904\u7406\u60a8\u7684\u8bf7\u6c42\uff0c\u5e76\u53ef\u80fd\u5728\u77ed\u671f\u5185\u5b8c\u6210.
\
+\u4f60\u53ef\u4ee5\u68c0\u67e5\u670d\u52a1\u5668\u65e5\u5fd7\uff0c\u67e5\u770b\u662f\u5426\u51fa\u73b0\u4efb\u4f55\u4e0d\u6b63\u5e38\u7684\u9519\u8bef.
+
+# Common Values
+#--------------
+common_val_for = for
+common_val_no = No
+common_val_no_lower = no
+common_val_yes = Yes
+common_val_yes_lower = yes
+common_val_never = Never
+common_val_na = N/A
+common_val_none = None
+
+# Common Statuses
+common_status_canceled = Canceled
+common_status_deferred = Deferred
+common_status_failed = Failed
+common_status_inprogress = In Progress
+common_status_nochange = No Change
+common_status_success = Success
+common_status_unknown = Unknown
+common_status_timedOut = Timed Out
+common_status_partial = Partial
+
+# 1st, 2nd, 3rd, 4th, etc.
+common_val_n1st = {0}st
+common_val_n2nd = {0}nd
+common_val_n3rd = {0}rd
+common_val_nth = {0}th
+
+# Common Alert Priorities
+#------------------------
+common_alert_high = High
+common_alert_medium = Medium
+common_alert_low = Low
+
+# Common Calendar
+#--------------
+common_calendar_january_short = \u4e00\u6708
+common_calendar_february_short = \u4e8c\u6708
+common_calendar_march_short = \u4e09\u6708
+common_calendar_april_short = \u56db\u6708
+common_calendar_may_short = \u4e94\u6708
+common_calendar_june_short = \u516d\u6708
+common_calendar_july_short = \u4e03\u6708
+common_calendar_august_short = \u516b\u6708
+common_calendar_september_short = \u4e5d\u6708
+common_calendar_october_short = \u5341\u6708
+common_calendar_november_short = \u5341\u4e00\u6708
+common_calendar_december_short = \u5341\u4e8c\u6708
+
+
+#=================== Widgets =====================
+
+# Favorites
+#--------------
+favorites = \u6536\u85cf\u5939
+favorites_resources = \u8d44\u6e90\u6536\u85cf\u5939
+favorites_groups = \u7ec4\u6536\u85cf\u5939
+favorites_recentlyViewed = \u6700\u8fd1\u67e5\u770b
+
+# Record Editor
+#--------------
+widget_recordEditor_title_view = \u67e5\u770b{0} [{1}]
+widget_recordEditor_title_edit = \u7f16\u8f91{0} [{1}]
+widget_recordEditor_title_new = \u65b0\u5efa{0}
+# // dup in common
+widget_recordEditor_label_loading = \u52a0\u8f7d\u4e2d...
+widget_recordEditor_error_invalidViewPath = \u67e5\u770b\u8def\u5f84\u65e0\u6548: [{0}]
+widget_recordEditor_error_noRecords = \u65e0\u8bb0\u5f55\u8fd4\u56de -
\u9884\u671f\u6709\u4e00\u6761.
+widget_recordEditor_error_multipleRecords = \u591a\u6761\u8bb0\u5f55\u8fd4\u56de-
\u9884\u671f\u53ea\u6709\u4e00\u4e2a.
+widget_recordEditor_info_recordCreatedConcise = {0} created.
+widget_recordEditor_info_recordCreatedDetailed = {0} [{1}] created.
+widget_recordEditor_info_recordUpdatedConcise = {0} updated.
+widget_recordEditor_info_recordUpdatedDetailed = {0} [{1}] updated.
+widget_recordEditor_info_recordsDeletedConcise = {0} {1} deleted.
+widget_recordEditor_info_recordsDeletedDetailed = {0} {1} deleted: {2}.
+widget_recordEditor_error_operation =
\u64cd\u4f5c\u5931\u8d25.\u6709\u9519\u8bef\u53d1\u751f
+widget_recordEditor_error_operationInvalidValues =
\u64cd\u4f5c\u5931\u8d25-\u4e00\u4e2a\u6216\u591a\u4e2a\u5b57\u6bb5\u7684\u503c\u65e0\u6548
+widget_recordEditor_error_unsupportedOperationType =
\u4e0d\u652f\u6301\u7684\u64cd\u4f5c\u7c7b\u578b: [{0}]
+widget_recordEditor_error_permissionCreate =
\u4f60\u6ca1\u6709\u521b\u5efa\u65b0[{0}]\u7684\u6743\u9650
+widget_recordEditor_warn_validation =
\u4e00\u4e2a\u6216\u591a\u4e2a\u5b57\u6bb5\u7684\u503c\u65e0\u6548.
\u53ea\u6709\u5b57\u6bb5\u6709\u6548\u65f6\uff0c[{0}]\u624d\u80fd\u4fdd\u5b58
+
+# Resource Selector/Picker
+#--------------------------------
+widget_resourceSelector_selectResource = \u9009\u62e9\u8d44\u6e90
+widget_resourceSelector_pleaseSelectResource = \u8bf7\u9009\u62e9\u8d44\u6e90
+widget_resourceSelector_selectMultipleResources = \u9009\u62e9\u8d44\u6e90
+widget_resourceSelector_pleaseSelectMultipleResource =
\u8bf7\u9009\u62e9\u4e00\u4e2a\u6216\u591a\u4e2a\u8d44\u6e90
+widget_resourceSelector_groupCategory = \u7ec4\u7c7b\u522b
+
+# Resource Factory Wizard
+#--------------------------------
+widget_resourceFactoryWizard_uploadInProgress = \u6b63\u5728\u4e0a\u4f20\u4e2d...
\u5927\u7684\u53d1\u5e03\u6587\u4ef6\u9700\u8981\u6d88\u8017\u6570\u5206\u949f\u5b8c\u6210.
+widget_resourceFactoryWizard_uploadFileStepName =
\u4e0a\u4f20\u8d44\u6e90Content\u6587\u4ef6
+widget_resourceFactoryWizard_uploadFailure = \u4e0a\u4f20\u6587\u4ef6\u5931\u8d25
+widget_resourceFactoryWizard_editConfigStepName = \u7f16\u8f91\u914d\u7f6e
+widget_resourceFactoryWizard_editConfigStep_nothingToDo =
\u6b64\u8d44\u6e90\u6ca1\u6709\u4efb\u4f55\u914d\u7f6e\u9700\u8981\u5b9a\u4e49.
+widget_resourceFactoryWizard_infoStepName = \u8d44\u6e90\u6d88\u606f
+widget_resourceFactoryWizard_infoStep_loadFail = \u65e0\u6cd5\u53d6\u5f97\u67b6\u6784
+widget_resourceFactoryWizard_namePrompt = \u65b0\u8d44\u6e90\u540d
+widget_resourceFactoryWizard_templatePrompt = \u8fde\u63a5\u8bbe\u7f6e\u6a21\u677f
+widget_resourceFactoryWizard_contentTemplatePrompt =
\u90e8\u7f72\u65f6\u95f4\u914d\u7f6e\u6a21\u677f
+widget_resourceFactoryWizard_configTemplatePrompt = \u8d44\u6e90\u914d\u7f6e\u6a21\u677f
+widget_resourceFactoryWizard_archPrompt = \u5305\u67b6\u6784
+widget_resourceFactoryWizard_versionPrompt = \u5305\u7248\u672c
+widget_resourceFactoryWizard_importWizardWindowTitle =
\u5bfc\u5165\u8d44\u6e90\u5411\u5bfc
+widget_resourceFactoryWizard_importWizardTitle =
\u5bfc\u5165\u7c7b\u578b[{0}]\u7684\u8d44\u6e90
+widget_resourceFactoryWizard_importFailure =
\u624b\u5de5\u5bfc\u5165\u8d44\u6e90\u5931\u8d25
+widget_resourceFactoryWizard_importSubmitted =
\u5bfc\u5165\u7c7b\u578b[{0}]\u7684\u65b0\u8d44\u6e90\u8bf7\u6c42\u5df2\u88ab\u63d0\u4ea4
+widget_resourceFactoryWizard_createWizardWindowTitle =
\u8d44\u6e90\u521b\u5efa\u5411\u5bfc
+widget_resourceFactoryWizard_createWizardTitle =
\u521b\u5efa\u7c7b\u578b[{0}]\u7684\u65b0\u8d44\u6e90
+widget_resourceFactoryWizard_execute1 = \u521b\u5efa\u8d44\u6e90\u5931\u8d25 -
\u6ca1\u6709\u5305\u7248\u672c
+widget_resourceFactoryWizard_execute2 = \u521b\u5efa\u8d44\u6e90\u5931\u8d25
+widget_resourceFactoryWizard_createSubmitType =
\u521b\u5efa\u7c7b\u578b[{0}]\u7684\u8d44\u6e90\u8bf7\u6c42\u63d0\u4ea4\u6210\u529f.
+widget_resourceFactoryWizard_createSubmit = \u521b\u5efa\u8d44\u6e90[{0}]\u6210\u529f.
+widget_resourceFactoryWizard_failedToGetType = Failed to get backing package type for new
resource
+widget_resourceFactoryWizard_failedToDeleteVersion =
\u53d6\u6d88\u521b\u5efa\u8d44\u6e90\u65f6\u65e0\u6cd5\u5220\u9664\u5305\u7684\u7248\u672c
+
+widget_typeCache_loadFail =
\u65e0\u6cd5\u52a0\u8f7d\u8d44\u6e90\u7c7b\u578b\u7684\u5143\u6570\u636e
+
+widget_typeTree_badTemplateType = \u65e0\u6548\u7684URL.
\u672a\u77e5\u6a21\u677f\u7c7b\u578b[{0}]
+widget_typeTree_badTypeId = \u65e0\u6548URL. \u9519\u8bef\u8d44\u6e90\u7c7b\u578bID
[{0}]
+widget_typeTree_loadFail = \u52a0\u8f7d\u8d44\u6e90\u7c7b\u578b\u5931\u8d25
+
+# Color Picker
+#--------------
+widget_colorPicker_tooltip = \u9009\u62e9\u989c\u8272
+
+# Job Trigger Editor
+#--------------------
+widget_jobTriggerEditor_field_mode = Schedule using
+widget_jobTriggerEditor_value_calendar = \u65e5\u5386
+widget_jobTriggerEditor_value_cronExpression = Cron\u8868\u8fbe\u5f0f
+widget_jobTriggerEditor_value_now = Now
+widget_jobTriggerEditor_value_nowAndRepeat = Now & Repeat
+widget_jobTriggerEditor_value_later = Later
+widget_jobTriggerEditor_value_laterAndRepeat = Later & Repeat
+widget_jobTriggerEditor_field_cronExpression = Cron\u8868\u8fbe\u5f0f
+widget_jobTriggerEditor_tab_format = Format
+widget_jobTriggerEditor_tab_examples = Examples
+widget_jobTriggerEditor_field_repeatInterval_now = Run now and every
+widget_jobTriggerEditor_field_repeatInterval_later = \u91cd\u590d\u6bcf
+widget_jobTriggerEditor_fieldHelp_repeatInterval = \u591a\u4e45\u6267\u884c\u64cd\u4f5c
+widget_jobTriggerEditor_value_for = For
+widget_jobTriggerEditor_value_until = \u76f4\u5230
+widget_jobTriggerEditor_value_indefinitely = Indefinitely
+widget_jobTriggerEditor_fieldHelp_repeatDuration = keep running this operation this many
times or until this amount of time has elapsed
+widget_jobTriggerEditor_field_startType = Run
+widget_jobTriggerEditor_value_on = on
+widget_jobTriggerEditor_value_in = in
+widget_jobTriggerEditor_fieldHelp_startDelay = \u6267\u884c\u64cd\u4f5c\u5ef6\u65f6
+widget_jobTriggerEditor_message_startTimeMustBeInFuture = Start time must be in the
future.
+widget_jobTriggerEditor_message_endTimeMustBeAfterStartTime = End time must be after
start time.
+widget_jobTriggerEditor_message_endTimeMustBeInFuture = End time must be in the future.
+
+# Duration Item
+#---------------
+widget_durationItem_inputUnitLessThanTargetUnit =
\u8f93\u5165\u5355\u4f4d\u662f\u5c0f\u4e8e\u76ee\u6807\u5355\u4f4d.
+widget_durationItem_unitTypeNotSupported =
\u5355\u4f4d\u7c7b\u578b[{0}]\u4e0d\u88abDurationItem\u652f\u6301.
+
+
+#===================== Utils ======================
+
+# Ancestry
+#-------------------------------------------------
+util_ancestry_parentAncestry = Parent Ancestry for:
+
+# Disambiguation Report Decorator
+#-------------------------------------------------
+util_disambiguationReportDecorator_pluginSuffix = ({0} plugin)
+
+# Monitoring Request Callback
+#------------------------------------------
+util_monitoringRequestCallback_error_checkServerStatusFailure =
\u65e0\u6cd5\u786e\u5b9a\u767b\u5f55\u72b6\u6001-
\u68c0\u67e5\u670d\u52a1\u5668\u72b6\u6001.
+
+# RPC Manager
+#----------------------
+util_rpcManager_activeRequests = {0}\u6fc0\u6d3b\u7684\u8bf7\u6c42
+
+# User Permissions Manager
+#--------------------------
+util_userPerm_loadFailGlobal = \u65e0\u6cd5\u8f7d\u5165\u5168\u5c40\u6743\u9650-
\u672a\u6388\u6743.
+util_userPerm_loadFailGroup = \u65e0\u6cd5\u8bbf\u95ee\u8d44\u6e90\u7ec4[{0}] -
\u672a\u6388\u6743.
+util_userPerm_loadFailResource = \u65e0\u6cd5\u8bbf\u95ee\u8d44\u6e90[{0}] -
\u672a\u6388\u6743.
+
+# User Session Manager
+#--------------------------
+util_userSession_loadFailSubject = UserSessionManager: Failed to load user Subject
+util_userSession_logoutFail = \u6ce8\u9500\u5931\u8d25.
+
+# Error Handler
+#--------------------
+util_errorHandler_nullException = exception was null
+
+# Widgets Field
+#---------------------
+util_widgetsField_unlimited = \u65e0\u9650\u5236
+
+
+#================== DataSources ====================
+
+# RPC (abstract)
+#-----------------------
+dataSource_bundle_loadFailed = \u52a0\u8f7d\u63d2\u4ef6\u6570\u636e\u5931\u8d25
+
+
+# RPC (abstract)
+#-----------------------
+dataSource_rpc_error_transformRequestFailure = Failure in datasource while processing {0}
request.
+dataSource_rpc_error_unsupportedArrayFilterType = No support for passing array filters of
type {0}.
+dataSource_rpc_error_unsupportedEnumType = Please add an appropriate code block for enum
{0} to RPCDataSource.getEnumArray(Class)
+dataSource_rpc_yes = yes
+dataSource_rpc_no = no
+
+# ContentRepositoryTree
+#------
+dataSource_ContentRepoTree_error_load = \u52a0\u8f7d\u5e93\u9519\u8bef
+dataSource_ContentRepoTree_field_parentId = \u7236ID
+
+
+# Users
+#------
+###### dup in common
+dataSource_users_field_id = ID
+dataSource_users_field_name = \u7528\u6237\u540d
+dataSource_users_field_ldap = LDAP\u767b\u5f55?
+dataSource_users_field_password = \u5bc6\u7801
+dataSource_users_field_passwordVerify = \u786e\u8ba4\u5bc6\u7801
+dataSource_users_field_firstName = \u540d
+dataSource_users_field_lastName = \u59d3
+dataSource_users_field_emailAddress = Email\u5730\u5740
+dataSource_users_field_phoneNumber = \u7535\u8bdd\u53f7\u7801
+dataSource_users_field_department = \u90e8\u95e8
+dataSource_users_field_factive = \u5141\u8bb8\u767b\u5f55?
+dataSource_users_delete = \u5220\u9664\u7528\u6237[{0}]
+dataSource_users_deleteFailed = \u5220\u9664\u7528\u6237[{0}]\u5931\u8d25
+dataSource_users_passwordsDoNotMatch = \u5bc6\u7801\u4e0d\u5339\u914d.
+dataSource_users_invalidEmailAddress = \u90ae\u7bb1\u5730\u5740\u65e0\u6548.
+
+# Roles
+#------
+datasource_roles_field_resourceGroups = \u8d44\u6e90\u7ec4
+datasource_roles_field_permissions = \u6743\u9650
+datasource_roles_field_subjects = Subjects
+datasource_roles_field_ldapGroups = LDAP\u7ec4
+
+# Platforms
+#-----------
+dataSource_platforms_field_cpu = CPU
+dataSource_platforms_field_memory = \u5185\u5b58
+dataSource_platforms_field_swap = \u4ea4\u6362\u533a
+
+# Traits
+#------
+dataSource_traits_failFetch = Failed to fetch traits for criteria [{0}].
+dataSource_traits_field_primaryKey = \u4e3b\u952e
+dataSource_traits_field_definitionID = Definition ID
+dataSource_traits_field_lastChanged = \u6700\u8fd1\u66f4\u6539
+dataSource_traits_field_trait = Trait
+dataSource_traits_group_field_groupId = \u7ec4ID
+
+# Measurement OOBs
+#---------------------------------
+dataSource_measurementOob_field_scheduleName = \u6307\u6807
+dataSource_measurementOob_field_resourceName = \u8d44\u6e90
+dataSource_measurementOob_field_parentName = \u7236
+dataSource_measurementOob_field_formattedBaseband = Band
+dataSource_measurementOob_field_formattedOutlier = Outlier
+dataSource_measurementOob_field_factor = Out of Range Factor (%)
+dataSource_measurementOob_error_fetchFailure = Failed to load measurement OOB
information
+
+# Measurements
+#----------------------
+dataSource_definitions_loadFailed = \u65e0\u6cd5\u52a0\u8f7d\u6307\u6807\u5b9a\u4e49
+dataSource_schedules_loadFailed = Failed to load metric schedules
+dataSource_schedules_loadFailedCriteria = Failed to load metric schedules for criteria
[{0}]
+dataSource_schedules_loadFailedContext = Failed to load metric schedules for context
[{0}]
+dataSource_schedules_field_resourceGroupId = \u7ec4ID
+
+dataSource_schedules_enableFailure_resource = Failed to enable the collection of [{0}]
metrics for resource with ID [{1}]. The metrics were: [{2}]
+dataSource_schedules_enableFailure_group = Failed to enable the collection of [{0}]
metrics for group with ID [{1}]. The metrics were: [{2}]
+
+dataSource_schedules_enableSuccessful_concise = You have enabled the collection of [{0}]
measurements
+dataSource_schedules_enableSuccessful_full_resource = You have enabled the collection of
[{0}] measurements for the resource with ID [{1}]. The enabled measurements are: [{2}]
+dataSource_schedules_enableSuccessful_full_group = You have enabled the collection of
[{0}] measurements for the resource group with ID [{1}]. The enabled measurements are:
[{2}]
+
+dataSource_schedules_disableFailure_resource = Failed to disable the collection of [{0}]
metrics for resource with ID [{1}]. The metrics were: [{2}]
+dataSource_schedules_disableFailure_group = Failed to disable the collection of [{0}]
metrics for resource group with ID [{1}]. The metrics were: [{2}]
+
+dataSource_schedules_disableSuccessful_concise = You have disabled the collection of
[{0}] measurements
+dataSource_schedules_disableSuccessful_full_resource = You have disabled the collection
of [{0}] measurements for the resource with ID [{1}]. The disabled measurements are:
[{2}]
+dataSource_schedules_disableSuccessful_full_group = You have disabled the collection of
[{0}] measurements for the resource group with ID [{1}]. The disabled measurements are:
[{2}]
+
+dataSource_schedules_updateFailure_resource = Failed to set the collection interval of
[{0}] metrics for resource with ID [{1}]. The metrics were: [{2}]. The collection interval
was to be [{3}] seconds.
+dataSource_schedules_updateFailure_group = Failed to set the collection interval of [{0}]
metrics for resource group with ID [{1}]. The metrics were: [{2}]. The collection interval
was to be [{3}] seconds.
+
+dataSource_schedules_updateSuccessful_concise = A new collection interval of [{0}]
seconds has been set on [{1}] measurements
+dataSource_schedules_updateSuccessful_full_resource = A new collection interval of [{0}]
seconds has been set on [{1}] measurements for resource with ID [{2}]. The updated
measurements are: [{3}]
+dataSource_schedules_updateSuccessful_full_group = A new collection interval of [{0}]
seconds has been set on [{1}] measurements for resource group with ID [{2}]. The updated
measurements are: [{3}]
+
+# Resources
+#-----------------------
+dataSource_resources_field_location = \u4f4d\u7f6e
+dataSource_resources_field_key = Key
+dataSource_resources_field_discoveryTime = \u53d1\u73b0\u65f6\u95f4
+dataSource_resources_field_importTime = \u5bfc\u5165\u65f6\u95f4
+dataSource_resources_field_lastModifiedTime = \u6700\u8fd1\u66f4\u6539\u65f6\u95f4
+dataSource_resources_field_lastModifier = \u6700\u8fd1\u4fee\u6539\u8005
+
+# Resource Groups
+#-----------------------
+dataSource_resourceGroups_loadFailed = \u52a0\u8f7d\u8d44\u6e90\u7ec4\u5931\u8d25
+
+# Problem Resources
+#------------------------------
+dataSource_problemResources_field_alerts = \u544a\u8b66
+dataSource_problemResources_field_available = \u5f53\u524d\u53ef\u7528\u6027
+dataSource_problemResources_error_fetchFailure =
\u52a0\u8f7d\u544a\u8b66/\u4e0d\u53ef\u7528\u8d44\u6e90\u5931\u8d25.
+
+# Recent Operations
+#----------------------------
+dataSource_recentOperations_field_resource = \u8d44\u6e90
+dataSource_recentOperations_field_location = \u4f4d\u7f6e
+dataSource_recentOperations_field_operation = \u64cd\u4f5c
+dataSource_recentOperations_field_time = \u65e5\u671f/\u65f6\u95f4
+dataSource_recentOperations_field_status = \u72b6\u6001
+dataSource_recentOperations_error_fetchFailure =
\u52a0\u8f7d\u6700\u8fd1\u64cd\u4f5c\u5931\u8d25.
+
+# Scheduled Operations (ResourceOperationScheduleComposites)
+#------------------------------------------------------------
+dataSource_scheduledOperations_field_resource = \u8d44\u6e90
+dataSource_scheduledOperations_field_location = \u4f4d\u7f6e
+dataSource_scheduledOperations_field_operation = \u64cd\u4f5c
+dataSource_scheduledOperations_field_time = \u65e5\u671f/\u65f6\u95f4
+dataSource_scheduledOperations_error_fetchFailure =
\u65e0\u6cd5\u8f7d\u5165\u8ba1\u5212\u64cd\u4f5c.
+
+# Operation Schedules
+#--------------------
+dataSource_operationSchedule_field_id = \u8ba1\u5212\u4efb\u52a1ID
+dataSource_operationSchedule_field_operationName = \u64cd\u4f5c
+dataSource_operationSchedule_field_operationDisplayName = \u64cd\u4f5c
+dataSource_operationSchedule_field_subject = \u6240\u6709\u8005
+dataSource_operationSchedule_field_description = \u6ce8\u610f
+dataSource_operationSchedule_field_nextFireTime = \u4e0b\u6b21\u89e6\u53d1\u65f6\u95f4
+dataSource_operationSchedule_field_timeout = \u8d85\u65f6(\u79d2)
+
+# Operation Histories
+#--------------------
+dataSource_operationHistory_field_operationName = \u64cd\u4f5c\u540d
+dataSource_operationHistory_field_createdTime = \u521b\u5efa\u65f6\u95f4
+dataSource_operationHistory_field_startedTime = \u5f00\u59cb\u65f6\u95f4
+dataSource_operationHistory_field_subject = Requester
+dataSource_operationHistory_error_fetchFailure =
\u52a0\u8f7d\u5386\u53f2\u64cd\u4f5c\u5931\u8d25.
+
+# Configuration History
+#-------------------------------
+dataSource_configurationHistory_dateSubmitted = \u63d0\u4ea4\u65e5\u671f
+dataSource_configurationHistory_dateCompleted = \u5b8c\u6210\u65e5\u671f
+dataSource_configurationHistory_updateType = \u66f4\u65b0\u7c7b\u578b
+dataSource_configurationHistory_updateType_individual = Individual
+dataSource_configurationHistory_updateType_group = \u7ec4
+dataSource_configurationHistory_currentConfig = \u8fd9\u662f\u5f53\u524d\u914d\u7f6e
+dataSource_configurationHistory_clickToSeeError =
\u53cc\u51fb\u67e5\u770b\u9519\u8bef...
+dataSource_configurationHistory_error_fetchFailure =
\u65e0\u6cd5\u52a0\u8f7d\u5386\u53f2\u914d\u7f6e.
+
+# Resource Errors
+#-------------------------
+dataSource_resourceErrors_field_summary = \u7edf\u8ba1
+dataSource_resourceErrors_field_errorType = \u9519\u8bef\u7c7b\u578b
+dataSource_resourceErrors_field_timeOccured = \u65f6\u95f4
+dataSource_resourceErrors_error_fetchFailure = Failed to find Resource errors for
Resource with id [{0}].
+dataSource_resourceErrors_clickStatusIcon =
\u70b9\u51fb\u56fe\u6807\u67e5\u770b\u8be6\u60c5
+dataSource_resourceErrors_deleteSuccess = You have successfully deleted [{0}] resource
error messages.
+dataSource_resourceErrors_deleteFailure =
\u5220\u9664\u8d44\u6e90\u9519\u8bef\u5931\u8d25
+
+# Template Schedules
+#-------------------------
+datasource_templateSchedules_disabled = Disabled collection of selected metric [{0}].
+datasource_templateSchedules_disabled_detailed = Disabled collection of metric [{0}]
[{1}] by default for ResourceType with id [{2}].
+datasource_templateSchedules_disabled_failed = Failed to disable collection of metric
[{0}] [{1}] by default for ResourceType with id [{2}].
+datasource_templateSchedules_enabled = Enabled collection of selected metric [{0}].
+datasource_templateSchedules_enabled_detailed = Enabled collection of metric [{0}] [{1}]
by default for ResourceType with id [{2}].
+datasource_templateSchedules_enabled_failed = Failed to enable collection of metric [{0}]
[{1}] by default for ResourceType with id [{2}].
+datasource_templateSchedules_updated = Updated collection intervals of selected metric
[{0}].
+datasource_templateSchedules_updated_detail = Collection interval for metric [{0}] [{1}]
by default for ResourceType with id [{2}] set to [{3}] seconds.
+datasource_templateSchedules_updated_failed = Failed to set collection interval to [{0}]
seconds for metric [{1}] [{2}] by default for ResourceType with id [{3}].
+
+
+#********************************** VIEW-SPECIFIC *************************************
+
+#================= Administration ==================
+
+view_admin_administration = \u7ba1\u7406
+view_admin_landing =
\u8fd9\u91cc\u4f60\u53ef\u4ee5\u7ba1\u7406RHQ\u5168\u5c40\u914d\u7f6e.\u5305\u62ec\u914d\u7f6e\u5b89\u5168,\u5b89\u88c5\u63d2\u4ef6,\u7ba1\u7406RHQ\u670d\u52a1\u5668\u548c\u4ee3\u7406.
+view_admin_configuration = \u914d\u7f6e
+view_admin_security = \u5b89\u5168
+view_admin_topology = \u62d3\u6251
+view_admin_content = Content
+
+view_adminSecurity_users = \u7528\u6237
+view_adminSecurity_roles = \u89d2\u8272
+
+view_adminTopology_affinityGroups = \u76f8\u5173\u7ec4
+view_adminTopology_agents = \u4ee3\u7406
+view_adminTopology_partitionEvents = Partition\u4e8b\u4ef6
+view_adminTopology_remoteAgentInstall = \u8fdc\u7a0b\u4ee3\u7406\u5b89\u88c5
+view_adminTopology_servers = \u670d\u52a1\u5668
+
+view_adminConfig_downloads = \u4e0b\u8f7d
+view_adminConfig_plugins = \u63d2\u4ef6
+view_adminConfig_systemSettings = \u7cfb\u7edf\u8bbe\u7f6e
+view_adminConfig_templates = \u6a21\u677f
+
+view_adminContent_contentSources = Content\u6e90
+view_adminContent_repositories = \u5e93
+
+# Administration/Templates
+#--------------------------------
+
+view_adminTemplates_platforms = \u5e73\u53f0
+view_adminTemplates_platformServices = \u5e73\u53f0\u670d\u52a1
+view_adminTemplates_servers = \u670d\u52a1\u5668
+view_adminTemplates_enabledAlertTemplates = \u542f\u7528\u544a\u8b66\u6a21\u677f
+view_adminTemplates_disabledAlertTemplates = \u7981\u7528\u544a\u8b66\u6a21\u677f
+view_adminTemplates_enabledMetricTemplates = \u542f\u7528\u6307\u6807\u6a21\u677f
+view_adminTemplates_disabledMetricTemplates = \u7981\u7528\u6307\u6807\u6a21\u677f
+view_adminTemplates_editAlertTemplate = \u7f16\u8f91\u544a\u8b66\u6a21\u677f
+view_adminTemplates_editMetricTemplate = \u7f16\u8f91\u6307\u6807\u6a21\u677f
+view_adminTemplates_prompt_enabledAlertTemplates =
\u8fd9\u79cd\u8d44\u6e90\u7c7b\u578b\u542f\u7528\u7684\u544a\u8b66\u6a21\u677f\u6570
+view_adminTemplates_prompt_disabledAlertTemplates =
\u8fd9\u79cd\u8d44\u6e90\u7c7b\u578b\u521b\u5efa\u800c\u7981\u7528\u7684\u544a\u8b66\u6a21\u677f\u6570
+view_adminTemplates_prompt_enabledMetricTemplates = Number of metric schedules that are
enabled by default on this resource type
+view_adminTemplates_prompt_disabledMetricTemplates = Number of metric schedules that are
disabled by default on this resource type
+
+# Administration/Security/Users
+#--------------------------------
+view_adminUsersList_dataTypeName = user
+view_adminUsersList_dataTypeNamePlural = users
+
+# Administration/Security/Users/#
+#--------------------------------
+view_adminUsersDetails_dataTypeName = user
+
+# Administration/Security/Roles/#
+#--------------------------------
+view_adminRoles_assignedGroups = \u5206\u914d\u7684\u8d44\u6e90\u7ec4
+view_adminRoles_assignedSubjects = \u5206\u914d\u7684\u4e3b\u9898
+view_adminRoles_failLdap = \u65e0\u6cd5\u786e\u5b9aLDAP - \u5047\u5b9a\u6ca1\u6709LDAP.
+view_adminRoles_failLdapGroups = \u67e5\u8be2\u6709\u6548LDAP\u7ec4\u5931\u8d25 -
\u5047\u5b9a\u65e0DAP\u7ec4.
+view_adminRoles_failLdapGroupsRole = \u52a0\u8f7dLDAP\u7ec4\u89d2\u8272\u5931\u8d25.
+view_adminRoles_failRoles = \u53d6\u5f97\u89d2\u8272\u5931\u8d25.
+view_adminRoles_globalPerms = \u5168\u5c40\u6388\u6743
+view_adminRoles_ldapGroups = LDAP\u7ec4
+view_adminRoles_ldapGroupsReadOnly = LDAP\u7ec4\u6570\u636e\u4e3a\u53ea\u8bfb
+view_adminRoles_noItems = \u6ca1\u6709\u6761\u76ee\u663e\u793a
+view_adminRoles_noLdap = \u6ca1\u6709\u96c6\u6210LDAP\u5b89\u5168, \u5230<a
{0}>{1}</a>.
+view_adminRoles_perms = \u6743\u9650
+view_adminRoles_resourcePerms = \u8d44\u6e90\u6388\u6743
+view_adminRoles_roleAdded = \u89d2\u8272[{0}]\u6dfb\u52a0.
+view_adminRoles_roleDeleteFailed = \u5220\u9664\u89d2\u8272[{0}]\u5931\u8d25.
+view_adminRoles_roleDeleted = \u89d2\u8272[{0}]\u5220\u9664.
+view_adminRoles_roleUpdateFailed = \u4fee\u6539\u89d2\u8272[{0}]\u5931\u8d25.
+view_adminRoles_roleUpdated = \u89d2\u8272[{0}]\u66f4\u65b0\u4e86.
+view_adminRoles_permissions_globalPermissions = \u5168\u5c40\u6388\u6743
+view_adminRoles_permissions_resourcePermissions = \u8d44\u6e90\u6388\u6743
+view_adminRoles_permissions_readAccessImplied =
\u9ed8\u8ba4\u6709\u8bbf\u95ee{0}\u7684\u6743\u9650\u800c\u4e14\u65e0\u6cd5\u7981\u7528.
+view_adminRoles_permissions_isAuthorized = \u6388\u6743?
+view_adminRoles_permissions_isRead = \u8bfb?
+view_adminRoles_permissions_isWrite = \u5199?
+view_adminRoles_permissions_read = \u8bfb:
+view_adminRoles_permissions_write = \u5199:
+view_adminRoles_permissions_perm_manageSecurity = \u7ba1\u7406\u6743\u9650
+view_adminRoles_permissions_permDesc_manageSecurity =
\u80fd\u521b\u5efa,\u66f4\u65b0,\u6216\u5220\u9664\u7528\u6237\u548c\u89d2\u8272
(\u4efb\u4f55\u4eba\u90fd\u6709\u67e5\u770b\u6743\u9650)
+view_adminRoles_permissions_perm_manageInventory = \u7ba1\u7406\u6e05\u5355
+view_adminRoles_permissions_permDesc_manageInventory =
\u62e5\u6709\u6240\u6709\u8d44\u6e90\u6743\u9650, \u5982\u4e0b\u6240\u8ff0,
\u5bf9\u6240\u6709\u8d44\u6e90; \u5177\u6709\u521b\u5efa, \u66f4\u65b0,
\u5220\u9664\u7ec4;
\u80fd\u5bfc\u5165\u81ea\u52a8\u53d1\u73b0\u6216\u624b\u52a8\u53d1\u73b0\u7684\u8d44\u6e90
+view_adminRoles_permissions_perm_manageSettings = \u7ba1\u7406\u914d\u7f6e
+view_adminRoles_permissions_permDesc_manageSettings =
\u80fd\u4fee\u6539RHQ\u670d\u52a1\u5668\u914d\u7f6e\u800c\u4e14\u80fd\u64cd\u4f5c\u4efb\u4f55\u76f8\u5173\u7684\u670d\u52a1\u5668\u529f\u80fd
+view_adminRoles_permissions_perm_manageBundles = \u7ba1\u7406\u63d2\u4ef6
+view_adminRoles_permissions_permDesc_manageBundles =
\u80fd\u521b\u5efa,\u66f4\u65b0\u6216\u8005\u5220\u9664\u63d0\u4f9b\u7684\u63d2\u4ef6(\u4efb\u4f55\u4eba\u90fd\u80fd\u67e5\u770b)
+view_adminRoles_permissions_perm_manageRepositories = \u7ba1\u7406\u5e93
+view_adminRoles_permissions_permDesc_manageRepositories = can create, update, or delete
repositories of any user (everyone can create their own repositories), can associate
content sources to repositories.
+view_adminRoles_permissions_perm_inventory = \u6e05\u5355
+view_adminRoles_permissions_permReadDesc_inventory = (IMPLIED) view Resource properties
(name, description, version, etc.), connection settings, and connection settings history
+view_adminRoles_permissions_permWriteDesc_inventory = update Resource name, version,
description, and connection settings; delete connection settings history items
+view_adminRoles_permissions_perm_manageMeasurements = \u7ba1\u7406\u6307\u6807
+view_adminRoles_permissions_permReadDesc_manageMeasurements = (IMPLIED) view metric data
and collection schedules
+view_adminRoles_permissions_permWriteDesc_manageMeasurements = update metric collection
schedules
+view_adminRoles_permissions_perm_manageAlerts = \u7ba1\u7406\u544a\u8b66
+view_adminRoles_permissions_permReadDesc_manageAlerts = (IMPLIED) view alert definitions
and alert history
+view_adminRoles_permissions_permWriteDesc_manageAlerts = create, update, and delete alert
definitions; acknowledge and delete alert history items
+view_adminRoles_permissions_perm_configure = Configure
+view_adminRoles_permissions_permReadDesc_configure = view Resource configuration and
Resource configuration revision history
+view_adminRoles_permissions_permWriteDesc_configure = update Resource configuration;
delete Resource configuration revision history items
+view_adminRoles_permissions_perm_control = Control
+view_adminRoles_permissions_permReadDesc_control = (IMPLIED) view available operations
and operation execution history
+view_adminRoles_permissions_permWriteDesc_control = execute operations; delete operation
execution history items
+view_adminRoles_permissions_perm_manageEvents = \u7ba1\u7406\u4e8b\u4ef6
+view_adminRoles_permissions_permReadDesc_manageEvents =
(IMPLIED)\u67e5\u770b\u4e8b\u4ef6
+view_adminRoles_permissions_permWriteDesc_manageEvents = \u5220\u9664\u4e8b\u4ef6
+view_adminRoles_permissions_perm_manageContent = \u7ba1\u7406Content
+view_adminRoles_permissions_permReadDesc_manageContent = (IMPLIED) view installed and
available packages; view package installation history
+view_adminRoles_permissions_permWriteDesc_manageContent = subscribe to content sources;
install and uninstall packages
+view_adminRoles_permissions_perm_createChildResources = \u521b\u5efa\u5b50\u8d44\u6e90
+view_adminRoles_permissions_permReadDesc_createChildResources = (IMPLIED) view child
Resource creation history
+view_adminRoles_permissions_permWriteDesc_createChildResources = create new child
Resources (for child Resources of types that are creatable)
+view_adminRoles_permissions_perm_deleteChildResources = \u5220\u9664\u5b50\u8d44\u6e90
+view_adminRoles_permissions_permReadDesc_deleteChildResources = (IMPLIED) view child
Resource deletion history
+view_adminRoles_permissions_permWriteDesc_deleteChildResources = uninventory resources;
delete Resources (for Resources of types that are deletable)
+view_adminRoles_permissions_autoselecting_manageSecurity_implied = Autoselected
unselected permissions, since MANAGE_SECURITY implies all other permissions...
+view_adminRoles_permissions_autoselecting_manageInventory_implied = Autoselected
unselected Resource permissions, since MANAGE_INVENTORY implies all Resource
permissions...
+view_adminRoles_permissions_autoselecting_configureWrite_implied = Autoselected
CONFIGURE_READ permission, since CONFIGURE_WRITE implies it...
+view_adminRoles_permissions_autoselecting_configureRead_implied = Autodeselected
CONFIGURE_WRITE permission, since lack of CONFIGURE_READ implies lack of it...
+view_adminRoles_permissions_illegalDeselectionDueToManageSecuritySelection = {0}
permission cannot be deselected, unless the Manage Security permission, which implies all
other permissions, is deselected first.
+view_adminRoles_permissions_illegalDeselectionDueToManageInventorySelection = {0}
permission cannot be deselected, unless Manage Inventory, which implies all Resource
permissions, is deselected first.
+view_adminRoles_permissions_illegalDeselectionDueToCorrespondingWritePermSelection = {0}
read permission cannot be deselected, unless the {0} write permission, which implies the
read permission, is deselected first.
+
+# Administration/Topology/RemoteAgentInstall/#
+#--------------------------------
+view_remoteAgentInstall_agentStatus = \u4ee3\u7406\u72b6\u6001
+view_remoteAgentInstall_agentStatusDefault =
-\u5355\u51fb\u66f4\u65b0\u72b6\u6001\u6309\u94ae-
+view_remoteAgentInstall_connInfo = \u8fde\u63a5\u4fe1\u606f
+view_remoteAgentInstall_buttonFindAgent = \u67e5\u627e\u4ee3\u7406
+view_remoteAgentInstall_error_1 = Error occurred while trying to find agent install path
+view_remoteAgentInstall_error_2 = Could not find an agent installed when looking in
common locations
+view_remoteAgentInstall_error_3 = Could not find an agent installed at or under [{0}]
+view_remoteAgentInstall_error_4 = \u5b89\u88c5\u4ee3\u7406\u5931\u8d25
+view_remoteAgentInstall_error_5 = \u542f\u52a8\u4ee3\u7406\u5931\u8d25
+view_remoteAgentInstall_error_6 = \u505c\u6b62\u4ee3\u7406\u5931\u8d25
+
+view_remoteAgentInstall_installAgent = \u5b89\u88c5\u4ee3\u7406
+view_remoteAgentInstall_installInfo = \u4ee3\u7406\u5b89\u88c5\u4fe1\u606f
+view_remoteAgentInstall_installPath = \u4ee3\u7406\u5b89\u88c5\u8def\u5f84
+view_remoteAgentInstall_owner = \u6240\u6709\u8005
+view_remoteAgentInstall_promptInstallPath = Where the agent is or will be installed. If
you aren''t sure where an agent is installed, enter a parent directory and click
the ''Find Agent'' button to scan that directory and below. If you enter
an empty path, common locations are searched on the host for an agent install.
+view_remoteAgentInstall_promptHost = The host where the agent is or will be installed
+view_remoteAgentInstall_promptPassword =The credentials that are used to authenticate the
user on the host via SSH
+view_remoteAgentInstall_promptPort = The port the SSH server is listening to. If not
specified, the default is 22
+view_remoteAgentInstall_promptUser = The name of the user whose credentials are passed to
the host via SSH
+view_remoteAgentInstall_result = Result
+view_remoteAgentInstall_resultCode = ResultCode
+view_remoteAgentInstall_startAgent = \u542f\u52a8\u4ee3\u7406
+view_remoteAgentInstall_startAgentResults = \u4ee3\u7406\u542f\u52a8\u7ed3\u679c: [{0}]
+view_remoteAgentInstall_step = Step
+view_remoteAgentInstall_stopAgent = \u505c\u6b62\u4ee3\u7406
+view_remoteAgentInstall_stopAgentResults = \u4ee3\u7406\u505c\u6b62\u7ed3\u679c: [{0}]
+view_remoteAgentInstall_success = \u4ee3\u7406\u5b89\u88c5\u5b8c\u6210
+view_remoteAgentInstall_updateStatus = \u66f4\u65b0\u72b6\u6001
+
+# Administration/SystemSettings
+#------------------------------
+view_admin_systemSettings_cannotLoadSettings =
\u65e0\u6cd5\u83b7\u5f97\u5f53\u524d\u7cfb\u7edf\u914d\u7f6e
+view_admin_systemSettings_savedSettings =
\u4fdd\u5b58\u7cfb\u7edf\u5c5e\u6027\u6210\u529f
+view_admin_systemSettings_saveFailure = \u4fdd\u5b58\u7cfb\u7edf\u5c5e\u6027\u5931\u8d25
+view_admin_systemSettings_fixBeforeSaving =
\u4fdd\u5b58\u524d\u8bf7\u4fee\u590d\u9519\u8bef
+view_admin_systemSettings_group_general = \u57fa\u672c\u914d\u7f6e\u5c5e\u6027
+view_admin_systemSettings_group_dataMgr =
\u6570\u636e\u7ba1\u7406\u5668\u57fa\u672c\u5c5e\u6027
+view_admin_systemSettings_group_baseline = Automatic Baseline Configuration Properties
+view_admin_systemSettings_group_ldap = LDAP\u914d\u7f6e\u5c5e\u6027
+view_admin_systemSettings_cannotLoadServerDetails = Cannot load server details
+view_admin_systemSettings_serverDetails = \u670d\u52a1\u5668\u8be6\u60c5
+view_admin_systemSettings_serverDetails_buildNumber = Build Number
+view_admin_systemSettings_serverDetails_tz = \u670d\u52a1\u5668\u65f6\u533a
+view_admin_systemSettings_serverDetails_time =
\u670d\u52a1\u5668\u672c\u5730\u65f6\u95f4
+view_admin_systemSettings_serverDetails_installDir =
\u670d\u52a1\u5668\u5b89\u88c5\u76ee\u5f55
+view_admin_systemSettings_serverDetails_dbUrl = \u6570\u636e\u5e93\u8fde\u63a5URL
+view_admin_systemSettings_serverDetails_dbName = \u6570\u636e\u5e93\u4ea7\u54c1\u540d
+view_admin_systemSettings_serverDetails_dbVersion =
\u6570\u636e\u5e93\u7248\u672c\u4fe1\u606f
+view_admin_systemSettings_serverDetails_dbDriverName =
\u6570\u636e\u5e93\u9a71\u52a8\u540d
+view_admin_systemSettings_serverDetails_dbDriverVersion =
\u6570\u636e\u5e93\u9a71\u52a8\u7248\u672c
+view_admin_systemSettings_serverDetails_currentTable = Current Measurement Raw Table
+view_admin_systemSettings_serverDetails_nextRotation = Next Measurement Table Rotation
+view_admin_systemSettings_BaseURL_name = GUI Console URL
+view_admin_systemSettings_BaseURL_desc = A URL to the server GUI, used mainly within
alert email notifications.
+view_admin_systemSettings_AgentMaxQuietTimeAllowed_name = Agent Max Quiet Time Allowed
+view_admin_systemSettings_AgentMaxQuietTimeAllowed_desc = If this amount of time passes
without hearing from an agent, that quiet agent will be considered down. This value is
specified in minutes.
+view_admin_systemSettings_EnableAgentAutoUpdate_name =
\u542f\u7528\u4ee3\u7406\u81ea\u52a8\u5347\u7ea7
+view_admin_systemSettings_EnableAgentAutoUpdate_desc = Determines if the server will
allow agents to auto-update themselves. You will not be able to download agent
distributions from the server if this is disabled.
+view_admin_systemSettings_EnableDebugMode_name = \u542f\u7528Debug\u6a21\u5f0f
+view_admin_systemSettings_EnableDebugMode_desc =
\u5982\u679c\u542f\u7528,\u670d\u52a1\u5668\u5c06\u8fdb\u5165debug\u6a21\u5f0f.
+view_admin_systemSettings_EnableExperimentalFeatures_name = Enable Experimental Features
+view_admin_systemSettings_EnableExperimentalFeatures_desc = If enabled, any experimental
features that exist in the current product will be available.
+view_admin_systemSettings_DataMaintenance_name = Database Maintenance Period
+view_admin_systemSettings_DataMaintenance_desc = How often database maintenance is
performed (for example, vacuuming if using Postgres). This is specified in hours.
+view_admin_systemSettings_AvailabilityPurge_name = Delete Availability Data Older Than
+view_admin_systemSettings_AvailabilityPurge_desc = How old availability data must be
before being purged from the database. This is specified in days.
+view_admin_systemSettings_AlertPurge_name = Delete Alerts Older Than
+view_admin_systemSettings_AlertPurge_desc = How old alert history items must be before
being purged from the database. This is specified in days.
+view_admin_systemSettings_TraitPurge_name = Delete Measurement Traits Older Than
+view_admin_systemSettings_TraitPurge_desc = How old measurement trait data must be before
being purged from the database. This is specified in days.
+view_admin_systemSettings_RtDataPurge_name = Delete Response Time Data Older Than
+view_admin_systemSettings_RtDataPurge_desc = How old response time data must be before
being purged from the database. This is specified in days.
+view_admin_systemSettings_EventPurge_name = Delete Events Older Than
+view_admin_systemSettings_EventPurge_desc = How old event data must be before being
purged from the database. This is specified in days.
+view_admin_systemSettings_DataReindex_name = Reindex Data Tables Nightly
+view_admin_systemSettings_DataReindex_desc = If enabled, certain database tables will be
re-indexed periodically.
+view_admin_systemSettings_BaselineFrequency_name = Baseline Calculation Frequency
+view_admin_systemSettings_BaselineFrequency_desc = The frequency which the
auto-calculation of baselines will be performed. If 0, baseline auto-calculation is
disabled. This is specified in days.
+view_admin_systemSettings_BaselineDataSet_name = Baseline Dataset
+view_admin_systemSettings_BaselineDataSet_desc = The amount of past measurement data that
is used to determine a baseline. This is specified in days.
+view_admin_systemSettings_JAASProvider_name = \u542f\u7528LDAP
+view_admin_systemSettings_JAASProvider_desc = Should LDAP be used to determine user
identity?
+view_admin_systemSettings_LDAPUrl_name = LDAP URL
+view_admin_systemSettings_LDAPUrl_desc = URL to the LDAP Server
+view_admin_systemSettings_LDAPProtocol_name = SSL
+view_admin_systemSettings_LDAPProtocol_desc = Should communication with the LDAP server
be done over SSL?
+view_admin_systemSettings_LDAPLoginProperty_name = Login Property
+view_admin_systemSettings_LDAPLoginProperty_desc = The LDAP property that contains the
user name. Defaults to "cn". If multiple matches are found, the first entry
found is used.
+view_admin_systemSettings_LDAPFilter_name = Search Filter
+view_admin_systemSettings_LDAPFilter_desc = Any additional filters to apply when doing
the LDAP search. This is useful if the population to authenticate can be identified via a
given LDAP property, e.g. RHQUser=true
+view_admin_systemSettings_LDAPGroupFilter_name = Group Search Filter
+view_admin_systemSettings_LDAPGroupFilter_desc = LDAP search filter that must return all
LDAP groups available for authorization. This is used for LDAP group authorization.
+view_admin_systemSettings_LDAPGroupMember_name = Group Member Filter
+view_admin_systemSettings_LDAPGroupMember_desc = LDAP search filter that is used in
conjunction with the group search filter to determine user authorization. This is used for
LDAP group authorization.
+view_admin_systemSettings_LDAPBaseDN_name = Search Base
+view_admin_systemSettings_LDAPBaseDN_desc = The base of the directory tree to search for
usernames and passwords while authenticating users, e.g. ou=People,dc=redhat,dc=com
+view_admin_systemSettings_LDAPBindDN_name = \u7528\u6237\u540d
+view_admin_systemSettings_LDAPBindDN_desc = The username to connect to the LDAP server
when querying the LDAP user database. This is typically the full LDAP distinguished name
(DN) of a manager user, e.g. cn=Manager,dc=redhat,dc=com
+view_admin_systemSettings_LDAPBindPW_name = \u5bc6\u7801
+view_admin_systemSettings_LDAPBindPW_desc = The credentials of the user used to connect
to the LDAP server when querying the LDAP user database.
+
+# Administration/Downloads
+#------------------------------
+view_admin_downloads_agentDownload = \u4ee3\u7406\u4e0b\u8f7d
+view_admin_downloads_cliDownload = \u547d\u4ee4\u884c\u5ba2\u6237\u7aef\u4e0b\u8f7d
+view_admin_downloads_bundleDownload = Bundle Deployer Download
+view_admin_downloads_connectorsDownload = Connectors Download
+
+view_admin_downloads_agent_loadError =
\u65e0\u6cd5\u83b7\u5f97\u4ee3\u7406\u7248\u672c\u4fe1\u606f
+view_admin_downloads_agent_version = \u4ee3\u7406\u7248\u672c
+view_admin_downloads_agent_buildNumber = \u4ee3\u7406Build
+view_admin_downloads_agent_md5 = \u4ee3\u7406MD5
+view_admin_downloads_agent_link_label = Link
+view_admin_downloads_agent_link_value = \u4e0b\u8f7d\u4ee3\u7406 {0} ({1})
+view_admin_downloads_agent_help = <p> \
+ \u8fd9\u662fRHQ Agent\u66f4\u65b0\u7684\u4e8c\u8fdb\u5236jar\u6587\u4ef6. The
purpose of this \
+ jar file is to allow you to install a fresh agent on a machine \
+ where an agent does not yet exist and to allow you to update \
+ an agent that is already installed on a machine. \
+ For more details, run this agent download jar with the --help command line
option:<br/> \
+ <b>java -jar <agent-download.jar> --help</b> \
+ </p> \
+ <h3>\u4ee3\u7406\u5b89\u88c5</h3> \
+ <p> \
+ <b>java -jar <agent-download.jar> --install[=<new agent
directory>]</b><br/> \
+ This command will install a new agent. If you do not specify the new agent
directory, the default will be "." \
+ </p> \
+ <h3>\u4ee3\u7406\u66f4\u65b0</h3> \
+ <p> \
+ <b>java -jar <agent-download.jar> --update[=<old agent
home>]</b><br/> \
+ This will update an existing agent that was already installed. \
+ If you do not specify the directory where the old, existing agent was installed, it
will assumed to be "rhq-agent". \
+ </p>
+
+view_admin_downloads_cli_loadError = \u65e0\u6cd5\u83b7\u5f97CLI\u7248\u672c\u4fe1\u606f
+view_admin_downloads_cli_version = CLI\u7248\u672c
+view_admin_downloads_cli_buildNumber = CLI Build
+view_admin_downloads_cli_md5 = CLI MD5
+view_admin_downloads_cli_link_label = Link
+view_admin_downloads_cli_link_value = \u4e0b\u8f7dCLI {0} ({1})
+view_admin_downloads_cli_help = <p> \
+ This is the Command Line Client tool, otherwise known as the CLI. \
+ It is a standalone tool that runs from within a console and provides a \
+ command line interface to the RHQ Server. You can invoke commands via the CLI \
+ as well as run scripts to perform automated tasks. See the documentation for \
+ more information on how to install and use the CLI. \
+ </p>
+
+view_admin_downloads_bundle_loadError = Cannot get bundle deployer info
+view_admin_downloads_bundle_link_label = Link
+view_admin_downloads_bundle_link_value = Download Bundle Deployer {0}
+view_admin_downloads_bundle_help = <p> \
+ This is the Bundle Deployer tool. It is for use by developers and packagers of RHQ
bundles. \
+ This standalone tool allows you to test your bundles and their recipes from a console.
\
+ </p>
+
+view_admin_downloads_connectors_loadError = Cannot get connectors info
+view_admin_downloads_connectors_none = No connectors are available for download
+view_admin_downloads_connectors_help = Connectors are software that is needed in order
for some products to be manageable by RHQ. You install connectors into some managed
products so RHQ agents can talk to them. See the documentation for more information.
+
+# Measurement Templates view
+view_admin_measTemplates_title = Template Metric Collection Schedules
+view_admin_measTemplates_updateExisting_title = Update Existing Schedules
+view_admin_measTemplates_updateExisting_tooltip = Check this box to update the collection
schedules for the selected metrics on all existing resources of this type. If this is not
checked, the template schedules will only be applied to new resources of this type that
are added to inventory in the future.
+
+#==================== Alerts ======================
+view_alerts_table_title_group = \u7ec4\u544a\u8b66\u5386\u53f2
+view_alerts_table_title_resource = \u8d44\u6e90\u544a\u8b66\u5386\u53f2
+view_alerts_table_filter_priority = \u4f18\u5148\u7ea7\u8fc7\u6ee4
+view_alerts_field_created_time = \u4ea7\u751f\u65f6\u95f4
+view_alerts_field_modified_time = \u4fee\u6539\u65f6\u95f4
+view_alerts_field_enabled = \u542f\u7528
+view_alerts_field_ack_time = \u786e\u8ba4\u65f6\u95f4
+view_alerts_field_ack_subject = Acknowledge Subject
+view_alerts_field_ack_status = \u72b6\u6001
+view_alerts_field_ack_status_noAck = No Ack
+view_alerts_field_ack_status_noAckHover = \u8fd8\u6ca1\u786e\u8ba4\u7684
+view_alerts_field_ack_status_ack = Ack ({0})
+view_alerts_field_ack_status_ackHover = \u786e\u8ba4\u8005{0}\u4e8e{1}
+view_alerts_field_name = Name
+view_alerts_field_condition_text = Condition Text
+view_alerts_field_condition_text_none = No Conditions
+view_alerts_field_condition_text_many = Multiple Conditions
+view_alerts_field_condition_value = Condition Value
+view_alerts_field_priority = \u4f18\u5148\u7ea7
+view_alerts_field_parent = \u7236
+view_alerts_field_protected = Protected
+view_alerts_field_protected_tooltip = If true, this definition is protected from being
changed by the parent definition. In other words, the parent definition settings will not
override this definition.
+view_alerts_loadFailed = Failed to fetch alerts data
+view_alerts_delete_confirm = Delete the selected alert(s)?
+view_alerts_delete_confirm_all = Delete all alerts from this source?
+view_alerts_delete_success = Successfully deleted {0} alerts
+view_alerts_delete_failure = Failed to delete alerts with id''s: {0}
+view_alerts_delete_failure_all = Failed to delete all alerts from this source
+view_alerts_ack_confirm = Acknowledge the selected alert(s)?
+view_alerts_ack_confirm_all = Acknowledge all alerts from this source?
+view_alerts_ack_success = Successfully acknowledged {0} alerts
+view_alerts_ack_failure = Failed to acknowledge alerts with id''s: {0}
+view_alerts_ack_failure_all = Failed to acknowledge all alerts from this source
+view_alert_details_loadFailed = Failed to fetch alert details
+view_alert_details_field_ack_by = \u786e\u8ba4\u8005
+view_alert_details_field_ack_at = \u786e\u8ba4\u4e8e
+view_alert_details_field_recovery_info = Recovery Info
+view_alert_definition_for_type = \u67e5\u770b\u6a21\u677f
+view_alert_definition_for_group = View Group Definition
+view_alert_definitions_table_title_group = Group Alert Definitions
+view_alert_definitions_table_title_resource = Resource Alert Definitions
+view_alert_definitions_loadFailed = Failed to fetch alert definition data
+view_alert_definitions_loadFailed_single = Failed to fetch data for alert definition with
id {0}
+view_alert_definitions_enable_confirm = Enable the selected alert definition(s)?
+view_alert_definitions_enable_success = Successfully enabled {0} alert definitions
+view_alert_definitions_enable_failure = Failed to enable the selected alert definitions
+view_alert_definitions_disable_confirm = Disable the selected alert definition(s)?
+view_alert_definitions_disable_success = Successfully disabled {0} alert definitions
+view_alert_definitions_disable_failure = Failed to disable the selected alert
definitions
+view_alert_definitions_delete_confirm = Delete the selected alert definition(s)?
+view_alert_definitions_delete_success = Successfully deleted {0} alert definitions
+view_alert_definitions_delete_failure = Failed to deleted the selected alert definitions
+view_alert_definitions_create_success = Alert definition successfully created
+view_alert_definitions_create_failure = Alert definition creation failed
+view_alert_definitions_update_success = Alert definition successfully updated
+view_alert_definitions_update_failure = Alert definition update failed
+view_alert_definition_condition_editor_option_label = Condition Type
+view_alert_definition_condition_editor_option_availability = Availability Change
+view_alert_definition_condition_editor_option_metric_threshold = Measurement Absolute
Value Threshold
+view_alert_definition_condition_editor_option_metric_baseline = Measurement Baseline
Threshold
+view_alert_definition_condition_editor_option_metric_change = Measurement Value Change
+view_alert_definition_condition_editor_option_metric_calltime_threshold = Call Time Value
Threshold
+view_alert_definition_condition_editor_option_metric_calltime_change = Call Time Value
Change
+view_alert_definition_condition_editor_option_metric_trait_change = Trait Value Change
+view_alert_definition_condition_editor_option_operation = Operation Execution
+view_alert_definition_condition_editor_option_resource_configuration = Resource
Configuration Change
+view_alert_definition_condition_editor_option_event = \u4e8b\u4ef6\u68c0\u6d4b
+view_alert_definition_condition_editor_avilability_tooltip = Specify the availability
state change that will trigger the condition.
+view_alert_definition_condition_editor_avilability_value = \u53ef\u7528\u6027
+view_alert_definition_condition_editor_avilability_option_up = Comes up
+view_alert_definition_condition_editor_avilability_option_down = Goes down
+view_alert_definition_condition_editor_metric_common_definition_not_found = Should have
found metric definition - something is wrong
+view_alert_definition_condition_editor_metric_threshold_tooltip = Specify the threshold
value that, when violated, triggers the condition. The value you specify is an absolute
value with an optional units specifier.
+view_alert_definition_condition_editor_metric_threshold_name = \u6307\u6807
+view_alert_definition_condition_editor_metric_threshold_value = \u6307\u6807\u503c
+view_alert_definition_condition_editor_metric_threshold_value_tooltip = The threshold
value of the metric that will trigger the condition when compared using the selected
comparator.
+view_alert_definition_condition_editor_metric_threshold_comparator = Comparator
+view_alert_definition_condition_editor_metric_threshold_comparator_less = \u5c0f\u4e8e
+view_alert_definition_condition_editor_metric_threshold_comparator_equal = \u7b49\u4e8e
+view_alert_definition_condition_editor_metric_threshold_comparator_greater =
\u5927\u4e8e
+view_alert_definition_condition_editor_metric_threshold_comparator_tooltip = How a
collected metric value should be compared to the given threshold value
+view_alert_definition_condition_editor_metric_baseline_tooltip = Specify the baseline
value that must be violated to trigger the condition. The value you specify is a
percentage of the given baseline value.
+view_alert_definition_condition_editor_metric_baseline_percentage = Baseline Percentage
+view_alert_definition_condition_editor_metric_baseline_percentage_tooltip = A collected
metric value will trigger this condition when compared to this percentage of the selected
baseline value using the selected comparator
+view_alert_definition_condition_editor_metric_baseline_value = Baseline
+view_alert_definition_condition_editor_metric_change_tooltip = Specify the metric whose
value must change to trigger the condition.
+view_alert_definition_condition_editor_metric_calltime_threshold_tooltip = Specify the
calltime threshold value that, when violated, triggers the condition. The value you
specify is an absolute value with an optional units specifier. You also must specify which
calltime limit to compare the value with (minimum, maximum or average calltime value).
+view_alert_definition_condition_editor_metric_calltime_common_name = Call Time Metric
+view_alert_definition_condition_editor_metric_calltime_common_limit = Call Time Limit
+view_alert_definition_condition_editor_metric_calltime_common_limit_tooltip = The
calltime limit value that is to be compared with the given value
+view_alert_definition_condition_editor_metric_calltime_common_regex =
\u6b63\u5219\u8868\u8fbe\u5f0f
+view_alert_definition_condition_editor_metric_calltime_common_regex_tooltip = If
specified, this is a regular expression that must match a call destination in order to
trigger the condition.
+view_alert_definition_condition_editor_metric_calltime_common_comparator = Comparator
+view_alert_definition_condition_editor_metric_calltime_common_comparator_shrinks =
Shrinks
+view_alert_definition_condition_editor_metric_calltime_common_comparator_grows = Grows
+view_alert_definition_condition_editor_metric_calltime_common_comparator_changes =
Changes
+view_alert_definition_condition_editor_metric_calltime_common_comparator_tooltip = How a
collected calltime value should be compared to the given calltime limit
+view_alert_definition_condition_editor_metric_calltime_threshold_value = Call Time Value
+view_alert_definition_condition_editor_metric_calltime_threshold_value_tooltip = The
threshold value of the metric that will trigger the condition when compared using the
selected comparator.
+view_alert_definition_condition_editor_metric_calltime_change_tooltip = Specify the
calltime value that, when changed at least a specified amount, triggers the condition. You
must specify which calltime limit to check (minimum, maximum or average calltime value)
and the percentage of change that must occur.
+view_alert_definition_condition_editor_metric_calltime_change_percentage = Percentage
Change
+view_alert_definition_condition_editor_metric_calltime_change_percentage_tooltip = A
collected calltime value will trigger this condition when it differs by at least this
percentage of the selected calltime limit value
+view_alert_definition_condition_editor_metric_trait_change_tooltip = Specify the trait
whose value must change to trigger the condition.
+view_alert_definition_condition_editor_metric_trait_change_value = Trait
+view_alert_definition_condition_editor_operation_tooltip = Specify the result that must
occur when the selected operation is executed in order to trigger the condition.
+view_alert_definition_condition_editor_operation_value = Operation
+view_alert_definition_condition_editor_operation_status = \u64cd\u4f5c\u72b6\u6001
+view_alert_definition_condition_editor_operation_status_inprogress = In Progress
+view_alert_definition_condition_editor_operation_status_success = Success
+view_alert_definition_condition_editor_operation_status_failure = Failure
+view_alert_definition_condition_editor_operation_status_canceled = Canceled
+view_alert_definition_condition_editor_resource_configuration_tooltip = This condition is
triggered when the resource configuration changes.
+view_alert_definition_condition_editor_event_tooltip = Specify the event severity that an
event message must be reported with in order to trigger this condition. If you specify an
optional regular expression, the event message must also match that regular expression in
order for the condition to trigger.
+view_alert_definition_condition_editor_event_severity = Event Severity
+view_alert_definition_condition_editor_event_severity_debug = Debug
+view_alert_definition_condition_editor_event_severity_info = Info
+view_alert_definition_condition_editor_event_severity_warn = Warn
+view_alert_definition_condition_editor_event_severity_error = Error
+view_alert_definition_condition_editor_event_severity_fatal = Fatal
+view_alert_definition_condition_editor_event_regex = Regular Expression
+view_alert_definition_condition_editor_event_regex_tooltip = If specified, this is a
regular expression that must match a collected event message in order to trigger the
condition.
+view_alert_definition_condition_editor_common_min = Minimum
+view_alert_definition_condition_editor_common_avg = Average
+view_alert_definition_condition_editor_common_max = Maximum
+view_alert_definition_condition_editor_delete_confirm =
\u5220\u9664\u9009\u5b9a\u7684\u8b66\u62a5\u6761\u4ef6?
+view_alert_definition_notification_editor_title_add = \u6dfb\u52a0\u901a\u77e5
+view_alert_definition_notification_editor_title_edit = \u7f16\u8f91\u901a\u77e5
+view_alert_definition_notification_editor_sender = \u901a\u77e5\u53d1\u9001\u8005
+view_alert_definition_notification_editor_none_available = No alert senders available
+view_alert_definition_notification_editor_loadFailed = Cannot get alert senders
+view_alert_definition_notification_editor_loadFailed_single = Cannot get alert sender
configuration definition
+view_alert_definition_notification_editor_saveFailed = Cannot save the notification
configuration
+view_alert_definition_notification_editor_field_sender = Sender
+view_alert_definition_notification_editor_field_configuration = Configuration
+view_alert_definition_notification_editor_field_configuration_not_loaded = Unknown
+view_alert_definition_notification_editor_field_configuration_loadFailed = Failed to get
notification configuration preview
+view_alert_definition_notification_editor_delete_confirm =
\u4f60\u786e\u5b9a\u8981\u5220\u9664\u9009\u5b9a\u7684\u544a\u8b66\u901a\u77e5?
+view_alert_definition_notification_operation_editor_mode_title = Resource Selection Mode
+view_alert_definition_notification_operation_editor_mode_this = This Resource
+view_alert_definition_notification_operation_editor_mode_specific =
\u6307\u5b9a\u8d44\u6e90
+view_alert_definition_notification_operation_editor_mode_relative = Relative Resource
+view_alert_definition_notification_operation_editor_mode_unknown = UNKNOWN OPTION - THIS
IS A BUG
+view_alert_definition_notification_operation_editor_common_operation = Operation
+view_alert_definition_notification_operation_editor_specific_resource = Resource
+view_alert_definition_notification_operation_editor_specific_pick_button = Pick
+view_alert_definition_notification_operation_editor_specific_pick_text = Pick a
resource...
+view_alert_definition_notification_operation_editor_specific_pick_error_invalid = Please
pick a resource
+view_alert_definition_notification_operation_editor_specific_pick_error_no_operation =
Please pick a resource that has one or more operations
+view_alert_definition_notification_operation_editor_relative_ancestor = Start Search
From
+view_alert_definition_notification_operation_editor_relative_ancestor_tooltip = Select
the top of the type hierarchy from which to search its descendant tree for the Filter By
type
+view_alert_definition_notification_operation_editor_relative_ancestor_loadFailed = Cannot
get type ancestry
+view_alert_definition_notification_operation_editor_relative_ancestor_root = Root
Ancestor Type
+view_alert_definition_notification_operation_editor_relative_descendant = Then Filter By
+view_alert_definition_notification_operation_editor_relative_descendant_tooltip = The
resource type to search for under the root type defined in the Start Search From
selection.
+view_alert_definition_notification_operation_editor_relative_descendant_filter_tooltip =
A specific name to uniquely identify a resource when more than one resource of the
selected type might exist. This is optional if there will only ever be one resource of the
resource type in the selected type hierarchy.
+view_alert_definition_notification_operation_editor_relative_descendant_loadFailed =
Cannot get type descendants
+view_alert_definition_notification_operation_editor_operations_loadFailed = Failed to
load the list of available operations
+view_alert_definition_notification_operation_editor_operations_no_parameters = This
operation does not take any parameters
+view_alert_definition_notification_role_editor_loadFailed = Cannot determine current
roles - starting empty
+view_alert_definition_notification_role_editor_restoreFailed = Cannot use current roles -
starting empty
+view_alert_definition_notification_role_editor_saveFailed = Cannot save the selected
roles
+view_alert_definition_notification_user_editor_loadFailed = Cannot determine current
users - starting empty
+view_alert_definition_notification_user_editor_restoreFailed = Cannot use current users -
starting empty
+view_alert_definition_notification_user_editor_saveFailed = Cannot save the selected
users
+view_alert_definition_notification_cliScript_editor_repository = Repository
+view_alert_definition_notification_cliScript_editor_script = Script
+view_alert_definition_notification_cliScript_editor_whichUser = User To Run The Script
As
+view_alert_definition_notification_cliScript_editor_thisUser = Myself
+view_alert_definition_notification_cliScript_editor_anotherUser =
\u5176\u4ed6\u7528\u6237
+view_alert_definition_notification_cliScript_editor_verifyAuthentication = Verify
+view_alert_definition_notification_cliScript_editor_loadFailed = Loading the CLI
Notification Editor Failed.
+view_alert_definition_notification_cliScript_editor_selectRepoFirst =
\u9996\u5148\u9009\u62e9\u5e93.
+view_alert_definition_notification_cliScript_editor_existingScript = Existing Script
+view_alert_definition_notification_cliScript_editor_uploadNewScript =
\u4e0a\u4f20\u65b0\u811a\u672c
+view_alert_definition_notification_cliScript_editor_newScriptVersion = Version
+view_alert_definition_notification_cliScript_editor_selectRepo = Select the repository
where the script should reside
+view_alert_definition_recovery_editor_disable_when_fired = Disable When Fired
+view_alert_definition_recovery_editor_disable_when_fired_tooltip = Indicates if this
alert will be disabled after it fires. Once disabled, the alert can be manually re-enabled
or a recovery alert can be set up to automatically re-enable it. If this alert is a
recovery alert itself, this setting cannot be turned on.
+view_alert_definition_recovery_editor_recovery_alert = Recover Alert
+view_alert_definition_recovery_editor_recovery_alert_tooltip = The target alert that will
be recovered (i.e. re-enabled) after this alert triggers. Do not select an alert here if
you are not defining a recovery alert.
+view_alert_definition_recovery_editor_loadFailed = Cannot build recovery menu
+view_alert_definition_recovery_editor_none_available = None
+view_alert_common_tab_general = \u57fa\u672c\u5c5e\u6027
+view_alert_common_tab_conditions = Conditions
+view_alert_common_tab_conditions_modal_title = Add Condition
+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_text = Condition
+view_alert_common_tab_conditions_value = Value
+view_alert_common_tab_conditions_type_availability = Availability Change
+view_alert_common_tab_conditions_type_availability_down = Went down
+view_alert_common_tab_conditions_type_availability_up = Came up
+view_alert_common_tab_conditions_type_metric_threshold = Metric Value Threshold
+view_alert_common_tab_conditions_type_metric_calltime_threshold = Call Time Value
Threshold
+view_alert_common_tab_conditions_type_metric_calltime_destination = with call destination
matching
+view_alert_common_tab_conditions_type_metric_calltime_change = Call Time Value Changes
+view_alert_common_tab_conditions_type_metric_calltime_change_verb = by at least
+view_alert_common_tab_conditions_type_metric_calltime_delta_grows = Grows
+view_alert_common_tab_conditions_type_metric_calltime_delta_shrinks = Shrinks
+view_alert_common_tab_conditions_type_metric_calltime_delta_other = Changes
+view_alert_common_tab_conditions_type_metric_baseline = \u6307\u6807\u57fa\u51c6
+view_alert_common_tab_conditions_type_metric_baseline_verb = of
+view_alert_common_tab_conditions_type_metric_change = Metric Value Change
+view_alert_common_tab_conditions_type_metric_trait_change = Trait Change
+view_alert_common_tab_conditions_type_operation = Operation Execution
+view_alert_common_tab_conditions_type_operation_status = with result status
+view_alert_common_tab_conditions_type_resource_configuration = Resource Configuration
Change
+view_alert_common_tab_conditions_type_event = \u4e8b\u4ef6\u68c0\u6d4b
+view_alert_common_tab_conditions_type_event_matching = with event source matching
+view_alert_common_tab_conditions_recovery_enabled = Triggered ''{0}'' to
be re-enabled
+view_alert_common_tab_conditions_recovery_disabled = This alert caused its alert
definition to be disabled
+view_alert_common_tab_notifications = \u901a\u77e5
+view_alert_common_tab_notifications_sender = Sender
+view_alert_common_tab_notifications_status = \u72b6\u6001
+view_alert_common_tab_notifications_message = \u6d88\u606f
+view_alert_common_tab_dampening = Dampening
+view_alert_common_tab_dampening_category_none = None
+view_alert_common_tab_dampening_category_none_tooltip = Dampening is disabled. Every time
the condition set is true, an alert will be triggered.
+view_alert_common_tab_dampening_category_consecutive_count = Consecutive
+view_alert_common_tab_dampening_category_consecutive_count_tooltip = An alert is
triggered once every X occurrences the condition set is true consecutively.
+view_alert_common_tab_dampening_category_partial_count = Last N Evaluations
+view_alert_common_tab_dampening_category_partial_count_tooltip = An alert is triggered
once every X occurrences the condition set is true during the last N evaluations of the
condition set.
+view_alert_common_tab_dampening_category_duration_count = Time Period
+view_alert_common_tab_dampening_category_duration_count_tooltip = An alert is triggered
once every X occurrences the condition set is true within a given time period.
+view_alert_common_tab_dampening_consecutive_occurrences_label = Occurrences
+view_alert_common_tab_dampening_consecutive_occurrences_label_tooltip = The number of
times the condition set must be consecutively true before the alert is triggered
+view_alert_common_tab_dampening_partial_occurrences_label = Occurrences
+view_alert_common_tab_dampening_partial_occurrences_label_tooltip = The number of times
the condition set must be true during the last N evaluations before the alert is
triggered.
+view_alert_common_tab_dampening_partial_evalatuions_label = \u8bc4\u4f30
+view_alert_common_tab_dampening_partial_evalatuions_label_tooltip = The total number of
times the condition set will be tested to see if the given number of occurrences are
true.
+view_alert_common_tab_dampening_duration_occurrences_label = Occurrences
+view_alert_common_tab_dampening_duration_occurrences_label_tooltip = The number of times
the condition set must be true during the given time period before the alert is
triggered.
+view_alert_common_tab_dampening_duration_period_label = \u65f6\u95f4\u6bb5
+view_alert_common_tab_dampening_duration_period_label_tooltip = The time span in which
the condition set will be tested to see if the given number of occurrences are true.
+view_alert_common_tab_recovery = \u8fd8\u539f
+view_alert_common_tab_invalid_condition_category = Invalid condition category - please
report this as a bug: {0}
+view_alert_common_tab_invalid_dampening_category = Invalid dampening category - please
report this as a bug: {0}
+view_alert_common_tab_invalid_time_units = \u65e0\u6548\u65f6\u95f4\u5355\u4f4d -
\u8bf7\u62a5\u544abug: {0}
+
+# Auto Discovery Queue
+#----------------------------
+view_autoDiscoveryQ_title = \u81ea\u52a8\u53d1\u73b0\u961f\u5217
+view_autoDiscoveryQ_import = \u5bfc\u5165
+view_autoDiscoveryQ_ignore = \u5ffd\u7565
+view_autoDiscoveryQ_ignored = Ignored
+view_autoDiscoveryQ_unignore = Unignore
+view_autoDiscoveryQ_committed = Committed
+view_autoDiscoveryQ_deleted = Deleted
+view_autoDiscoveryQ_uninventoried = Uninventoried
+view_autoDiscoveryQ_new = New
+view_autoDiscoveryQ_newAndIgnored = New and Ignored
+view_autoDiscoveryQ_importFailure = \u5bfc\u5165\u8d44\u6e90\u5931\u8d25
+view_autoDiscoveryQ_importSuccessful = \u6210\u529f\u5bfc\u5165\u88ab\u9009\u8d44\u6e90.
+view_autoDiscoveryQ_ignoreFailure = Failed to ignore resources
+view_autoDiscoveryQ_ignoreSuccessful = You have successfully ignored the selected
resources.
+view_autoDiscoveryQ_unignoreFailure = Failed to unignore resources
+view_autoDiscoveryQ_unignoreSuccessful =
\u6210\u529f\u4f7f\u9009\u4e2d\u7684\u8d44\u6e90\u751f\u6548.
+view_autoDiscoveryQ_noperm =
(\u60a8\u6ca1\u6709\u6743\u9650\u67e5\u770b\u81ea\u52a8\u53d1\u73b0\u961f\u5217)
+view_autoDiscoveryQ_noItems = \u65e0\u6761\u76ee\u663e\u793a
+view_autoDiscoveryQ_field_parentId = \u7236ID
+view_autoDiscoveryQ_field_name = \u8d44\u6e90\u540d\u79f0
+view_autoDiscoveryQ_field_key = \u8d44\u6e90Key
+view_autoDiscoveryQ_field_discoveryTime = \u53d1\u73b0\u65f6\u95f4
+view_autoDiscoveryQ_field_inventoryStatus = \u6e05\u5355\u72b6\u6001
+view_autoDiscoveryQ_loadFailure
=\u52a0\u8f7d\u8d44\u6e90\u6e05\u5355\u53d1\u73b0\u961f\u5217\u5931\u8d25
+view_autoDiscoveryQ_showStatus = \u663e\u793a\u72b6\u6001
+view_autoDiscoveryQ_confirmSelect = \u662f\u5426\u9009\u4e2d\u5b50\u8282\u70b9\uff1f
+
+#==================== Bundles ======================
+
+# some common bundle terms
+view_bundle_bundle = \u63d2\u4ef6
+view_bundle_bundles = \u63d2\u4ef6\u96c6
+view_bundle_bundleDestinations = \u63d2\u4ef6\u76ee\u7684\u5730
+view_bundle_bundleDeployment = \u63d2\u4ef6\u90e8\u7f72
+view_bundle_bundleDeployments = \u63d2\u4ef6\u90e8\u7f72
+view_bundle_bundleFiles = \u63d2\u4ef6\u6587\u4ef6
+view_bundle_bundleType = \u63d2\u4ef6\u7c7b\u578b
+view_bundle_bundleVersion = \u63d2\u4ef6\u7248\u672c
+view_bundle_bundleVersions = \u63d2\u4ef6\u7248\u672c
+view_bundle_deploy = \u90e8\u7f72
+view_bundle_deployed = \u5df2\u90e8\u7f72
+view_bundle_deployDir = \u90e8\u7f72\u76ee\u5f55
+view_bundle_deployments = \u90e8\u7f72
+view_bundle_destinations = \u76ee\u7684\u5730
+view_bundle_files = \u6587\u4ef6
+view_bundle_latestVersion = \u6700\u65b0\u7248\u672c
+view_bundle_recipe = Recipe
+view_bundle_revert = \u8fd8\u539f
+view_bundle_purge = \u6e05\u9664
+view_bundle_versions = \u7248\u672c
+view_bundle_deleteConfirm = Are you sure you want to delete this bundle? All versions,
destinations and deployments for this bundle will also be deleted.
+
+# individual bundle views/wizards
+view_bundle_fileListView_fileSize = \u6587\u4ef6\u5927\u5c0f
+view_bundle_fileListView_md5 = MD5
+view_bundle_fileListView_sha256 = SHA256
+view_bundle_fileListView_loadFailure = \u52a0\u8f7d\u63d2\u4ef6\u6587\u4ef6\u5931\u8d25
+view_bundle_version_backToBundle = \u8fd4\u56de\u63d2\u4ef6
+view_bundle_version_bundleVersionTagUpdateFailure =
\u66f4\u65b0\u63d2\u4ef6\u7248\u672c\u6807\u8bb0\u5931\u8d25
+view_bundle_version_bundleVersionTagUpdateSuccessful =
\u66f4\u65b0\u63d2\u4ef6\u7248\u672c\u6807\u8bb0\u6210\u529f
+view_bundle_version_deleteConfirm =
\u4f60\u786e\u5b9a\u8981\u5220\u9664\u63d2\u4ef6\u7248\u672c?
+view_bundle_version_deleteFailure = Failed to delete the bundle version [{0}]
+view_bundle_version_deleteSuccessful = You successfully deleted the bundle version [{0}]
+view_bundle_version_loadFailure = Failed to load bundle version
+view_bundle_tree_loadFailure = Failed to load bundle data
+view_bundle_revertWizard_title = \u63d2\u4ef6\u8fd8\u539f
+view_bundle_revertWizard_windowTitle = \u63d2\u4ef6\u8fd8\u539f\u5411\u5bfc
+view_bundle_revertWizard_getInfoStep_name = \u63d0\u4f9b\u8fd8\u539f\u4fe1\u606f
+view_bundle_revertWizard_getInfoStep_revertDeployName = Revert Deploy Name
+view_bundle_revertWizard_getInfoStep_revertDeployDesc = Revert Deploy Description
+view_bundle_revertWizard_getInfoStep_revertDeployDescFull = [REVERT
From]\\n{0}\\n\\n[REVERT To]\\n{1}
+view_bundle_revertWizard_getInfoStep_cleanDeploy = Clean Deployment? (this will delete an
old, existing deploy directory prior to starting the revert deployment)
+view_bundle_revertWizard_getInfoStep_getNameFailure = Failed to get revert deployment
name
+view_bundle_revertWizard_confirmStep_name = \u90e8\u7f72\u8fd8\u539f\u786e\u8ba4
+view_bundle_revertWizard_confirmStep_noLiveDeployment_concise = No live deployment was
found for the destination
+view_bundle_revertWizard_confirmStep_noLiveDeployment = No live deployment was found for
the destination [{0}]
+view_bundle_revertWizard_confirmStep_noPriorDeployment_concise = The live deployment
cannot be reverted because there is no prior deployment
+view_bundle_revertWizard_confirmStep_noPriorDeployment = The live deployment [{0}] cannot
be reverted because there is no prior deployment for the destination [{1}]
+view_bundle_revertWizard_confirmStep_failedToFindLiveDeployment = Failed to find live
deployment; cannot revert
+view_bundle_revertWizard_confirmStep_liveDeployment = Live Deployment
+view_bundle_revertWizard_confirmStep_prevDeployment = Previous Deployment
+view_bundle_revertWizard_confirmStep_confirmation = Reverting Live Deployment to Previous
Deployment. Click "Next" to continue...
+view_bundle_revertWizard_revertStep_name = Deploy Bundle to Destination Platforms
+view_bundle_revertWizard_revertStep_reverting = \u8fd8\u539f\u4e2d...
+view_bundle_revertWizard_revertStep_scheduled = You have successfully scheduled the
revert deployment!
+view_bundle_revertWizard_revertStep_scheduledDetails = You have successfully scheduled to
revert the bundle deployment [{0}] from resource group [{1}]
+view_bundle_revertWizard_revertStep_scheduledFailure = Failed to schedule revert
deployment!
+view_bundle_list_loadFailure = Failed to load the bundle to be deployed [{0}]
+view_bundle_list_singleLoadFailure = Failed to get a single bundle to be deployed [{0}]
+view_bundle_list_versionsCount = \u7248\u672c\u6570\u91cf
+view_bundle_list_destinationsCount = Destinations Count
+view_bundle_list_loadWithLatestFailure = Failed to load bundle with the latest version
data
+view_bundleVersion_loadFailure = Failed to load bundle version data
+view_bundle_list_backToAll = Back to All Bundles
+view_bundle_list_tagUpdateFailure = Failed to update bundle tags
+view_bundle_list_tagUpdateSuccessful = You have successfully updated the bundle tags
+view_bundle_list_deleteConfirm = Are you sure you want to delete the selected bundles?
+view_bundle_list_deletesFailure = Failed to delete the bundles
+view_bundle_list_deletesSuccessful = You successfully deleted the bundles
+view_bundle_list_deleteFailure = Failed to delete the bundle [{0}]
+view_bundle_list_deleteSuccessful = You successfully deleted the bundle [{0}]
+view_bundle_list_error1 = Failed to load bundle to deploy [{0}]
+view_bundle_list_error2 = Failed to get a single bundle to deploy [{0}]
+view_bundle_list_error3 = Failed to load bundle
+view_bundle_dest_group = \u7ec4
+view_bundle_dest_created = \u5df2\u521b\u5efa
+view_bundle_dest_deployDir = \u53d1\u5e03\u76ee\u5f55
+view_bundle_dest_lastDeployedVersion = \u4e0a\u6b21\u53d1\u5e03\u7248\u672c
+view_bundle_dest_lastDeploymentDate = \u4e0a\u6b21\u53d1\u5e03\u65e5\u671f
+view_bundle_dest_lastDeploymentStatus = \u4e0a\u6b21\u53d1\u5e03\u72b6\u6001
+view_bundle_dest_loadFailure = Failed to load bundle destinations
+view_bundle_dest_loadFailureVersionInfo = Failed to load bundle destination deployed
version information
+view_bundle_dest_backToBundle = Back to Bundle
+view_bundle_dest_tagUpdateFailure = Failed to update bundle destination tags
+view_bundle_dest_tagUpdateSuccessful = You have successfully updated the bundle
destination tags
+view_bundle_dest_purgeConfirm = This will purge the bundle content from all remote
machines. Are you sure you want to do this?
+view_bundle_dest_purgeFailure = Failed to purge the bundle destination [{0}] from some or
all of the remote machines.
+view_bundle_dest_purgeSuccessful = You successfully purged the bundle destination [{0}]
from all of the remote machines.
+view_bundle_dest_revertConfirm = This will revert all remote machines back to the
previous bundle deployment. Are you sure you want to do this?
+view_bundle_dest_deleteConfirm = Are you sure you want to delete this bundle destination?
This only deletes it from the database; all bundle content that was deployed to this
destination on remote machines will remain.
+view_bundle_dest_deleteFailure = Failed to delete the bundle destination [{0}]
+view_bundle_dest_deleteSuccessful = You successfully deleted the bundle destination
[{0}]
+view_bundle_resDeployDS_loadFailure = Failed to load bundle resource deployments
+view_bundle_deploy_name = \u90e8\u7f72\u540d
+view_bundle_deploy_time = \u90e8\u7f72\u65f6\u95f4
+view_bundle_deploy_loadDeployFailure = Failed to load bundle deployments
+view_bundle_deploy_action = Action
+view_bundle_deploy_installDetails = \u5b89\u88c5\u7ec6\u8282
+view_bundle_deploy_backButton = \u8fd4\u56de
+view_bundle_deploy_tagUpdateFailure = Failed to update bundle deployment tags
+view_bundle_deploy_tagUpdateSuccessful = You have successfully updated the bundle
deployment tags
+view_bundle_deploy_deploymentPlatforms = \u53d1\u5e03\u5e73\u53f0
+view_bundle_deploy_selectARow = \u9009\u4e2d\u884c\u663e\u793a\u5b89\u88c5\u7ec6\u8282
+view_bundle_deploy_operatingSystem = \u64cd\u4f5c\u7cfb\u7edf
+view_bundle_deploy_loadFailure = Failed to load bundle deployment
+view_bundle_deploy_loadBundleFailure = Failed to find bundle
+view_bundle_deploy_deployedBy = \u90e8\u7f72\u8005
+view_bundle_deploy_clickForError = Click the icon for the error message
+view_bundle_deploy_deleteConfirm = Are you sure you want to delete this bundle
deployment?
+view_bundle_deploy_deleteFailure = Failed to delete the bundle deployment [{0}]
+view_bundle_deploy_deleteSuccessful = You successfully deleted the bundle deployment
[{0}]
+view_bundle_createWizard_title = Create Bundle
+view_bundle_createWizard_windowTitle = Bundle Creation Wizard
+view_bundle_createWizard_cancelSuccessful = Canceled the creation of bundle [{0}],
version = [{1}]
+view_bundle_createWizard_cancelFailure = Failed to fully cancel the creation of bundle
[{0}], version = [{1}] - the bundle may still exist in the database
+view_bundle_createWizard_noBundleTypesSupported = No bundle types are supported - you
must deploy a valid plugin that supports bundle deployments
+view_bundle_createWizard_noBundleTypesAvail = No bundle types are available
+view_bundle_createWizard_loadBundleFileFailure = Cannot obtain bundle file information
from server
+view_bundle_createWizard_enterUrl = Please enter a valid URL where the bundle
distribution file can be downloaded from
+view_bundle_createWizard_enterRecipe = Please supply a valid recipe
+view_bundle_createWizard_uploadInProgress = Upload is in progress... This can take
several minutes for large files
+view_bundle_createWizard_uploadStepName = Upload Bundle Files
+view_bundle_createWizard_noAdditionalFilesNeeded = No additional files need to be
uploaded for this bundle
+view_bundle_createWizard_failedToUploadFile = Failed to upload bundle file
+view_bundle_createWizard_failedToUploadDistroFile = Failed to upload bundle distribution
file
+view_bundle_createWizard_bundleDistro = Bundle Distribution
+view_bundle_createWizard_youMustChooseOne = You must choose one option in order to create
a bundle!
+view_bundle_createWizard_urlOption = URL
+view_bundle_createWizard_uploadOption = \u4e0a\u4f20
+view_bundle_createWizard_recipeOption = Recipe
+view_bundle_createWizard_provideBundleDistro = Provide a Bundle Distribution
+view_bundle_createWizard_clickToUploadRecipe = Click to load a recipe file
+view_bundle_createWizard_createFailure = Failed to create the bundle
+view_bundle_createWizard_createSuccessful = You have successfully created a bundle named
[{0}] with a version of [{1}]
+
+view_bundle_deployWizard_deploying = \u90e8\u7f72\u4e2d...
+view_bundle_deployWizard_deployStep = Deploy Bundle to Destination Platforms
+view_bundle_deployWizard_deploymentCreated = Created Deployment...
+view_bundle_deployWizard_deploymentCreatedDetail = You have created the deployment [{0}]
with the description [{1}]
+view_bundle_deployWizard_deploymentCreatedDetail_concise = You have created the
deployment [{0}]
+view_bundle_deployWizard_destinationCreatedDetail = You have created the destination
[{0}] with the description [{1}]
+view_bundle_deployWizard_destinationCreatedDetail_concise = You have created the
destination [{0}]
+view_bundle_deployWizard_deploymentScheduled = Bundle Deployment Scheduled!
+view_bundle_deployWizard_deploymentScheduledDetail = You have scheduled the bundle
deployment [{0}] to the destination group [{1}]
+view_bundle_deployWizard_deploymentScheduledDetail_concise = You have scheduled the
bundle deployment
+view_bundle_deployWizard_error_1 = Failed to delete new deployment on Cancel
+view_bundle_deployWizard_error_2 = Failed to delete new destination on Cancel
+view_bundle_deployWizard_error_3 = Failed to Schedule Deployment!
+view_bundle_deployWizard_error_4 = Failed to schedule deployment: {0}
+view_bundle_deployWizard_error_5 = Failed to Create Deployment!
+view_bundle_deployWizard_error_6 = Failed to create deployment: {0}
+view_bundle_deployWizard_error_7 = Failed to get deployment name.
+view_bundle_deployWizard_error_8 = You must select a valid resource group from the drop
down
+view_bundle_deployWizard_error_9 = Failed to delete new destination in nextPage
+view_bundle_deployWizard_error_10 = Failed to create destination, it may already exist.
(Note, for an existing destination deploy from the Destination view)
+view_bundle_deployWizard_error_11 = Failed to find defined deployments.
+view_bundle_deployWizard_error_12 = Failed to find defined bundles.
+view_bundle_deployWizard_getConfigStep = Set Deployment Configuration
+view_bundle_deployWizard_getConfigSkip = No configuration needed for this bundle
version.
+view_bundle_deployWizard_getDestStep = New Destination
+view_bundle_deployWizard_getDest_name = Destination Name
+view_bundle_deployWizard_getDest_desc = Destination Description
+view_bundle_deployWizard_getDest_deployDir = Root Deployment Directory (on destination
platforms)
+view_bundle_deployWizard_getInfoStep = Provide Deployment Information
+view_bundle_deployWizard_getInfo_clean = Clean Deployment? (wipe deploy directory on
destination platform)
+view_bundle_deployWizard_getInfo_deploymentDesc = Deployment Description
+view_bundle_deployWizard_getInfo_deploymentName = Deployment Name
+view_bundle_deployWizard_getOptionsStep = Deploy Options
+view_bundle_deployWizard_getOptions_deployLater = Deploy Later
+view_bundle_deployWizard_getOptions_deployNow = Deploy Now
+view_bundle_deployWizard_getOptions_deployTime = Deployment Time
+view_bundle_deployWizard_selectBundleStep = Select Deployment Bundle
+view_bundle_deployWizard_selectBundle_single = Select only a single bundle for
deployment.
+view_bundle_deployWizard_selectVersionStep = Select Deployment Bundle Version
+view_bundle_deployWizard_selectVersion_latest = Latest Version [{0}]
+view_bundle_deployWizard_selectVersion_live = Live Version [{0}]
+view_bundle_deployWizard_selectVersion_select = Select Version from List:
+view_bundle_deployWizard_title = Bundle Deployment Wizard
+
+# =================== Measurement Views =====================
+
+view_measureTable_chartMetricValues = Chart Selected Metrics
+view_measureTable_getLive = Get Live Value
+view_measureTable_getLive_failure = Cannot get live values for those metrics. Make sure
the agent is running and the managed resource is up.
+view_measureTable_live_title = \u52a8\u6001\u6570\u636e
+
+# =================== Components =====================
+
+view_configCompare_comparingConfigs = \u6bd4\u8f83\u8bbe\u7f6e
+view_configCompare_configCompare = \u914d\u7f6e\u6bd4\u8f83\u7ed3\u679c\u96c6
+
+view_configEdit_addItem = \u6dfb\u52a0\u6761\u76ee\u81f3\u5217\u8868.
+view_configEdit_confirm_1 =
\u786e\u5b9a\u8981\u4ece\u96c6\u5408\u4e2d\u5220\u9664\u6307\u5b9a\u7684\u5c5e\u6027?
+view_configEdit_confirm_2 = \u786e\u5b9a\u8981\u5220\u9664\u8be5\u884c?
+view_configEdit_confirm_3 = \u786e\u5b9a\u8981\u5220\u9664 [{0}]\u9879\u9009\u4e2d\u7684
[{1}]?
+view_configEdit_viewRow = \u67e5\u770b\u884c
+view_configEdit_editRow = \u7f16\u8f91\u884c
+view_configEdit_enterPropName =
\u8f93\u5165\u8981\u6dfb\u52a0\u7684\u5c5e\u6027\u540d\u79f0.
+view_configEdit_error_1 = \u6b64\u8d44\u6e90\u65e0\u6cd5\u914d\u7f6e.
+view_configEdit_error_2 =
\u6b64\u8d44\u6e90\u65e0\u6cd5\u8fdb\u884c\u8fde\u63a5\u8bbe\u7f6e.
+view_configEdit_error_3 = \u65e0\u6cd5\u6dfb\u52a0\u540d\u4e3a[{0}]\u7684\u5c5e\u6027.
\u5c5e\u6027\u540d\u5728\u96c6\u5408\u4e2d\u5df2\u7ecf\u88ab\u4f7f\u7528.
+view_configEdit_files = \u6587\u4ef6
+view_configEdit_hideAll= \u9690\u85cf\u6240\u6709
+view_configEdit_jumpToSection = \u8df3\u81f3\u6a21\u5757
+view_configEdit_msg_1 = \u589e\u52a0\u5c5e\u6027 [{0}]\u5230\u96c6\u5408.
+view_configEdit_msg_2 = \u79fb\u9664\u96c6\u5408\u5185\u6240\u6709\u7684\u5c5e\u6027.
+view_configEdit_msg_3 = \u4ece\u5217\u8868\u4e2d\u5220\u9664[{0} {1}]\u6210\u529f.
+view_configEdit_msg_4 = \u6dfb\u52a0\u6761\u76ee\u81f3\u5217\u8868.
+view_configEdit_properties = \u5c5e\u6027
+view_configEdit_tooltip_1 =
\u4ece\u5217\u8868\u4e2d\u5220\u9664\u9009\u4e2d\u7684\u6761\u76ee.
+view_configEdit_tooltip_2 = \u6dfb\u52a0\u4e00\u9879\u6761\u76ee\u5230\u5217\u8868.
+
+view_groupConfigEdit_member = \u6210\u5458
+view_groupConfigEdit_noListProps =
\u7ec4\u914d\u7f6e\u76ee\u524d\u4e0d\u652f\u6301\u67e5\u770b\u5c5e\u6027\u4fe1\u606f.
+view_groupConfigEdit_tooltip_1 = \u6210\u5458\u503c\u6709\u5dee\u5f02 -
\u70b9\u51fb\u6309\u94ae\u7f16\u8f91.
+view_groupConfigEdit_setAll = \u8bbe\u7f6e\u6240\u6709\u7684\u503c\u5230:
+view_groupConfigEdit_unset = \u56de\u6eda
+view_groupConfigEdit_valsDiff = \u6210\u5458\u503c\u6709\u5dee\u5f02
+view_groupConfigEdit_valsDiffForProp = \u5c5e\u6027 [{0}]\u7684\u6210\u5458\u503c
+
+view_leftNav_unknownPage = \u6a21\u5757[{1}]\u4e0b\u672a\u77e5\u7684\u9875\u9762[{0}] -
\u94fe\u63a5\u65e0\u6548.
+
+view_measure_nan = --\u65e0\u6570\u636e--
+
+# Measurement Range Selector
+view_measureRange_last = \u65f6\u95f4\u8303\u56f4 - \u5148\u524d\u7684
+view_measureRange_start = \u65f6\u95f4\u8303\u56f4 - \u8d77\u59cb
+view_measureRange_simple = \u4e00\u822c...
+
+view_selector_assigned = \u6307\u5b9a\u7684 {0}
+view_selector_available = \u53ef\u7528\u7684 {0}
+
+view_subTab_error_disabled = \u65e0\u6cd5\u9009\u4e2d\u7981\u7528\u7684\u5b50\u8868
[{0}].
+
+view_table_drawFail = \u751f\u6210\u8868\u683c[{0}]\u5931\u8d25.
+view_table_matchingRows = \u5339\u914d\u7684\u884c: {0} (\u9009\u4e2d: {1})
+view_table_totalRows = \u6240\u6709\u7684\u884c: {0} (\u9009\u4e2d: {1})
+view_tableSection_backButton = \u8fd4\u56de\u5217\u8868
+view_tableSection_error_noId = \u8868\u5355 [{0}]
\u8bb0\u5f55\u7f3a\u5c11'id'\u5c5e\u6027 - \u8bf7\u62a5\u544a\u6b64BUG.
+view_tableSection_error_badId =\u65e0\u6cd5\u5c55\u793a
[{0}]\u7684\u8be6\u7ec6\u4fe1\u606f. \u65e0\u6548\u7684 'id': [{1}].
\u8bf7\u62a5\u544a\u6b64BUG
+
+view_tags_tags = \u6807\u7b7e
+view_tags_error_1 = \u52a0\u8f7d\u6807\u7b7e\u5931\u8d25
+view_tags_tooltip_1 = \u5220\u9664\u6807\u7b7e
+view_tags_tooltip_2 = \u7f16\u8f91\u6807\u7b7e
+view_tags_tooltip_3 = \u8f93\u5165\u6309\u7167\u4ee5\u4e0b\u683c\u5f0f\u7684\u6807\u7b7e:
(namespace:)(semantic=)tagname (e.g. it:env=QA, or owner=John)
+
+# File Upload (various)
+view_upload_alreadyUploaded = \u6587\u4ef6\u5df2\u7ecf\u4e0a\u4f20
+view_upload_bundleDistFile = \u5206\u7c7b\u6587\u4ef6
+view_upload_error_bundleDistFile = \u4e0a\u4f20\u5206\u7c7b\u6587\u4ef6\u5931\u8d25
+view_upload_error_file = \u4e0a\u4f20\u6587\u4ef6\u51fa\u73b0\u9519\u8bef
+view_upload_error_fileName = \u4e0a\u4f20\u6587\u4ef6 [{0}]\u51fa\u73b0\u9519\u8bef
+view_upload_error_fileName_2 = \u4e0a\u4f20\u6587\u4ef6 [{0}]\u51fa\u73b0\u9519\u8bef,
\u68c0\u67e5\u6587\u4ef6\u8def\u5f84.
+view_upload_error_packageVersionFile =
\u4e0a\u4f20\u5305\u7248\u672c\u6587\u4ef6\u51fa\u73b0\u9519\u8bef
+view_upload_error_results = \u4e0a\u4f20\u6587\u4ef6\u5931\u8d25,
\u65e0\u6cd5\u9884\u6599\u7684\u7ed3\u679c: [{0}]
+view_upload_inProgress = \u65e0\u6cd5\u63d0\u4ea4,
\u6587\u4ef6\u4e0a\u4f20\u6b63\u5728\u8fdb\u884c
+view_upload_prompt_1 = \u8bf7\u9009\u62e9\u4e00\u4e2a\u6587\u4ef6\u4e0a\u4f20[{0}]
+view_upload_prompt_2 = \u8981\u4e0a\u4f20\u7684\u6587\u4ef6
+view_upload_tooltip_1a =
\u9009\u62e9\u4e00\u4e2a\u6587\u4ef6\u4e0a\u4f20,\u7136\u540e\u70b9\u51fbUpload\u6216\u8005Next
+view_upload_tooltip_1b = \u9009\u62e9\u4e00\u4e2a\u6587\u4ef6\u4e0a\u4f20,
\u7136\u540e\u70b9\u51fb Next
+view_upload_tooltip_2 = \u6587\u4ef6\u4e0a\u4f20 \u524d\u53d1\u751f\u9519\u8bef
+view_upload_success = \u6587\u4ef6\u4e0a\u4f20\u6210\u529f
+view_upload_upload = \u4e0a\u4f20
+view_upload_uploadFile = \u4e0a\u4f20\u6587\u4ef6
+
+# Group Create Wizard
+view_groupCreateWizard_membersStepName = \u9009\u62e9\u6210\u5458
+view_groupCreateWizard_createStepName = \u7ec4\u8bbe\u7f6e
+view_groupCreateWizard_createStep_recursive = \u9012\u5f52
+view_groupCreateWizard_title = \u521b\u5efa\u7ec4
+view_groupCreateWizard_windowTitle = \u521b\u5efa\u7ec4
+view_groupCreateWizard_createFailure = \u521b\u5efa\u8d44\u6e90\u7ec4\u5931\u8d25
+view_groupCreateWizard_createSuccessful_concise =
\u6210\u529f\u7684\u521b\u5efa\u4e86\u8d44\u6e90\u7ec4. [<a
href="{0}">\u67e5\u770b\u7ec4</a>]
+view_groupCreateWizard_createSuccessful_full =
\u6210\u529f\u7684\u521b\u5efa\u540d\u79f0\u662f [{1}]\u5305\u542b
[{2}]\u4e2a\u8d44\u6e90\u6210\u5458\u7684[{0}]\u8d44\u6e90\u7ec4
+
+# Resource Type / Plugin View/Datasources
+view_type_resourceTypes = \u8d44\u6e90\u7c7b\u578b
+view_type_parentId = \u7236ID
+view_type_typeTreeLoadFailure = \u52a0\u8f7d\u8d44\u6e90\u7c7b\u578b\u6811\u5931\u8d25
+
+# Tabs
+view_tabs_invalidSubTab = \u65e0\u6548\u7684\u5b50\u8868: {0}
+view_tabs_invalidTab = \u65e0\u6548\u7684\u8868: {0}
+
+# Group Tree
+group_tree_partialClusterTooltip =\u9664\u53bb
{1},{0}\u7684\u7ec4\u6210\u5458\u62e5\u6709
\u4e00\u4e2a''{2}''\u8d44\u6e90
+
+#=================== Dashboard =====================
+view_dashboard_favorites_error1 = \u52a0\u8f7d\u5e38\u7528\u8d44\u6e90\u5931\u8d25.
+view_dashboardManager_error = \u4fdd\u5b58\u7edf\u8ba1\u8868\u76d8\u5931\u8d25
+view_dashboardManager_saved = \u4fdd\u5b58\u7edf\u8ba1\u8868\u76d8{0}
+view_dashboardManager_success = \u6210\u529f\u4fdd\u5b58\u7edf\u8ba1\u8868\u76d8
+view_dashboardManager_deleteFail = \u5220\u9664\u7edf\u8ba1\u8868\u76d8\u5931\u8d25.
+view_dashboardManager_deleted = \u6210\u529f\u5220\u9664\u7edf\u8ba1\u8868\u76d8{0}
+view_dashboards_title = \u7edf\u8ba1\u8868\u76d8
+view_dashboards_confirm1 = \u60a8\u786e\u5b9a\u8981\u5220\u9664\uff1f
+view_dashboards_portlets_refresh_fail1=\u4fee\u6539portlets\u81ea\u52a8\u5237\u65b0\u7684\u95f4\u9694\u65f6\u95f4\u5931\u8d25
+view_dashboards_portlets_refresh_fail2=\u505c\u7528portlets\u81ea\u52a8\u5237\u65b0\u7684\u91cd\u8f7d\u5931\u8d25
+view_dashboards_portlets_refresh_none = \u65e0\u5237\u65b0
+view_dashboards_portlets_refresh_one_min = 1 \u5206\u652f
+view_dashboards_portlets_refresh_multiple_min = {0} \u5206\u949f
+view_dashboards_portlets_refresh_success1=\u6210\u529f\u4fee\u6539portlets\u81ea\u52a8\u5237\u65b0\u7684\u95f4\u9694\u65f6\u95f4
+view_dashboards_portlets_refresh_success2=\u6210\u529f\u505c\u7528portlets\u81ea\u52a8\u5237\u65b0\u7684\u91cd\u8f7d
+view_dashboardsManager_error1 = \u6dfb\u52a0\u65b0\u7edf\u8ba1\u8868\u76d8\u5931\u8d25
+view_dashboardsManager_message_title_details =
<h1>\u6b22\u8fce\u4f7f\u7528RHQ</h1>\n<p>RHQ\u9879\u76ee\u662f\u4e00\u4e2a\u62bd\u8c61\u7684\u3001\u57fa\u4e8e\u63d2\u4ef6\u7684\u7cfb\u7edf\u7ba1\u7406\u5957\u4ef6\u3002\u901a\u8fc7\u4e00\u7cfb\u5217\u6838\u5fc3\u529f\u80fd\u63d0\u4f9b\u591a\u4ea7\u54c1\u548c\u5e73\u53f0\u7684\u53ef\u6269\u5c55\u7684\u96c6\u6210\u7ba1\u7406.
\u672c\u9879\u76ee\u5206\u5c42\u6a21\u5757\u5177\u6709\u7075\u6d3b\u90e8\u7f72\u67b6\u6784.
\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e2a\u6838\u5fc3\u7528\u6237\u754c\u9762\u4f9b\u8de8\u6574\u4e2a\u4f01\u4e1a\u7684\u5ba1\u8ba1\u548c\u5386\u53f2\u7ba1\u7406.
\u670d\u52a1\u5668/\u4ee3\u7406\u67b6\u6784\u63d0\u4f9b\u8fdc\u7a0b\u7ba1\u7406,\u63d2\u4ef6\u63d0\u4f9b\u7279\u5b9a\u4ea7\u54c1\u7684\u7ba1\u7406\u652f\u6301.</p>\n
<p>\u901a\u8fc7\u5355\u51fb(\u7f16\u8f91\u6a21\u5f0f)\u6309\u94ae\u53ef\u4ee5\u7f16\u8f91\u9ed8\u8ba4\u7edf\u8ba1\u8868\u76d8.</p>
+
+view_portlet_factory_invalidPortlet =
\u8fd9\u662f\u4e00\u4e2a\u9648\u65e7\u5e76\u4e14\u5df2\u7ecf\u5931\u6548\u7684portlet.
\u8bf7\u5220\u9664.
+
+view_portlet_defaultName_autodiscovery = \u63a2\u7d22\u961f\u5217
+view_portlet_defaultName_favoriteResources = \u5e38\u7528\u8d44\u6e90
+view_portlet_defaultName_resourceMetric = \u516c\u7528\u8d44\u6e90\u56fe\u6807
+view_portlet_defaultName_groupMetric = \u516c\u7528\u8d44\u6e90\u7ec4\u56fe\u6807
+view_portlet_defaultName_inventorySummary = \u6e05\u5355\u6982\u8981
+view_portlet_defaultName_mashup = Mashup
+view_portlet_defaultName_message = \u4fe1\u606f
+view_portlet_defaultName_operations =\u8fd1\u671f\u64cd\u4f5c
+view_portlet_defaultName_platformSummary = \u5e73\u53f0\u5229\u7528\u7387
+view_portlet_defaultName_problemResources =
\u544a\u8b66\u6216\u8005\u4e0d\u53ef\u7528\u7684\u8d44\u6e90
+view_portlet_defaultName_recentAlerts = \u65b0\u544a\u8b66
+view_portlet_defaultName_recentlyAddedResources = \u65b0\u6dfb\u52a0\u8d44\u6e90
+view_portlet_defaultName_tagCloud = \u6807\u7b7e\u4e91
+
+view_portlet_defaultName_group_alerts =\u7ec4: \u544a\u8b66
+view_portlet_defaultName_group_bundles = \u7ec4: \u7c7b\u53d1\u5e03
+view_portlet_defaultName_group_config_updates = \u7ec4: \u914d\u7f6e\u66f4\u65b0
+view_portlet_defaultName_group_events = \u7ec4: \u4e8b\u4ef6\u7edf\u8ba1
+view_portlet_defaultName_group_metrics = \u7ec4: Metrics
+view_portlet_defaultName_group_oobs = \u7ec4: OOB\u72b6\u6001
+view_portlet_defaultName_group_operations = \u7ec4: \u64cd\u4f5c\u96c6
+view_portlet_defaultName_group_pkg_hisory = \u7ec4: \u5386\u53f2\u6570\u636e\u5305
+view_portlet_defaultName_resource_alerts = \u8d44\u6e90: \u544a\u8b66
+view_portlet_defaultName_resource_bundles = \u8d44\u6e90: \u7c7b\u53d1\u5e03
+view_portlet_defaultName_resource_config_updates = \u8d44\u6e90:
\u914d\u7f6e\u66f4\u65b0
+view_portlet_defaultName_resource_events = \u8d44\u6e90: \u4e8b\u4ef6\u7edf\u8ba1
+view_portlet_defaultName_resource_metrics = \u8d44\u6e90: \u5c5e\u6027
+view_portlet_defaultName_resource_oobs = \u8d44\u6e90: OOB Metrics
+view_portlet_defaultName_resource_operations = \u8d44\u6e90: \u64cd\u4f5c
+view_portlet_defaultName_resource_pkg_hisory = \u8d44\u6e90:
\u5386\u53f2\u6570\u636e\u5305
+
+view_portlet_help_autodiscovery = \u6b64portlet\u5141\u8bb8\u5bfc\u5165
\u6216\u8005\u5931\u6548\u65b0\u53d1\u73b0\u7684\u8d44\u6e90.
\u5bfc\u5165\u7684\u8d44\u6e90\u5c06\u4f1a\u6dfb\u52a0\u81f3\u76d1\u63a7\u548c\u7ba1\u7406\u6e05\u5355\u4e2d\uff0c\u5931\u6548\u7684\u8d44\u6e90\u5c06\u4e0d\u4f1a\u88ab\u5bfc\u5165\u5e76\u4e14
\u662f\u4e0d\u53ef\u89c1\u7684\uff0c\u9664\u975e\u660e\u786e\u6307\u5b9a\u4e0d\u53ef\u5931\u6548.
+view_portlet_help_bundle_deps =
\u6b64portlet\u5c55\u793a\u57fa\u4e8e\u6807\u51c6\u914d\u7f6e\u663e\u793a\u7684\u76f8\u5173\u53d1\u5e03\u7c7b.
+view_portlet_help_config_updates
=\u6b64portlet\u5c55\u793a\u4e0e\u914d\u7f6e\u8bbe\u7f6e\u517c\u5bb9\u7684\u6700\u65b0\u7684\u914d\u7f6e\u4fee\u6539.
+view_portlet_help_eventcounts = This portlet displays Event counts consistent with
display criteria configured.
+view_portlet_help_favoriteResources = This portlet displays the current user''s
favorite resources.
+view_portlet_help_graph = This portlet displays the resource metric graph.
+view_portlet_help_inventorySummary = This portlet displays a short summary of the current
user''s viewable inventory and metric collection rate.
+view_portlet_help_mashup = This portlet displays the returned content of a remote HTTP
request (via an iframe).
+view_portlet_help_metrics = This portlet graphs relevant recent metric data based on
display criteria configured.
+view_portlet_help_message = This portlet displays a static HTML message. The
<i>message</i> property must be configured.
+view_portlet_help_oobs = This portlet displays OOB(Out of Bound) metric conditions.
+view_portlet_help_operations = This portlet displays the most recently executed
operations for the current user''s inventory.
+view_portlet_help_scheduledOperations = This portlet displays the next scheduled
operations for the current user''s inventory.
+view_portlet_help_operations_criteria = This portlet displays Operations consistent with
display criteria configured.
+view_portlet_help_pkg_history = This portlet shows relevant package history based on
display criteria configured.
+view_portlet_help_platformSummary = This portlet displays utilization data (such as
current CPU and memory usage) for platform resources that are accessible by the current
user.
+view_portlet_help_problemResources = This portlet displays the current user''s
alerted or unavailable resources.
+view_portlet_help_recentAlerts = This portlet displays alerts recently fired on the
current user''s viewable inventory.
+view_portlet_help_recentlyAdded = This portlet displays resources that have recently been
imported into inventory.
+view_portlet_help_tagCloud = This portlet displays the relative tag counts for the
current user''s inventory.
+view_portlet_help_none = There is no help available for this portlet.
+
+view_portlet_configure_needed = \u70b9\u51fb\u8bbe\u7f6e\u6309\u94ae\u914d\u7f6eportlet.
+view_portlet_configure_notNeeded = \u6b64 portlet\u65e0\u9700\u914d\u7f6e.
+view_portlet_configure_definitionTitle = Portlet\u914d\u7f6e
+view_portlet_configure_definitionDesc = portlet\u914d\u7f6e\u8bbe\u7f6e\u63cf\u8ff0.
+
+view_portlet_autodiscovery_setting_platforms = \u5e73\u53f0\u7ed3\u679c\u96c6
+
+view_portlet_graph_configure_resource_graph = The resource to graph
+view_portlet_graph_configure_metricDefinition_graph = The metric definition id to graph
+
+view_portlet_inventory_error1 = Failed to retrieve inventory summary
+view_portlet_inventory_tooltip_expand = Click to show more details for this resource.
+view_portlet_inventory_tooltip_collapse = Click to hide details for this resource.
+
+view_portlet_message_title = \u663e\u793a\u4fe1\u606f.
+
+view_portlet_operations_config_completed_maximum =
\u80fd\u5c55\u793a\u7684\u5df2\u5b8c\u6210\u64cd\u4f5c\u7684\u6700\u5927\u6570.
+view_portlet_operations_config_completed_enable =
\u662f\u5426\u5bf9\u7edf\u8ba1\u8868\u76d8\u7684\u5df2\u5b8c\u6210\u64cd\u4f5c\u7684\u7ed3\u679c\u5206\u7ec4.
+view_portlet_operations_config_scheduled_enable =
\u662f\u5426\u5bf9\u7edf\u8ba1\u8868\u76d8\u7684\u8c03\u5ea6\u4e2d\u64cd\u4f5c\u7684\u7ed3\u679c\u5206\u7ec4.
+view_portlet_operations_config_scheduled_maximum
=\u80fd\u5c55\u793a\u7684\u8c03\u5ea6\u64cd\u4f5c\u7684\u6700\u5927\u6570.
+view_portlet_operations_config_completed = \u5df2\u5b8c\u6210\u7684\u64cd\u4f5c
+view_portlet_operations_config_show_last = show last
+view_portlet_operations_config_show_next = show next
+view_portlet_operations_disabled =
(\u76ee\u524d\u7ed3\u679c\u96c6\u7981\u7528.\u4fee\u6539\u8bbe\u7f6e\u4f7f\u5176\u751f\u6548.
+
+view_portlet_platform_platform_error_1 = Failed to load platform metrics
+view_portlet_platform_type_error_1 = \u65e0\u6cd5\u52a0\u8f7d\u7c7b\u578b\u6570\u636e
+
+view_portlet_problemResources_config_display_maximum =
\u80fd\u5c55\u793a\u7684\u95ee\u9898\u8d44\u6e90\u7684\u6700\u5927\u6570.
+view_portlet_problemResources_config_display_range =
\u663e\u793a\u6570\u5c0f\u65f6\u5185\u6062\u590d\u6b63\u5e38\u7684\u95ee\u9898\u8d44\u6e90.
+view_portlet_problemResources_config_display_range2 = \u4ece {0} \u5230 {1}
+view_portlet_problemResources_maxDisplaySetting = \u8d44\u6e90\u6700\u5927\u6570.
+
+view_portlet_recentAlerts_config_members = \u9009\u62e9\u6210\u5458
+view_portlet_recentAlerts_config_priority_label = \u4e4b\u524d\u7684\u544a\u8b66,
+view_portlet_recentAlerts_config_when = \u5728\u8fc7\u53bb
+view_portlet_recentAlerts_fail_msg =
\u52a0\u8f7d\u544a\u8b66\u8fc7\u6ee4\u7684\u6307\u5b9a\u8d44\u6e90\u5931\u8d25.
+
+view_portlet_recentlyAdded_setting_addedPlatforms = \u65b0\u6dfb\u52a0\u5e73\u53f0
+view_portlet_recentlyAdded_error1 =
\u52a0\u8f7d\u6700\u65b0\u6dfb\u52a0\u7684\u8d44\u6e90\u5931\u8d25
+view_portlet_results_empty =
\u4f7f\u7528\u6307\u5b9a\u7684\u6807\u51c6\u65e0\u7ed3\u679c\u8fd4\u56de.
+
+# =================== Inventory =====================
+view_inventory_adq = Discovery Queue
+view_inventory_sectionHelp =
\u6b64\u6a21\u5757\u53ef\u4ee5\u67e5\u770b\u548c\u7ba1\u7406\u65b0\u53d1\u73b0\u7684\u8d44\u6e90,\u5206\u7c7b\u7684\u8d44\u6e90\u548c\u7ec4.
+view_inventory_problemGroups = \u95ee\u9898\u7ec4
+view_inventory_collectionInterval = \u641c\u96c6\u95f4\u9694
+view_inventory_mixed = \u6df7\u5408
+view_inventory_unavailableServers = \u4e0d\u53ef\u7528\u7684\u670d\u52a1
+view_inventory_groups = \u7ec4
+view_inventory_allGroups = \u6240\u6709\u7ec4
+view_inventory_allResources = \u6240\u6709\u8d44\u6e90
+view_inventory_platforms = \u5e73\u53f0
+view_inventory_servers = \u670d\u52a1\u5668
+view_inventory_services = \u670d\u52a1
+view_inventory_summary_agent_error1 =
\u67e5\u627e\u5ba2\u6237\u7aef\u7ba1\u7406\u7684\u8d44\u6e90id\u5931\u8d25
+view_inventory_summary_agent_error2 =
\u5ba2\u6237\u7aef\u7ba1\u7406\u7684\u8d44\u6e90ping\u4e0d\u901a
+view_inventory_summary_agent_error3 =
\u6ca1\u6709\u6743\u9650\u67e5\u770b\u6b64\u5ba2\u6237\u7aef\u7684\u8be6\u7ec6\u4fe1\u606f.
+view_inventory_summary_agent_fullEnpoint = Full Endpoint
+view_inventory_summary_agent_fullEnpoint_err1 = !No remote endpoint associated with this
resource!
+view_inventory_summary_agent_last_title =
\u6700\u540e\u63a5\u6536\u5230\u7684\u53ef\u7528\u4fe1\u606f\u62a5\u544a
+view_inventory_summary_agent_status_title = \u5ba2\u6237\u7aef\u901a\u4fe1\u72b6\u6001
+view_inventory_summary_agent_title = \u5ba2\u6237\u7aef\u7ba1\u7406\u6b64\u8d44\u6e90
+view_inventory_dynagroupDefs = \u52a8\u6001\u7ec4\u5b9a\u4e49
+view_metric_traits = Traits
+view_metric_viewTraitHistory = Value History for Trait [{0}]
+view_inventory_eventHistory_groupEventHistory = Group Event History
+view_inventory_eventHistory_resourceEventHistory = Resource Event History
+view_inventory_eventHistory_sourceFilter = Source Filter
+view_inventory_eventHistory_detailsFilter = Details Filter
+view_inventory_eventHistory_severityFilter = Severity Filter
+view_inventory_eventHistory_timestamp = Timestamp
+view_inventory_eventHistory_severity = Severity
+view_inventory_eventHistory_details = Details
+view_inventory_eventHistory_sourceLocation = Source Location
+view_inventory_eventHistory_deleteSuccessful = You have successfully deleted [{0}] events
for [{1}]
+view_inventory_eventHistory_deleteFailed = Failed to deleted selected events for [{0}]
+view_inventory_eventHistory_purgeSuccessful = You have successfully purged [{0}] events
for [{1}]
+view_inventory_eventHistory_purgeFailed = Failed to purge events for [{0}]
+view_inventory_eventDetails_loadFailed = An error occurred loading the event details
+view_inventory_groups_resourceGroups = Resource Groups
+view_inventory_groups_children = \u5b50\u7ec4
+view_inventory_groups_descendants = \u540e\u4ee3\u7ec4
+view_inventory_groups_deleteSuccessful =
\u6210\u529f\u7684\u5220\u9664\u6307\u5b9a\u7684\u8d44\u6e90\u7ec4
+view_inventory_groups_deleteFailed =
\u5220\u9664\u6307\u5b9a\u7684\u8d44\u6e90\u7ec4\u5931\u8d25
+view_inventory_groups_loadFailed = Failed to load group composite data
+view_inventory_resource_loadFailed = id\u4e3a
[{0}]\u7684\u8d44\u6e90\u4e0d\u5b58\u5728\u6216\u8005\u4e0d\u53ef\u8fbe
+view_inventory_resources_deleteConfirm =
\u786e\u5b9a\u5220\u9664\u9009\u4e2d\u7684\u8d44\u6e90\uff1f
+view_inventory_resources_deleteSuccessful =
\u6210\u529f\u7684\u5220\u9664\u6307\u5b9a\u7684\u8d44\u6e90
+view_inventory_resources_deleteFailed =
\u5220\u9664\u6307\u5b9a\u7684\u8d44\u6e90\u5931\u8d25
+view_inventory_resources_uninventoryConfirm =
\u786e\u5b9a\u628a\u9009\u4e2d\u7684\u8d44\u6e90\u4ece\u6e05\u5355\u4e2d\u5220\u9664?
\u6ce8\u610f\uff1a\u5982\u679c\u67d0\u4e2a\u9009\u4e2d\u7684\u8d44\u6e90\u4f9d\u7136\u5b58\u5728,
\u5219\u7cfb\u7edf\u4f1a\u5728\u6b64\u8d44\u6e90\u7684\u5ba2\u6237\u7aef\u7a0b\u5e8f\u4e0b\u6b21\u63a2\u7d22\u626b\u63cf\u65f6\u91cd\u65b0\u52a0\u8f7d\u6b64\u8d44\u6e90.
+view_inventory_resources_uninventorySuccessful
=\u6210\u529f\u4ece\u6e05\u5355\u4e2d\u5220\u9664\u9009\u4e2d\u7684\u8d44\u6e90
+view_inventory_resources_uninventoryFailed =
\u4ece\u6e05\u5355\u4e2d\u5220\u9664\u9009\u4e2d\u7684\u8d44\u6e90\u5931\u8d25
+view_inventory_resources_loadFailed = Failed to load resource composite data
+view_inventory_resources_title = Resources
+view_inventory_resources_title_children = \u5b50\u8d44\u6e90
+view_inventory_resources_title_members = \u6210\u5458\u8d44\u6e90
+view_resource_inventory_activity_changed_by=Changed by
+view_resource_inventory_activity_criteria_no_recent_events=No event counts based off
display criteria.
+view_resource_inventory_activity_no_recent_alerts=\u65e0\u6700\u65b0\u544a\u8b66
+view_resource_inventory_activity_no_recent_bundle_deploy=No recent bundle deployments
+view_resource_inventory_activity_no_recent_config_history=No configuration change
history
+view_resource_inventory_activity_no_recent_events =No events in the last 24 hours
+view_resource_inventory_activity_no_recent_metrics=This resource has no recent metrics
+view_resource_inventory_activity_no_recent_oob=No OOB conditions found
+view_resource_inventory_activity_no_recent_operations=No recent operation history
+view_resource_inventory_activity_no_recent_pkg_history=No recent package history
+view_resource_inventory_childhistory_createdChild = Created Child
+view_resource_inventory_childhistory_deletedChild = Deleted Child
+view_resource_inventory_childhistory_status_invalidArtifact = Invalid Artifact
+view_resource_inventory_childhistory_status_invalidConfig = \u65e0\u6548\u914d\u7f6e
+view_resource_inventory_childhistory_filterTitle = Past N Days
+view_resource_monitor_availability_loadFailed = Failed to load availability history
+view_resource_monitor_graphs_noneAvailable = No graphs available
+view_resource_monitor_graphs_loadFailed = Failed to load graph data
+view_resource_monitor_graphs_lookupFailed = Failed to find resource for graph
+view_resource_monitor_graph_instructions = Point your mouse to a data point on the chart
+view_resource_monitor_graph_live_tooltip = Click for a live graph of current values
+view_resource_monitor_table_min = Minimum
+view_resource_monitor_table_max = Maximum
+view_resource_monitor_table_avg = Average
+view_resource_monitor_table_last = Last
+view_resource_monitor_table_alerts = Alerts
+view_resource_monitor_detailed_graph_label = Detailed Graph
+view_resource_monitor_calltime_title = Call Time Data
+view_resource_monitor_calltime_destination = Call Destination
+view_resource_monitor_calltime_count = Count
+view_resource_monitor_calltime_minimum = Minimum
+view_resource_monitor_calltime_average = Average
+view_resource_monitor_calltime_maximum = Maximum
+view_resource_monitor_calltime_total = Total
+view_resource_monitor_calltime_loadFailed = Could not load call time data
+view_resource_monitor_calltime_lookupFailed = Could not load resource for call time
+view_resource_monitor_calltime_editFailed = Call time data can not be edited
+view_resource_monitor_schedules_title = Resource Metric Collection Schedules
+view_resource_title_tagUpdateFailed = Failed to update resource tags
+view_resource_title_component_errors_tooltip = Shows managed component errors. Click for
details
+view_tree_common_loadFailed_generic = Failed to load data for tree
+view_tree_common_loadFailed_root = Failed to load root for tree
+view_tree_common_loadFailed_descendants = Failed to load descendants for tree
+view_tree_common_loadFailed_children = Failed to load children for node
+view_tree_common_createFailed_autoCluster = Failed to create or update autocluster
backing group
+view_tree_common_loadFailed_group = Failed to load group with id [{0}]
+view_tree_common_loadFailed_groupTree = Failed to load group tree
+view_tree_common_loadFailed_selection = Failed to select this node
+view_tree_common_loadFailed_node = Failed to load data for this node
+view_tree_common_loadFailed_create = Failed to create view for this node
+view_tree_common_loadFailed_update = Failed to update view for this node
+view_tree_common_contextMenu_loadFail_children = Failed to load platform manual add
children
+view_tree_common_contextMenu_loadFail_dashboards = Failed to load user dashboards
+view_tree_common_contextMenu_loadFail_group = Failed to load group for context menu
+view_tree_common_contextMenu_type_name_label = Type: {0}
+view_tree_common_contextMenu_resourceConfiguration = Resource Configuration
+view_tree_common_contextMenu_editPluginConfiguration = Edit [{0}] Plugin Configuration
+view_tree_common_contextMenu_editResourceConfiguration = Edit [{0}] Resource
Configuration
+view_tree_common_contextMenu_operations = Operations
+view_tree_common_contextMenu_operations_loadFailed = Failure to start wizard for running
operations
+view_tree_common_contextMenu_measurements = Measurements
+view_tree_common_contextMenu_addChartToDashboard = Add chart to dashboard [{0}]
+view_tree_common_contextMenu_resourceGraph = Resource Metric Graph
+view_tree_common_contextMenu_groupGraph = Group Metric Graph
+view_tree_common_contextMenu_saveChartToDashboardSuccessful =
\u6210\u529f\u4fdd\u5b58\u7edf\u8ba1\u8868\u76d8 [{0}]
+view_tree_common_contextMenu_saveChartToDashboardFailure =
\u4fdd\u5b58\u7edf\u8ba1\u8868\u76d8\u5931\u8d25
+view_tree_common_contextMenu_loadFailed_dashboard =
\u52a0\u8f7d\u7528\u6237\u7edf\u8ba1\u8868\u76d8\u5931\u8d25
+view_tree_common_contextMenu_loadFailed_manualAddChildren = Failed to load platform
manual add children
+view_tree_group_error_updateAutoCluster = Failed to create or update autocluster backing
group. key: [{0}]
+view_tabs_common_activity = Activity
+view_tabs_common_agent = Agent
+view_tabs_common_summary = \u6982\u8981
+view_tabs_common_overview = \u6982\u89c8
+view_tabs_common_dashboard = \u7edf\u8ba1\u8868\u76d8
+view_tabs_common_timeline = \u65f6\u95f4\u8f74
+view_tabs_common_monitoring = \u76d1\u63a7
+view_tabs_common_graphs = Graphs
+view_tabs_common_tables = Tables
+view_tabs_common_traits = Traits
+view_tabs_common_availability = \u53ef\u7528\u6027
+view_tabs_common_schedules = Schedules
+view_tabs_common_calltime = Calltime
+view_tabs_common_inventory = \u6e05\u5355
+view_tabs_common_groups = Groups
+view_tabs_common_members = Members
+view_tabs_common_group_members = \u7ec4\u5458
+view_tabs_common_group_membership = \u7ec4\u6210\u5458\u5173\u7cfb
+view_tabs_common_child_resources = \u5b50\u8d44\u6e90
+view_tabs_common_child_history = \u5b50\u5386\u53f2
+view_tabs_common_connectionSettings = \u8fde\u63a5\u8bbe\u7f6e
+view_tabs_common_connectionSettingsHistory = \u5386\u53f2\u8fde\u63a5\u8bbe\u7f6e
+view_tabs_common_operations = \u64cd\u4f5c
+view_tabs_common_schedule = \u8c03\u5ea6
+view_tabs_common_history = \u5386\u53f2
+view_tabs_common_alerts = \u544a\u8b66
+view_tabs_common_definitions = \u5b9a\u4e49
+view_tabs_common_current = \u5f53\u524d
+view_tabs_common_events = \u4e8b\u4ef6
+view_tabs_common_configuration = \u914d\u7f6e
+view_tabs_common_content = \u5185\u5bb9
+view_tabs_common_deployed = \u5df2\u53d1\u5e03
+view_tabs_common_new = new
+view_tabs_common_subscriptions = \u8fd0\u884c\u673a\u5236
+view_titleBar_common_updateTagsSuccessful =
[{0}]\u7684\u6807\u7b7e\u5df2\u7ecf\u66f4\u65b0
+view_titleBar_common_updateTagsFailure = Failed to update the tags for [{0}]
+view_titleBar_common_loadTagsFailure = Failed to load the tags for [{0}]
+view_titleBar_common_clickToRemoveFav = Click to remove this as a favorite
+view_titleBar_common_clickToAddFav = Click to add this as a favorite
+view_titleBar_common_removedFav = \u79fb\u52a8[{0}]\u5230\u5e38\u7528\u83dc\u5355
+view_titleBar_common_addedFav = \u6dfb\u52a0 [{0}]\u5230\u5e38\u7528\u83dc\u5355
+view_titleBar_common_removedFavFailure =
\u79fb\u52a8[{0}]\u5230\u5e38\u7528\u83dc\u5355\u5931\u8d25
+view_titleBar_common_addedFavFailure = Failed to add [{0}] as a favorite
+view_titleBar_group_failInfo = Failed to get general info on group [{0}] with ID [{1}]
+view_titleBar_group_summary_collapsedTooltip =
\u70b9\u51fb\u67e5\u770b\u6b64\u7ec4\u7684\u66f4\u591a\u4fe1\u606f
+view_titleBar_group_summary_expandedTooltip =
\u70b9\u51fb\u9690\u85cf\u6b64\u7ec4\u7684\u66f4\u591a\u4fe1\u606f
+view_dynagroup_expressionSet = \u8868\u8fbe\u5f0f\u7ec4
+view_dynagroup_recalculationInterval = Recalculation Interval (ms)
+view_dynagroup_lastCalculationTime = \u4e0a\u6b21\u8ba1\u7b97\u6301\u7eed\u65f6\u95f4
+view_dynagroup_nextCalculationTime = \u4e0b\u6b21\u8ba1\u7b97\u6301\u7eed\u65f6\u95f4
+view_dynagroup_definitionCreated =
\u60a8\u6210\u529f\u7684\u521b\u5efa\u540d\u79f0\u4e3a[{0}]\u7684\u7ec4\u5b9a\u4e49
+view_dynagroup_definitionLoadFailure =
\u52a0\u8f7d\u6240\u6709\u7684\u7ec4\u5b9a\u4e49\u5931\u8d25
+view_dynagroup_definitionAlreadyExists =
\u5df2\u7ecf\u5b58\u5728\u4ee5\u8be5\u540d\u79f0\u547d\u540d\u7684\u7ec4\u5b9a\u4e49
+view_dynagroup_saveSuccessful =
\u60a8\u6210\u529f\u7684\u4fdd\u5b58\u4e86\u540d\u79f0\u4e3a[{0}]\u7684\u7ec4\u5b9a\u4e49
+view_dynagroup_saveFailure =
\u4fdd\u5b58\u540d\u79f0\u4e3a[{0}]\u7684\u7ec4\u5b9a\u4e49\u5931\u8d25
+view_dynagroup_singleSaveFailure = \u62a5\u9519\u4e86 -
\u6b63\u5e38\u5e94\u8be5\u53ea\u521b\u5efa\u5355\u4e2a\u7ec4\u5b9a\u4e49,
\u4f46\u662f\u5374\u521b\u5efa\u4e86[{0}]\u4e2a.
+view_dynagroup_saveAndRecalculate = Save & Recalculate
+view_dynagroup_recalculate = Recalculate
+view_dynagroup_recalcSuccessful = You have successfully recalculated this group
definition
+view_dynagroup_recalcFailure = Failed to recalculated this group definition
+view_dynagroup_recalcSuccessfulSelection = You have successfully recalculated [{0}] group
definitions
+view_dynagroup_recalcFailureSelection = Failed to recalculated the selected group
definitions
+view_dynagroup_deleteSuccessfulSelection = \u6210\u529f\u7684\u5220\u9664
[{0}]\u7ec4\u5b9a\u4e49
+view_dynagroup_deleteFailureSelection =
\u5220\u9664\u9009\u4e2d\u7684\u7ec4\u5b9a\u4e49\u5931\u8d25
+view_dynagroup_children = \u5b50\u52a8\u6001\u7ec4
+view_dynagroup_newGroupDefinition = \u65b0\u5efa\u7ec4\u5b9a\u4e49
+view_dynagroup_editing = \u7f16\u8f91 [{0}]
+view_dynagroup_expression = \u8868\u8fbe\u5f0f
+view_dynagroup_recursive = \u9012\u5f52
+view_dynagroup_loadDefinitionFailure = \u52a0\u8f7d\u7ec4\u5b9a\u4e49 [{0}]\u5931\u8d25
+view_dynagroup_loadDefinitionMissing = \u6ca1\u6709ID\u662f[{0}]\u7684\u7ec4\u5b9a\u4e49
+view_dynagroup_permDenied =
\u60a8\u6ca1\u6709\u67e5\u770b\u7ec4\u5b9a\u4e49\u7684\u6743\u9650
+view_dynagroup_definitions = \u52a8\u6001\u7ec4\u5b9a\u4e49
+view_dynagroup_template_customExpression = Custom Expression...
+view_dynagroup_template_jbossas4_clusters = JBossAS 4 - \u96c6\u7fa4
+view_dynagroup_template_jbossas5_clusters = JBossAS 5/6 - \u96c6\u7fa4
+view_dynagroup_template_jbossas4_earClusters = JBossAS 4 - Clustered EARs
+view_dynagroup_template_jbossas4_uniqueVersions = JBossAS 4 - Unique versions
+view_dynagroup_template_platforms = Platform resources in inventory
+view_dynagroup_template_uniqueResourceTypes = Unique resource types in inventory
+view_dynagroup_template_jbossas4_hostingApp = JBossAS 4 - All hosting any version of
"my" app
+view_dynagroup_template_jbossas4_nonsecured = JBossAS 4 - All non-secured
+view_dynagroup_template_downedResources = All resources currently down
+view_dynagroup_mixed = Mixed
+view_dynagroup_compatible = \u517c\u5bb9\u6027
+view_dynagroup_expressionBuilderIconTooltip = \u8868\u8fbe\u5f0f\u7f16\u8bd1\u4e2d...
+view_dynagroup_exprBuilder_title = \u8868\u8fbe\u5f0f\u7f16\u8bd1
+view_dynagroup_exprBuilder_expression = \u8868\u8fbe\u5f0f
+view_dynagroup_exprBuilder_expression_tooltip = This is the full expression that is
represented by the selections in the form below. This text will be added to your group
definition expression text when you click the "Add Expression" button.
+view_dynagroup_exprBuilder_addExpression = \u6dfb\u52a0\u8868\u8fbe\u5f0f
+view_dynagroup_exprBuilder_value_tooltip =
\u67e5\u8be2\u8868\u8fbe\u5f0f\u5b57\u7b26\u4e32\u7684\u503c
+view_dynagroup_exprBuilder_comparisonType = Comparison Type
+view_dynagroup_exprBuilder_comparisonType_tooltip = Comparison Type
+view_dynagroup_exprBuilder_unset = \u6062\u590d\u8bbe\u7f6e
+view_dynagroup_exprBuilder_unset_tooltip = Unset will find all of the values that have a
null value in the database. This is not possible using the "=" operator because
of how databases store and query data.
+view_dynagroup_exprBuilder_propertyName = \u5c5e\u6027\u540d\u79f0
+view_dynagroup_exprBuilder_propertyName_tooltip =
\u7528\u4e8e\u67e5\u8be2\u7684\u5c5e\u6027\u540d\u79f0.
\u8fd9\u662f\u7531\u8868\u8fbe\u5f0f\u7c7b\u578b\u548c\u8d44\u6e90\u7c7b\u578b\u51b3\u5b9a\u7684.
+view_dynagroup_exprBuilder_resourceType = \u8d44\u6e90\u7c7b\u578b
+view_dynagroup_exprBuilder_resourceType_tooltip = \u8d44\u6e90\u7c7b\u578b
+view_dynagroup_exprBuilder_definingPlugin = \u5b9a\u4e49\u63d2\u4ef6
+view_dynagroup_exprBuilder_definingPlugin_tooltip = \u67e5\u627e\u63d2\u4ef6
+view_dynagroup_exprBuilder_expressionType = \u8868\u8fbe\u5f0f\u7c7b\u578b
+view_dynagroup_exprBuilder_expressionType_tooltip =
\u6b64\u8868\u8fbe\u5f0f\u6307\u5b9a\u8868\u8fbe\u5f0f\u7684\u5c5e\u6027\u7c7b\u578b:<br/>
\
+<b>\u8d44\u6e90</b>:
\u8d44\u6e90\u5c5e\u6027\uff1a\u6bd4\u5982\u540d\u79f0\u548c\u7248\u672c<br/> \
+<b>\u8d44\u6e90\u7c7b\u578b</b>:
\u641c\u5bfb\u6307\u5b9a\u7c7b\u578b\u7684\u8d44\u6e90<br/> \
+<b>\u8d44\u6e90\u7c7b\u522b</b>:
\u6309\u7167\u7c7b\u522b\u67e5\u627e\u8d44\u6e90: \u5e73\u53f0, \u670d\u52a1\u5668,
\u670d\u52a1<br/> \
+<b>\u7279\u5f81</b>:
\u5b58\u5728\u76d1\u63a7\u70b9\u7684\u8d44\u6e90<br/> \
+<b>\u63d2\u4ef6\u914d\u7f6e</b>:
\u6309\u7167\u63d2\u4ef6\u7ec4\u4ef6\u548c\u7ec4\u4ef6\u7684\u914d\u7f6e\u8bbe\u7f6e\u67e5\u8be2<br/>
\
+<b>\u8d44\u6e90\u914d\u7f6e</b>:
\u6309\u7167\u88ab\u7ba1\u8d44\u6e90\u7684\u914d\u7f6e\u8bbe\u7f6e\u67e5\u8be2
+view_dynagroup_exprBuilder_resource = \u8d44\u6e90
+view_dynagroup_exprBuilder_resource_tooltip =
\u9009\u62e9\u8981\u67e5\u8be2\u8d44\u6e90\u6240\u5728\u7684\u5c42\u7ea7. \u4f8b\u5982,
\u9009\u4e2d
"parent"\u4f1a\u67e5\u8be2\u51fa\u7236\u8d44\u6e90\u7684\u6ee1\u8db3\u5269\u4f59\u8868\u8fbe\u5f0f\u7684\u8d44\u6e90.
+view_dynagroup_exprBuilder_groupBy = \u5206\u7ec4
+view_dynagroup_exprBuilder_groupBy_tooltip = GroupBy will cause the system to pivot on
the values from the entered expressions creating a separate group for each value. For
example, GroupBy on the cluster name to create a group for each cluster with all cluster
members in it.
+view_dynagroup_exprBuilder_resource_resource = Resource
+view_dynagroup_exprBuilder_resource_child = Child
+view_dynagroup_exprBuilder_resource_parent = Parent
+view_dynagroup_exprBuilder_resource_grandparent = Grandparent
+view_dynagroup_exprBuilder_resource_greatGrandparent = GreatGrandparent
+view_dynagroup_exprBuilder_resource_greatGreatGrandparent = GreatGreatGrandparent
+view_dynagroup_exprBuilder_comparisonType_equals = \u76f8\u7b49
+view_dynagroup_exprBuilder_comparisonType_startsWith = starts with
+view_dynagroup_exprBuilder_comparisonType_endsWith = ends with
+view_dynagroup_exprBuilder_comparisonType_contains = \u5305\u542b
+view_dynagroup_exprBuilder_expressionType_resource = \u8d44\u6e90
+view_dynagroup_exprBuilder_expressionType_resourceType = \u8d44\u6e90\u7c7b\u578b
+view_dynagroup_exprBuilder_expressionType_resourceCategory = \u8d44\u6e90\u79cd\u7c7b
+view_dynagroup_exprBuilder_expressionType_trait = \u7279\u5f81
+view_dynagroup_exprBuilder_expressionType_pluginConfig = \u63d2\u4ef6\u914d\u7f6e
+view_dynagroup_exprBuilder_expressionType_resourceConfig = \u8d44\u6e90\u914d\u7f6e
+view_dynagroup_exprBuilder_pluginLoadFailure =
\u65e0\u6cd5\u83b7\u53d6\u63d2\u4ef6\u5217\u8868
+view_dynagroup_exprBuilder_resTypeLoadFailure =
\u65e0\u6cd5\u83b7\u53d6\u63d2\u4ef6[{0}]\u7684\u8d44\u6e90\u7c7b\u578b\u5217\u8868
+view_dynagroup_exprBuilder_propLoadFailure =
\u65e0\u6cd5\u83b7\u53d6\u5c5e\u6027\u5217\u8868
+view_dynagroup_exprBuilder_noResourceTypes = --\u65e0\u8d44\u6e90\u7c7b\u578b--
+view_dynagroup_exprBuilder_noProperties = -\u65e0\u5c5e\u6027--
+view_dynagroup_exprBuilder_noPlugins = --\u65e0\u63d2\u4ef6--
+
+view_group_detail_failLoad =
\u52a0\u8f7d\u7ec4ID\u4e3a[{0}]\u7684\u7ec4\u4fe1\u606f\u5931\u8d25
+view_group_detail_failLoadComp =
\u52a0\u8f7d\u7ec4ID\u4e3a[{0}]\u7684\u6df7\u5408\u7ec4\u4fe1\u606f\u5931\u8d25
+view_group_detail_recursiveChange =
\u6210\u529f\u7684\u4fee\u6539\u7ec4[{0}]\u7684\u9012\u5f52\u8bbe\u7f6e
+view_group_detail_failRecursiveChange =
\u4fee\u6539\u7ec4[{0}]\u7684\u9012\u5f52\u8bbe\u7f6e\u5931\u8d25
+view_group_inventory_activity_no_recent_metrics=\u6b64\u7ec4\u6ca1\u6709\u6700\u65b0\u516c\u544a
+view_group_membership_failFetch = \u83b7\u53d6\u8d44\u6e90\u7ec4\u5931\u8d25
+view_group_membership_saveFailure
=\u4fee\u6539[{0}]\u7684\u7ec4\u6210\u5458\u5173\u7cfb\u5931\u8d25
+view_group_membership_saveSuccessful =
\u6210\u529f\u7684\u4fee\u6539[{0}]\u7684\u7ec4\u6210\u5458\u5173\u7cfb
+view_group_resConfig_edit_saveTooltip =
\u4fee\u6539\u6240\u6709\u7684\u7ec4\u6210\u5458\u914d\u7f6e
+view_group_resConfig_edit_loadFail =
\u68c0\u7d22[{0}]\u7684\u6210\u5458\u8d44\u6e90\u914d\u7f6e\u5931\u8d25
+view_group_resConfig_edit_noperm =
\u60a8\u6ca1\u6709\u6743\u9650\u7f16\u8f91\u7ec4\u914d\u7f6e
+view_group_resConfig_edit_saveInitiated_concise =
\u521d\u59cb\u5316\u7ec4\u914d\u7f6e\u66f4\u65b0\u5b8c\u6210
+view_group_resConfig_edit_saveInitiated_full =
\u6210\u529f\u521d\u59cb\u5316\u8d44\u6e90\u7c7b\u578b[{0}],\u540d\u79f0\u4e3a[{1}]\u7684\u517c\u5bb9\u7ec4\u7ec4\u914d\u7f6e\u66f4\u65b0
+view_group_resConfig_edit_saveFailure
=\u521d\u59cb\u5316\u8d44\u6e90\u7c7b\u578b[{0}],\u540d\u79f0\u4e3a[{1}]\u7684\u517c\u5bb9\u7ec4\u7ec4\u914d\u7f6e\u66f4\u65b0\u5931\u8d25
+view_group_resConfig_edit_valid =
\u6240\u6709\u7684\u5c5e\u6027\u914d\u7f6e\u5747\u6709\u6548,\u53ef\u4ee5\u63d0\u4ea4\u4fdd\u5b58
+view_group_resConfig_edit_invalid =
\u4e0b\u9762\u7684\u5c5e\u6027\u914d\u7f6e\u586b\u5199\u4e86\u65e0\u6548\u7684\u503c
,\u63d0\u4ea4\u4e4b\u524d\u8bf7\u4fee\u6539: [{0}]
+
+view_group_resConfig_view_noperm =
\u60a8\u6ca1\u6709\u6743\u9650\u67e5\u770b\u8d44\u6e90\u914d\u7f6e\u8bbe\u7f6e
+view_group_resConfig_view_groupProperties = \u7ec4\u5c5e\u6027
+view_group_resConfig_table_title = \u5386\u53f2\u8d44\u6e90\u7ec4\u914d\u7f6e
+view_group_resConfig_table_statusDetails = \u8be6\u7ec6\u72b6\u6001
+view_group_resConfig_table_viewSettings = \u67e5\u770b\u8bbe\u7f6e
+view_group_resConfig_table_viewMemberHistory = \u67e5\u770b\u5386\u53f2\u6210\u5458
+view_group_resConfig_table_msg1 =
\u67e5\u770b\u6bcf\u4e2a\u5355\u72ec\u8d44\u6e90\u7684\u6210\u5458\u5386\u53f2\u72b6\u6001
+view_group_resConfig_table_failFetch =
\u83b7\u53d6\u8d44\u6e90\u7ec4\u5386\u53f2\u914d\u7f6e\u5931\u8d25
+view_group_resConfig_table_deleteSuccessful = \u6210\u529f\u5220\u9664 [{0}]
\u5386\u53f2\u9879
+view_group_resConfig_table_deleteFailure =
\u5220\u9664\u5386\u53f2\u8d44\u6e90\u7ec4\u914d\u7f6e\u5931\u8d25
+view_group_resConfig_table_statusSuccess = \u6210\u529f\u4fee\u6539\u7ec4\u914d\u7f6e
+view_group_resConfig_table_statusInprogress =
\u6b64\u7ec4\u914d\u7f6e\u7684\u4fee\u6539\u6b63\u5728\u8fdb\u884c\u4e2d
+view_group_resConfig_table_statusNochange =
\u6ca1\u6709\u5bf9\u6b64\u7ec4\u914d\u7f6e\u505a\u4efb\u4f55\u4fee\u6539
+view_group_resConfig_table_statusFailure = \u7ec4\u914d\u7f6e\u4fee\u6539\u5931\u8d25
+view_group_resConfig_table_clickStatusIcon =
\u70b9\u51fb\u72b6\u6001\u6309\u94ae\u83b7\u53d6\u8be6\u7ec6\u4fe1\u606f
+view_group_resConfig_members_title =
\u8d44\u6e90\u7ec4\u914d\u7f6e\u5386\u53f2\u6210\u5458
+view_group_resConfig_members_fetchFailure
=\u83b7\u53d6\u8d44\u6e90\u7ec4[{0}]\u7684\u6210\u5458\u914d\u7f6e\u4fee\u6539\u5386\u53f2\u8bb0\u5f55\u5931\u8d25
+view_group_resConfig_members_fetchFailureConfig = \u6062\u590d\u8d44\u6e90\u6210\u5458
[{0}]\u7684\u914d\u7f6e\u8bbe\u7f6e
+view_group_resConfig_members_fetchFailureConfigInProgress =
\u6b64\u8d44\u6e90\u7ec4\u914d\u7f6e\u7684\u6b63\u5728\u4fee\u6539\u4e2d\uff0c\u5982\u679c\u8981\u67e5\u770b\u7ec4\u8bbe\u7f6e\uff0c\u9700\u8981\u7b49\u5f85\u6b64\u4fee\u6539\u5168\u90e8\u5b8c\u6210.
+view_group_resConfig_members_statusDetails = \u8be6\u7ec6\u72b6\u6001
+view_group_resConfig_members_statusSuccess =
\u6210\u529f\u7684\u4fee\u6539\u6b64\u914d\u7f6e
+view_group_resConfig_members_statusInprogress =
\u6b63\u4fee\u6539\u6b64\u914d\u7f6e\u4e2d
+view_group_resConfig_members_statusNochange =
\u6ca1\u6709\u5bf9\u6b64\u914d\u7f6e\u505a\u4efb\u4f55\u4fee\u6539
+view_group_resConfig_members_statusFailure =
\u672a\u77e5\u9519\u8bef\uff0c\u4fee\u6539\u914d\u7f6e\u5931\u8d25
+
+view_group_pluginConfig_view_noperm =
\u60a8\u6ca1\u6709\u67e5\u770b\u8fde\u63a5\u8bbe\u7f6e\u7684\u6743\u9650
+view_group_pluginConfig_view_groupProperties = \u7ec4\u5c5e\u6027
+view_group_pluginConfig_table_failFetch =
\u83b7\u53d6\u7ec4\u63d2\u4ef6\u914d\u7f6e\u5386\u53f2\u5931\u8d25
+view_group_pluginConfig_table_title = \u5386\u53f2\u8fde\u63a5\u8bbe\u7f6e\u7ec4
+view_group_pluginConfig_table_statusDetails = \u8be6\u7ec6\u72b6\u6001
+view_group_pluginConfig_table_viewSettings = \u67e5\u770b\u8bbe\u7f6e
+view_group_pluginConfig_table_viewMemberHistory = \u67e5\u770b\u5386\u53f2\u6210\u5458
+view_group_pluginConfig_table_deleteSuccessful = \u60a8\u5220\u9664\u4e86 [{0}]
\u5386\u53f2\u9879
+view_group_pluginConfig_table_deleteFailure
=\u5220\u9664\u7ec4\u63d2\u4ef6\u914d\u7f6e\u5386\u53f2\u5931\u8d25
+view_group_pluginConfig_table_msg1
=\u67e5\u770b\u5355\u72ec\u8d44\u6e90\u7684\u6210\u5458\u5386\u53f2\u72b6\u6001
+view_group_pluginConfig_table_statusSuccess = \u7ec4\u914d\u7f6e\u66f4\u65b0\u6210\u529f
+view_group_pluginConfig_table_statusInprogress = \u7ec4\u914d\u7f6e\u66f4\u65b0\u4e2d
+view_group_pluginConfig_table_statusNochange =
\u6ca1\u6709\u5bf9\u6b64\u7ec4\u914d\u7f6e\u505a\u4efb\u4f55\u4fee\u6539
+view_group_pluginConfig_table_statusFailure =
\u4fee\u6539\u6b64\u7ec4\u914d\u7f6e\u5931\u8d25
+view_group_pluginConfig_table_clickStatusIcon =
\u70b9\u51fb\u72b6\u6001\u6309\u94ae\u83b7\u53d6\u8be6\u7ec6\u4fe1\u606f
+view_group_pluginConfig_members_title =
\u7ec4\u6210\u5458\u8fde\u63a5\u8bbe\u7f6e\u5386\u53f2
+view_group_pluginConfig_members_statusDetails = \u8be6\u7ec6\u72b6\u6001
+view_group_pluginConfig_members_statusSuccess = \u4fee\u6539\u914d\u7f6e\u6210\u529f
+view_group_pluginConfig_members_statusInprogress
=\u6b63\u5728\u4fee\u6539\u914d\u7f6e\u4e2d
+view_group_pluginConfig_members_statusNochange =
\u6ca1\u6709\u5bf9\u914d\u7f6e\u505a\u4efb\u4f55\u4fee\u6539
+view_group_pluginConfig_members_statusFailure =
\u672a\u77e5\u9519\u8bef\uff0c\u914d\u7f6e\u4fee\u6539\u5931\u8d25
+view_group_pluginConfig_members_fetchFailure =
\u83b7\u53d6[{0}]\u7ec4\u6210\u5458\u7684\u63d2\u4ef6\u914d\u7f6e\u66f4\u65b0\u5386\u53f2\u5931\u8d25
+view_group_pluginConfig_members_fetchFailureConn =
\u68c0\u7d22[{0}]\u7684\u6210\u5458\u8fde\u63a5\u8bbe\u7f6e\u5931\u8d25
+view_group_pluginConfig_members_fetchFailureConnInProgress
=\u5f53\u524d\u5df2\u5b58\u5728\u7ec4\u63d2\u4ef6\u914d\u7f6e\u66f4\u65b0\u8fdb\u7a0b .
\u5728\u67e5\u770b\u7ec4\u8bbe\u7f6e\u4e4b\u524d\u9700\u8981\u7b49\u5f85\u66f4\u65b0\u5b8c\u6210.
+view_group_pluginConfig_edit_currentGroupProperties = \u7ec4\u5f53\u524d\u5c5e\u6027
+view_group_pluginConfig_edit_saveTooltip =
\u66f4\u65b0\u6240\u6709\u7684\u7ec4\u6210\u5458\u8fde\u63a5\u8bbe\u7f6e
+view_group_pluginConfig_edit_noperm =
\u60a8\u6ca1\u6709\u6743\u9650\u7f16\u8f91\u6b64\u7ec4\u8fde\u63a5\u8bbe\u7f6e
+view_group_pluginConfig_edit_saveInitiated_concise =
\u7ec4\u8fde\u63a5\u8bbe\u7f6e\u66f4\u65b0\u5df2\u7ecf\u521d\u59cb\u5316
+view_group_pluginConfig_edit_saveInitiated_full = The group connection setting updates
have been initiated for the [{0}] compatible group named [{1}]
+view_group_pluginConfig_edit_saveFailure = Failed to initiate group connection setting
update for [{0}] compatible group named [{1}]
+view_group_pluginConfig_edit_valid = All connection setting properties have valid values,
so the connection settings can now be saved
+view_group_pluginConfig_edit_invalid = The following connection setting properties have
invalid values and must be corrected before the connection settings can be saved: [{0}]
+view_group_meas_schedules_title = Group Metric Collection Schedules
+view_group_summary_nameUpdateFailure = Failed to change the name of the resource group
with ID [{0}] - could not change from [{1}] to [{2}]
+view_group_summary_nameUpdateSuccessful = You have changed the name of the resource group
with ID [{0}] from [{1}] to [{2}]
+view_group_summary_memberType = \u6210\u5458\u7c7b\u578b
+view_group_summary_memberCount = \u6210\u5458\u6570
+view_group_summary_dynamic = \u52a8\u6001
+view_group_summary_recursive = \u9012\u5f52
+view_group_summary_groupDefinition = \u7ec4\u5b9a\u4e49
+view_group_summary_mixed = \u6df7\u5408
+view_group_summary_compatible = \u517c\u5bb9\u7684
+view_group_summary_descUpdateFailure =
\u4fee\u6539ID\u4e3a[{0}]\u7684\u8d44\u6e90\u7ec4\u63cf\u8ff0\u4fe1\u606f\u5931\u8d25
+view_group_summary_descUpdateSuccessful =
\u6210\u529f\u4fee\u6539\u6b64\u8d44\u6e90\u7ec4\u7684\u63cf\u8ff0
+view_group_summary_dynamicNote =
\u52a8\u6001\u7ec4\u7684\u540d\u79f0\u548c\u63cf\u8ff0\u662f\u7ba1\u7406\u5c5e\u6027,\u6240\u4ee5\u4e0d\u80fd\u4fee\u6539
+
+# Connection Settings Details
+#------------------------------------------
+view_connectionSettingsDetails_noPermission =
\u60a8\u6ca1\u6709\u6743\u9650\u7f16\u8f91\u6b64\u8d44\u6e90\u7684\u8fde\u63a5\u8bbe\u7f6e.
+view_connectionSettingsDetails_error_updateFailure =
\u66f4\u65b0\u8fde\u63a5\u8bbe\u7f6e\u5931\u8d25.
+view_connectionSettingsDetails_messageConcise_updateSuccess =
\u8fde\u63a5\u8bbe\u7f6e\u5df2\u66f4\u65b0.
+view_connectionSettingsDetails_messageDetailed_updateSuccess = \u8d44\u6e90
[{0}]\u7684\u8fde\u63a5\u8bbe\u7f6e\u5df2\u7ecf\u66f4\u65b0.
+view_connectionSettingsDetails_allPropertiesValid =
\u6240\u6709\u8fde\u63a5\u8bbe\u7f6e\u7684\u914d\u7f6e\u5df2\u7ecf\u586b\u5199\u4e86\u6709\u6548\u7684\u503c,\u73b0\u5728\u53ef\u4ee5\u4fdd\u5b58\u8bbe\u7f6e.
+view_connectionSettingsDetails_somePropertiesInvalid =
\u4e0b\u9762\u7684\u8fde\u63a5\u8bbe\u7f6e\u4fe1\u606f\u586b\u5199\u4e86\u975e\u6cd5\u7684\u503c:
{0}.
\u5fc5\u987b\u4fee\u6539\u6b64\u4fe1\u606f\u4ee5\u4fbf\u4fdd\u5b58\u6b64\u8bbe\u7f6e.
+
+# Resource Resource Groups
+#-----------------------------------------
+view_resourceResourceGroupList_error_fetchFailure =
\u83b7\u53d6\u8d44\u6e90\u7ec4\u4fe1\u606f\u5931\u8d25.
+view_resourceResourceGroupList_error_updateFailure =
\u66f4\u65b0\u6307\u5b9a\u7684\u8d44\u6e90\u7ec4\u5931\u8d25.
+view_resourceResourceGroupList_message_updateSuccess =
[{0}]\u7684\u7ec4\u6210\u5458\u5df2\u7ecf\u66f4\u65b0.
+
+# Configuration Details
+#-------------------------------
+view_configurationDetails_noPermission
=\u60a8\u6ca1\u6709\u6743\u9650\u7f16\u8f91\u6b64\u8d44\u6e90\u7684\u914d\u7f6e\u4fe1\u606f.
+view_configurationDetails_error_updateFailure = \u66f4\u65b0\u914d\u7f6e\u5931\u8d25.
+view_configurationDetails_messageConcise = \u914d\u7f6e\u66f4\u65b0\u6210\u529f -
\u76ee\u524d\u7248\u672c\u662f {0}.
+view_configurationDetails_messageDetailed = \u8d44\u6e90
[{1}]\u7684\u914d\u7f6e\u7248\u672c\u66f4\u65b0\u5230 {0} .
+view_configurationDetails_allPropertiesValid =
\u6240\u6709\u7684\u914d\u7f6e\u4fe1\u606f\u5df2\u7ecf\u586b\u5199\u4e86\u6709\u6548\u7684\u503c,
\u73b0\u5728\u4fdd\u5b58\u914d\u7f6e.
+view_configurationDetails_somePropertiesInvalid =
\u4e0b\u9762\u7684\u914d\u7f6e\u4fe1\u606f\u586b\u5199\u4e86\u975e\u6cd5\u7684\u503c: {0}.
\u5fc5\u987b\u4fee\u6539\u6b64\u4fe1\u606f\u4ee5\u4fbf\u4fdd\u5b58\u6b64\u914d\u7f6e.
+view_configurationDetails_configNotUpdatedDueToNoChange =
\u7531\u4e8e\u65b0\u65e7\u914d\u7f6e\u4e00\u81f4\uff0c\u6240\u4ee5\u914d\u7f6e\u6ca1\u6709\u66f4\u65b0.
+
+# Resource Configuration History List
+#-------------------------------
+view_configurationHistoryList_title = \u5386\u53f2\u914d\u7f6e
+
+# Abstract Configuration History List
+#-------------------------------
+view_configurationHistoryList_rollback = \u56de\u6eda
+view_configurationHistoryList_rollback_success =
\u60a8\u6210\u529f\u7684\u5c06\u8be5\u914d\u7f6e\u56de\u6eda\u5230\u9009\u4e2d\u7684\u5386\u53f2\u914d\u7f6e.
+view_configurationHistoryList_rollback_failure = \u56de\u6eda\u914d\u7f6e\u5931\u8d25.
\u539f\u6765\u7684\u914d\u7f6e\u4f9d\u7136\u751f\u6548.
+view_configurationHistoryList_delete_success =
\u60a8\u6210\u529f\u7684\u5220\u9664\u4e86\u9009\u4e2d\u7684\u5386\u53f2\u914d\u7f6e\u9879.
+view_configurationHistoryList_delete_failure =
\u5220\u9664\u5386\u53f2\u914d\u7f6e\u9879\u5931\u8d25
+view_configurationHistoryList_cannotDeleteGroupItems =
\u4e00\u4e2a\u6216\u591a\u4e2a\u9009\u4e2d\u7684\u5386\u53f2\u914d\u7f6e\u9879\u662f\u67d0\u4e2a\u7ec4\u914d\u7f6e\u7684\u4e00\u90e8\u5206\u3002
\
+\u5728\u5220\u9664\u5355\u4e2a\u7684\u5386\u53f2\u914d\u7f6e\u4fe1\u606f\u4e4b\u524d\uff0c\u5fc5\u987b\u5148\u5220\u9664
\u4e0a\u4e00\u7ea7\u7684\u5386\u53f2\u7ec4\u914d\u7f6e.
+view_configurationHistoryList_cannotDeleteCurrent
=\u9009\u4e2d\u7684\u5386\u53f2\u914d\u7f6e\u4e2d\u7684\u4e00\u9879\u662f\u73b0\u6709\u751f\u6548\u7684\u914d\u7f6e
- \u4f60\u4e0d\u80fd\u5220\u9664\u5b83.
+view_configurationHistoryList_table_statusSuccess =
\u6b64\u914d\u7f6e\u6210\u529f\u66f4\u65b0
+view_configurationHistoryList_table_statusInprogress =
\u66f4\u65b0\u6b64\u914d\u7f6e\u7684\u64cd\u4f5c\u6b63\u5728\u8fdb\u884c\u4e2d
+view_configurationHistoryList_table_statusNochange =
\u6ca1\u6709\u5bf9\u6b64\u914d\u7f6e\u505a\u4efb\u4f55\u4fee\u6539
+view_configurationHistoryList_table_statusFailure =
\u6b64\u914d\u7f6e\u66f4\u65b0\u5931\u8d25
+view_configurationHistoryList_table_clickStatusIcon =
\u70b9\u51fb\u72b6\u6001\u6309\u94ae\u83b7\u53d6\u8be6\u7ec6\u7684\u4fe1\u606f
+
+# Configuration History Details
+#------------------------------------------
+view_configurationHistoryDetails_error_loadFailure =
\u65e0\u6cd5\u52a0\u8f7d\u5386\u53f2\u914d\u7f6e.
+
+
+# Operation Schedule List
+#------------------------
+xxx =
+
+# Operation Schedule Details
+#---------------------------
+view_operationScheduleDetails_operationSchedule = \u64cd\u4f5c\u8ba1\u5212
+view_operationScheduleDetails_field_description = \u63cf\u8ff0
+view_operationScheduleDetails_field_parameters = \u53c2\u6570
+view_operationScheduleDetails_field_timeout = \u8d85\u65f6
+view_operationScheduleDetails_fieldHelp_timeout = \u64cd\u4f5c\u6301\u7eed\u65f6\u95f4 -
\u5982\u679c\u6307\u5b9a,
\u5e76\u4e14\u8d85\u8fc7\u4e86\u6307\u5b9a\u7684\u65f6\u95f4\u64cd\u4f5c\u6ca1\u6709\u5b8c\u6210,
RHQ
\u670d\u52a1\u5224\u5b9a\u6b64\u64cd\u4f5c\u8d85\u65f6\u5e76\u4e14\u6807\u4e3a\u5931\u8d25;
\u63d0\u793a, \u901a\u5e38
\u4e0d\u53ef\u80fd\u7ec8\u6b62\u5df2\u7ecf\u5f00\u59cb\u8fd0\u884c\u7684\u540e\u53f0\u8d44\u6e90\u7ba1\u7406\u7684\u64cd\u4f5c.
+view_operationScheduleDetails_fieldHelp_description =
\u6b64\u8c03\u5ea6\u64cd\u4f5c\u7684\u53ef\u9009\u63cf\u8ff0 (e.g.
\u6bcf\u591c\u7ef4\u62a4\u5e94\u7528\u670d\u52a1\u91cd\u542f)
+view_operationScheduleDetails_fieldDefault_description =
\u9009\u62e9\u64cd\u4f5c\u67e5\u770b\u63cf\u8ff0.
+view_operationScheduleDetails_fieldDefault_parameters =
\u9009\u62e9\u64cd\u4f5c\u67e5\u770b\u6240\u9700\u7684\u53c2\u6570.
+view_operationScheduleDetails_noParameters =
\u6b64\u64cd\u4f5c\u4e0d\u9700\u8981\u4efb\u4f55\u53c2\u6570.
+view_operationScheduleDetails_enterParametersBelow =
\u8f93\u5165\u4e0b\u9762\u7684\u53c2\u6570...
+
+view_group_operationScheduleDetails_failedToLoadMembers =
\u52a0\u8f7d\u7ec4\u6210\u5458\u4fe1\u606f\u5931\u8d25.
+view_group_operationScheduleDetails_field_execute = \u6267\u884c
+view_group_operationScheduleDetails_value_parallel =
\u91c7\u53d6\u5e76\u884c\u7684\u65b9\u5f0f
+view_group_operationScheduleDetails_value_sequential =
\u6309\u7167\u5982\u4e0b\u7684\u987a\u5e8f
(\u6dfb\u52a0\u6216\u8005\u5220\u9664\u6210\u5458\u4ee5\u4fee\u6539\u987a\u5e8f)
+view_group_operationScheduleDetails_field_haltOnFailure =
\u5931\u8d25\u65f6\u505c\u6b62?
+view_group_operationScheduleDetails_memberResource = \u6210\u5458\u4fe1\u606f
+
+
+# Operation History List
+#-----------------------
+view_operationHistoryList_title = \u64cd\u4f5c\u5386\u53f2
+view_operationHistoryList_button_runOperation = \u6267\u884c\u64cd\u4f5c
+view_operationHistoryList_button_forceDelete = \u5f3a\u5236\u5220\u9664
+view_operationHistoryList_notYetStarted = \u8fd8\u672a\u5f00\u59cb
+
+# Operation History Details
+#--------------------------
+view_operationHistoryDetails_error_fetchFailure =
\u52a0\u8f7d\u64cd\u4f5c\u5386\u53f2\u5931\u8d25.
+view_operationHistoryDetails_operation = \u64cd\u4f5c
+view_operationHistoryDetails_dateSubmitted = Date Submitted
+view_operationHistoryDetails_dateCompleted = Date Completed
+view_operationHistoryDetails_requestor = \u8bf7\u6c42
+view_operationHistoryDetails_status = \u72b6\u6001
+view_operationHistoryDetails_parameters = \u53c2\u6570
+view_operationHistoryDetails_results = \u7ed3\u679c
+view_operationHistoryDetails_noResults =
\u6b64\u64cd\u4f5c\u6ca1\u6709\u4efb\u4f55\u8fd4\u56de.
+
+
+# Summary Overview
+#-----------------------------
+view_summaryOverview_header_detectedErrors = \u5df2\u68c0\u6d4b\u5230\u7684\u9519\u8bef
+view_summaryOverview_tooltip_detectedErrors =
\u70b9\u51fb\u5bf9\u5e94\u7684\u884c\u67e5\u770b\u9519\u8bef\u4fe1\u606f.
+view_summaryOverview_title_errorDetailsWindow = \u9519\u8bef\u8be6\u7ec6
+
+# Summary Overview Form
+#-------------------------------------
+view_summaryOverviewForm_field_type = \u7c7b\u578b
+view_summaryOverviewForm_field_name = \u5b57\u6bb5\u540d
+view_summaryOverviewForm_field_description = \u63cf\u8ff0
+view_summaryOverviewForm_field_location = \u4f4d\u7f6e
+view_summaryOverviewForm_field_version = \u7248\u672c\u53f7
+view_summaryOverviewForm_error_traitsLoadFailure = \u52a0\u8f7d
{0}\u7684\u5c5e\u6027\u4fe1\u606f\u5931\u8d25.
+view_summaryOverviewForm_label_plugin = \u63d2\u4ef6\u6807\u7b7e:
+view_summaryOverviewForm_label_type = \u6807\u7b7e\u7c7b\u578b:
+view_summaryOverviewForm_header_summary = \u7edf\u8ba1
+view_summaryOverviewForm_error_nameChangeFailure = Failed to change name of Resource with
id {0} from [{1}] to [{2}].
+view_summaryOverviewForm_message_nameChangeSuccess = Name of Resource with id {0} was
changed from [{1}] to [{2}].
+view_summaryOverviewForm_error_descriptionChangeFailure = Failed to change description of
Resource with id {0} from [{1}] to [{2}].
+view_summaryOverviewForm_message_descriptionChangeSuccess = Description of Resource with
id {0} was changed from [{1}] to [{2}].
+view_summaryOverviewForm_error_locationChangeFailure = Failed to change location of
Resource with id {0} from [{1}] to [{2}].
+view_summaryOverviewForm_message_locationChangeSuccess = Location of Resource with id {0}
was changed from [{1}] to [{2}].
+
+# Summary Dashboard
+#-----------------------------
+view_summaryDashboard_resetConfirm =
\u6062\u590d\u5230\u9ed8\u8ba4\u7684\u7edf\u8ba1\u56fe\u8868
(\u653e\u5f03\u4e4b\u524d\u4fdd\u5b58\u7684\u4fe1\u606f)?
+
+# Group Inventory>Members subtab
+#-----------------------------------------
+view_groupInventoryMembers_button_updateMembership =
\u66f4\u65b0\u6210\u5458\u5173\u7cfb\u4e2d...
+view_groupInventoryMembers_title_updateMembership = \u66f4\u65b0\u6210\u5458\u5173\u7cfb
+
+
+#==================== Reports ======================
+
+view_reportsTop_title = \u62a5\u8868
+view_reportsTop_description =
\u8be5\u90e8\u5206\u5185\u5bb9\u63d0\u4f9b\u4e86\u5168\u5c40\u62a5\u8868\u7684\u5165\u53e3.
+view_reports_platforms = \u5e73\u53f0\u4f7f\u7528\u7387\u62a5\u8868
+view_reports_subsystems = \u5b50\u7cfb\u7edf\u62a5\u8868
+view_reports_alertDefinitions = \u544a\u8b66\u5b9a\u4e49
+
+view_measurementOob_title = Suspect Metrics
+
+view_tagCloud_title = \u6807\u7b7e\u96c6
+view_tagCloud_error_fetchFailure = \u52a0\u8f7d\u6807\u7b7e\u5931\u8d25.
+view_tagCloud_error_tagUsedCount = \u6807\u7b7e\u4f7f\u7528 {0} \u6b21.
+view_tagCloud_deleteTag = \u5220\u9664\u6807\u7b7e
+view_tagCloud_deleteTagFailure = \u5220\u9664\u6807\u7b7e [{0}] \u5931\u8d25
+view_tagCloud_deleteTagSuccess = \u6210\u529f\u7684\u5220\u9664\u4e86\u6807\u7b7e [{0}]
+
+view_reports_inventorySummary_failFetch =
\u83b7\u53d6\u7edf\u8ba1\u6e05\u5355\u5931\u8d25
+
+view_taggedResources_title = \u8d44\u6e90
+
+view_reports_alertDefinitions_parentHover =
\u70b9\u51fb\u5230\u7236\u7ea7\u544a\u8b66\u83dc\u5355
+view_reports_alertDefinitions_resTypeLoadError =
\u65e0\u6cd5\u83b7\u53d6\u8d44\u6e90\u6a21\u677f\u7c7b\u578b -
\u65e0\u6cd5\u67e5\u770b\u544a\u8b66\u6a21\u677f.
+
+#==================== Help ======================
+
+view_helpTop_description =
\u8be5\u90e8\u5206\u5185\u5bb9\u63d0\u4f9b\u4e86\u4ea7\u54c1\u6587\u6863, \u6559\u7a0b,
\u7248\u672c\u53f7\u548c\u5176\u4ed6\u6709\u7528\u7684\u4fe1\u606f.
+view_help_section_product = \u4ea7\u54c1\u5e2e\u52a9
+view_help_section_product_about = \u5173\u4e8e\u4ea7\u54c1\u5e2e\u52a9
+
+
+#===================== Test =======================
+view_testTop_title = \u6d4b\u8bd5
+view_testTop_description =
\u8fd9\u90e8\u5206\u9875\u9762\u7528\u4e8e\u6d4b\u8bd5\u5404\u79cdGUI\u7ec4\u4ef6.
+
+#=================== Top Level =====================
+
+# About Box
+#----------
+view_aboutBox_allRightsReserved = All Rights Reserved.
+view_aboutBox_buildNumber = \u4ea7\u54c1\u7f16\u8bd1\u53f7:
+view_aboutBox_failedToLoad = \u52a0\u8f7d\u4ea7\u54c1\u4fe1\u606f\u5931\u8d25.
+view_aboutBox_homepage = \u4e3b\u9875
+view_aboutBox_jbossByRedHat = JBoss by Red Hat
+view_aboutBox_title = \u5173\u4e8e {0}
+view_aboutBox_version = \u7248\u672c:
+
+# CoreGUI
+#--------------
+view_core_error_1 = \u67e5\u627e\u65b0\u544a\u8b66\u4fe1\u606f\u5931\u8d25
+#view_core_loggedInAs = \u4ee5 {0}\u767b\u5f55
+view_core_loggedOut = \u9000\u51fa\u767b\u5f55
+view_core_recentAlerts = \u65b0\u4ea7\u751f [{0}] \u6761\u544a\u8b66 -
\u70b9\u51fb\u8df3\u8f6c\u5230\u65b0\u544a\u8b66\u62a5\u8868\u754c\u9762
+view_core_noRecentAlerts = \u6ca1\u6709\u65b0\u4ea7\u751f\u7684\u544a\u8b66\u4fe1\u606f
+view_core_uncaught = \u5168\u5c40\u672a\u6355\u6349\u7684\u5f02\u5e38
+
+# Login
+#--------------
+view_login_invalidEmail = \u65e0\u6548\u7684\u90ae\u7bb1\u5730\u5740
+view_login_login = \u767b\u5f55
+view_login_logout = \u6ce8\u9500
+view_login_noBackend = \u540e\u7aef\u6570\u636e\u4e0d\u53ef\u8fbe.
+view_login_noLdap = \u63d0\u793a:
\u83b7\u53d6\u53ef\u9009\u7684ldap\u4fe1\u606f\u5931\u8d25.
\u9700\u8981\u624b\u5de5\u8f93\u5165.
+view_login_noUser = \u7528\u6237\u540d\u6216\u8005\u5bc6\u7801\u4e0d\u5339\u914d.
+view_login_prompt = \u8bf7\u767b\u5f55
+view_login_registerLater = (\u53d6\u6d88 - \u7a0d\u540e\u5b8c\u6210\u6ce8\u518c.)
+view_login_registerLdapSuccess = \u6210\u529f\u6ce8\u518c\u65b0\u7684LDAP\u7528\u6237.
+view_login_registerUser = \u7528\u6237\u6ce8\u518c
+view_login_welcome = \u6b22\u8fce
+view_login_welcomeMsg = \u6b22\u8fce\u6765\u5230 RHQ! <br/><br/>
\u8f93\u5165\u6216\u8005\u4fee\u6539\u4e0b\u9762\u7684\u4fe1\u606f\uff0c\u4ee5\u5b8c\u6210\u6ce8\u518c<br/>
\u70b9\u51fb"OK",
\u5c31\u53ef\u4ee5\u767b\u5f55\u7cfb\u7edf.<br/><br/>
+
+# Menu Bar
+#--------------
+view_menuBar_logout = \u6ce8\u9500
+
+# Search Bar, GUI
+#-----------------
+view_searchBar_resources = \u8d44\u6e90
+view_searchBar_resourceGroups = \u8d44\u6e90\u7ec4
+# TODO: i18n pluralization
+view_searchBar_welcomeMessage = \u641c\u7d22\u4e86 {0}\u79d2
+view_searchBar_defaultPattern = \u5b9a\u4e49\u81ea\u5df1\u7684\u6837\u5f0f
+view_searchBar_error_selectSavedSearch =
''\u9009\u62e9\u4fdd\u5b58\u7684\u641c\u7d22\u65f6\u51fa\u9519''
+view_searchBar_query = \u67e5\u8be2
+
+view_searchGUI_loginStatus =
\u65e0\u6cd5\u786e\u5b9a\u767b\u5f55\u72b6\u6001\uff0c\u8bf7\u68c0\u67e5\u670d\u52a1
+
+# Message Center
+#--------------------------
+view_messageCenter_messageTitle = \u6d88\u606f\u4e2d\u5fc3
+view_messageCenter_noRecentMessages = \u65e0\u8fd1\u671f\u6d88\u606f
+view_messageCenter_maxMessages = \u6700\u5927\u6d88\u606f\u91cf
+view_messageCenter_lastNMessages = \u6700\u540e {0} \u6761\u4fe1\u606f
+view_messageCenter_clearAllMessages = \u6e05\u9664\u6240\u6709\u7684\u6d88\u606f
+view_messageCenter_messageTime = \u65f6\u95f4
+view_messageCenter_messageSeverity = \u91cd\u8981\u7ea7\u522b
+view_messageCenter_messageDetail = \u8be6\u7ec6\u5185\u5bb9
+view_messageCenter_stackTraceFollows = --- \u540e\u9762\u662f\u5f02\u5e38\u4fe1\u606f
---
+view_messageCenter_messageBarShowDetails = \u663e\u793a\u5185\u5bb9
\ No newline at end of file
commit 42cc06890b8fbe5a25653c0d96264736178ea99f
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Mon May 23 09:26:43 2011 +0200
Fix a typo
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 d387c9e..986aa6d 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
@@ -606,7 +606,7 @@ dataSource_resourceErrors_field_summary = Summary
dataSource_resourceErrors_field_errorType = Error Type
dataSource_resourceErrors_field_timeOccured = Time
dataSource_resourceErrors_error_fetchFailure = Failed to find Resource errors for
Resource with id [{0}].
-dataSource_resourceErrors_clickStatusIcon = Click the icon for more details
+dataSource_resourceErrors_clickStatusIcon = Click the icon for more details
dataSource_resourceErrors_deleteSuccess = You have successfully deleted [{0}] resource
error messages.
dataSource_resourceErrors_deleteFailure = Failed to delete resource errors
@@ -657,9 +657,9 @@ view_adminContent_repositories = Repositories
view_adminTemplates_platforms = Platforms
view_adminTemplates_platformServices = Platform Services
view_adminTemplates_servers = Servers
-view_adminTemplates_enabledAlertTemplates = Enabled Alert Templates
+view_adminTemplates_enabledAlertTemplates = Enabled Alert Templates
view_adminTemplates_disabledAlertTemplates = Disabled Alert Templates
-view_adminTemplates_enabledMetricTemplates = Enabled Metric Templates
+view_adminTemplates_enabledMetricTemplates = Enabled Metric Templates
view_adminTemplates_disabledMetricTemplates = Disabled Metric Templates
view_adminTemplates_editAlertTemplate = Edit Alert Template
view_adminTemplates_editMetricTemplate = Edit Metric Template
@@ -1511,7 +1511,7 @@ view_portlet_defaultName_platformSummary = Platform Utilization
view_portlet_defaultName_problemResources = Alerted or Unavailable Resources
view_portlet_defaultName_recentAlerts = Recent Alerts
view_portlet_defaultName_recentlyAddedResources = Recently Added Resources
-view_portlet_defaultName_tagCloud = Tag Count
+view_portlet_defaultName_tagCloud = Tag Cloud
view_portlet_defaultName_group_alerts =Group: Alerts
view_portlet_defaultName_group_bundles = Group: Bundle Deployments
commit 569cb9a7f42e733a2ae964f13d8803c152857af4
Author: John Sanda <jsanda(a)redhat.com>
Date: Fri May 20 10:15:39 2011 -0400
Fixing failing test. A jmock expectation was missing.
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanUnitTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanUnitTest.java
index bb71777..bbffef8 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanUnitTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanUnitTest.java
@@ -366,6 +366,9 @@ public class ConfigurationManagerBeanUnitTest extends JMockTest {
context.checking(new Expectations() {{
allowing(entityMgr).find(Resource.class, fixture.resourceId);
will(returnValue(fixture.resource));
+ allowing(entityMgr).find(ResourceConfigurationUpdate.class,
expectedUpdate.getId());
+ will(returnValue(expectedUpdate));
+
oneOf(authorizationMgr).hasResourcePermission(fixture.subject,
CONFIGURE_WRITE, fixture.resourceId);
will(returnValue(true));
commit a05d22f86d55333503b9ccc599caeaf030fe0dc2
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu May 19 20:01:26 2011 -0400
[#4 BZ 536032 - (RHQ-426) session oddities when the same user is logged in from
multiple machines]
4th check-in related to this BZ. More test class fixes for using
session enabled Subjects.
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/authz/test/RoleManagerBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/authz/test/RoleManagerBeanTest.java
index 3e900f7..c316462 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/authz/test/RoleManagerBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/authz/test/RoleManagerBeanTest.java
@@ -72,8 +72,8 @@ public class RoleManagerBeanTest extends AbstractEJB3Test {
getTransactionManager().begin();
try {
- PageList<Role> roles =
roleManager.findRolesBySubject(subjectManager.getOverlord().getId(),
- PageControl.getUnlimitedInstance());
+ PageList<Role> roles =
roleManager.findRolesBySubject(subjectManager.getOverlord().getId(), PageControl
+ .getUnlimitedInstance());
assert roles.size() == 1;
Role role = roles.get(0);
@@ -95,12 +95,12 @@ public class RoleManagerBeanTest extends AbstractEJB3Test {
getTransactionManager().begin();
try {
- PageList<Role> roles =
roleManager.findRolesBySubject(subjectManager.getOverlord().getId(),
- PageControl.getUnlimitedInstance());
+ PageList<Role> roles =
roleManager.findRolesBySubject(subjectManager.getOverlord().getId(), PageControl
+ .getUnlimitedInstance());
for (Role role : roles) {
- PageList<Subject> subjects =
roleManager.findSubjectsByRole(role.getId(),
- PageControl.getUnlimitedInstance());
+ PageList<Subject> subjects =
roleManager.findSubjectsByRole(role.getId(), PageControl
+ .getUnlimitedInstance());
if (role.getName().equals("Super User Role")) {
assert subjects.size() >= 1 : "At least rhqadmin must have
super user role: " + subjects;
@@ -130,8 +130,8 @@ public class RoleManagerBeanTest extends AbstractEJB3Test {
role_id_list.add(role.getId());
}
- PageList<Role> roles =
roleManager.findRolesByIds(role_id_list.toArray(new Integer[0]),
- PageControl.getUnlimitedInstance());
+ PageList<Role> roles =
roleManager.findRolesByIds(role_id_list.toArray(new Integer[0]), PageControl
+ .getUnlimitedInstance());
assert roles.size() == all_roles.size();
assert roles.containsAll(all_roles);
} finally {
@@ -148,12 +148,12 @@ public class RoleManagerBeanTest extends AbstractEJB3Test {
getTransactionManager().begin();
try {
Subject superuser = subjectManager.getOverlord();
- createSession(superuser);
+ superuser = createSession(superuser);
Subject subject = new Subject();
subject.setName("dummy-subject");
subject = subjectManager.createSubject(superuser, subject);
- createSession(subject);
+ subject = createSession(subject);
Role new_role = new Role("dummy-role");
Role new_role2 = new Role("dummy-role2");
@@ -165,39 +165,39 @@ public class RoleManagerBeanTest extends AbstractEJB3Test {
PageList<Role> roles;
- roles = roleManager.findAvailableRolesForSubject(superuser, subject.getId(),
new Integer[0],
- PageControl.getUnlimitedInstance());
+ roles = roleManager.findAvailableRolesForSubject(superuser, subject.getId(),
new Integer[0], PageControl
+ .getUnlimitedInstance());
assert roles.size() == all_roles.size() : "All roles should be available
for this subject";
assert roles.containsAll(all_roles);
- roles = roleManager.findAvailableRolesForSubject(superuser, subject.getId(),
- new Integer[] { new_role.getId() }, PageControl.getUnlimitedInstance());
+ roles = roleManager.findAvailableRolesForSubject(superuser, subject.getId(),
new Integer[] { new_role
+ .getId() }, PageControl.getUnlimitedInstance());
assert (roles.size() + 1) == all_roles.size() : "All roles but one
should be available for this subject";
assert !roles.contains(new_role);
- roles = roleManager.findAvailableRolesForSubject(superuser, subject.getId(),
- new Integer[] { new_role.getId(), new_role2.getId() },
PageControl.getUnlimitedInstance());
+ roles = roleManager.findAvailableRolesForSubject(superuser, subject.getId(),
new Integer[] {
+ new_role.getId(), new_role2.getId() },
PageControl.getUnlimitedInstance());
assert (roles.size() + 2) == all_roles.size() : "All roles but two
should be available for this subject";
assert !roles.contains(new_role);
assert !roles.contains(new_role2);
roleManager.addRolesToSubject(superuser, subject.getId(), new int[] {
new_role.getId() });
- roles = roleManager.findAvailableRolesForSubject(superuser, subject.getId(),
new Integer[0],
- PageControl.getUnlimitedInstance());
+ roles = roleManager.findAvailableRolesForSubject(superuser, subject.getId(),
new Integer[0], PageControl
+ .getUnlimitedInstance());
assert (roles.size() + 1) == all_roles.size() : "All but one role should
be available for this subject";
assert !roles.contains(new_role) : "We already assigned this new role to
the subject - it isn't available";
- roles = roleManager.findAvailableRolesForSubject(superuser, subject.getId(),
- new Integer[] { new_role2.getId() },
PageControl.getUnlimitedInstance());
+ roles = roleManager.findAvailableRolesForSubject(superuser, subject.getId(),
new Integer[] { new_role2
+ .getId() }, PageControl.getUnlimitedInstance());
assert (roles.size() + 2) == all_roles.size() : "One is already assigned
and one is excluded so all but two roles should be available for this subject";
assert !roles.contains(new_role) : "We already assigned this new role to
the subject - it isn't available";
assert !roles.contains(new_role2) : "We excluded this new role - it
isn't available";
try {
// dummy user doesn't have the permission for this
- roles = roleManager.findAvailableRolesForSubject(subject,
subject.getId(), new Integer[0],
- PageControl.getUnlimitedInstance());
+ roles = roleManager.findAvailableRolesForSubject(subject,
subject.getId(), new Integer[0], PageControl
+ .getUnlimitedInstance());
} catch (PermissionException s) {
// to be expected, this rolls the transaction back for us
}
@@ -232,29 +232,29 @@ public class RoleManagerBeanTest extends AbstractEJB3Test {
Subject superuser = subjectManager.getOverlord();
subjectManager.createSubject(superuser, newSubject1);
- createSession(newSubject1);
+ newSubject1 = createSession(newSubject1);
subjectManager.createSubject(superuser, newSubject2);
- createSession(newSubject2);
+ newSubject2 = createSession(newSubject2);
- assertEquals("Role should not be created or assigned yet", 0,
- roleManager.findRolesBySubject(newSubject1.getId(),
PageControl.getUnlimitedInstance()).size());
+ assertEquals("Role should not be created or assigned yet", 0,
roleManager.findRolesBySubject(
+ newSubject1.getId(), PageControl.getUnlimitedInstance()).size());
role = roleManager.createRole(superuser, role);
- assertEquals("Role should be assigned at the time the role is
created", 1,
- roleManager.findRolesBySubject(newSubject1.getId(),
PageControl.getUnlimitedInstance()).size());
+ assertEquals("Role should be assigned at the time the role is
created", 1, roleManager.findRolesBySubject(
+ newSubject1.getId(), PageControl.getUnlimitedInstance()).size());
- roleManager.addRolesToSubject(superuser, newSubject2.getId(), new
int[]{role.getId()});
- assertEquals("Role should be assigned", 1,
- roleManager.findRolesBySubject(newSubject2.getId(),
PageControl.getUnlimitedInstance()).size());
+ roleManager.addRolesToSubject(superuser, newSubject2.getId(), new int[] {
role.getId() });
+ assertEquals("Role should be assigned", 1,
roleManager.findRolesBySubject(newSubject2.getId(),
+ PageControl.getUnlimitedInstance()).size());
roleManager.removeRolesFromSubject(superuser, newSubject1.getId(), new int[]
{ role.getId() });
- assertEquals("Role should have been unassigned", 0,
- roleManager.findRolesBySubject(newSubject1.getId(),
PageControl.getUnlimitedInstance()).size());
+ assertEquals("Role should have been unassigned", 0,
roleManager.findRolesBySubject(newSubject1.getId(),
+ PageControl.getUnlimitedInstance()).size());
roleManager.deleteRoles(superuser, new int[] { role.getId() });
- assertFalse("Roles should have been deleted",
-
roleManager.findRoles(PageControl.getUnlimitedInstance()).contains(role));
+ assertFalse("Roles should have been deleted",
roleManager.findRoles(PageControl.getUnlimitedInstance())
+ .contains(role));
} finally {
getTransactionManager().rollback();
}
@@ -270,7 +270,7 @@ public class RoleManagerBeanTest extends AbstractEJB3Test {
try {
Subject superuser = subjectManager.getOverlord();
- createSession(superuser);
+ superuser = createSession(superuser);
Role role = new Role("role-manager-role");
role.setFsystem(false);
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
index 0a3efd8..22a2dd4 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
@@ -635,7 +635,7 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
List<ResourceConfigurationUpdate> requests;
requests = configurationManager.findResourceConfigurationUpdates(overlord,
resource.getId(), null, null, false,
- configUpdatesPageControl);
+ configUpdatesPageControl);
assert requests.size() == 1;
assert requests.get(0) != null;
@@ -677,7 +677,7 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
configurationManager.purgeResourceConfigurationUpdate(overlord, request.getId(),
false);
requests = configurationManager.findResourceConfigurationUpdates(overlord,
resource.getId(), null, null, false,
- configUpdatesPageControl);
+ configUpdatesPageControl);
assert requests.size() == 1; // it will create one for us from the
"live" configuration
}
@@ -707,7 +707,7 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
List<ResourceConfigurationUpdate> history;
history = configurationManager.findResourceConfigurationUpdates(overlord,
resource.getId(), null, null, false,
- configUpdatesPageControl);
+ configUpdatesPageControl);
assert history != null;
assert history.size() == 3;
@@ -727,7 +727,7 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
Thread.sleep(2000); // wait for the test agent to complete the request
history = configurationManager.findResourceConfigurationUpdates(overlord,
resource.getId(), null, null, false,
- configUpdatesPageControl);
+ configUpdatesPageControl);
assert history != null;
assert history.size() == 4;
ResourceConfigurationUpdate newConfigUpdate = history.get(3); // the last one is
the new one
@@ -772,7 +772,7 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
List<ResourceConfigurationUpdate> requests;
requests = configurationManager.findResourceConfigurationUpdates(overlord,
resource.getId(), null, null, false,
- configUpdatesPageControl);
+ configUpdatesPageControl);
assert requests != null;
assert requests.size() == 1 : "Got " + requests.size() + " config
update requests - expected 1.";
@@ -803,7 +803,7 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
List<ResourceConfigurationUpdate> requests;
requests = configurationManager.findResourceConfigurationUpdates(overlord,
resource.getId(), null, null, false,
- configUpdatesPageControl);
+ configUpdatesPageControl);
assert requests != null;
assert requests.size() == 2 : "Got " + requests.size() + " config
update requests - expected 2.";
@@ -817,7 +817,7 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
// now get the current configs/requests and
// make sure we deleted just the one configuration, leaving one left
requests = configurationManager.findResourceConfigurationUpdates(overlord,
resource.getId(), null, null, false,
- configUpdatesPageControl);
+ configUpdatesPageControl);
assert requests.size() == 1;
assert requests.get(0).getId() == savedRequest.getId();
@@ -861,13 +861,15 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test
{
List<ResourceConfigurationUpdate> requests;
requests = configurationManager.findResourceConfigurationUpdates(overlord,
resource.getId(), null, null, false,
- configUpdatesPageControl);
+ configUpdatesPageControl);
assert requests != null;
assert requests.size() == 2; // one succeeded and one failed
- assert requests.get(0).getStatus() == ConfigurationUpdateStatus.FAILURE :
"actual: " + requests.get(0).getStatus();
- assert requests.get(1).getStatus() == ConfigurationUpdateStatus.SUCCESS :
"actual: " + requests.get(1).getStatus();
+ assert requests.get(0).getStatus() == ConfigurationUpdateStatus.FAILURE :
"actual: "
+ + requests.get(0).getStatus();
+ assert requests.get(1).getStatus() == ConfigurationUpdateStatus.SUCCESS :
"actual: "
+ + requests.get(1).getStatus();
ResourceConfigurationUpdate savedRequest = requests.get(0); // this is the one
that failed
ResourceConfigurationUpdate doomedRequest = requests.get(1); // this is the one
that succeeded
@@ -877,7 +879,7 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
// now get the current configs/requests and
// make sure we deleted the only one configuration that succeeded, leaving one
update record
requests = configurationManager.findResourceConfigurationUpdates(overlord,
resource.getId(), null, null, false,
- configUpdatesPageControl);
+ configUpdatesPageControl);
assert requests.size() == 1;
@@ -901,7 +903,7 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
try {
noPermSubject = LookupUtil.getSubjectManager().createSubject(superuser,
noPermSubject);
- createSession(noPermSubject);
+ noPermSubject = createSession(noPermSubject);
try {
configurationManager.updateResourceConfiguration(noPermSubject,
resource.getId(), new Configuration());
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/operation/OperationManagerBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/operation/OperationManagerBeanTest.java
index 0ae4e9e..2f47aa2 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/operation/OperationManagerBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/operation/OperationManagerBeanTest.java
@@ -27,8 +27,6 @@ import javax.persistence.EntityManager;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
-import org.rhq.core.domain.operation.bean.GroupOperationSchedule;
-import org.rhq.core.domain.operation.bean.ResourceOperationSchedule;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
@@ -47,6 +45,8 @@ import org.rhq.core.domain.operation.GroupOperationHistory;
import org.rhq.core.domain.operation.OperationDefinition;
import org.rhq.core.domain.operation.OperationRequestStatus;
import org.rhq.core.domain.operation.ResourceOperationHistory;
+import org.rhq.core.domain.operation.bean.GroupOperationSchedule;
+import org.rhq.core.domain.operation.bean.ResourceOperationSchedule;
import org.rhq.core.domain.operation.composite.GroupOperationLastCompletedComposite;
import org.rhq.core.domain.operation.composite.GroupOperationScheduleComposite;
import org.rhq.core.domain.operation.composite.ResourceOperationLastCompletedComposite;
@@ -1490,7 +1490,7 @@ public class OperationManagerBeanTest extends AbstractEJB3Test {
try {
noPermSubject = LookupUtil.getSubjectManager().createSubject(overlord,
noPermSubject);
- createSession(noPermSubject);
+ noPermSubject = createSession(noPermSubject);
assert !operationManager.isResourceOperationSupported(noPermSubject,
resource.getId()) : "Should not have permission to get control info";
assert !operationManager.isGroupOperationSupported(noPermSubject,
newGroup.getId()) : "Should not have permission to get control info";
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceGroupManagerBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceGroupManagerBeanTest.java
index a4c60ce..af20900 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceGroupManagerBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceGroupManagerBeanTest.java
@@ -94,7 +94,6 @@ public class ResourceGroupManagerBeanTest extends AbstractEJB3Test {
/* bootstrap */
ResourceType type = new ResourceType("type", "plugin",
ResourceCategory.PLATFORM, null);
Subject testSubject = SessionTestHelper.createNewSubject(em,
"testSubject");
- createSession(testSubject);
Role testRole = SessionTestHelper.createNewRoleForSubject(em, testSubject,
"testRole");
testRole.addPermission(Permission.MANAGE_INVENTORY);
ResourceGroup compatGroup = new ResourceGroup("group1", type);
@@ -128,7 +127,6 @@ public class ResourceGroupManagerBeanTest extends AbstractEJB3Test {
/* bootstrap */
ResourceType type = new ResourceType("type", "plugin",
ResourceCategory.PLATFORM, null);
Subject testSubject = SessionTestHelper.createNewSubject(em,
"testSubject");
- createSession(testSubject);
Role testRole = SessionTestHelper.createNewRoleForSubject(em, testSubject,
"testRole");
testRole.addPermission(Permission.MANAGE_INVENTORY);
ResourceGroup compatGroup = new ResourceGroup("group1", type);
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
index e580229..4e3241c 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
@@ -63,7 +63,7 @@ public class ResourceStorageTest extends AbstractEJB3Test {
Subject subject = subjectManager.loginUnauthenticated("ghinkle");
//Subject subject = subjectManager.getOverlord();
- createSession(subject);
+ subject = createSession(subject);
ResourceType t = em.getReference(ResourceType.class, new Integer(501064));
String typeNameFilter = t == null ? null : t.getName();
PageList<ResourceComposite> resources =
resourceManager.findResourceComposites(subject,
@@ -106,7 +106,7 @@ public class ResourceStorageTest extends AbstractEJB3Test {
//Subject subject =
subjectManager.loginUnauthenticated("ghinkle");
Subject subject = subjectManager.getOverlord();
- createSession(subject);
+ subject = createSession(subject);
List<ResourceGroupComposite> groups =
groupManager.findResourceGroupComposites(subject,
GroupCategory.MIXED, null, null, null, null, null, null, pc);
System.out.println("Found mixed groups: " + groups.size());
@@ -188,7 +188,7 @@ public class ResourceStorageTest extends AbstractEJB3Test {
DiscoveryBossLocal discoveryBoss = LookupUtil.getDiscoveryBoss();
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
Subject rhqadmin =
subjectManager.loginUnauthenticated("rhqadmin");
- createSession(rhqadmin);
+ rhqadmin = createSession(rhqadmin);
Map<Resource, List<Resource>> queue =
discoveryBoss.getQueuedPlatformsAndServers(rhqadmin, PageControl
.getUnlimitedInstance());
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
index 5811792..ee2a45f 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
@@ -205,7 +205,7 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
* annotations by creating sessions for different users with different permissions.
*
* @param subject a JON subject
- * @return the session activated subject, a copy of the subjected passed in.
+ * @return the session activated subject, a copy of the subject passed in.
*/
public Subject createSession(Subject subject) {
return SessionManager.getInstance().put(subject);
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/SessionTestHelper.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/SessionTestHelper.java
index 09d8190..6ec3cbf 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/SessionTestHelper.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/SessionTestHelper.java
@@ -90,7 +90,7 @@ public class SessionTestHelper {
// We want to return the attached object but sessionmanager.put will return a
detached copy of newSubject.
// Copy over the sessionId and pass back the attached Subject.
Subject sessionSubject = SessionManager.getInstance().put(newSubject, 1000 *
300);
- newSubject.setSessionId(sessionSubject.getId());
+ newSubject.setSessionId(sessionSubject.getSessionId());
return newSubject;
}
commit 3c10e346e27f760079d07783662efc564827b20b
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu May 19 16:17:33 2011 -0400
[#3 BZ 536032 - (RHQ-426) session oddities when the same user is logged in from
multiple machines]
3rd check-in related to this BZ. This time a fix to the SessionTestHelper
class used by several server jar tests.
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/SessionTestHelper.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/SessionTestHelper.java
index 6ff56db..09d8190 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/SessionTestHelper.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/SessionTestHelper.java
@@ -87,8 +87,10 @@ public class SessionTestHelper {
em.persist(newSubject);
em.flush();
- // return the copy, not the original
- newSubject = SessionManager.getInstance().put(newSubject, 1000 * 300);
+ // We want to return the attached object but sessionmanager.put will return a
detached copy of newSubject.
+ // Copy over the sessionId and pass back the attached Subject.
+ Subject sessionSubject = SessionManager.getInstance().put(newSubject, 1000 *
300);
+ newSubject.setSessionId(sessionSubject.getId());
return newSubject;
}
commit 85359d0022ee5a780328e362d643603a624ec7b4
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu May 19 15:54:49 2011 -0400
BZ 706193 - hibernate detach utility needs to replace proxy objects for Map key/values
(as well as object arrays)
diff --git
a/modules/enterprise/server/safe-invoker/src/main/java/org/rhq/enterprise/server/util/HibernateDetachUtility.java
b/modules/enterprise/server/safe-invoker/src/main/java/org/rhq/enterprise/server/util/HibernateDetachUtility.java
index de57afb..a349f0c 100644
---
a/modules/enterprise/server/safe-invoker/src/main/java/org/rhq/enterprise/server/util/HibernateDetachUtility.java
+++
b/modules/enterprise/server/safe-invoker/src/main/java/org/rhq/enterprise/server/util/HibernateDetachUtility.java
@@ -29,6 +29,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
@@ -122,9 +123,13 @@ public class HibernateDetachUtility {
if (value instanceof Object[]) {
Object[] objArray = (Object[]) value;
for (int i = 0; i < objArray.length; i++) {
+ Object listEntry = objArray[i];
+ Object replaceEntry = replaceObject(listEntry);
+ if (replaceEntry != null) {
+ objArray[i] = replaceEntry;
+ }
nullOutUninitializedFields(objArray[i], checkedObjects, depth + 1,
serializationType);
}
-
} else if (value instanceof List) {
// Null out any entries in initialized collections
ListIterator i = ((List) value).listIterator();
@@ -154,8 +159,34 @@ public class HibernateDetachUtility {
collection.removeAll(itemsToBeReplaced);
collection.addAll(replacementItems); // watch out! if this collection is a
Set, HashMap$MapSet doesn't support addAll. See BZ 688000
} else if (value instanceof Map) {
- for (Object key : ((Map) value).keySet()) {
- nullOutUninitializedFields(((Map) value).get(key), checkedObjects, depth
+ 1, serializationType);
+ Map originalMap = (Map) value;
+ HashMap<Object, Object> replaceMap = new HashMap<Object,
Object>();
+ for (Iterator i = originalMap.keySet().iterator(); i.hasNext();) {
+ // get original key and value - these might be hibernate proxies
+ Object originalKey = i.next();
+ Object originalKeyValue = originalMap.get(originalKey);
+
+ // replace with non-hibernate classes, if appropriate (will be null
otherwise)
+ Object replaceKey = replaceObject(originalKey);
+ Object replaceValue = replaceObject(originalKeyValue);
+
+ // if either original key or original value was a hibernate proxy object,
we have to
+ // remove it from the original map, and remember the replacement objects
for later
+ if (replaceKey != null || replaceValue != null) {
+ Object newKey = (replaceKey != null) ? replaceKey : originalKey;
+ Object newValue = (replaceValue != null) ? replaceValue :
originalKeyValue;
+ replaceMap.put(newKey, newValue);
+ i.remove();
+ }
+ }
+
+ // all hibernate proxies have been removed, we need to replace them with
their
+ // non-proxy object representations that we got from replaceObject() calls
+ originalMap.putAll(replaceMap);
+
+ // now go through each item in the map and null out their internal fields
+ for (Object key : originalMap.keySet()) {
+ nullOutUninitializedFields(originalMap.get(key), checkedObjects, depth +
1, serializationType);
nullOutUninitializedFields(key, checkedObjects, depth + 1,
serializationType);
}
} else if (value instanceof Enum) {
commit f9e768f5872203c286c2d04dcd855595b8a4c74b
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu May 19 11:51:59 2011 -0400
[BZ 697061] if the remote call to an Agent to update a config fails, make sure to call
checkForCompletedGroupResourceConfigurationUpdate() to update the status of the parent
group config update, in the case that the update is part of a group update; remove a
LOG.isDebugEnabled() check that was erroneously preventing non-debug code from executing
when not debug logging was not enabled
(
https://bugzilla.redhat.com/show_bug.cgi?id=697061)
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
index 9282df5..62c12c4 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
@@ -1071,7 +1071,7 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
ResourceConfigurationUpdate newUpdate =
configurationManager.persistNewResourceConfigurationUpdateHistory(
subject, resourceId, configToUpdate, ConfigurationUpdateStatus.INPROGRESS,
subject.getName(), false);
- executeResourceConfigurationUpdate(newUpdate, fromStructured);
+ executeResourceConfigurationUpdate(newUpdate);
return newUpdate;
}
@@ -1132,7 +1132,7 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
newUpdate =
configurationManager.persistNewResourceConfigurationUpdateHistory(subject, resourceId,
newConfiguration, ConfigurationUpdateStatus.INPROGRESS, subject.getName(),
false);
- executeResourceConfigurationUpdate(newUpdate, true);
+ executeResourceConfigurationUpdate(newUpdate);
return newUpdate;
}
@@ -1141,14 +1141,14 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
ResourceConfigurationUpdate update =
getResourceConfigurationUpdate(subjectManager.getOverlord(), updateId);
Configuration originalConfig = update.getConfiguration();
update.setConfiguration(originalConfig.deepCopy(false));
- executeResourceConfigurationUpdate(update, true);
+ executeResourceConfigurationUpdate(update);
}
/**
- * Tells the Agent to asynchonously update a managed resource's configuration as
per the specified
+ * Tells the Agent to asynchronously update a managed resource's configuration as
per the specified
* <code>ResourceConfigurationUpdate</code>.
*/
- private void executeResourceConfigurationUpdate(ResourceConfigurationUpdate update,
boolean fromStructured) {
+ private void executeResourceConfigurationUpdate(ResourceConfigurationUpdate update)
{
try {
AgentClient agentClient =
agentManager.getAgentClient(update.getResource().getAgent());
ConfigurationUpdateRequest request = new
ConfigurationUpdateRequest(update.getId(), update
@@ -1161,8 +1161,9 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
update.setStatus(ConfigurationUpdateStatus.FAILURE);
update.setErrorMessage(ThrowableUtil.getStackAsString(e));
- // here we call ourself, but we do so via the EJB interface so we pick up
the REQUIRES_NEW semantics
+ // Here we call ourselves, but we do so via the EJB interface so we pick
up the REQUIRES_NEW semantics.
this.configurationManager.mergeConfigurationUpdate(update);
+ checkForCompletedGroupResourceConfigurationUpdate(update.getId());
}
}
}
@@ -1334,14 +1335,16 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
public void checkForCompletedGroupResourceConfigurationUpdate(int
resourceConfigUpdateId) {
ResourceConfigurationUpdate resourceConfigUpdate =
entityManager.find(ResourceConfigurationUpdate.class,
resourceConfigUpdateId);
- if (resourceConfigUpdate.getStatus() == ConfigurationUpdateStatus.INPROGRESS)
+ if (resourceConfigUpdate.getStatus() == ConfigurationUpdateStatus.INPROGRESS) {
// If this update isn't done, then, by definition, the group update
isn't done either.
return;
+ }
GroupResourceConfigurationUpdate groupConfigUpdate =
resourceConfigUpdate.getGroupConfigurationUpdate();
- if (groupConfigUpdate == null)
- // The update's not part of a group update - nothing we need to do.
+ if (groupConfigUpdate == null) {
+ // The update isn't part of a group update - nothing we need to do.
return;
+ }
Query inProgressResourcesCountQuery =
PersistenceUtility.createCountQuery(this.entityManager,
ResourceConfigurationUpdate.QUERY_FIND_BY_PARENT_UPDATE_ID_AND_STATUS);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationServerServiceImpl.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationServerServiceImpl.java
index aac1143..a36f35d 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationServerServiceImpl.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationServerServiceImpl.java
@@ -70,12 +70,10 @@ public class ConfigurationServerServiceImpl implements
ConfigurationServerServic
ResourceConfigurationUpdate update =
configurationManager.persistNewResourceConfigurationUpdateHistory(
overlord, resourceId, resourceConfiguration,
ConfigurationUpdateStatus.SUCCESS, null, false);
- if (LOG.isDebugEnabled()) {
- if (update == null) {
- LOG.debug("Not persisting Configuration " +
resourceConfiguration
- + ", since it is identical to the current revision.");
- return;
- }
+ if (update == null) {
+ LOG.debug("Not persisting Configuration " + resourceConfiguration
+ + ", since it is identical to the current revision.");
+ return;
}
Configuration configuration = update.getConfiguration().deepCopy(false); //
clone the config, zeroing out ids
commit a9d5121fa116f381edda52fb75c3d07f8e985d25
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Wed May 18 20:51:44 2011 -0400
[BZ 705916] redirect to history subtab after a group config is saved off the group
config>current subtab (
https://bugzilla.redhat.com/show_bug.cgi?id=705916)
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/GroupResourceConfigurationEditView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/GroupResourceConfigurationEditView.java
index 7759f93..d094a67 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/GroupResourceConfigurationEditView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/GroupResourceConfigurationEditView.java
@@ -39,6 +39,7 @@ import org.rhq.core.domain.resource.composite.ResourcePermission;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.LinkManager;
import org.rhq.enterprise.gui.coregui.client.RefreshableView;
import
org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor;
import
org.rhq.enterprise.gui.coregui.client.components.configuration.GroupConfigurationEditor;
@@ -47,6 +48,7 @@ import
org.rhq.enterprise.gui.coregui.client.components.configuration.PropertyVa
import
org.rhq.enterprise.gui.coregui.client.components.configuration.PropertyValueChangeListener;
import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.ResourceDetailView;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
import org.rhq.enterprise.gui.coregui.client.util.message.MessageCenter;
@@ -209,11 +211,13 @@ public class GroupResourceConfigurationEditView extends
LocatableVLayout impleme
}
public void onSuccess(Void result) {
- CoreGUI.getMessageCenter().notify(
- new
Message(MSG.view_group_resConfig_edit_saveInitiated_concise(), MSG
+ String configHistoryUrl =
LinkManager.getResourceGroupTabLink(group.getId(),
+ ResourceDetailView.Tab.CONFIGURATION,
ResourceDetailView.ConfigurationSubTab.HISTORY);
+ String configHistoryView = configHistoryUrl.substring(1); // chop off
the leading '#'
+ Message message = new
Message(MSG.view_group_resConfig_edit_saveInitiated_concise(), MSG
.view_group_resConfig_edit_saveInitiated_full(group.getResourceType().getName(), group
- .getName()), Message.Severity.Info));
- refresh();
+ .getName()), Message.Severity.Info);
+ CoreGUI.goToView(configHistoryView, message);
}
});
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
index b980286..2df653a 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
@@ -173,7 +173,7 @@ public class ResourceConfigurationEditView extends LocatableVLayout
implements P
}
String configHistoryUrl =
LinkManager.getResourceTabLink(resource.getId(),
ResourceDetailView.Tab.CONFIGURATION,
ResourceDetailView.ConfigurationSubTab.HISTORY);
- String configHistoryView = configHistoryUrl.substring(1);
+ String configHistoryView = configHistoryUrl.substring(1); // chop
off the leading '#'
CoreGUI.goToView(configHistoryView, message);
}
});
commit fa3cb7852df40c0bfbb49fa6f40ae4d6cb8f82f6
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed May 18 17:06:54 2011 -0400
[BZ 536032 - (RHQ-426) session oddities when the same user is logged in from multiple
machines]
Forgot to update one sessionManager.put() call area to pass back the correct
Subject.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
index 8b9a325..ffeb3a5 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
@@ -347,8 +347,8 @@ public class SubjectManagerBean implements SubjectManagerLocal,
SubjectManagerRe
}
}
- sessionManager.put(subject);
-
+ // make sure to return the session-activated subject
+ subject = sessionManager.put(subject);
return subject;
}
commit e3119855288d10b21a76f3512ffe0487d3a5f4d9
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed May 18 15:29:34 2011 -0400
The server jar (EJB3) tests did not run because the abstract EJB3 test
container could not bootstrap:
Caused by: java.lang.NoSuchMethodError:
org.jboss.ejb3.KernelAbstractionFactory.setKernel(Lorg/jboss/kernel/Kernel;)V
This was due to the fact that the embeddable EJB3 jar was declared below
the standard EJB3 jars in the pom's depedencies. And the class was getting loaded
from the wrong jar. The maven classpaths are ordered in the order of
deps defined in the pom. I've moved the test scoped deps above the
non-test 3rd party deps. This should not affect non-test builds as the test deps
should be ignored in those builds.
Also:
- removed a duplicate dep for commons-logging in the server jar pom
- changed some deprecated ${version} and ${groupId} declarations to
the supported ${project.version} and ${project.groupId} decls, respectively.
deps
diff --git a/etc/m2/smartgwt-war-archetype/src/main/resources/archetype-resources/pom.xml
b/etc/m2/smartgwt-war-archetype/src/main/resources/archetype-resources/pom.xml
index f092a4d..a8fe49b 100644
--- a/etc/m2/smartgwt-war-archetype/src/main/resources/archetype-resources/pom.xml
+++ b/etc/m2/smartgwt-war-archetype/src/main/resources/archetype-resources/pom.xml
@@ -6,10 +6,10 @@
<modelVersion>4.0.0</modelVersion>
- <groupId>${groupId}</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<packaging>war</packaging>
- <version>${version}</version>
+ <version>${project.version}</version>
<name>SmartGWT WAR</name>
@@ -60,7 +60,7 @@
<build>
<!-- This will produce a war file named ${artifactId}.war, rather than
- ${artifactId}-${version}.war. -->
+ ${artifactId}-${project.version}.war. -->
<finalName>${artifactId}</finalName>
<!-- Make sure lasses output dir matches hosted webapp WEB-INF/classes
diff --git a/etc/rhq-plugin-archetype/src/main/resources/archetype-resources/pom.xml
b/etc/rhq-plugin-archetype/src/main/resources/archetype-resources/pom.xml
index 4600423..a3e6562 100644
--- a/etc/rhq-plugin-archetype/src/main/resources/archetype-resources/pom.xml
+++ b/etc/rhq-plugin-archetype/src/main/resources/archetype-resources/pom.xml
@@ -6,9 +6,9 @@
<modelVersion>4.0.0</modelVersion>
- <groupId>${groupId}</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>${artifactId}</artifactId>
- <version>${version}</version>
+ <version>${project.version}</version>
<packaging>jar</packaging>
<name>${rhq-plugin-name}</name>
diff --git a/modules/core/domain/pom.xml b/modules/core/domain/pom.xml
index 2f7c4be..6bfa045 100644
--- a/modules/core/domain/pom.xml
+++ b/modules/core/domain/pom.xml
@@ -111,9 +111,9 @@
<!--================ Test Deps ================-->
<dependency>
- <groupId>${groupId}</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>test-utils</artifactId>
- <version>${version}</version>
+ <version>${project.version}</version>
<scope>test</scope>
</dependency>
diff --git a/modules/enterprise/binding/pom.xml b/modules/enterprise/binding/pom.xml
index a0497d0..d96cf83 100644
--- a/modules/enterprise/binding/pom.xml
+++ b/modules/enterprise/binding/pom.xml
@@ -31,7 +31,7 @@
</dependency>
<dependency>
- <groupId>${groupId}</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>rhq-core-domain</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
diff --git a/modules/enterprise/remoting/cli/pom.xml
b/modules/enterprise/remoting/cli/pom.xml
index df15270..24fbb60 100644
--- a/modules/enterprise/remoting/cli/pom.xml
+++ b/modules/enterprise/remoting/cli/pom.xml
@@ -41,9 +41,9 @@
</dependency>
<dependency>
- <groupId>${groupId}</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>rhq-core-domain</artifactId>
- <version>${version}</version>
+ <version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
diff --git a/modules/enterprise/server/jar/pom.xml
b/modules/enterprise/server/jar/pom.xml
index 307570e..9bbeedc 100644
--- a/modules/enterprise/server/jar/pom.xml
+++ b/modules/enterprise/server/jar/pom.xml
@@ -100,6 +100,98 @@
<scope>test</scope>
</dependency>
+ <!--================ Test Deps ================-->
+
+ <!-- Note, the test deps are intentionally placed above the other scoped deps
because of classpath
+ reasons. Maven orders the [test] classpath in the order listed in the pom.
We specifically
+ need the embeddable-ejb3 jar above the standard ejb3 jars because we need the
embeddble packages
+ loaded when testing. -->
+
+ <dependency>
+ <groupId>jboss.jboss-embeddable-ejb3</groupId>
+ <artifactId>jboss-ejb3-all</artifactId>
+ <version>${jboss-embeddable-ejb3.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>rhq-core-client-api</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+
+ <!-- NOTE: The remaining test deps correspond to the classes contained in
hibernate-all.jar and thirdparty-all.jar. -->
+
+ <dependency>
+ <groupId>antlr</groupId>
+ <artifactId>antlr</artifactId>
+ <version>2.7.7</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>hibernate-entitymanager</groupId>
+ <artifactId>hibernate-entitymanager</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>javassist</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>trove</groupId>
+ <artifactId>trove</artifactId>
+ <version>1.0.2</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xercesImpl</artifactId>
+ <version>2.8.1</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>net.sf.opencsv</groupId>
+ <artifactId>opencsv</artifactId>
+ <version>1.8</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq.helpers</groupId>
+ <artifactId>perftest-support</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>ant</groupId>
+ <artifactId>ant</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>ant</groupId>
+ <artifactId>ant-launcher</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-jxpath</groupId>
+ <artifactId>commons-jxpath</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
+
+
<!-- 3rd Party Deps -->
<dependency>
@@ -368,97 +460,6 @@
<version>0.1.29</version>
</dependency>
- <!--================ Test Deps ================-->
-
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>rhq-core-client-api</artifactId>
- <version>${version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>jboss.jboss-embeddable-ejb3</groupId>
- <artifactId>jboss-ejb3-all</artifactId>
- <version>${jboss-embeddable-ejb3.version}</version>
- <scope>test</scope>
- </dependency>
-
- <!-- NOTE: The remaining test deps correspond to the classes contained in
hibernate-all.jar and thirdparty-all.jar. -->
-
- <dependency>
- <groupId>antlr</groupId>
- <artifactId>antlr</artifactId>
- <version>2.7.7</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>hibernate-entitymanager</groupId>
- <artifactId>hibernate-entitymanager</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>javassist</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>trove</groupId>
- <artifactId>trove</artifactId>
- <version>1.0.2</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>xerces</groupId>
- <artifactId>xercesImpl</artifactId>
- <version>2.8.1</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>net.sf.opencsv</groupId>
- <artifactId>opencsv</artifactId>
- <version>1.8</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.rhq.helpers</groupId>
- <artifactId>perftest-support</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- <exclusions>
- <exclusion>
- <groupId>ant</groupId>
- <artifactId>ant</artifactId>
- </exclusion>
- <exclusion>
- <groupId>ant</groupId>
- <artifactId>ant-launcher</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>commons-jxpath</groupId>
- <artifactId>commons-jxpath</artifactId>
- <version>1.3</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.4</version>
- <scope>test</scope>
- </dependency>
</dependencies>
<build>
commit ecd63ba59b3e985481dc76de3044dfad656a8dd2
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed May 18 15:22:25 2011 -0400
[BZ 697850 - Child Resources subtab refreshes twice]
[BZ 704742 - when returning to Configuration>Current tab, the original config
editor is shown for a few seconds while a new/refreshed config editor is being drawn]
For the resource and group detail views (The two level tab views) ensure
that for RefreshableViews the subtab canvas is not rendered until after
refresh() is called on the canvas. This allows the refresh method to
clear stale data from an existing canvas before initiating the async pull
of new data, preventing the user from briefly seeing the stale data and
then having the refresh kick in (which can look a lot like an unnecessary
refresh)
For Tables this works well without any changes to the refresh() method.
That's because the ds invalidateCache method clears the grid. Other
views may have to ensure the canvas is presentable in the refresh impl.
This commit includes a change like this for the current resource config view.
Note that the other 3 config views (resPlugin, groupPlugin, groupConf)
already handled this as needed.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/RefreshableView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/RefreshableView.java
index 6f078e0..b173c06 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/RefreshableView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/RefreshableView.java
@@ -26,7 +26,12 @@ package org.rhq.enterprise.gui.coregui.client;
public interface RefreshableView {
/**
- * Refresh this view, i.e. reload its data from the Server.
+ * Refresh this view, i.e. reload its data from the Server. When implementing
refresh keep in mind that
+ * the refresh may be called when revisiting an existing canvas. For example, when
revisiting a subtab in
+ * resource or group detail view. The data on that existing canvas may be displaying
stale data. Especially
+ * for anynchronous refresh of data, the user experience may benefit from the stale
data being
+ * destroyed/wiped/hidden prior to the async call. This can avoid having the user
briefly see the
+ * stale data before the refreshed data is rendered.
*/
void refresh();
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java
index 1dbc33d..d1ed776 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java
@@ -85,7 +85,7 @@ public class SubTabLayout extends LocatableVLayout {
}
}
if (null != currentlySelected) {
- selectSubTabByLocatorId(currentlySelected);
+ selectSubTabByLocatorId(currentlySelected, true);
}
}
@@ -186,14 +186,24 @@ public class SubTabLayout extends LocatableVLayout {
return null;
}
- public boolean selectSubTab(SubTab subTab) {
+ /**
+ * @param subtab the subtab to select
+ * @param showCanvas if true then ensure the subtab canvas is shown. Otherwise the
state is unchanged.
+ * @return true if selected successfully, otherwise false
+ */
+ public boolean selectSubTab(SubTab subTab, boolean showCanvas) {
if (subTab == null) {
throw new IllegalArgumentException("subTab is null.");
}
- return selectSubTabByLocatorId(subTab.getLocatorId());
+ return selectSubTabByLocatorId(subTab.getLocatorId(), showCanvas);
}
- public boolean selectSubTabByLocatorId(String locatorId) {
+ /**
+ * @param name locatorId the subtab locatorId
+ * @param showCanvas if true then ensure the subtab canvas is shown. Otherwise the
state is unchanged.
+ * @return true if selected successfully, otherwise false
+ */
+ public boolean selectSubTabByLocatorId(String locatorId, boolean showCanvas) {
boolean foundTab = false;
for (String subTabLocatorId : this.subTabs.keySet()) {
if (subTabLocatorId.equals(locatorId)) {
@@ -210,7 +220,7 @@ public class SubTabLayout extends LocatableVLayout {
}
if (foundTab) {
- setCurrentlySelected();
+ setCurrentlySelected(showCanvas);
}
return foundTab;
@@ -237,7 +247,12 @@ public class SubTabLayout extends LocatableVLayout {
return null;
}
- public boolean selectSubTabByName(String name) {
+ /**
+ * @param name subtab name
+ * @param showCanvas if true then ensure the subtab canvas is shown. Otherwise the
state is unchanged.
+ * @return true if selected successfully, otherwise false
+ */
+ public boolean selectSubTabByName(String name, boolean showCanvas) {
SubTab subTab = getSubTabByName(name);
if (subTab == null) {
return false;
@@ -248,7 +263,7 @@ public class SubTabLayout extends LocatableVLayout {
return false;
}
this.currentlySelected = subTab.getLocatorId();
- setCurrentlySelected();
+ setCurrentlySelected(showCanvas);
return true;
}
}
@@ -293,7 +308,7 @@ public class SubTabLayout extends LocatableVLayout {
}
}
- private void setCurrentlySelected() {
+ private void setCurrentlySelected(boolean showCanvas) {
if (null != this.currentlySelected) {
Button button = this.subTabs.get(this.currentlySelected).getButton();
button.select();
@@ -311,7 +326,7 @@ public class SubTabLayout extends LocatableVLayout {
Canvas canvas = currentSubTab.getCanvas();
if (canvas != null) {
if (hasMember(canvas)) {
- if (!canvas.isVisible()) {
+ if (!canvas.isVisible() && showCanvas) {
canvas.show();
}
} else {
@@ -319,7 +334,7 @@ public class SubTabLayout extends LocatableVLayout {
canvas.setOverflow(Overflow.SCROLL);
}
addMember(canvas);
- if (!canvas.isVisible()) {
+ if (!canvas.isVisible() && showCanvas) {
canvas.show();
}
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
index c6867ac..1b20ad4 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
@@ -253,7 +253,8 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends
Layout> extends Lo
// select the tab and subTab (no event fired, we're already dealing with
the correct path)
this.tabSet.selectTab(tab);
// this call adds the subtab canvas as a member of the subtablayout
- tab.getLayout().selectSubTab(subtab);
+ // don't show the subtab canvas until after we perform any necessay
rendering.
+ tab.getLayout().selectSubTab(subtab, false);
// get the target canvas
Canvas subView = subtab.getCanvas();
@@ -264,12 +265,16 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends
Layout> extends Lo
// refresh.
if (subView instanceof BookmarkableView) {
((BookmarkableView) subView).renderView(viewPath);
+ subView.setVisible(true);
} else if (subView instanceof RefreshableView && subView.isDrawn())
{
// Refresh the data on the subtab, so it's not stale.
Log.debug("Refreshing data for [" +
subView.getClass().getName() + "]...");
((RefreshableView) subView).refresh();
+ subView.setVisible(true);
+ } else {
+ subView.setVisible(true);
}
// ensure the tabset is enabled (disabled in onTabSelected), and redraw
@@ -300,7 +305,7 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends
Layout> extends Lo
subTab = tab.getLayout().getDefaultSubTab();
}
- tab.getLayout().selectSubTab(subTab);
+ tab.getLayout().selectSubTab(subTab, true);
// Now that the subtab has been selected, select the tab (this will cause a tab
selected event to fire).
this.tabSet.selectTab(tab);
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
index 0161c08..b980286 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
@@ -67,7 +67,6 @@ public class ResourceConfigurationEditView extends LocatableVLayout
implements P
private boolean refreshing = false;
-
public ResourceConfigurationEditView(String locatorId, ResourceComposite
resourceComposite) {
super(locatorId);
@@ -114,6 +113,11 @@ public class ResourceConfigurationEditView extends LocatableVLayout
implements P
this.refreshing = true;
this.buttonbar.setVisible(false);
+ if (editor != null) {
+ editor.destroy();
+ removeMember(editor);
+ }
+
GWTServiceLookup.getConfigurationService().getLatestResourceConfigurationUpdate(resource.getId(),
new AsyncCallback<ResourceConfigurationUpdate>() {
@Override
@@ -122,10 +126,6 @@ public class ResourceConfigurationEditView extends LocatableVLayout
implements P
EnumSet.of(MetadataType.resourceConfigurationDefinition), new
TypeLoadedCallback() {
@Override
public void onTypesLoaded(ResourceType type) {
- if (editor != null) {
- editor.destroy();
- removeMember(editor);
- }
editor = new
ConfigurationEditor(extendLocatorId("Editor"), type
.getResourceConfigurationDefinition(),
result.getConfiguration());
@@ -164,15 +164,15 @@ public class ResourceConfigurationEditView extends LocatableVLayout
implements P
if (result != null) {
String version = String.valueOf(result.getId());
message = new
Message(MSG.view_configurationDetails_messageConcise(version), MSG
- .view_configurationDetails_messageDetailed(version,
resource.getName()),
- Message.Severity.Info);
+ .view_configurationDetails_messageDetailed(version,
resource.getName()),
+ Message.Severity.Info);
} else {
// TODO: i18n
message = new
Message(MSG.view_configurationDetails_configNotUpdatedDueToNoChange(),
- Message.Severity.Warning);
+ Message.Severity.Warning);
}
String configHistoryUrl =
LinkManager.getResourceTabLink(resource.getId(),
- ResourceDetailView.Tab.CONFIGURATION,
ResourceDetailView.ConfigurationSubTab.HISTORY);
+ ResourceDetailView.Tab.CONFIGURATION,
ResourceDetailView.ConfigurationSubTab.HISTORY);
String configHistoryView = configHistoryUrl.substring(1);
CoreGUI.goToView(configHistoryView, message);
}
@@ -191,8 +191,8 @@ public class ResourceConfigurationEditView extends LocatableVLayout
implements P
EnumSet.of(Message.Option.Transient, Message.Option.Sticky));
} else {
this.saveButton.disable();
- message = new
Message(MSG.view_configurationDetails_somePropertiesInvalid(invalidPropertyNames
- .values().toString()), Message.Severity.Error,
EnumSet.of(Message.Option.Transient, Message.Option.Sticky));
+ message = new
Message(MSG.view_configurationDetails_somePropertiesInvalid(invalidPropertyNames.values()
+ .toString()), Message.Severity.Error,
EnumSet.of(Message.Option.Transient, Message.Option.Sticky));
}
messageCenter.notify(message);
} else {
commit 07471e1f014eed497b43cafeddaffa1cabc873c1
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed May 18 15:13:45 2011 -0400
[BZ 536032 - (RHQ-426) session oddities when the same user is logged in from multiple
machines]
Historically a username shared an RHQ session (not the HTTP session, the
underlying RHQ session, the sessionId on the Subject). This had some mild
upside when it was convenient to share a session but has serious downside
as the logout of one gui session or cli job would invalidate the session
for any other gui or cli session using the same username.
So, this changes the behavior to make things behave more in line with what
folks hopefully expect. Each login gets its own RHQ session. Logout or
session timeout will not affect other logins.
One exception may be multiple sessions in the same browser, as there could
be conflict in cookie handling. This is not new and not a use case we are
planning to address.
In addition, I replaced some SubjectManagerLocal methods and supporting
queries with equivalent Criteria calls.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java
index 1ae43ca..8c76e70 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java
@@ -59,22 +59,6 @@ import org.rhq.core.domain.resource.group.ResourceGroup;
*/
@Entity
@NamedQueries( {
- @NamedQuery(name = Subject.QUERY_FIND_BY_IDS, query = "" //
- + "SELECT s " //
- + " FROM Subject s " //
- + " WHERE s.id IN ( :ids ) " //
- + " AND s.fsystem = FALSE " //
- + " AND s.factive = TRUE"),
-
- @NamedQuery(name = Subject.QUERY_FIND_ALL, query = "" //
- + "SELECT s " //
- + " FROM Subject s " //
- + " WHERE s.fsystem = false"),
-
- @NamedQuery(name = Subject.QUERY_FIND_BY_NAME, query = "" //
- + "SELECT s " //
- + " FROM Subject s " //
- + " WHERE s.name = :name"),
@NamedQuery(name = Subject.QUERY_GET_SUBJECTS_ASSIGNED_TO_ROLE, query = ""
//
+ "SELECT s " //
@@ -230,9 +214,6 @@ import org.rhq.core.domain.resource.group.ResourceGroup;
@Table(name = "RHQ_SUBJECT")
/*@Cache(usage= CacheConcurrencyStrategy.TRANSACTIONAL)*/
public class Subject implements Serializable {
- public static final String QUERY_FIND_ALL = "Subject.findAll";
- public static final String QUERY_FIND_BY_IDS = "Subject.findByIds";
- public static final String QUERY_FIND_BY_NAME = "Subject.findByName";
public static final String QUERY_GET_SUBJECTS_ASSIGNED_TO_ROLE =
"Subject.getSubjectsAssignedToRole";
@@ -313,7 +294,7 @@ public class Subject implements Serializable {
@OneToMany(mappedBy = "owner", fetch = FetchType.LAZY)
private Set<Repo> ownedRepos;
-
+
// When a subject is removed any owned dashboards are removed automatically
@OneToMany(mappedBy = "owner", fetch = FetchType.LAZY, cascade =
CascadeType.REMOVE)
private List<Dashboard> ownedDashboards = null;
@@ -512,14 +493,14 @@ public class Subject implements Serializable {
this.ownedGroups = ownedGroups;
}
- protected Set<Repo> getOwnedrepos(){
+ protected Set<Repo> getOwnedrepos() {
return ownedRepos;
}
-
+
protected void setOwnedRepos(Set<Repo> repos) {
ownedRepos = repos;
}
-
+
protected List<Dashboard> getOwnedDashboards() {
return ownedDashboards;
}
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/test/QueryAllTest.java
b/modules/core/domain/src/test/java/org/rhq/core/domain/test/QueryAllTest.java
index 5fb91e2..57aba89 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/test/QueryAllTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/test/QueryAllTest.java
@@ -214,11 +214,13 @@ public class QueryAllTest extends AbstractEJB3Test {
tm.begin();
EntityManager em = getEntityManager();
try {
- Query q = PersistenceUtility.createCountQuery(em, Subject.QUERY_FIND_ALL);
+ String queryString = "SELECT COUNT(*) FROM Subject s WHERE s.fsystem =
false";
+
+ Query q = em.createQuery(queryString);
long count = (Long) q.getSingleResult();
- q = PersistenceUtility.createQueryWithOrderBy(em, Subject.QUERY_FIND_ALL, new
OrderingField("firstName",
- PageOrdering.ASC), new OrderingField("lastName",
PageOrdering.DESC));
+ queryString = "SELECT s FROM Subject s WHERE s.fsystem = false ORDER BY
s.firstName ASC, s.lastName DESC";
+ q = em.createQuery(queryString);
long size = q.getResultList().size();
assert count == size;
diff --git
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/role/AddUsersFormPrepareAction.java
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/role/AddUsersFormPrepareAction.java
index 6819ae6..d7c3ae2 100644
---
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/role/AddUsersFormPrepareAction.java
+++
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/role/AddUsersFormPrepareAction.java
@@ -1,91 +1,101 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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.gui.admin.role;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.tiles.ComponentContext;
-import org.apache.struts.tiles.actions.TilesAction;
-import org.rhq.core.domain.auth.Subject;
-import org.rhq.core.domain.authz.Role;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageList;
-import org.rhq.enterprise.gui.legacy.Constants;
-import org.rhq.enterprise.gui.legacy.util.RequestUtils;
-import org.rhq.enterprise.gui.legacy.util.SessionUtils;
-import org.rhq.enterprise.gui.util.WebUtility;
-import org.rhq.enterprise.server.auth.SubjectManagerLocal;
-import org.rhq.enterprise.server.util.LookupUtil;
-
-/**
- * An Action that retrieves data from the BizApp to facilitate display of the
<em>Add Role Users</em> form.
- */
-public class AddUsersFormPrepareAction extends TilesAction {
- @Override
- public ActionForward execute(ComponentContext context, ActionMapping mapping,
ActionForm form,
- HttpServletRequest request, HttpServletResponse response) throws Exception {
- Log log = LogFactory.getLog(AddUsersFormPrepareAction.class.getName());
-
- AddUsersForm addForm = (AddUsersForm) form;
- Integer roleId = addForm.getR();
-
- if (roleId == null) {
- roleId = RequestUtils.getRoleId(request);
- }
-
- Role role = (Role) request.getAttribute(Constants.ROLE_ATTR);
- if (role == null) {
- RequestUtils.setError(request, Constants.ERR_ROLE_NOT_FOUND);
- return null;
- }
-
- addForm.setR(role.getId());
-
- PageControl pca = WebUtility.getPageControl(request, "a");
- PageControl pcp = WebUtility.getPageControl(request, "p");
-
- log.trace("available page control: " + pca);
- log.trace("pending page control: " + pcp);
-
- SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
-
- /* pending users are those on the right side of the "add
- * to list" widget- awaiting association with the rolewhen the form's
"ok" button is clicked. */
- Integer[] pendingUserIds = SessionUtils.getList(request.getSession(),
Constants.PENDING_USERS_SES_ATTR);
-
- log.trace("getting pending users for role [" + roleId +
"]");
- PageList<Subject> pendingUsers =
subjectManager.findSubjectsById(pendingUserIds, pcp);
- request.setAttribute(Constants.PENDING_USERS_ATTR, pendingUsers);
-
- /*
- * available users are all users in the system that are /not/ associated with the
role and are not pending
- */
- log.trace("getting available users for role [" + roleId +
"]");
- PageList<Subject> availableUsers =
subjectManager.findAvailableSubjectsForRole(RequestUtils.getSubject(request),
- roleId, pendingUserIds, pca);
- request.setAttribute(Constants.AVAIL_USERS_ATTR, availableUsers);
-
- return null;
- }
-}
\ No newline at end of file
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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.gui.admin.role;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.tiles.ComponentContext;
+import org.apache.struts.tiles.actions.TilesAction;
+
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.authz.Role;
+import org.rhq.core.domain.criteria.SubjectCriteria;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.legacy.Constants;
+import org.rhq.enterprise.gui.legacy.util.RequestUtils;
+import org.rhq.enterprise.gui.legacy.util.SessionUtils;
+import org.rhq.enterprise.gui.util.WebUtility;
+import org.rhq.enterprise.server.auth.SubjectManagerLocal;
+import org.rhq.enterprise.server.util.LookupUtil;
+
+/**
+ * An Action that retrieves data from the BizApp to facilitate display of the
<em>Add Role Users</em> form.
+ */
+public class AddUsersFormPrepareAction extends TilesAction {
+ @Override
+ public ActionForward execute(ComponentContext context, ActionMapping mapping,
ActionForm form,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ Log log = LogFactory.getLog(AddUsersFormPrepareAction.class.getName());
+
+ AddUsersForm addForm = (AddUsersForm) form;
+ Integer roleId = addForm.getR();
+
+ if (roleId == null) {
+ roleId = RequestUtils.getRoleId(request);
+ }
+
+ Role role = (Role) request.getAttribute(Constants.ROLE_ATTR);
+ if (role == null) {
+ RequestUtils.setError(request, Constants.ERR_ROLE_NOT_FOUND);
+ return null;
+ }
+
+ addForm.setR(role.getId());
+
+ PageControl pca = WebUtility.getPageControl(request, "a");
+ PageControl pcp = WebUtility.getPageControl(request, "p");
+
+ log.trace("available page control: " + pca);
+ log.trace("pending page control: " + pcp);
+
+ SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
+
+ /* pending users are those on the right side of the "add
+ * to list" widget- awaiting association with the rolewhen the form's
"ok" button is clicked. */
+ Integer[] pendingUserIds = SessionUtils.getList(request.getSession(),
Constants.PENDING_USERS_SES_ATTR);
+
+ log.trace("getting pending users for role [" + roleId +
"]");
+ SubjectCriteria c = new SubjectCriteria();
+ c.addFilterIds(pendingUserIds);
+ c.addFilterFsystem(false);
+ c.addFilterFactive(true);
+ c.fetchRoles(true);
+ c.addSortName(PageOrdering.ASC);
+ PageList<Subject> pendingUsers =
subjectManager.findSubjectsByCriteria(RequestUtils.getSubject(request), c);
+ request.setAttribute(Constants.PENDING_USERS_ATTR, pendingUsers);
+
+ /*
+ * available users are all users in the system that are /not/ associated with the
role and are not pending
+ */
+ log.trace("getting available users for role [" + roleId +
"]");
+ PageList<Subject> availableUsers =
subjectManager.findAvailableSubjectsForRole(
+ RequestUtils.getSubject(request), roleId, pendingUserIds, pca);
+ request.setAttribute(Constants.AVAIL_USERS_ATTR, availableUsers);
+
+ return null;
+ }
+}
diff --git
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/user/AddUserRolesFormPrepareAction.java
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/user/AddUserRolesFormPrepareAction.java
index e5936fa..c971d38 100644
---
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/user/AddUserRolesFormPrepareAction.java
+++
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/user/AddUserRolesFormPrepareAction.java
@@ -1,98 +1,98 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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.gui.admin.user;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.tiles.ComponentContext;
-
-import org.rhq.core.domain.auth.Subject;
-import org.rhq.core.domain.authz.Role;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageList;
-import org.rhq.enterprise.gui.legacy.Constants;
-import org.rhq.enterprise.gui.legacy.action.WorkflowPrepareAction;
-import org.rhq.enterprise.gui.legacy.util.RequestUtils;
-import org.rhq.enterprise.gui.legacy.util.SessionUtils;
-import org.rhq.enterprise.gui.util.WebUtility;
-import org.rhq.enterprise.server.auth.SubjectManagerLocal;
-import org.rhq.enterprise.server.authz.RoleManagerLocal;
-import org.rhq.enterprise.server.util.LookupUtil;
-
-/**
- * An Action that retrieves data to facilitate display of the
<em>AddUserRoles</em> form. The purpose of this is to add
- * Roles to a given user.
- */
-public class AddUserRolesFormPrepareAction extends WorkflowPrepareAction {
- @Override
- @SuppressWarnings("deprecation")
- public ActionForward workflow(ComponentContext context, ActionMapping mapping,
ActionForm form,
- HttpServletRequest request, HttpServletResponse response) throws Exception {
- Log log = LogFactory.getLog(AddUserRolesFormPrepareAction.class.getName());
-
- AddUserRolesForm addForm = (AddUserRolesForm) form;
- Integer userId = addForm.getU();
-
- if (userId == null) {
- userId = RequestUtils.getUserId(request);
- }
-
- PageControl pca = WebUtility.getPageControl(request, "a");
- PageControl pcp = WebUtility.getPageControl(request, "p");
-
- log.trace("available page control: " + pca);
- log.trace("pending page control: " + pcp);
- log.trace("getting user [" + userId + "]");
-
- SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
- RoleManagerLocal roleManager = LookupUtil.getRoleManager();
-
- Subject user = subjectManager.getSubjectById(userId);
- if (user == null) {
- throw new NullPointerException("User [" + userId + "] is not
known");
- }
-
- request.setAttribute(Constants.USER_ATTR, user);
- addForm.setU(user.getId());
-
- /* pending roles are those on the right side of the "add
- * to list" widget- awaiting association with the userwhen the form's
"ok" button is clicked. */
- Integer[] pendingRoleIds = SessionUtils.getList(request.getSession(),
Constants.PENDING_ROLES_SES_ATTR);
-
- log.trace("getting pending roles for user [" + userId +
"]");
- PageList<Role> pendingRoles = roleManager.findRolesByIds(pendingRoleIds,
pcp);
- request.setAttribute(Constants.PENDING_ROLES_ATTR, pendingRoles);
-
- /*
- * available roles are all roles in the system that are not associated with the
user and are not pending
- */
- log.trace("getting available roles for user [" + userId +
"]");
- PageList<Role> availableRoles =
roleManager.findAvailableRolesForSubject(RequestUtils.getSubject(request),
- userId, pendingRoleIds, pca);
- request.setAttribute(Constants.AVAIL_ROLES_ATTR, availableRoles);
-
- return null;
- }
-}
\ No newline at end of file
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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.gui.admin.user;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.tiles.ComponentContext;
+
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.authz.Role;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.legacy.Constants;
+import org.rhq.enterprise.gui.legacy.action.WorkflowPrepareAction;
+import org.rhq.enterprise.gui.legacy.util.RequestUtils;
+import org.rhq.enterprise.gui.legacy.util.SessionUtils;
+import org.rhq.enterprise.gui.util.WebUtility;
+import org.rhq.enterprise.server.auth.SubjectManagerLocal;
+import org.rhq.enterprise.server.authz.RoleManagerLocal;
+import org.rhq.enterprise.server.util.LookupUtil;
+
+/**
+ * An Action that retrieves data to facilitate display of the
<em>AddUserRoles</em> form. The purpose of this is to add
+ * Roles to a given user.
+ */
+public class AddUserRolesFormPrepareAction extends WorkflowPrepareAction {
+ @Override
+ @SuppressWarnings("deprecation")
+ public ActionForward workflow(ComponentContext context, ActionMapping mapping,
ActionForm form,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ Log log = LogFactory.getLog(AddUserRolesFormPrepareAction.class.getName());
+
+ AddUserRolesForm addForm = (AddUserRolesForm) form;
+ Integer userId = addForm.getU();
+
+ if (userId == null) {
+ userId = RequestUtils.getUserId(request);
+ }
+
+ PageControl pca = WebUtility.getPageControl(request, "a");
+ PageControl pcp = WebUtility.getPageControl(request, "p");
+
+ log.trace("available page control: " + pca);
+ log.trace("pending page control: " + pcp);
+ log.trace("getting user [" + userId + "]");
+
+ SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
+ RoleManagerLocal roleManager = LookupUtil.getRoleManager();
+
+ Subject user = subjectManager.getSubjectById(userId);
+ if (user == null) {
+ throw new NullPointerException("User [" + userId + "] is not
known");
+ }
+
+ request.setAttribute(Constants.USER_ATTR, user);
+ addForm.setU(user.getId());
+
+ /* pending roles are those on the right side of the "add
+ * to list" widget- awaiting association with the userwhen the form's
"ok" button is clicked. */
+ Integer[] pendingRoleIds = SessionUtils.getList(request.getSession(),
Constants.PENDING_ROLES_SES_ATTR);
+
+ log.trace("getting pending roles for user [" + userId +
"]");
+ PageList<Role> pendingRoles = roleManager.findRolesByIds(pendingRoleIds,
pcp);
+ request.setAttribute(Constants.PENDING_ROLES_ATTR, pendingRoles);
+
+ /*
+ * available roles are all roles in the system that are not associated with the
user and are not pending
+ */
+ log.trace("getting available roles for user [" + userId +
"]");
+ PageList<Role> availableRoles =
roleManager.findAvailableRolesForSubject(RequestUtils.getSubject(request),
+ userId, pendingRoleIds, pca);
+ request.setAttribute(Constants.AVAIL_ROLES_ATTR, availableRoles);
+
+ return null;
+ }
+}
diff --git
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/user/ListAction.java
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/user/ListAction.java
index 6c0d07d..364e78b 100644
---
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/user/ListAction.java
+++
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/admin/user/ListAction.java
@@ -1,46 +1,53 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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.gui.admin.user;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.tiles.ComponentContext;
-import org.apache.struts.tiles.actions.TilesAction;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageList;
-import org.rhq.enterprise.gui.legacy.Constants;
-import org.rhq.enterprise.gui.util.WebUtility;
-import org.rhq.enterprise.server.util.LookupUtil;
-
-/**
- * An Action that retrieves all users from the BizApp.
- */
-public class ListAction extends TilesAction {
- public ActionForward execute(ComponentContext context, ActionMapping mapping,
ActionForm form,
- HttpServletRequest request, HttpServletResponse response) throws Exception {
- PageControl pc = WebUtility.getPageControl(request);
- PageList users = LookupUtil.getSubjectManager().findAllSubjects(pc);
- request.setAttribute(Constants.ALL_USERS_ATTR, users);
-
- return null;
- }
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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.gui.admin.user;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.tiles.ComponentContext;
+import org.apache.struts.tiles.actions.TilesAction;
+
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.criteria.SubjectCriteria;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.legacy.Constants;
+import org.rhq.enterprise.gui.legacy.util.RequestUtils;
+import org.rhq.enterprise.server.util.LookupUtil;
+
+/**
+ * An Action that retrieves all users from the BizApp.
+ */
+public class ListAction extends TilesAction {
+ public ActionForward execute(ComponentContext context, ActionMapping mapping,
ActionForm form,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ SubjectCriteria c = new SubjectCriteria();
+ c.addFilterFsystem(false);
+ c.addSortName(PageOrdering.ASC);
+ PageList<Subject> users =
LookupUtil.getSubjectManager().findSubjectsByCriteria(
+ RequestUtils.getSubject(request), c);
+ request.setAttribute(Constants.ALL_USERS_ATTR, users);
+
+ return null;
+ }
}
\ No newline at end of file
diff --git
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/CreateRepoUIBean.java
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/CreateRepoUIBean.java
index 6aaafdd2..5c06432 100644
---
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/CreateRepoUIBean.java
+++
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/CreateRepoUIBean.java
@@ -19,7 +19,6 @@
package org.rhq.enterprise.gui.content;
import java.util.ArrayList;
-import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.model.SelectItem;
@@ -27,7 +26,9 @@ import javax.faces.model.SelectItem;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.content.Repo;
-import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.criteria.SubjectCriteria;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
import org.rhq.core.gui.util.FacesContextUtility;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
@@ -41,7 +42,7 @@ public class CreateRepoUIBean {
public CreateRepoUIBean() {
initNewRepo();
}
-
+
public Repo getRepo() {
return newRepo;
}
@@ -52,21 +53,25 @@ public class CreateRepoUIBean {
public SelectItem[] getAvailableOwners() {
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
-
- List<Subject> subjects =
subjectManager.findAllSubjects(PageControl.getUnlimitedInstance());
-
+ Subject subject = EnterpriseFacesContextUtility.getSubject();
+
+ SubjectCriteria c = new SubjectCriteria();
+ c.addFilterFsystem(false);
+ c.addSortName(PageOrdering.ASC);
+ PageList<Subject> subjects = subjectManager.findSubjectsByCriteria(subject,
c);
+
ArrayList<SelectItem> items = new
ArrayList<SelectItem>(subjects.size());
-
+
items.add(new SelectItem(null, "--None--"));
-
- for(Subject s : subjects) {
+
+ for (Subject s : subjects) {
SelectItem item = new SelectItem(s.getName(), s.getName());
items.add(item);
}
-
+
return items.toArray(new SelectItem[items.size()]);
}
-
+
public boolean isRepositoryManager() {
Subject subject = EnterpriseFacesContextUtility.getSubject();
return LookupUtil.getAuthorizationManager().hasGlobalPermission(subject,
Permission.MANAGE_REPOSITORIES);
@@ -90,12 +95,12 @@ public class CreateRepoUIBean {
initNewRepo();
return "save";
}
-
+
public String cancel() {
initNewRepo();
return "cancel";
}
-
+
private void updateRepoOwner(Subject loggedInSubject) {
if (newRepo.getOwner().getName() == null) {
newRepo.setOwner(null);
@@ -107,15 +112,15 @@ public class CreateRepoUIBean {
newRepo.setOwner(s);
}
}
-
+
private void initNewRepo() {
newRepo = new Repo();
-
+
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
-
+
//use a copy so that we can modify it without invalidating the user in the
session
Subject currenUserCopy =
subjectManager.getSubjectById(EnterpriseFacesContextUtility.getSubject().getId());
-
+
newRepo.setOwner(currenUserCopy);
}
}
\ No newline at end of file
diff --git
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/RepoDetailsUIBean.java
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/RepoDetailsUIBean.java
index d74a836..7651abd 100644
---
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/RepoDetailsUIBean.java
+++
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/RepoDetailsUIBean.java
@@ -19,24 +19,23 @@
package org.rhq.enterprise.gui.content;
import java.util.ArrayList;
-import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.model.SelectItem;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.richfaces.event.UploadEvent;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.content.ContentSyncStatus;
import org.rhq.core.domain.content.Repo;
import org.rhq.core.domain.content.RepoSyncResults;
-import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.criteria.SubjectCriteria;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
import org.rhq.core.gui.util.FacesContextUtility;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
-import org.rhq.enterprise.server.auth.SubjectManagerBean;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.content.ContentException;
import org.rhq.enterprise.server.content.RepoManagerLocal;
@@ -61,7 +60,7 @@ public class RepoDetailsUIBean {
this.repo = null;
loadRepo();
}
-
+
public boolean getCurrentlySyncing() {
String syncStatus = getSyncStatus();
if (!syncStatus.equals(ContentSyncStatus.SUCCESS.toString())
@@ -105,38 +104,42 @@ public class RepoDetailsUIBean {
Subject subject = EnterpriseFacesContextUtility.getSubject();
return LookupUtil.getAuthorizationManager().hasGlobalPermission(subject,
Permission.MANAGE_REPOSITORIES);
}
-
+
public boolean isEditable() {
Subject subject = EnterpriseFacesContextUtility.getSubject();
return LookupUtil.getAuthorizationManager().canUpdateRepo(subject,
getRepo().getId());
}
-
+
public boolean isInventoryManager() {
Subject subject = EnterpriseFacesContextUtility.getSubject();
return LookupUtil.getAuthorizationManager().isInventoryManager(subject);
}
-
+
public boolean getHasContentSources() {
return getRepo().getContentSources().size() > 0;
}
-
+
public SelectItem[] getAvailableOwners() {
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
-
- List<Subject> subjects =
subjectManager.findAllSubjects(PageControl.getUnlimitedInstance());
-
+ Subject subject = EnterpriseFacesContextUtility.getSubject();
+
+ SubjectCriteria c = new SubjectCriteria();
+ c.addFilterFsystem(false);
+ c.addSortName(PageOrdering.ASC);
+ PageList<Subject> subjects = subjectManager.findSubjectsByCriteria(subject,
c);
+
ArrayList<SelectItem> items = new
ArrayList<SelectItem>(subjects.size());
-
+
items.add(new SelectItem(null, "--None--"));
-
- for(Subject s : subjects) {
+
+ for (Subject s : subjects) {
SelectItem item = new SelectItem(s.getName(), s.getName());
items.add(item);
}
-
+
return items.toArray(new SelectItem[items.size()]);
}
-
+
public String sync() {
Subject subject = EnterpriseFacesContextUtility.getSubject();
int[] repoIds = { FacesContextUtility.getRequiredRequestParameter("id",
Integer.class) };
@@ -203,7 +206,7 @@ public class RepoDetailsUIBean {
}
}
}
-
+
private void updateRepoOwner(Subject loggedInSubject) {
if (repo.getOwner().getName() == null) {
repo.setOwner(null);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SessionManager.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SessionManager.java
index 58cbe8b..39b6076 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SessionManager.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SessionManager.java
@@ -91,9 +91,10 @@ public class SessionManager {
*
* @param subject
*
- * @return the session id assigned to the new session
+ * @return the Subject associated with session. Note, this may be a copy of the
Subject passed into the method. The
+ * sessionId will be assigned.
*/
- public int put(Subject subject) {
+ public Subject put(Subject subject) {
return put(subject, DEFAULT_TIMEOUT);
}
@@ -103,50 +104,30 @@ public class SessionManager {
* @param subject
* @param timeout the timeout for the session, in milliseconds
*
- * @return the session id assigned to the new session
+ * @return the Subject associated with session. This will be a copy of the Subject
passed into the method (unless
+ * that Subject is overlord). The sessionId will be assigned.
*/
- public synchronized int put(Subject subject, long timeout) {
+ public synchronized Subject put(Subject subject, long timeout) {
Integer key;
do {
key = new Integer(_random.nextInt());
} while (_cache.containsKey(key));
- subject.setSessionId(key);
+ // Each session should have its own POJO Subject so that each can store a
separate sessionId. The exception
+ // is our special-case shared singleton for overlord.
+ Subject sessionSubject;
+ if (subject.equals(overlordSubject)) {
+ sessionSubject = overlordSubject;
+ sessionSubject.setSessionId(key);
- _cache.put(key, new AuthSession(subject, timeout));
-
- return key.intValue();
- }
-
- /**
- * Lookup and return the session ID that is associated with the given username.
- *
- * @param username the username of the {@link Subject} that has a valid session
- *
- * @return session ID for the session of the give user
- *
- * @throws SessionNotFoundException
- * @throws SessionTimeoutException
- */
- public synchronized int getSessionIdFromUsername(String username) throws
SessionNotFoundException,
- SessionTimeoutException {
- for (Map.Entry<Integer, AuthSession> map_entry : _cache.entrySet()) {
- int session_id = map_entry.getKey().intValue();
- AuthSession session = map_entry.getValue();
-
- if (session.getSubject(false).getName().equals(username)) {
- if (session.isExpired()) {
- throw new SessionTimeoutException();
- }
-
- session.getSubject(true); // this is our session - update the last access
time
-
- return session_id;
- }
+ } else {
+ sessionSubject = getSessionSubject(subject, key);
}
- throw new SessionNotFoundException();
+ _cache.put(key, new AuthSession(sessionSubject, timeout));
+
+ return sessionSubject;
}
/**
@@ -200,6 +181,25 @@ public class SessionManager {
return;
}
+ /**
+ * Invalidates all sessions for the given username. This is for testing purposes
ONLY.
+ *
+ * @param username username for the sessions to be invalidated
+ */
+ public synchronized void invalidate(String username) {
+ List<Integer> doomedSessionIds = new
ArrayList<Integer>(_cache.size());
+ for (AuthSession s : _cache.values()) {
+ if (username.equals(s.getSubject(false).getName())) {
+ doomedSessionIds.add(s.getSubject(false).getSessionId());
+ }
+ }
+ for (Integer sessionId : doomedSessionIds) {
+ _cache.remove(new Integer(sessionId));
+ }
+
+ return;
+ }
+
public long getlastAccess(int sessionId) {
AuthSession session = _cache.get(sessionId);
if (session == null) {
@@ -225,23 +225,34 @@ public class SessionManager {
try {
// validate that the superuser session is still valid and update its LAT
getSubject(session_id);
+
} catch (SessionException e) {
// its been a while since the overlord has been needed - its session has
expired.
// We need to create a new session and assign that new session ID to the
instance this singleton holds internally
// no need to synchronize here - its OK if we concurrently create more than
one session, they will eventually expire
- session_id = put(overlordSubject, OVERLORD_TIMEOUT);
+ session_id = put(overlordSubject, OVERLORD_TIMEOUT).getSessionId();
+ overlordSubject.setSessionId(session_id);
}
// we create a separate and detached Subject for each caller - do not share the
copy this singleton holds internally
- Subject copy = new Subject();
- copy.setSessionId(session_id);
- copy.setId(overlordSubject.getId());
- copy.setFsystem(overlordSubject.getFsystem());
- copy.setFactive(overlordSubject.getFactive());
- copy.setName(overlordSubject.getName());
- copy.setFirstName(overlordSubject.getFirstName());
- copy.setLastName(overlordSubject.getLastName());
- copy.setRoles(overlordSubject.getRoles());
+ Subject copy = getSessionSubject(overlordSubject, session_id);
+ return copy;
+ }
+
+ private Subject getSessionSubject(Subject subject, Integer sessionId) {
+ Subject copy = new Subject(subject.getName(), subject.getFactive(),
subject.getFsystem());
+ copy.setId(subject.getId());
+ copy.setSessionId(sessionId);
+
+ copy.setDepartment(subject.getDepartment());
+ copy.setEmailAddress(subject.getEmailAddress());
+ copy.setFirstName(subject.getFirstName());
+ copy.setLastName(subject.getLastName());
+ copy.setLdapRoles(subject.getLdapRoles());
+ copy.setOwnedGroups(subject.getOwnedGroups());
+ copy.setPhoneNumber(subject.getPhoneNumber());
+ copy.setRoles(subject.getRoles());
+ copy.setUserConfiguration(subject.getUserConfiguration());
return copy;
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
index 5d8ea27..8b9a325 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
@@ -128,40 +128,6 @@ public class SubjectManagerBean implements SubjectManagerLocal,
SubjectManagerRe
}
/**
- * @see
org.rhq.enterprise.server.auth.SubjectManagerLocal#findSubjectsById(Integer[],PageControl)
- */
- @SuppressWarnings("unchecked")
- public PageList<Subject> findSubjectsById(Integer[] subjectIds, PageControl pc)
{
- if ((subjectIds == null) || (subjectIds.length == 0)) {
- return new PageList<Subject>(pc);
- }
-
- pc.initDefaultOrderingField("s.name");
-
- String queryName = Subject.QUERY_FIND_BY_IDS;
- Query queryCount = PersistenceUtility.createCountQuery(entityManager,
queryName);
- Query query = PersistenceUtility.createQueryWithOrderBy(entityManager, queryName,
pc);
-
- List<Integer> subjectIdsList = Arrays.asList(subjectIds);
- queryCount.setParameter("ids", subjectIdsList);
- query.setParameter("ids", subjectIdsList);
-
- long count = (Long) queryCount.getSingleResult();
- List<Subject> subjects = query.getResultList();
-
- if (subjects != null) {
- // eagerly load in the members - can't use left-join due to
PersistenceUtility usage; perhaps use EAGER
- for (Subject subject : subjects) {
- subject.getRoles().size();
- }
- } else {
- subjects = new ArrayList<Subject>();
- }
-
- return new PageList<Subject>(subjects, (int) count, pc);
- }
-
- /**
* @see org.rhq.enterprise.server.auth.SubjectManagerLocal#updateSubject(Subject,
Subject)
*/
public Subject updateSubject(Subject whoami, Subject subjectToModify) {
@@ -289,17 +255,12 @@ public class SubjectManagerBean implements SubjectManagerLocal,
SubjectManagerRe
* @see org.rhq.enterprise.server.auth.SubjectManagerRemote#getSubjectByName(String)
*/
public Subject getSubjectByName(String username) {
- Subject subject;
- try {
- Query query = entityManager.createNamedQuery(Subject.QUERY_FIND_BY_NAME);
- query.setParameter("name", username);
- subject = (Subject) query.getSingleResult();
- } catch (NoResultException nre) {
- subject = null;
- }
+ SubjectCriteria c = new SubjectCriteria();
+ c.addFilterName(username);
+ PageList<Subject> result = findSubjectsByCriteria(getOverlord(), c);
- return subject;
+ return result.isEmpty() ? null : result.get(0);
}
/**
@@ -332,24 +293,6 @@ public class SubjectManagerBean implements SubjectManagerLocal,
SubjectManagerRe
}
/**
- * @see
org.rhq.enterprise.server.auth.SubjectManagerLocal#findAllSubjects(PageControl)
- */
- @SuppressWarnings("unchecked")
- public PageList<Subject> findAllSubjects(PageControl pc) {
- pc.initDefaultOrderingField("s.name");
-
- String queryName = Subject.QUERY_FIND_ALL;
- Query subjectQueryCount = PersistenceUtility.createCountQuery(entityManager,
queryName);
- Query subjectQuery = PersistenceUtility.createQueryWithOrderBy(entityManager,
queryName, pc);
-
- long totalCount = (Long) subjectQueryCount.getSingleResult();
-
- List<Subject> subjects = subjectQuery.getResultList();
-
- return new PageList<Subject>(subjects, (int) totalCount, pc);
- }
-
- /**
* @see org.rhq.enterprise.server.auth.SubjectManagerLocal#getSubjectById(int)
*/
public Subject getSubjectById(int id) {
@@ -382,17 +325,6 @@ public class SubjectManagerBean implements SubjectManagerLocal,
SubjectManagerRe
// fetch the roles
subject.getRoles().size();
- // let's see if this user was already logged in with a valid session
- try {
- int sessionId = sessionManager.getSessionIdFromUsername(username);
- subject.setSessionId(sessionId);
- //insert processing for LDAP users who have registered before and have
jdbc credentials, but no principal.
- log.debug("Processing subject '" + subject.getName() +
"' for LDAP functionality.");
- //as already logged in as regular JDBC
- subject = processSubjectForLdap(subject, password);
- } catch (SessionException se) {
- // nope, no session; continue on so we can create the session
- }
} else {
// There is no subject in the database yet.
// If LDAP authentication is enabled and we cannot find the subject,
@@ -554,45 +486,26 @@ public class SubjectManagerBean implements SubjectManagerLocal,
SubjectManagerRe
}
/**
- * @see org.rhq.enterprise.server.auth.SubjectManagerLocal#logout(Subject)
+ * @see org.rhq.enterprise.server.auth.SubjectManagerRemote#logout(Subject)
*/
public void logout(Subject subject) {
try {
- int sessionId = sessionManager.getSessionIdFromUsername(subject.getName());
- sessionManager.invalidate(sessionId);
- } catch (SessionTimeoutException ste) {
- // it's ok, logout can be considered successful if the user's session
already timed out
- } catch (SessionNotFoundException snfe) {
- // it's ok, logout can be considered successful if the user's never
logged in to begin with
+ // make sure the Subject is valid by pairing the name and sessionId
+ Subject s = getSubjectByNameAndSessionId(subject.getName(),
subject.getSessionId());
+ sessionManager.invalidate(s.getSessionId());
+ } catch (Exception e) {
+ // ignore invalid logout request
}
}
/**
- * Logs out a user.
- *
- * @param sessionId The sessionId for the user to log out
- */
+ * @see org.rhq.enterprise.server.auth.SubjectManagerLocal#logout(java.lang.int)
+ * */
public void logout(int sessionId) {
sessionManager.invalidate(sessionId);
}
/**
- * @see
org.rhq.enterprise.server.auth.SubjectManagerLocal#isLoggedIn(java.lang.String)
- */
- public boolean isLoggedIn(String username) {
- boolean loggedIn = false;
-
- try {
- sessionManager.getSessionIdFromUsername(username);
- loggedIn = true;
- } catch (SessionException e) {
- // safely ignore
- }
-
- return loggedIn;
- }
-
- /**
* @see org.rhq.enterprise.server.auth.SubjectManagerLocal#createPrincipal(Subject,
String, String)
*/
@RequiredPermission(Permission.MANAGE_SECURITY)
@@ -669,17 +582,9 @@ public class SubjectManagerBean implements SubjectManagerLocal,
SubjectManagerRe
}
/**
- * @see
org.rhq.enterprise.server.auth.SubjectManagerLocal#loginUnauthenticated(String, boolean)
+ * @see
org.rhq.enterprise.server.auth.SubjectManagerLocal#loginUnauthenticated(String)
*/
- public Subject loginUnauthenticated(String username, boolean reattach) throws
LoginException {
- if (reattach) {
- try {
- int sessionId = sessionManager.getSessionIdFromUsername(username);
- return sessionManager.getSubject(sessionId);
- } catch (SessionException e) {
- // continue, we'll need to create a session
- }
- }
+ public Subject loginUnauthenticated(String username) throws LoginException {
Subject subject = getSubjectByName(username);
@@ -691,8 +596,8 @@ public class SubjectManagerBean implements SubjectManagerLocal,
SubjectManagerRe
throw new LoginException("User account has been disabled. [" +
username + "]");
}
- sessionManager.put(subject, 1000L * 60 * 2); // 2mins only
-
+ // make sure we return the Subject returned from this call, which may differ from
the one passed in
+ subject = sessionManager.put(subject, 1000L * 60 * 2); // 2mins only
return subject;
}
@@ -869,7 +774,6 @@ public class SubjectManagerBean implements SubjectManagerLocal,
SubjectManagerRe
return new PageList<Subject>(subjects, (int) count, pc);
}
- @SuppressWarnings("unchecked")
public PageList<Subject> findSubjectsByCriteria(Subject subject,
SubjectCriteria criteria) {
CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject,
criteria);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerLocal.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerLocal.java
index 2859b48..4b81769 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerLocal.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerLocal.java
@@ -48,16 +48,6 @@ public interface SubjectManagerLocal {
Subject loadUserConfiguration(Integer subjectId);
/**
- * Given a set of subject Ids, this returns a list of all the subjects.
- *
- * @param subjectIds
- * @param pageControl
- *
- * @return all the subjects with the given ID
- */
- PageList<Subject> findSubjectsById(Integer[] subjectIds, PageControl
pageControl);
-
- /**
* This returns the system super user subject that can be used to authorize the
caller for any other system call.
* This must <b>not</b> be exposed to remote clients.
*
@@ -66,27 +56,17 @@ public interface SubjectManagerLocal {
Subject getOverlord();
/**
- * Returns a paged list of all Subjects.
- *
- * @param pageControl the page control that specifies which page of the result set to
return and how sort it
- */
- PageList<Subject> findAllSubjects(PageControl pageControl);
-
- /**
- * Logs in a user without performing any authentication. This method should be used
with care and not available to
+ * Logs in a user without performing any authentication. This method should be used
with care and is not available to
* remote clients. Because of the unauthenticated nature of this login, the new login
session will have a session
- * timeout of only a few seconds. However, if you pass in
<code>true</code> for the "reattach", this method will
- * re-attach to an existing session for the user, if one is active already. If one
does not exist, this method will
- * login and create a new session just as if that parameter was
<code>false</code>.
+ * timeout of only two minutes.
*
- * @param user The user to authenticate and login
- * @param reattach If <code>true</code>, will re-attach to an existing
login session, if one exists
+ * @param username The user to login
*
- * @return the user's {@link Subject}
+ * @return A Subject with an active session for the the user
*
* @throws LoginException if failed to create a new session for the given user
*/
- Subject loginUnauthenticated(String user, boolean reattach) throws LoginException;
+ Subject loginUnauthenticated(String username) throws LoginException;
/**
* Creates a new principal (username and password) in the internal database.
@@ -162,8 +142,6 @@ public interface SubjectManagerLocal {
Subject getSubjectBySessionId(int sessionId) throws Exception;
- boolean isLoggedIn(String username);
-
/**
* Creates a new subject, including their assigned roles, as well as an associated
principal with the specified
* password.
@@ -196,7 +174,7 @@ public interface SubjectManagerLocal {
* @return the subject if the credentials are correct, null otherwise
*/
Subject checkAuthentication(String username, String password);
-
+
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//
// The following are shared with the Remote Interface
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerRemote.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerRemote.java
index 473d926..d8d3989 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerRemote.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerRemote.java
@@ -146,7 +146,7 @@ public interface SubjectManagerRemote {
/**
* Logs out a user.
*
- * @param username The username for the current user
+ * @param subject The Subject to log out. The sessionId must be valid.
*/
@WebMethod
void logout( //
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
index 84ae777..a8b1691 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
@@ -391,7 +391,7 @@ public class DiscoveryBossBean implements DiscoveryBossLocal,
DiscoveryBossRemot
} else {
Subject creator = this.subjectManager.getSubjectById(creatorSubjectId);
try {
- creator = this.subjectManager.loginUnauthenticated(creator.getName(),
true);
+ creator = this.subjectManager.loginUnauthenticated(creator.getName());
} catch (LoginException e) {
throw new IllegalStateException(
"Unable to temporarily login to provided resource creator user
for resource creation", e);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/GroupOperationJob.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/GroupOperationJob.java
index 18c35b9..f4224d2 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/GroupOperationJob.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/GroupOperationJob.java
@@ -96,7 +96,7 @@ public class GroupOperationJob extends OperationJob {
jobDetail);
// create a new session even if user is logged in elsewhere, we don't
want to attach to that user's session
- Subject user = getUserWithSession(schedule.getSubject(), false);
+ Subject user = getUserWithSession(schedule.getSubject());
ResourceGroup group = schedule.getGroup();
// we need the operation definition to fill in the history item
@@ -126,10 +126,11 @@ public class GroupOperationJob extends OperationJob {
// now create detail composites from the resource list
List<ResourceOperationDetailsComposite> resourceComposites = new
ArrayList<ResourceOperationDetailsComposite>();
+ Subject creator = getUserWithSession(user);
for (Resource nextResourceToOperateOn : resourcesToOperateOn) {
// create the non-quartz schedule entity for the given job execution
context data
ResourceOperationSchedule resourceSchedule =
createScheduleForResource(schedule, jobDetail.getGroup(),
- getUserWithSession(user, true), nextResourceToOperateOn);
+ creator, nextResourceToOperateOn);
// crate the resource-level history entity for the newly created
non-quartz schedule entity
// this method also does the persisting
@@ -158,7 +159,7 @@ public class GroupOperationJob extends OperationJob {
+ "this resource operation to be cancelled.");
composite.history.setStatus(OperationRequestStatus.CANCELED);
composite.history = (ResourceOperationHistory)
operationManager.updateOperationHistory(
- getUserWithSession(user, true), composite.history);
+ creator, composite.history);
continue;
}
@@ -169,7 +170,7 @@ public class GroupOperationJob extends OperationJob {
do {
Thread.sleep(5000);
updatedOperationHistory =
operationManager.getOperationHistoryByHistoryId(
- getUserWithSession(user, true), resourceHistoryId);
+ getUserWithSession(user), resourceHistoryId);
// if the duration was ridiculously long, let's break out
of here. this will rarely
// be triggered because our operation manager will timeout
long running operations for us
@@ -191,7 +192,7 @@ public class GroupOperationJob extends OperationJob {
// failed to even send to the agent, immediately mark the job as
failed
groupHistory.setErrorMessage(ThrowableUtil.getStackAsString(e));
groupHistory = (GroupOperationHistory)
operationManager.updateOperationHistory(
- getUserWithSession(user, true), groupHistory);
+ getUserWithSession(user), groupHistory);
if (schedule.isHaltOnFailure()) {
hadFailure = true;
@@ -200,6 +201,7 @@ public class GroupOperationJob extends OperationJob {
}
} else {
// send the invocation requests without waiting for each to return
+ creator = getUserWithSession(user);
for (ResourceOperationDetailsComposite composite : resourceComposites) {
try {
invokeOperationOnResource(composite, operationManager);
@@ -210,8 +212,8 @@ public class GroupOperationJob extends OperationJob {
// failed to even send to the agent, immediately mark the job as
failed
groupHistory.setErrorMessage(ThrowableUtil.getStackAsString(e));
- groupHistory = (GroupOperationHistory)
operationManager.updateOperationHistory(
- getUserWithSession(user, true), groupHistory);
+ groupHistory = (GroupOperationHistory)
operationManager.updateOperationHistory(creator,
+ groupHistory);
// Note: in actuality - I don't think users have a way in the
user interface to turn on halt-on-failure for parallel execution.
// So this isHaltOnFailure will probably always be false. But in
case we want to support this, leave this here.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationJob.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationJob.java
index 778838f..955de7a 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationJob.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationJob.java
@@ -54,10 +54,10 @@ public abstract class OperationJob implements Job {
*
* @throws Exception
*
- * @see SubjectManagerLocal#loginUnauthenticated(String, boolean)
+ * @see SubjectManagerLocal#loginUnauthenticated(String)
*/
- protected Subject getUserWithSession(Subject user, boolean reattach) throws Exception
{
- return LookupUtil.getSubjectManager().loginUnauthenticated(user.getName(),
reattach);
+ protected Subject getUserWithSession(Subject user) throws Exception {
+ return LookupUtil.getSubjectManager().loginUnauthenticated(user.getName());
}
protected void updateOperationScheduleEntity(JobDetail jobDetail, Date nextFireTime,
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/ResourceOperationJob.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/ResourceOperationJob.java
index c9e7b35..2b01fad 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/ResourceOperationJob.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/ResourceOperationJob.java
@@ -28,7 +28,6 @@ import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.rhq.core.domain.auth.Subject;
-import org.rhq.core.domain.operation.OperationHistory;
import org.rhq.core.domain.operation.ResourceOperationHistory;
import org.rhq.core.domain.operation.bean.ResourceOperationSchedule;
import org.rhq.core.domain.resource.InventoryStatus;
@@ -85,7 +84,7 @@ public class ResourceOperationJob extends OperationJob {
// Login the schedule's subject so its assigned a session, so our
security tests pass.
// Create a new session even if user is logged in elsewhere, we don't
want to attach to that user's session
- schedule.setSubject(getUserWithSession(schedule.getSubject(), false));
+ schedule.setSubject(getUserWithSession(schedule.getSubject()));
// for the security check, can the user who scheduled the operation in the
first
// place still have the authority to execute it against the resource in
question
@@ -161,12 +160,12 @@ public class ResourceOperationJob extends OperationJob {
*/
void invokeOperationOnResource(ResourceOperationSchedule schedule,
ResourceOperationHistory resourceHistory,
OperationManagerLocal operationManager) throws Exception {
- // make sure the session is still valid
- schedule.setSubject(getUserWithSession(schedule.getSubject(), true));
+ // make sure we have a valid session
+ Subject s = getUserWithSession(schedule.getSubject());
+ schedule.setSubject(s);
resourceHistory.setStartedTime();
- resourceHistory = (ResourceOperationHistory)
operationManager.updateOperationHistory(
- getUserWithSession(schedule.getSubject(), true), resourceHistory);
+ resourceHistory = (ResourceOperationHistory)
operationManager.updateOperationHistory(s, resourceHistory);
// now tell the agent to invoke it!
try {
@@ -187,7 +186,7 @@ public class ResourceOperationJob extends OperationJob {
} catch (Exception e) {
// failed to even send to the agent, immediately mark the job as failed
resourceHistory.setErrorMessage(ThrowableUtil.getStackAsString(e));
-
operationManager.updateOperationHistory(getUserWithSession(schedule.getSubject(), true),
resourceHistory);
+ operationManager.updateOperationHistory(s, resourceHistory);
operationManager.checkForCompletedGroupOperation(resourceHistory.getId());
throw e;
}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java
index 50ee3b6..b9fe4df 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/auth/test/SubjectManagerBeanTest.java
@@ -33,11 +33,11 @@ import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertySimple;
-import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.criteria.SubjectCriteria;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.server.auth.SessionManager;
import org.rhq.enterprise.server.auth.SessionNotFoundException;
-import org.rhq.enterprise.server.auth.SessionTimeoutException;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
import org.rhq.enterprise.server.authz.PermissionException;
@@ -77,14 +77,10 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
// clean out all users' sessions (a user can have more than one session)
while (usernames.size() > 0) {
- String doomed_user = usernames.get(0);
try {
- int session = session_manager.getSessionIdFromUsername(doomed_user);
- session_manager.invalidate(session);
- } catch (SessionTimeoutException e) {
- // keep going - just means we cleaned out that expired session
- usernames.remove(0);
- } catch (SessionNotFoundException e) {
+ String doomed_user = usernames.get(0);
+ session_manager.invalidate(doomed_user);
+ } finally {
usernames.remove(0);
}
}
@@ -106,7 +102,6 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
// create the user
Subject new_user = new Subject("dummy-user", true, false);
new_user = subjectManager.createSubject(superuser, new_user);
- createSession(new_user);
assert new_user.getUserConfiguration() == null : "There should not be
any configuration yet";
// set and persist an empty configuration
@@ -128,6 +123,7 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
assert new_user.getUserConfiguration() != null : "A full configuration
should have been set";
assert new_user.getUserConfiguration().getProperties().size() == 2 : "A
full config should have been set";
+ new_user = createSession(new_user);
new_user = subjectManager.updateSubject(new_user, new_user); // let the user
itself change it
config = new_user.getUserConfiguration();
assert config != null : "A full configuration should have been
persisted";
@@ -169,7 +165,7 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
try {
superuser = subjectManager.getOverlord();
rhqadmin = subjectManager.getSubjectByName("rhqadmin");
- createSession(rhqadmin);
+ rhqadmin = createSession(rhqadmin);
try {
superuser.setFactive(false);
@@ -208,9 +204,9 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
getTransactionManager().begin();
try {
superuser = subjectManager.getOverlord();
- createSession(superuser);
+ superuser = createSession(superuser);
rhqadmin = subjectManager.getSubjectByName("rhqadmin");
- createSession(rhqadmin);
+ rhqadmin = createSession(rhqadmin);
try {
subjectManager.deleteUsers(superuser, new int[] { rhqadmin.getId() });
@@ -268,7 +264,7 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
assert rhqadmin.getName().equals("rhqadmin");
assert
authorizationManager.getExplicitGlobalPermissions(rhqadmin).containsAll(all_global_perms);
- createSession(rhqadmin); // our test needs to ensure the rhqadmin user has a
session
+ rhqadmin = createSession(rhqadmin); // our test needs to ensure the rhqadmin user
has a session
// check the subjects that do and do not have principals
Collection<String> all_users_with_principals =
subjectManager.findAllUsersWithPrincipals();
@@ -278,7 +274,19 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
assert subjectManager.isUserWithPrincipal(rhqadmin.getName());
// get all subjects, whether or not they have a principal
- PageList<Subject> all_subjects =
subjectManager.findAllSubjects(PageControl.getUnlimitedInstance());
+ SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
+ Subject subject = null;
+ try {
+ subject = subjectManager.loginUnauthenticated("rhqadmin");
+ } catch (Exception e) {
+ assert false : "There must be at least rhqadmin user";
+ }
+
+ SubjectCriteria c = new SubjectCriteria();
+ c.addFilterFsystem(false);
+ c.addSortName(PageOrdering.ASC);
+ PageList<Subject> all_subjects =
subjectManager.findSubjectsByCriteria(subject, c);
+
assert all_subjects.size() >= 1 : "There must be at least rhqadmin
user";
assert !all_subjects.contains(superuser) : "The superuser should not have
been returned in the list";
assert all_subjects.contains(rhqadmin) : "Missing user [" + rhqadmin +
"] from: " + all_subjects;
@@ -296,14 +304,14 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
new_user.setDepartment("my-department");
new_user = subjectManager.createSubject(rhqadmin, new_user);
- createSession(new_user);
+ new_user = createSession(new_user);
assert !subjectManager.isUserWithPrincipal(new_user.getName());
subjectManager.createPrincipal(subjectManager.getOverlord(), new_user.getName(),
"my-password");
assert subjectManager.isUserWithPrincipal(new_user.getName());
// make sure it was persisted and you can actually login with it
assert new_user.getId() != 0;
- Subject login_new_user = subjectManager.loginUnauthenticated(new_user.getName(),
false);
+ Subject login_new_user =
subjectManager.loginUnauthenticated(new_user.getName());
assert login_new_user.equals(new_user);
new_user = login_new_user; // login_new_user was given a new session ID
@@ -381,29 +389,45 @@ public class SubjectManagerBeanTest extends AbstractEJB3Test {
getTransactionManager().begin();
try {
- Subject subject1 = subjectManager.loginUnauthenticated("rhqadmin",
false);
+ Subject subject1 =
subjectManager.loginUnauthenticated("rhqadmin");
int session1 = subject1.getSessionId();
Thread.sleep(500); // just wait a bit
- Subject subject2 = subjectManager.loginUnauthenticated("rhqadmin",
true);
+ Subject subject2 =
subjectManager.loginUnauthenticated("rhqadmin");
int session2 = subject2.getSessionId();
- assert session1 == session2 : "The same session should be been assigned
when logging in twice";
+ assert session1 != session2 : "The same sessionId should never be
assigned when logging in twice";
assert subject1.equals(subject2);
- assert subjectManager.isLoggedIn("rhqadmin");
- subjectManager.logout(session2);
- assert !subjectManager.isLoggedIn("rhqadmin");
+ Subject s = subjectManager.getSubjectByNameAndSessionId("rhqadmin",
subject1.getSessionId());
+ assert s.getSessionId() == session1;
+ s = subjectManager.getSubjectByNameAndSessionId("rhqadmin",
subject2.getSessionId());
+ assert s.getSessionId() == session2;
- subject2 = subjectManager.loginUnauthenticated("rhqadmin", true);
- session2 = subject2.getSessionId();
+ subjectManager.logout(session1);
+ try {
+ s = subjectManager.getSubjectByNameAndSessionId("rhqadmin",
subject1.getSessionId());
+ assert false : "Session should be invalid";
+ } catch (SessionNotFoundException ok) {
+ }
+
+ s = subjectManager.getSubjectByNameAndSessionId("rhqadmin",
subject2.getSessionId());
+ assert s.getSessionId() == session2;
- assert session1 != session2 : "A new session should have been assigned
after logging out";
- assert subject2.equals(subjectManager.getSubjectBySessionId(session2));
+ // this should ne a no-op, no exception
+ subjectManager.logout(session1);
+
+ subjectManager.logout(session2);
+ try {
+ s = subjectManager.getSubjectByNameAndSessionId("rhqadmin",
subject2.getSessionId());
+ fail("Session should be invalid");
+ } catch (SessionNotFoundException e) {
+ // expected
+ }
try {
- subjectManager.loginUnauthenticated("rhqadminX", true);
+ subjectManager.loginUnauthenticated("rhqadminX");
assert false : "Should not have logged in - provided a bad
username";
} catch (LoginException ok) {
}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/DynamicConfigurationPropertyBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/DynamicConfigurationPropertyBeanTest.java
index 410feb9..dba76ed 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/DynamicConfigurationPropertyBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/DynamicConfigurationPropertyBeanTest.java
@@ -34,7 +34,6 @@ import javax.transaction.TransactionManager;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.configuration.DynamicConfigurationPropertyValue;
import org.rhq.core.domain.content.PackageType;
@@ -63,32 +62,32 @@ public class DynamicConfigurationPropertyBeanTest extends
AbstractEJB3Test {
List<DynamicConfigurationPropertyValue> stringList =
bean.lookupValues("foo");
//Verify
- assert stringList !=null;
+ assert stringList != null;
assert stringList.size() == 0;
- }
+ }
@Test(enabled = ENABLED)
public void user() throws Exception {
+ String queryString = "SELECT s FROM Subject s WHERE s.fsystem =
false";
+
// Setup
- int existingUserCount = countForQuery(Subject.QUERY_FIND_ALL);
+ int existingUserCount = countForQuery(queryString, false);
// Test
- List<DynamicConfigurationPropertyValue> users =
- bean.lookupValues(PropertyExpressionEvaluator.KEY_USERS);
+ List<DynamicConfigurationPropertyValue> users =
bean.lookupValues(PropertyExpressionEvaluator.KEY_USERS);
// Verify
outputList(users);
assert users.size() == existingUserCount : "Expected: " +
existingUserCount + ", Found: " + users.size();
- }
+ }
@Test(enabled = ENABLED)
- public void roles() throws Exception{
+ public void roles() throws Exception {
// Setup
int existingRoleCount = countForQuery(Role.QUERY_FIND_ALL);
// Test
- List<DynamicConfigurationPropertyValue> roles =
- bean.lookupValues(PropertyExpressionEvaluator.KEY_ROLES);
+ List<DynamicConfigurationPropertyValue> roles =
bean.lookupValues(PropertyExpressionEvaluator.KEY_ROLES);
// Verify
outputList(roles);
@@ -112,8 +111,7 @@ public class DynamicConfigurationPropertyBeanTest extends
AbstractEJB3Test {
packageType = new PackageType("dynamicConfigPropBeanTestType",
resourceType);
entityManager.persist(packageType);
tx.commit();
- }
- catch (Exception e) {
+ } catch (Exception e) {
if (tx.getStatus() == Status.STATUS_ACTIVE) {
tx.rollback();
}
@@ -123,8 +121,8 @@ public class DynamicConfigurationPropertyBeanTest extends
AbstractEJB3Test {
assert existingPackageTypes > 0 : "Package type created in setup was not
written correctly";
// Test
- List<DynamicConfigurationPropertyValue> types =
- bean.lookupValues(PropertyExpressionEvaluator.KEY_PACKAGE_TYPES);
+ List<DynamicConfigurationPropertyValue> types = bean
+ .lookupValues(PropertyExpressionEvaluator.KEY_PACKAGE_TYPES);
// Verify
assert types.size() == existingPackageTypes : "Expected: " +
existingPackageTypes + ", Found: " + types.size();
@@ -138,12 +136,11 @@ public class DynamicConfigurationPropertyBeanTest extends
AbstractEJB3Test {
resourceType = entityManager.find(ResourceType.class, resourceType.getId());
entityManager.remove(resourceType);
- packageType = entityManager.find(PackageType.class, packageType.getId());
+ packageType = entityManager.find(PackageType.class, packageType.getId());
entityManager.remove(packageType);
tx.commit();
- }
- catch (Exception e) {
+ } catch (Exception e) {
if (tx.getStatus() == Status.STATUS_ACTIVE) {
tx.rollback();
}
@@ -151,10 +148,16 @@ public class DynamicConfigurationPropertyBeanTest extends
AbstractEJB3Test {
}
private int countForQuery(String queryName) throws NotSupportedException,
SystemException {
+ return countForQuery(queryName, true);
+ }
+
+ @SuppressWarnings("unchecked")
+ private int countForQuery(String queryString, boolean isName) throws
NotSupportedException, SystemException {
+
getTransactionManager().begin();
EntityManager entityManager = getEntityManager();
- Query query = entityManager.createNamedQuery(queryName);
+ Query query = (isName) ? entityManager.createNamedQuery(queryString) :
entityManager.createQuery(queryString);
List existing = query.getResultList();
int count = existing.size();
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
index d6b14cb..e580229 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
@@ -60,7 +60,7 @@ public class ResourceStorageTest extends AbstractEJB3Test {
ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
PageControl pc = new PageControl(1, 5, new
OrderingField("res.name", PageOrdering.ASC));
- Subject subject = subjectManager.loginUnauthenticated("ghinkle",
true);
+ Subject subject = subjectManager.loginUnauthenticated("ghinkle");
//Subject subject = subjectManager.getOverlord();
createSession(subject);
@@ -187,7 +187,7 @@ public class ResourceStorageTest extends AbstractEJB3Test {
try {
DiscoveryBossLocal discoveryBoss = LookupUtil.getDiscoveryBoss();
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
- Subject rhqadmin = subjectManager.loginUnauthenticated("rhqadmin",
true);
+ Subject rhqadmin =
subjectManager.loginUnauthenticated("rhqadmin");
createSession(rhqadmin);
Map<Resource, List<Resource>> queue =
discoveryBoss.getQueuedPlatformsAndServers(rhqadmin, PageControl
@@ -200,11 +200,13 @@ public class ResourceStorageTest extends AbstractEJB3Test {
}
}
+ @SuppressWarnings("unused")
@Test(groups = "integration.ejb3")
public void resourceTest() throws Exception {
// TODO GH: Implement actual tests
System.out.println("foo");
+
ResourceManagerLocal resourceManager = (ResourceManagerLocal)
getInitialContext().lookup(
ResourceManagerBean.class.getSimpleName() + "/local");
@@ -214,7 +216,7 @@ public class ResourceStorageTest extends AbstractEJB3Test {
AuthorizationManagerLocal authorizationManager = (AuthorizationManagerLocal)
getInitialContext().lookup(
AuthorizationManagerBean.class.getSimpleName() + "/local");
- Subject rhqadmin = subjectManager.loginUnauthenticated("rhqadmin",
true);
+ Subject rhqadmin = subjectManager.loginUnauthenticated("rhqadmin");
System.out.println(rhqadmin);
}
}
\ No newline at end of file
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
index abbe782..5811792 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
@@ -145,7 +145,7 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
}
}
- if (stats!=null)
+ if (stats != null)
start = stats.getQueryExecutionCount();
else
start = 0;
@@ -205,9 +205,10 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
* annotations by creating sessions for different users with different permissions.
*
* @param subject a JON subject
+ * @return the session activated subject, a copy of the subjected passed in.
*/
- public void createSession(Subject subject) {
- SessionManager.getInstance().put(subject);
+ public Subject createSession(Subject subject) {
+ return SessionManager.getInstance().put(subject);
}
/**
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/SessionTestHelper.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/SessionTestHelper.java
index 45412c4..6ff56db 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/SessionTestHelper.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/SessionTestHelper.java
@@ -87,8 +87,8 @@ public class SessionTestHelper {
em.persist(newSubject);
em.flush();
- SessionManager.getInstance().put(newSubject, 1000 * 300);
-
+ // return the copy, not the original
+ newSubject = SessionManager.getInstance().put(newSubject, 1000 * 300);
return newSubject;
}
diff --git
a/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
b/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
index 26c9cdf..16c7644 100644
---
a/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
+++
b/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
@@ -73,31 +73,31 @@ public class CliSender extends AlertSender<CliComponent> {
private static final String ENGINE_NAME = "JavaScript";
private static final int MAX_RESULT_SIZE = 4000;
-
+
public static final String PROP_PACKAGE_ID = "packageId";
public static final String PROP_REPO_ID = "repoId";
public static final String PROP_USER_ID = "userId";
public static final String PROP_USER_NAME = "userName";
public static final String PROP_USER_PASSWORD = "userPassword";
-
+
private static final Log LOG = LogFactory.getLog(CliSender.class);
private static final String SUMMARY_TEMPLATE = "Ran script $packageName in
version $packageVersion from repo $repoName as user $userName.";
private static final String PREVIEW_TEMPLATE = "Run script $packageName from
repo $repoName as user $userName.";
private static final String VALIDATION_ERROR_MESSAGE = "The provided user failed
to authenticate.";
-
+
//no more than 10 concurrently running CLI notifications..
//is that enough?
private static final int MAX_SCRIPT_ENGINES = 10;
private static Queue<ScriptEngine> SCRIPT_ENGINES = new
ArrayDeque<ScriptEngine>(MAX_SCRIPT_ENGINES);
private static int ENGINES_IN_USE = 0;
-
+
/**
* Simple strongly typed representation of the alert configuration
*/
private static class Config {
- Subject subject;
+ Subject subject;
int packageId;
int repoId;
}
@@ -105,36 +105,37 @@ public class CliSender extends AlertSender<CliComponent> {
private static class ExceptionHolder {
public ScriptException scriptException;
}
-
+
public SenderResult send(Alert alert) {
SenderResult result = new SenderResult();
BufferedReader reader = null;
ScriptEngine engine = null;
try {
final Config config = getConfig();
-
+
result.setSummary(createSummary(config, SUMMARY_TEMPLATE));
ByteArrayOutputStream scriptOutputStream = new ByteArrayOutputStream();
PrintWriter scriptOut = new PrintWriter(scriptOutputStream);
engine = getScriptEngine(alert, scriptOut, config);
-
+
final SandboxedScriptEngine sandbox = new SandboxedScriptEngine(engine, new
StandardScriptPermissions());
-
+
InputStream packageBits = getPackageBits(config.packageId, config.repoId);
reader = new BufferedReader(new InputStreamReader(packageBits));
final BufferedReader rdr = reader;
-
+
final ExceptionHolder exceptionHolder = new ExceptionHolder();
-
+
Thread scriptRunner = new Thread(new Runnable() {
public void run() {
try {
//fake the login
- SessionManager.getInstance().put(config.subject,
pluginComponent.getScriptTimeout() * 1000);
+ config.subject =
SessionManager.getInstance().put(config.subject,
+ pluginComponent.getScriptTimeout() * 1000);
sandbox.eval(rdr);
SessionManager.getInstance().invalidate(config.subject.getSessionId());
} catch (ScriptException e) {
@@ -142,20 +143,21 @@ public class CliSender extends AlertSender<CliComponent> {
}
}
}, "Script Runner for alert " + alert);
- scriptRunner.setDaemon(true);
+ scriptRunner.setDaemon(true);
scriptRunner.start();
-
+
if (pluginComponent.getScriptTimeout() <= 0) {
scriptRunner.join();
} else {
scriptRunner.join(pluginComponent.getScriptTimeout() * 1000);
}
-
+
scriptRunner.interrupt();
if (exceptionHolder.scriptException != null) {
- LOG.info("The script execution for CLI notification of alert ["
+ alert + "] failed.", exceptionHolder.scriptException);
-
+ LOG.info("The script execution for CLI notification of alert ["
+ alert + "] failed.",
+ exceptionHolder.scriptException);
+
//make things pretty for the UI
ScriptEngineInitializer initializer =
ScriptEngineFactory.getInitializer(ENGINE_NAME);
String message =
initializer.extractUserFriendlyErrorMessage(exceptionHolder.scriptException);
@@ -164,18 +166,18 @@ public class CliSender extends AlertSender<CliComponent> {
String scriptName = createSummary(config, "script $packageName
($packageVersion) in repo $repoName");
throw new ScriptException(message, scriptName, line, col);
}
-
+
scriptOut.flush();
String scriptOutput =
scriptOutputStream.toString(Charset.defaultCharset().name());
if (scriptOutput.length() == 0) {
scriptOutput = "Script generated no output.";
}
-
+
if (scriptOutput.length() > remainingResultSize(result)) {
scriptOutput = scriptOutput.substring(0, remainingResultSize(result));
}
-
+
result.addSuccessMessage(scriptOutput);
return result;
@@ -188,7 +190,7 @@ public class CliSender extends AlertSender<CliComponent> {
if (engine != null) {
returnEngine(engine);
}
-
+
if (reader != null) {
try {
reader.close();
@@ -213,18 +215,18 @@ public class CliSender extends AlertSender<CliComponent> {
@Override
public AlertSenderValidationResults validateAndFinalizeConfiguration(Subject subject)
{
AlertSenderValidationResults results = new
AlertSenderValidationResults(alertParameters, extraParameters);
-
+
String userIdString = alertParameters.getSimpleValue(PROP_USER_ID, null);
String userName = alertParameters.getSimpleValue(PROP_USER_NAME, null);
String userPassword = alertParameters.getSimpleValue(PROP_USER_PASSWORD, null);
-
+
Integer userId = userIdString == null ? null : Integer.valueOf(userIdString);
-
+
if (userId == null || userId != subject.getId()) {
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
-
+
Subject authSubject = subjectManager.checkAuthentication(userName,
userPassword);
-
+
if (authSubject == null) {
PropertySimple userNameProp = new PropertySimple(PROP_USER_NAME,
userName);
userNameProp.setErrorMessage(VALIDATION_ERROR_MESSAGE);
@@ -243,10 +245,10 @@ public class CliSender extends AlertSender<CliComponent> {
//do not store the password in the database ever
alertParameters.put(new PropertySimple(PROP_USER_PASSWORD, null));
-
+
return results;
}
-
+
private static ScriptEngine getScriptEngine(Alert alert, PrintWriter output, Config
config) throws ScriptException,
IOException, InterruptedException {
Subject user = config.subject;
@@ -257,19 +259,23 @@ public class CliSender extends AlertSender<CliComponent> {
bindings.put("alert", alert);
ScriptEngine engine = takeEngine(bindings);
-
+
return engine;
}
private static InputStream getPackageBits(int packageId, int repoId) throws
IOException {
final ContentSourceManagerLocal csm = LookupUtil.getContentSourceManager();
RepoManagerLocal rm = LookupUtil.getRepoManagerLocal();
- final PackageVersion versionToUse =
rm.getLatestPackageVersion(LookupUtil.getSubjectManager().getOverlord(), packageId,
repoId);
+ final PackageVersion versionToUse =
rm.getLatestPackageVersion(LookupUtil.getSubjectManager().getOverlord(),
+ packageId, repoId);
if (versionToUse == null) {
- throw new IllegalArgumentException("The package with id " +
packageId + " either doesn't exist at all or doesn't have any version.
Can't execute a CLI script without a script to run.");
+ throw new IllegalArgumentException(
+ "The package with id "
+ + packageId
+ + " either doesn't exist at all or doesn't have any
version. Can't execute a CLI script without a script to run.");
}
-
+
PipedInputStream ret = new PipedInputStream();
final PipedOutputStream out = new PipedOutputStream(ret);
@@ -322,31 +328,31 @@ public class CliSender extends AlertSender<CliComponent> {
Subject overlord = LookupUtil.getSubjectManager().getOverlord();
RepoManagerLocal rm = LookupUtil.getRepoManagerLocal();
PackageVersion versionToUse = rm.getLatestPackageVersion(overlord,
config.packageId, config.repoId);
-
+
if (versionToUse != null) {
ret = ret.replace("$packageName",
versionToUse.getDisplayName());
- ret = ret.replace("$packageVersion",
versionToUse.getDisplayVersion() == null ? versionToUse.getVersion()
- : versionToUse.getDisplayVersion());
+ ret = ret.replace("$packageVersion",
versionToUse.getDisplayVersion() == null ? versionToUse
+ .getVersion() : versionToUse.getDisplayVersion());
} else {
ret = ret.replace("$packageName", "unknown script with
package id " + config.packageId);
ret = ret.replace("$packageVersion", "no version");
}
-
+
RepoCriteria criteria = new RepoCriteria();
criteria.addFilterId(config.repoId);
-
+
List<Repo> repos = rm.findReposByCriteria(overlord, criteria);
-
+
String repoName;
-
+
if (repos.size() > 0) {
repoName = repos.get(0).getName();
} else {
repoName = "unknown repo with id " + config.repoId;
}
-
+
ret = ret.replace("$repoName", repoName);
-
+
return ret;
} catch (Exception e) {
LOG.info("Failed to create alert sender summary.", e);
@@ -357,10 +363,13 @@ public class CliSender extends AlertSender<CliComponent> {
private Config getConfig() throws IllegalArgumentException {
Config ret = new Config();
- int subjectId = getIntFromConfiguration(PROP_USER_ID, "User id not
specified.", "Failed to read subject id property: ");
- int packageId = getIntFromConfiguration(PROP_PACKAGE_ID, "Package id of the
script not specified.", "Failed to read the package id property: ");
- int repoId = getIntFromConfiguration(PROP_REPO_ID, "Repo to download the
script package from not specified.", "Failed to read the repo id property:
");
-
+ int subjectId = getIntFromConfiguration(PROP_USER_ID, "User id not
specified.",
+ "Failed to read subject id property: ");
+ int packageId = getIntFromConfiguration(PROP_PACKAGE_ID, "Package id of the
script not specified.",
+ "Failed to read the package id property: ");
+ int repoId = getIntFromConfiguration(PROP_REPO_ID, "Repo to download the
script package from not specified.",
+ "Failed to read the repo id property: ");
+
Subject subject = LookupUtil.getSubjectManager().getSubjectById(subjectId);
if (subject == null) {
@@ -370,24 +379,25 @@ public class CliSender extends AlertSender<CliComponent> {
ret.subject = subject;
ret.packageId = packageId;
ret.repoId = repoId;
-
+
return ret;
}
-
- private int getIntFromConfiguration(String propName, String errorMessage, String
convertErrorMessage) throws IllegalArgumentException {
+
+ private int getIntFromConfiguration(String propName, String errorMessage, String
convertErrorMessage)
+ throws IllegalArgumentException {
PropertySimple prop = alertParameters.getSimple(propName);
-
+
if (prop == null) {
- throw new IllegalArgumentException(errorMessage);
+ throw new IllegalArgumentException(errorMessage);
}
-
+
try {
return prop.getIntegerValue();
} catch (Exception e) {
throw new IllegalArgumentException(convertErrorMessage + e.getMessage(), e);
}
}
-
+
private static ScriptEngine takeEngine(StandardBindings bindings) throws
InterruptedException, ScriptException,
IOException {
synchronized (SCRIPT_ENGINES) {
@@ -398,14 +408,14 @@ public class CliSender extends AlertSender<CliComponent> {
ScriptEngine engine = SCRIPT_ENGINES.poll();
if (engine == null) {
- engine = ScriptEngineFactory.getScriptEngine(ENGINE_NAME,
- new PackageFinder(Collections.<File> emptyList()), bindings);
+ engine = ScriptEngineFactory.getScriptEngine(ENGINE_NAME, new
PackageFinder(Collections
+ .<File> emptyList()), bindings);
} else {
ScriptEngineFactory.injectStandardBindings(engine, bindings, true);
}
-
+
++ENGINES_IN_USE;
-
+
return engine;
}
}
@@ -417,20 +427,20 @@ public class CliSender extends AlertSender<CliComponent> {
SCRIPT_ENGINES.notify();
}
}
-
+
private static int remainingResultSize(SenderResult r) {
//the "10" is a ballpark to allow for some formatting
//done by the receivers of the SenderResult.
int ret = MAX_RESULT_SIZE - r.getSummary().length() - 10;
-
- for(String m : r.getSuccessMessages()) {
+
+ for (String m : r.getSuccessMessages()) {
ret -= m.length() + 10;
}
-
- for(String m : r.getFailureMessages()) {
+
+ for (String m : r.getFailureMessages()) {
ret -= m.length() + 10;
}
-
+
return ret;
}
}
commit 1131a6824bb2f0a312c66f1d628729230f3731c6
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Wed May 18 15:47:53 2011 -0400
[BZ 627391] There was a 2nd method with the query param name wrong
(cherry picked from commit ff677500c349d4c6e3908e27fa728251bd55a674)
Conflicts:
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
index 3f4b794..6102a81 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
@@ -252,11 +252,10 @@ public class AuthorizationManagerBean implements
AuthorizationManagerLocal {
Query query = entityManager.createNamedQuery(Subject.QUERY_CAN_VIEW_AUTO_GROUP);
query.setParameter("parentResourceId", parentResourceId);
query.setParameter("resourceTypeId", resourceTypeId);
-
- query.setParameter("subject", -SUBJECT_ID_OVERLORD);
+ query.setParameter("subjectId", -1);
long baseCount = (Long) query.getSingleResult();
- query.setParameter("subject", subject);
+ query.setParameter("subjectId", subject.getId());
long subjectCount = (Long) query.getSingleResult();
/*
commit 46a79aff6bfda36a189290488ff53349144ffdff
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Wed May 18 15:46:59 2011 -0400
[BZ 627391] Fixing JPAQL query that checks autogroup access
(cherry picked from commit da4c70da6d11ec2a8f1a18dba5bdecd4e31337ee)
Conflicts:
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
index d3530de..3f4b794 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2011 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -193,11 +193,10 @@ public class AuthorizationManagerBean implements
AuthorizationManagerLocal {
query.setParameter("permission", permission);
query.setParameter("parentResourceId", parentResourceId);
query.setParameter("resourceTypeId", resourceTypeId);
-
- query.setParameter("subject", -SUBJECT_ID_OVERLORD);
+ query.setParameter("subjectId", -1);
long baseCount = (Long) query.getSingleResult();
- query.setParameter("subject", subject);
+ query.setParameter("subjectId", subject.getId());
long subjectCount = (Long) query.getSingleResult();
/*
commit eac0b5c9abaeaf5919b8a27709905d19e71082d1
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Wed May 18 11:08:36 2011 -0400
[BZ 697589] remove getResourceConfigurationMapForCompatibleGroup() from
ConfigurationManagerLocal and ConfigurationManagerBean, since it is not a method anyone
would ever want to call (getResourceConfigurationsForCompatibleGroup() should be used
instead) (
https://bugzilla.redhat.com/show_bug.cgi?id=697589)
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
index 7026b08..7f7c31b 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
@@ -22,8 +22,6 @@ import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.configuration.ConfigurationManagerLocal;
-import org.rhq.enterprise.server.resource.ResourceManagerLocal;
-import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
/**
@@ -34,8 +32,6 @@ public class ConfigurationGWTServiceImpl extends AbstractGWTServiceImpl
implemen
private static final long serialVersionUID = 1L;
private ConfigurationManagerLocal configurationManager =
LookupUtil.getConfigurationManager();
- private ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
- private ResourceGroupManagerLocal groupManager =
LookupUtil.getResourceGroupManager();
@Override
public void purgePluginConfigurationUpdates(int[] configUpdateIds, boolean
purgeInProgress) throws RuntimeException {
@@ -262,9 +258,6 @@ public class ConfigurationGWTServiceImpl extends
AbstractGWTServiceImpl implemen
@Override
public Map<Integer, Configuration> findResourceConfigurationsForGroup(int
groupId) throws RuntimeException {
try {
- //ResourceGroup group =
this.groupManager.getResourceGroup(getSessionSubject(), groupId);
- //Map<Integer, Configuration> configurations =
this.configurationManager
- // .getResourceConfigurationMapForCompatibleGroup(group);
Map<Integer, Configuration> configurations = this.configurationManager
.getResourceConfigurationsForCompatibleGroup(getSessionSubject(),
groupId);
return SerialUtility.prepare(configurations,
"ConfigurationService.findResourceConfigurationsForGroup");
@@ -358,23 +351,6 @@ public class ConfigurationGWTServiceImpl extends
AbstractGWTServiceImpl implemen
}
}
- private List<ResourceConfigurationComposite>
convertToCompositesList(Map<Integer, Configuration> configurations)
- throws RuntimeException {
- try {
- List<ResourceConfigurationComposite> configurationComposites = new
ArrayList<ResourceConfigurationComposite>(
- configurations.size());
- for (Integer resourceId : configurations.keySet()) {
- Configuration configuration = configurations.get(resourceId);
- ResourceConfigurationComposite configurationComposite = new
ResourceConfigurationComposite(resourceId,
- configuration);
- configurationComposites.add(configurationComposite);
- }
- return configurationComposites;
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
private Map<Integer, Configuration>
convertToMap(List<ResourceConfigurationComposite> resourceConfigurations)
throws RuntimeException {
try {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
index eab8623..9282df5 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
@@ -1814,13 +1814,6 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
}
@SuppressWarnings("unchecked")
- public Map<Integer, Configuration>
getResourceConfigurationMapForCompatibleGroup(ResourceGroup compatibleGroup) {
- Tuple<String, Object> groupIdParameter = new Tuple<String,
Object>("resourceGroupId", compatibleGroup.getId());
- return
executeGetConfigurationMapQuery(Configuration.QUERY_GET_RESOURCE_CONFIG_MAP_BY_GROUP_ID,
100,
- groupIdParameter);
- }
-
- @SuppressWarnings("unchecked")
private Map<Integer, Configuration> executeGetConfigurationMapQuery(String
memberQueryName, int maxSize,
Tuple<String, Object>... parameters) {
Query countQuery = PersistenceUtility.createCountQuery(entityManager,
memberQueryName);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerLocal.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerLocal.java
index c36e403..c1222c1 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerLocal.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerLocal.java
@@ -400,8 +400,6 @@ public interface ConfigurationManagerLocal {
Map<Integer, Configuration> getResourceConfigurationMapForGroupUpdate(Subject
subject,
Integer groupResourceConfigurationUpdateId);
- Map<Integer, Configuration>
getResourceConfigurationMapForCompatibleGroup(ResourceGroup compatibleGroup);
-
/**
* Returns the current Resource configurations for the members in the specified
compatible group.
*
commit ed1744867c5a3a3bd50f7b822e3400f223daa0b0
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Wed May 18 10:12:23 2011 -0400
[BZ 697589] to load group member configs, call
configurationManager.getResourceConfigurationsForCompatibleGroup(), rather than
configurationManager.getResourceConfigurationMapForCompatibleGroup(), to ensure we get the
latest/live configs for each of the group members
(
https://bugzilla.redhat.com/show_bug.cgi?id=697589)
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
index e1eac94..7026b08 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
@@ -17,7 +17,6 @@ import
org.rhq.core.domain.criteria.GroupResourceConfigurationUpdateCriteria;
import org.rhq.core.domain.criteria.PluginConfigurationUpdateCriteria;
import org.rhq.core.domain.criteria.ResourceConfigurationUpdateCriteria;
import org.rhq.core.domain.resource.Resource;
-import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTService;
@@ -263,10 +262,11 @@ public class ConfigurationGWTServiceImpl extends
AbstractGWTServiceImpl implemen
@Override
public Map<Integer, Configuration> findResourceConfigurationsForGroup(int
groupId) throws RuntimeException {
try {
- ResourceGroup group = this.groupManager.getResourceGroup(getSessionSubject(),
groupId);
+ //ResourceGroup group =
this.groupManager.getResourceGroup(getSessionSubject(), groupId);
+ //Map<Integer, Configuration> configurations =
this.configurationManager
+ // .getResourceConfigurationMapForCompatibleGroup(group);
Map<Integer, Configuration> configurations = this.configurationManager
- .getResourceConfigurationMapForCompatibleGroup(group);
-
+ .getResourceConfigurationsForCompatibleGroup(getSessionSubject(),
groupId);
return SerialUtility.prepare(configurations,
"ConfigurationService.findResourceConfigurationsForGroup");
} catch (Throwable t) {
throw getExceptionToThrowToClient(t);
@@ -388,4 +388,5 @@ public class ConfigurationGWTServiceImpl extends
AbstractGWTServiceImpl implemen
throw getExceptionToThrowToClient(t);
}
}
+
}
commit 6ea278d85a438acc216a33dcd831d53e34e3c85a
Merge: 241f8a1 3ff7587
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Wed May 18 15:39:23 2011 +0200
Merge branch 'master-resource-upgrade-fixes'
commit 3ff7587af61a2ee37ad28226f44102528d509f9f
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Wed May 18 15:30:04 2011 +0200
Adding tests for resource upgrade revert to original state after failed upgrade and
duplicate resource key handling.
diff --git a/modules/core/plugin-container/pom.xml
b/modules/core/plugin-container/pom.xml
index 7a264f8..fd14685 100644
--- a/modules/core/plugin-container/pom.xml
+++ b/modules/core/plugin-container/pom.xml
@@ -315,6 +315,26 @@
<fileset
dir="${project.build.testOutputDirectory}/tmp/progress/v2"
includes="**/*.class,**/rhq-plugin.xml" />
</jar>
+ <copy
toDir="${project.build.testOutputDirectory}/tmp/duplicate/v1/META-INF">
+ <fileset
file="${project.build.testSourceDirectory}/org/rhq/core/pc/upgrade/plugins/duplicate/v1/rhq-plugin.xml"
/>
+ </copy>
+ <!-- <copy
toDir="${project.build.testOutputDirectory}/tmp/duplicate/v1/org/rhq/core/pc/upgrade/plugins/duplicate/v1">
+ <fileset
file="${project.build.testOutputDirectory}/org/rhq/core/pc/upgrade/plugins/duplicate/v1/*.class"
/>
+ </copy> -->
+ <jar
destfile="${project.build.testOutputDirectory}/resource-upgrade-test-plugin-duplicate-test-1.0.0.jar">
+ <fileset
dir="${project.build.testOutputDirectory}/tmp/duplicate/v1"
includes="**/*.class,**/rhq-plugin.xml" />
+ </jar>
+
+ <copy
toDir="${project.build.testOutputDirectory}/tmp/duplicate/v2/META-INF">
+ <fileset
file="${project.build.testSourceDirectory}/org/rhq/core/pc/upgrade/plugins/duplicate/v2/rhq-plugin.xml"
/>
+ </copy>
+ <!-- <copy
toDir="${project.build.testOutputDirectory}/tmp/duplicate/v2/org/rhq/core/pc/upgrade/plugins/duplicate/v2">
+ <fileset
file="${project.build.testOutputDirectory}/org/rhq/core/pc/upgrade/plugins/duplicate/v2/*.class"
/>
+ </copy> -->
+ <jar
destfile="${project.build.testOutputDirectory}/resource-upgrade-test-plugin-duplicate-test-2.0.0.jar">
+ <fileset
dir="${project.build.testOutputDirectory}/tmp/duplicate/v2"
includes="**/*.class,**/rhq-plugin.xml" />
+ </jar>
+
<delete dir="${project.build.testOutputDirectory}/tmp"
/>
</tasks>
</configuration>
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
index 793c0f6..d3b54aa 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
@@ -59,7 +59,8 @@ public class FakeServerInventory {
private Map<String, Resource> resourceStore = new HashMap<String,
Resource>();
private int counter;
private boolean failing;
-
+ private boolean failUpgrade;
+
private static final Comparator<Resource> ID_COMPARATOR = new
Comparator<Resource>() {
public int compare(Resource o1, Resource o2) {
return o1.getId() - o2.getId();
@@ -122,6 +123,10 @@ public class FakeServerInventory {
synchronized(FakeServerInventory.this) {
throwIfFailing();
+ if (failUpgrade) {
+ throw new RuntimeException("Failing the upgrade
purposefully.");
+ }
+
Set<ResourceUpgradeRequest> requests =
(Set<ResourceUpgradeRequest>) invocation.getParameter(0);
Set<ResourceUpgradeResponse> responses = new
HashSet<ResourceUpgradeResponse>();
@@ -188,6 +193,14 @@ public class FakeServerInventory {
this.failing = failing;
}
+ public synchronized boolean isFailUpgrade() {
+ return failUpgrade;
+ }
+
+ public synchronized void setFailUpgrade(boolean failUpgrade) {
+ this.failUpgrade = failUpgrade;
+ }
+
@SuppressWarnings("serial")
public synchronized Set<Resource> findResourcesByType(final ResourceType type)
{
Set<Resource> result = new HashSet<Resource>();
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
index f68ee01..5f493c9 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
@@ -331,6 +331,55 @@ public class ResourceUpgradeFailureHandlingTest extends
ResourceUpgradeTestBase
});
}
+ @Test
+ public void testResourcesRevertedToOriginalStateAfterFailedUpgrade() throws Exception
{
+ setCurrentServerSideInventory(new FakeServerInventory());
+
+ //let it all run in v1
+ executeTestWithPlugins(getAllDepsFor(TEST_V1_PLUGIN_NAME,
PARENT_SIBLING_V1_PLUGIN_NAME),
+ new AbstractTestPayload(true, Collections.<ResType> emptyList()) {
+ public void test(Map<ResType, Set<Resource>>
resourceUpgradeTestResources) {
+ }
+
+ public Expectations getExpectations(Mockery context) throws Exception {
+ return new Expectations() {
+ {
+ defineDefaultExpectations(this);
+ }
+ };
+ }
+ });
+
+ getCurrentServerSideInventory().setFailUpgrade(true);
+
+ //now let's run with v2 plugins and check the layout of the inventory
+ executeTestWithPlugins(getAllDepsFor(TEST_V2_PLUGIN_NAME,
PARENT_SIBLING_V2_PLUGIN_NAME),
+ new AbstractTestPayload(false, ALL_TYPES) {
+
+ public void test(Map<ResType, Set<Resource>> resources) {
+ checkPresenceOfResourceTypes(resources, getExpectedResourceTypes());
+
+ checkNumberOfResources(resources, ROOT_TYPE, 1);
+ checkNumberOfResources(resources, PARENT_DEP_TYPE, 1);
+
+ //check that the resources are upgraded
+ checkResourcesNotUpgraded(resources.get(PARENT_DEP_SIBLING_TYPE),
1);
+ checkResourcesNotUpgraded(resources.get(PARENT_TYPE), 2);
+ checkResourcesNotUpgraded(resources.get(SIBLING_TYPE), 20);
+ checkResourcesNotUpgraded(resources.get(TEST_TYPE), 20);
+ }
+
+ public Expectations getExpectations(Mockery context) throws Exception {
+ return new Expectations() {
+ {
+ defineDefaultExpectations(this);
+ }
+ };
+ }
+ });
+ }
+
+
@SuppressWarnings("unchecked")
@Override
protected void defineDefaultExpectations(Expectations expectations) {
@@ -358,13 +407,13 @@ public class ResourceUpgradeFailureHandlingTest extends
ResourceUpgradeTestBase
return deps;
}
- private static void checkPresenceOfResourceTypes(Map<ResType,
Set<Resource>> resources, Set<ResType> expectedTypes) {
+ protected static void checkPresenceOfResourceTypes(Map<ResType,
Set<Resource>> resources, Set<ResType> expectedTypes) {
for (ResType resType : expectedTypes) {
assertNotNull(resources.get(resType), "Expecting some resources of type
" + resType);
}
}
- private static void checkNumberOfResources(Map<ResType, Set<Resource>>
resources, ResType type, int count) {
+ protected static void checkNumberOfResources(Map<ResType, Set<Resource>>
resources, ResType type, int count) {
assertEquals(resources.get(type).size(), count, "Unexpected number of "
+ type + " discovered.");
}
@@ -381,7 +430,7 @@ public class ResourceUpgradeFailureHandlingTest extends
ResourceUpgradeTestBase
}
}
- private static void checkResourcesNotUpgraded(Set<Resource> resources, int
expectedSize) {
+ protected static void checkResourcesNotUpgraded(Set<Resource> resources, int
expectedSize) {
assertEquals(resources.size(), expectedSize, "The set of resources has
unexpected size.");
for(Resource res : resources) {
assertFalse(res.getResourceKey().startsWith(UPGRADED_RESOURCE_KEY_PREFIX),
"Resource " + res
@@ -397,7 +446,7 @@ public class ResourceUpgradeFailureHandlingTest extends
ResourceUpgradeTestBase
}
}
- private static void checkResourceFailedUpgrade(Resource resource) {
+ protected static void checkResourceFailedUpgrade(Resource resource) {
assertFalse(resource.getResourceKey().startsWith(UPGRADED_RESOURCE_KEY_PREFIX),
"Resource " + resource
+ " seems to be upgraded even though it shouldn't.");
assertTrue(resource.getResourceErrors(ResourceErrorType.UPGRADE).size() == 1,
@@ -409,13 +458,13 @@ public class ResourceUpgradeFailureHandlingTest extends
ResourceUpgradeTestBase
"A resource that failed to upgrade should be stopped.");
}
- private static void checkOthersUpgraded(Set<Resource> resources, Resource...
failedResource) {
+ protected static void checkOthersUpgraded(Set<Resource> resources, Resource...
failedResource) {
Set<Resource> others = new HashSet<Resource>(resources);
others.removeAll(Arrays.asList(failedResource));
checkResourcesUpgraded(others, others.size());
}
- private void addChildrenToFail(Resource parent, ResType childResType, int...
childrenOrdinals) {
+ protected void addChildrenToFail(Resource parent, ResType childResType, int...
childrenOrdinals) {
InventoryManager inventoryManager =
PluginContainer.getInstance().getInventoryManager();
ResourceContainer parentContainer =
inventoryManager.getResourceContainer(parent);
BaseResourceComponentInterface parentComponent = (BaseResourceComponentInterface)
parentContainer
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeProgressHandlingTest.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeProgressHandlingTest.java
index 0e3bd35..3234c30 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeProgressHandlingTest.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeProgressHandlingTest.java
@@ -20,6 +20,7 @@
package org.rhq.core.pc.upgrade;
import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertEquals;
import java.util.Arrays;
import java.util.Collection;
@@ -50,6 +51,8 @@ public class ResourceUpgradeProgressHandlingTest extends
ResourceUpgradeFailureH
private static final String ROOT_PLUGIN_NAME =
"/resource-upgrade-test-plugin-multi-root-1.0.0.jar";
private static final String UPGRADE_PROGRESS_PLUGIN_V1_FILENAME =
"/resource-upgrade-test-plugin-progress-test-1.0.0.jar";
private static final String UPGRADE_PROGRESS_PLUGIN_V2_FILENAME =
"/resource-upgrade-test-plugin-progress-test-2.0.0.jar";
+ private static final String UPGRADE_DUPLICATE_PLUGIN_V1_FILENAME =
"/resource-upgrade-test-plugin-duplicate-test-1.0.0.jar";
+ private static final String UPGRADE_DUPLICATE_PLUGIN_V2_FILENAME =
"/resource-upgrade-test-plugin-duplicate-test-2.0.0.jar";
private static final ResType TEST_TYPE = new ResType("TestResource",
"test");
private static final ResType PARENT_DEP_TYPE = new
ResType("ParentDependency", "parentdep");
@@ -66,6 +69,8 @@ public class ResourceUpgradeProgressHandlingTest extends
ResourceUpgradeFailureH
DEPS.put(ROOT_PLUGIN_NAME, Arrays.asList(BASE_PLUGIN_NAME));
DEPS.put(UPGRADE_PROGRESS_PLUGIN_V1_FILENAME, Arrays.asList(BASE_PLUGIN_NAME,
ROOT_PLUGIN_NAME, PARENT_DEP_V1_PLUGIN_NAME));
DEPS.put(UPGRADE_PROGRESS_PLUGIN_V2_FILENAME, Arrays.asList(BASE_PLUGIN_NAME,
ROOT_PLUGIN_NAME, PARENT_DEP_V2_PLUGIN_NAME));
+ DEPS.put(UPGRADE_DUPLICATE_PLUGIN_V1_FILENAME, Arrays.asList(BASE_PLUGIN_NAME,
ROOT_PLUGIN_NAME, PARENT_DEP_V1_PLUGIN_NAME));
+ DEPS.put(UPGRADE_DUPLICATE_PLUGIN_V2_FILENAME, Arrays.asList(BASE_PLUGIN_NAME,
ROOT_PLUGIN_NAME, PARENT_DEP_V2_PLUGIN_NAME));
}
private Set<String> getAllDepsFor(String... plugins) {
@@ -81,13 +86,14 @@ public class ResourceUpgradeProgressHandlingTest extends
ResourceUpgradeFailureH
@Override
protected Collection<String> getRequiredPlugins() {
return Arrays.asList(BASE_PLUGIN_NAME, ROOT_PLUGIN_NAME,
PARENT_DEP_V1_PLUGIN_NAME, PARENT_DEP_V2_PLUGIN_NAME,
- UPGRADE_PROGRESS_PLUGIN_V1_FILENAME, UPGRADE_PROGRESS_PLUGIN_V2_FILENAME);
+ UPGRADE_PROGRESS_PLUGIN_V1_FILENAME, UPGRADE_PROGRESS_PLUGIN_V2_FILENAME,
UPGRADE_DUPLICATE_PLUGIN_V1_FILENAME,
+ UPGRADE_DUPLICATE_PLUGIN_V2_FILENAME);
}
@Test
public void testParentResourceStartedUpgradedWhenChildResourceBeingUpgraded() throws
Exception {
setCurrentServerSideInventory(new FakeServerInventory());
-
+
executeTestWithPlugins(getAllDepsFor(UPGRADE_PROGRESS_PLUGIN_V1_FILENAME),
new AbstractTestPayload(true, Collections.<ResType> emptyList()) {
public void test(Map<ResType, Set<Resource>>
resourceUpgradeTestResources) {
@@ -107,6 +113,10 @@ public class ResourceUpgradeProgressHandlingTest extends
ResourceUpgradeFailureH
}
});
+ //the upgrade progress plugin is set to check that the parent resource key
+ //has been upgraded during its upgrade method, so we just need to check here
+ //that everything got upgraded. If it was not, it'd mean that the the
progress
+ //plugin failed the upgrade because it didn't see its parent upgraded.
executeTestWithPlugins(getAllDepsFor(UPGRADE_PROGRESS_PLUGIN_V2_FILENAME),
new AbstractTestPayload(false, Arrays.asList(TEST_TYPE, PARENT_DEP_TYPE)) {
public void test(Map<ResType, Set<Resource>>
resourceUpgradeTestResources) {
@@ -125,13 +135,49 @@ public class ResourceUpgradeProgressHandlingTest extends
ResourceUpgradeFailureH
}
@Test
- public void testDuplicitResourceKeysHandledCorrectly() {
- //TODO implement
- }
-
- @Test
- public void testResourcesRevertedToOriginalStateAfterFailedUpgrade() {
- //TODO implement
- }
+ public void testDuplicitResourceKeysHandledCorrectly() throws Exception {
+ setCurrentServerSideInventory(new FakeServerInventory());
+
+ executeTestWithPlugins(getAllDepsFor(UPGRADE_DUPLICATE_PLUGIN_V1_FILENAME),
+ new AbstractTestPayload(true, Arrays.asList(PARENT_DEP_TYPE, TEST_TYPE)) {
+
+ public void test(Map<ResType, Set<Resource>>
resourceUpgradeTestResources) {
+ //there's not much to check with the v1 plugins. let's just
check all the
+ //resources have been discovered
+
assertEquals(resourceUpgradeTestResources.get(PARENT_DEP_TYPE).size(), 1, "The V1
inventory should have 1 parent.");
+ assertEquals(resourceUpgradeTestResources.get(TEST_TYPE).size(), 2,
"The V1 inventory should have 2 test resources.");
+ }
+
+ public Expectations getExpectations(Mockery context) throws Exception {
+ return new Expectations() {
+ {
+ defineDefaultExpectations(this);
+ }
+ };
+ }
+ });
+ //now the V2 test resource is set to create 2 resources with the same resource
keys.
+ //the upgrade should therefore fail.
+ executeTestWithPlugins(getAllDepsFor(UPGRADE_DUPLICATE_PLUGIN_V2_FILENAME),
+ new AbstractTestPayload(false, Arrays.asList(PARENT_DEP_TYPE, TEST_TYPE)) {
+ public void test(Map<ResType, Set<Resource>>
resourceUpgradeTestResources) {
+
checkResourcesUpgraded(resourceUpgradeTestResources.get(PARENT_DEP_TYPE), 1);
+
+
checkResourcesNotUpgraded(resourceUpgradeTestResources.get(TEST_TYPE), 2);
+
+ for(Resource r : resourceUpgradeTestResources.get(TEST_TYPE)) {
+ checkResourceFailedUpgrade(r);
+ }
+ }
+
+ public Expectations getExpectations(Mockery context) throws Exception {
+ return new Expectations() {
+ {
+ defineDefaultExpectations(this);
+ }
+ };
+ }
+ });
+ }
}
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/duplicate/v1/rhq-plugin.xml
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/duplicate/v1/rhq-plugin.xml
new file mode 100644
index 0000000..58db405
--- /dev/null
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/duplicate/v1/rhq-plugin.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<plugin name="test"
+ displayName="Resource Upgrade Multi Test"
+ description="Resource Upgrade Multi Test"
+ package="org.rhq.core.pc.upgrade.plugins.multi.base"
+ version="1.0.0"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+
+ <depends plugin="base" useClasses="true"/>
+ <depends plugin="parentdep"/>
+
+ <server name="TestResource"
+ discovery="BaseDiscoveryComponent"
+ class="BaseResourceComponent">
+
+ <runs-inside>
+ <parent-resource-type name="ParentDependency"
plugin="parentdep"/>
+ </runs-inside>
+
+ <plugin-configuration>
+ <c:simple-property name="count" default="2" />
+ <c:simple-property name="key"
default="test-resource-%n,parent-%p" />
+ <c:simple-property name="upgradedKey"
default="UPGRADED-test-resource-duplicate,parent-%p" />
+ </plugin-configuration>
+ </server>
+
+</plugin>
+
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/duplicate/v2/rhq-plugin.xml
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/duplicate/v2/rhq-plugin.xml
new file mode 100644
index 0000000..81240d9
--- /dev/null
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/duplicate/v2/rhq-plugin.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<plugin name="test"
+ displayName="Resource Upgrade Multi Test"
+ description="Resource Upgrade Multi Test"
+ package="org.rhq.core.pc.upgrade.plugins.multi.base"
+ version="1.0.0"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+
+ <depends plugin="base" useClasses="true"/>
+ <depends plugin="parentdep"/>
+
+ <server name="TestResource"
+ discovery="BaseUpgradingDiscoveryComponent"
+ class="BaseResourceComponent">
+
+ <runs-inside>
+ <parent-resource-type name="ParentDependency"
plugin="parentdep"/>
+ </runs-inside>
+
+ <plugin-configuration>
+ <c:simple-property name="count" default="2" />
+ <c:simple-property name="key"
default="UPGRADED-test-resource-duplicate,parent-%p" />
+ </plugin-configuration>
+ </server>
+
+</plugin>
+
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v1/rhq-plugin.xml
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v1/rhq-plugin.xml
index 57c9010..9649422 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v1/rhq-plugin.xml
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v1/rhq-plugin.xml
@@ -22,8 +22,8 @@
<plugin-configuration>
<c:simple-property name="count" default="1" />
- <c:simple-property name="key"
default="test-resource-parent-%n,parent-%p" />
- <c:simple-property name="upgradedKey"
default="UPGRADED-test-resource-parent-%n,parent-%p" />
+ <c:simple-property name="key"
default="test-resource-%n,parent-%p" />
+ <c:simple-property name="upgradedKey"
default="UPGRADED-test-resource-%n,parent-%p" />
<c:simple-property name="checkParentUpgraded"
default="true" />
</plugin-configuration>
</server>
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v2/rhq-plugin.xml
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v2/rhq-plugin.xml
index b4691ba..b909026 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v2/rhq-plugin.xml
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v2/rhq-plugin.xml
@@ -22,7 +22,7 @@
<plugin-configuration>
<c:simple-property name="count" default="2" />
- <c:simple-property name="key"
default="UPGRADED-test-resource-parent-%n,parent-%p" />
+ <c:simple-property name="key"
default="UPGRADED-test-resource-%n,parent-%p" />
</plugin-configuration>
</server>
commit 0be47f7781ad9be02d583ee42517ed91a268e2c7
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Wed May 18 15:24:07 2011 +0200
BZ 704028 - Rethrow the exception after failed upgrade merge with
the server so that stuff gets properly rolledback. Also slightly improved
logging.
diff --git
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
index 9a98f81..d29cd56 100644
---
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
+++
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
@@ -1236,7 +1236,7 @@ public class InventoryManager extends AgentService implements
ContainerService,
return resourceContainer.updateAvailability(availabilityType);
}
- public void mergeResourcesFromUpgrade(Set<ResourceUpgradeRequest>
upgradeRequests) throws PluginContainerException {
+ public void mergeResourcesFromUpgrade(Set<ResourceUpgradeRequest>
upgradeRequests) throws Exception {
Set<ResourceUpgradeResponse> serverUpdates = null;
try {
ServerServices serverServices = this.configuration.getServerServices();
@@ -1247,6 +1247,7 @@ public class InventoryManager extends AgentService implements
ContainerService,
}
} catch (Exception e) {
log.error("Failed to process resource upgrades on the server.",
e);
+ throw e;
}
if (serverUpdates != null) {
diff --git
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java
index e8ca94e..cee582e 100644
---
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java
+++
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java
@@ -152,9 +152,21 @@ public class ResourceUpgradeDelegate {
Resource resource = container.getResource();
String upgradeErrors = null;
if ((upgradeErrors = checkUpgradeValid(resource, request)) !=
null) {
+ //the resource is in its upgraded state but it's going to
get reverted back to the original state
+ //in the code below. Let's use the original resource for
the error message so that we don't confuse
+ //the user.
+ for(ResourceUpgradeRequest orig : originalResourceData) {
+ if (orig.equals(request)) {
+ orig.updateResource(resource);
+ break;
+ }
+ }
String errorString = "Upgrading the resource [" +
resource + "] using these updates [" + request
+ "] would render the inventory invalid because of
the following reasons: " + upgradeErrors;
+ //now switch the resource back to the upgraded state for the
rest of the code below again
+ request.updateResource(resource);
+
log.error(errorString);
IllegalStateException ex = new
IllegalStateException(errorString);
@@ -291,7 +303,7 @@ public class ResourceUpgradeDelegate {
StringBuilder s = new StringBuilder();
if (!checkResourceKeyUniqueAmongSiblings(resource, upgradeReport)) {
- s.append("\nAnother inventoried sibling resource of the same type
already has the proposed resource key.");
+ s.append("\nAnother inventoried sibling resource of the same type
already has the proposed resource key or would have it after the upgrade.");
}
return s.length() > 0 ? s.toString() : null;
commit 241f8a1ee1fe40bdd9522cf97aba37846e36ed1c
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Wed May 18 13:55:51 2011 +0200
BZ 694476 - fixing the handling of loaded modules.
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/RuntimeApacheConfiguration.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/RuntimeApacheConfiguration.java
index 3e11ff3..1f00aec 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/RuntimeApacheConfiguration.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/RuntimeApacheConfiguration.java
@@ -364,7 +364,7 @@ public class RuntimeApacheConfiguration {
boolean recurseFurther = true;
if (walker.getName(node).equalsIgnoreCase("LoadModule")) {
- state.loadedModules.add(walker.getValue(node));
+ state.loadedModules.add(walker.getValues(node).get(0));
walker.visitOrdinaryNode(node);
} else if (walker.getName(node).equalsIgnoreCase("<IfModule"))
{
String moduleFile = walker.getValue(node);
@@ -391,6 +391,7 @@ public class RuntimeApacheConfiguration {
+ moduleFile + ". If you are using Apache 2.1 or later,
you can try changing the module identifier from the source file to "
+ "the actual module name as used in the LoadModule
directive to get rid of this warning.");
}
+ LOGGED_UNKNOWN_MODULES.add(moduleFile);
continue;
}
commit 25e909e39f41e5a6738775ea3bbcc576e58d3157
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue May 17 12:27:50 2011 -0400
[BZ 691476] upgrade resource key format for AS4 and AS5 plugin Script Resources and
for AS5 deployment Resources (EARs, WARs, etc.) to make them autoClusterGroup-friendly
(
https://bugzilla.redhat.com/show_bug.cgi?id=691476)
diff --git
a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/AbstractManagedDeploymentComponent.java
b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/AbstractManagedDeploymentComponent.java
index e925148..1703036 100644
---
a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/AbstractManagedDeploymentComponent.java
+++
b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/AbstractManagedDeploymentComponent.java
@@ -67,17 +67,17 @@ public abstract class AbstractManagedDeploymentComponent extends
AbstractManaged
private final Log log = LogFactory.getLog(this.getClass());
/**
- * The name of the ManagedDeployment (e.g.:
vfszip:/C:/opt/jboss-5.0.0.GA/server/default/deploy/foo.war).
+ * The name of the ManagedDeployment (e.g.:
vfszip:/C:/opt/jboss-6.0.0.Final/server/default/deploy/foo.war).
*/
protected String deploymentName;
/**
- * The type of the ManagedDeployment.
+ * The type of the ManagedDeployment (e.g. war).
*/
protected KnownDeploymentTypes deploymentType;
/**
- * The absolute path of the deployment file (e.g.:
C:/opt/jboss-5.0.0.GA/server/default/deploy/foo.war).
+ * The absolute path of the deployment file (e.g.:
C:/opt/jboss-6.0.0.Final/server/default/deploy/foo.war).
*/
protected File deploymentFile;
@@ -99,7 +99,7 @@ public abstract class AbstractManagedDeploymentComponent extends
AbstractManaged
log
.warn("The underlying file ["
+ this.deploymentFile
- + "] no longer exists. It may have been deleted from the
filesystem external to Jopr. If you wish to remove this Resource from inventory, you may
add &debug=true to the URL for the Browse Resources > Services page and then click
the UNINVENTORY button next to this Resource");
+ + "] no longer exists. It may have been deleted from the
filesystem external to RHQ. If you wish to remove this Resource from inventory, you may
add &debug=true to the URL for the Browse Resources > Services page and then click
the UNINVENTORY button next to this Resource.");
}
}
@@ -198,13 +198,13 @@ public abstract class AbstractManagedDeploymentComponent extends
AbstractManaged
}
private File getDeploymentFile() {
- // e.g.: vfszip:/C:/opt/jboss-5.0.0.GA/server/default/deploy/foo.war
+ // e.g.: vfszip:/C:/opt/jboss-6.0.0.Final/server/default/deploy/foo.war
URI vfsURI = URI.create(this.deploymentName);
// e.g.: foo.war
String path = vfsURI.getPath();
// Under Windows, the deployment name URL will look like:
- // vfszip:/C:/opt/jboss-5.1.0.CR1/server/default/deploy/foo.ear/
- // and the path portion will look like:
/C:/opt/jboss-5.1.0.CR1/server/default/deploy/foo.ear/
+ // vfszip:/C:/opt/jboss-6.0.0.Final/server/default/deploy/foo.ear/
+ // and the path portion will look like:
/C:/opt/jboss-6.0.0.Final/server/default/deploy/foo.ear/
// Java considers the path with the leading slash to be valid and equivalent to
the same path with the
// leading slash removed, but the leading slash is unnecessary and ugly, so
excise it.
if (IS_WINDOWS && path.charAt(0) == '/')
diff --git
a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/AbstractManagedDeploymentDiscoveryComponent.java
b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/AbstractManagedDeploymentDiscoveryComponent.java
index 950e846..9ab49b7 100644
---
a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/AbstractManagedDeploymentDiscoveryComponent.java
+++
b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/AbstractManagedDeploymentDiscoveryComponent.java
@@ -1,6 +1,6 @@
/*
* Jopr Management Platform
-* Copyright (C) 2005-2009 Red Hat, Inc.
+* Copyright (C) 2005-2011 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -22,16 +22,29 @@
*/
package org.rhq.plugins.jbossas5;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.jboss.deployers.spi.management.deploy.DeploymentManager;
+import org.jboss.deployers.spi.management.deploy.DeploymentProgress;
+import org.jboss.deployers.spi.management.deploy.DeploymentStatus;
+import org.jboss.managed.api.DeploymentState;
+import org.jboss.profileservice.spi.Profile;
+import org.jboss.profileservice.spi.ProfileKey;
+import org.jboss.profileservice.spi.ProfileService;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.resource.ResourceUpgradeReport;
import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
+import org.rhq.core.pluginapi.upgrade.ResourceUpgradeContext;
+import org.rhq.core.pluginapi.upgrade.ResourceUpgradeFacet;
import org.rhq.plugins.jbossas5.util.ConversionUtils;
import org.jboss.deployers.spi.management.KnownDeploymentTypes;
@@ -40,19 +53,20 @@ import org.jboss.managed.api.ManagedDeployment;
import org.jboss.profileservice.spi.NoSuchDeploymentException;
/**
- * Discovery class for discovering deployable resources like ear/war/jar/sar
+ * Discovery component for discovering JBAS 5.x/6.x deployments (EARs, WARs, EJB-JARs,
etc.).
*
* @author Mark Spritzler
* @author Ian Springer
*/
-public abstract class AbstractManagedDeploymentDiscoveryComponent implements
ResourceDiscoveryComponent<ProfileServiceComponent>
+public abstract class AbstractManagedDeploymentDiscoveryComponent
+ implements ResourceDiscoveryComponent<ProfileServiceComponent>,
ResourceUpgradeFacet<ProfileServiceComponent>
{
+
private final Log log = LogFactory.getLog(this.getClass());
public Set<DiscoveredResourceDetails> discoverResources(
ResourceDiscoveryContext<ProfileServiceComponent> discoveryContext)
{
- Set<DiscoveredResourceDetails> discoveredResources = new
HashSet<DiscoveredResourceDetails>();
ResourceType resourceType = discoveryContext.getResourceType();
log.trace("Discovering " + resourceType.getName() + "
Resources...");
KnownDeploymentTypes deploymentType =
ConversionUtils.getDeploymentType(resourceType);
@@ -70,38 +84,43 @@ public abstract class AbstractManagedDeploymentDiscoveryComponent
implements Res
}
catch (Exception e)
{
- log.error("Unable to get deployment for type " +
deploymentTypeString, e);
+ log.error("Unable to get deployment names for type " +
deploymentTypeString, e);
}
- discoveredResources = new
HashSet<DiscoveredResourceDetails>(deploymentNames.size());
+ Set<DiscoveredResourceDetails> discoveredResources = new
HashSet<DiscoveredResourceDetails>(deploymentNames.size());
+
+ ProfileService profileService =
discoveryContext.getParentResourceComponent().getConnection().getProfileService();
- /* Create a resource for each managed component found. We know all managed
components will be of a
- type we're interested in, so we can just add them all. There may be need
for multiple iterations
- over lists retrieved from different component types, but that is possible
through the current API.
- */
+ // Create a resource details for each managed deployment found.
for (String deploymentName : deploymentNames)
{
+ // example of a deployment name:
vfszip:/C:/opt/jboss-6.0.0.Final/server/default/deploy/http-invoker.sar/invoker.war/
try
{
ManagedDeployment managedDeployment =
managementView.getDeployment(deploymentName);
- if (!accept(managedDeployment))
+ if (!accept(managedDeployment)) {
continue;
+ }
String resourceName = managedDeployment.getSimpleName();
// @TODO remove this when AS5 actually implements this for sars, and some
other DeploymentTypes that haven't implemented getSimpleName()
if (resourceName.equals("%Generated%"))
{
resourceName = getResourceName(deploymentName);
}
- String version = null; // TODO
+
+ // example of a resource key: {default}http-invoker.sar/invoker.war
+ String resourceKey = buildResourceKey(managedDeployment,
profileService);
+
+ managedDeployment.getSimpleName();
+ String version = null; // TODO (ManagedDeployment "version"
property?)
DiscoveredResourceDetails resource =
new DiscoveredResourceDetails(resourceType,
- deploymentName,
+ resourceKey,
resourceName,
version,
resourceType.getDescription(),
discoveryContext.getDefaultPluginConfiguration(),
null);
- // example of a deployment name:
vfszip:/C:/opt/jboss-5.1.0.CR1/server/default/deploy/foo.war
resource.getPluginConfiguration().put(
new
PropertySimple(AbstractManagedDeploymentComponent.DEPLOYMENT_NAME_PROPERTY,
deploymentName));
discoveredResources.add(resource);
@@ -122,6 +141,97 @@ public abstract class AbstractManagedDeploymentDiscoveryComponent
implements Res
return discoveredResources;
}
+ @Override
+ public ResourceUpgradeReport
upgrade(ResourceUpgradeContext<ProfileServiceComponent> upgradeContext) {
+ String inventoriedResourceKey = upgradeContext.getResourceKey();
+
+ // check if the inventoried resource already has the new resource key format.
+ // the new format is "{default}http-invoker.sar/invoker.war", while the
old format
+ // was
"vfszip:/C:/opt/jboss-6.0.0.Final/server/default/deploy/http-invoker.sar/invoker.war/".
+ if (inventoriedResourceKey.startsWith("{")) {
+ // key is already in the new format
+ return null;
+ }
+
+ // key is in the old format - build a key in the new format
+ ManagementView managementView =
upgradeContext.getParentResourceComponent().getConnection().getManagementView();
+ ManagedDeployment deployment;
+ try {
+ deployment = managementView.getDeployment(inventoriedResourceKey);
+ } catch (NoSuchDeploymentException e) {
+ throw new IllegalStateException(e);
+ }
+ ProfileService profileService =
upgradeContext.getParentResourceComponent().getConnection().getProfileService();
+ String resourceKey = buildResourceKey(deployment, profileService);
+
+ ResourceUpgradeReport upgradeReport = new ResourceUpgradeReport();
+ upgradeReport.setNewResourceKey(resourceKey);
+
+ return upgradeReport;
+ }
+
+ private static String buildResourceKey(ManagedDeployment deployment, ProfileService
profileService) {
+ StringBuilder resourceKey = new StringBuilder();
+
+ String profileName = getProfileName(deployment, profileService);
+ resourceKey.append('{').append(profileName).append("}");
+
+ List<String> deploymentAncestrySimpleNames = new
ArrayList<String>();
+ ManagedDeployment parentDeployment = deployment;
+ do {
+ deploymentAncestrySimpleNames.add(0, parentDeployment.getSimpleName());
+ } while ((parentDeployment = parentDeployment.getParent()) != null);
+
+ for (int i = 0, deploymentAncestrySimpleNamesSize =
deploymentAncestrySimpleNames.size();
+ i < deploymentAncestrySimpleNamesSize; i++) {
+ String deploymentSimpleName = deploymentAncestrySimpleNames.get(i);
+ resourceKey.append(deploymentSimpleName);
+ if (i != (deploymentAncestrySimpleNamesSize - 1)) {
+ resourceKey.append("/");
+ }
+ }
+
+ return resourceKey.toString();
+ }
+
+ private static String getProfileName(ManagedDeployment deployment, ProfileService
profileService) {
+ Collection<ProfileKey> profileKeys =
profileService.getActiveProfileKeys();
+ for (ProfileKey profileKey : profileKeys) {
+ Profile profile;
+ try {
+ profile = profileService.getActiveProfile(profileKey);
+ } catch (Exception e) {
+ DeploymentManager deploymentManager =
profileService.getDeploymentManager();
+ try {
+ deploymentManager.loadProfile(profileKey);
+ } catch (Exception e1) {
+ continue;
+ }
+ DeploymentState deploymentState = deployment.getDeploymentState();
+ try {
+ DeploymentProgress progress;
+ if (deploymentState == DeploymentState.STARTED || deploymentState ==
DeploymentState.STARTING) {
+ progress = deploymentManager.start(deployment.getName());
+ } else {
+ progress = deploymentManager.stop(deployment.getName());
+ }
+ progress.run();
+ DeploymentStatus status = progress.getDeploymentStatus();
+ if (status.isFailed()) {
+ continue;
+ }
+ } catch (Exception e1) {
+ continue;
+ }
+ return profileKey.getName();
+ }
+ if (profile.hasDeployment(deployment.getName())) {
+ return profileKey.getName();
+ }
+ }
+ return ProfileKey.DEFAULT;
+ }
+
protected abstract boolean accept(ManagedDeployment managedDeployment);
private static String getResourceName(String fullPath)
@@ -129,4 +239,5 @@ public abstract class AbstractManagedDeploymentDiscoveryComponent
implements Res
int lastSlashIndex = fullPath.lastIndexOf("/");
return fullPath.substring(lastSlashIndex + 1);
}
+
}
diff --git
a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/script/ScriptDiscoveryComponent.java
b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/script/ScriptDiscoveryComponent.java
index e98221f..8010081 100644
---
a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/script/ScriptDiscoveryComponent.java
+++
b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/script/ScriptDiscoveryComponent.java
@@ -1,6 +1,6 @@
/*
* Jopr Management Platform
- * Copyright (C) 2005-2009 Red Hat, Inc.
+ * Copyright (C) 2005-2011 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -23,7 +23,6 @@
package org.rhq.plugins.jbossas5.script;
import java.io.File;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -34,11 +33,15 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.domain.resource.ResourceUpgradeReport;
import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
import org.rhq.core.pluginapi.inventory.ManualAddFacet;
+import org.rhq.core.pluginapi.inventory.ResourceContext;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
+import org.rhq.core.pluginapi.upgrade.ResourceUpgradeContext;
+import org.rhq.core.pluginapi.upgrade.ResourceUpgradeFacet;
import org.rhq.core.system.ProcessInfo;
import org.rhq.plugins.jbossas5.ApplicationServerComponent;
@@ -47,18 +50,19 @@ import org.rhq.plugins.jbossas5.ApplicationServerComponent;
*
* @author Ian Springer
*/
-public class ScriptDiscoveryComponent implements
ResourceDiscoveryComponent<ApplicationServerComponent>,
ManualAddFacet<ApplicationServerComponent> {
+public class ScriptDiscoveryComponent implements
ResourceDiscoveryComponent<ApplicationServerComponent>,
+ ManualAddFacet<ApplicationServerComponent>,
ResourceUpgradeFacet<ApplicationServerComponent> {
+
private final Log log = LogFactory.getLog(this.getClass());
static final String SERVER_HOME_DIR = "homeDir";
public Set<DiscoveredResourceDetails> discoverResources(
ResourceDiscoveryContext<ApplicationServerComponent> discoveryContext)
throws InvalidPluginConfigurationException {
- HashSet<DiscoveredResourceDetails> resources = new
HashSet<DiscoveredResourceDetails>();
-
- Configuration parentPluginConfig =
discoveryContext.getParentResourceContext().getPluginConfiguration();
- String homeDir = parentPluginConfig.getSimple(SERVER_HOME_DIR).getStringValue();
- File binDir = new File(homeDir, "bin");
+ Set<DiscoveredResourceDetails> resources = new
HashSet<DiscoveredResourceDetails>();
+
+ ResourceContext parentResourceContext =
discoveryContext.getParentResourceContext();
+ File binDir = getServerBinDirectory(parentResourceContext);
log.debug("Searching for scripts beneath JBossAS server bin directory
(" + binDir + ")...");
ScriptFileFinder scriptFileFinder = new
ScriptFileFinder(discoveryContext.getSystemInformation(), binDir);
List<File> scriptFiles = scriptFileFinder.findScriptFiles();
@@ -68,7 +72,7 @@ public class ScriptDiscoveryComponent implements
ResourceDiscoveryComponent<Appl
Map<String, String> defaultScriptEnvironment =
getDefaultScriptEnvironment();
pluginConfig.put(new
PropertySimple(ScriptComponent.ENVIRONMENT_VARIABLES_CONFIG_PROP,
toString(defaultScriptEnvironment)));
- DiscoveredResourceDetails resource = createResourceDetails(discoveryContext,
pluginConfig);
+ DiscoveredResourceDetails resource = createResourceDetails(discoveryContext,
pluginConfig, binDir);
log.debug("Auto-discovered script service: " + resource);
resources.add(resource);
}
@@ -76,17 +80,54 @@ public class ScriptDiscoveryComponent implements
ResourceDiscoveryComponent<Appl
return resources;
}
- public DiscoveredResourceDetails discoverResource(Configuration pluginConfiguration,
- ResourceDiscoveryContext<ApplicationServerComponent> context) throws
InvalidPluginConfigurationException {
+ public DiscoveredResourceDetails discoverResource(Configuration pluginConfig,
+ ResourceDiscoveryContext<ApplicationServerComponent> discoveryContext)
+ throws InvalidPluginConfigurationException {
- File path = new
File(pluginConfiguration.getSimple(ScriptComponent.PATH_CONFIG_PROP).getStringValue());
+ File path = new
File(pluginConfig.getSimple(ScriptComponent.PATH_CONFIG_PROP).getStringValue());
validatePath(path);
- DiscoveredResourceDetails resource = createResourceDetails(context,
pluginConfiguration);
+ ResourceContext parentResourceContext =
discoveryContext.getParentResourceContext();
+ File binDir = getServerBinDirectory(parentResourceContext);
+ DiscoveredResourceDetails resource = createResourceDetails(discoveryContext,
pluginConfig, binDir);
log.debug("Manually added script service: " + resource);
return resource;
}
-
+
+ @Override
+ public ResourceUpgradeReport
upgrade(ResourceUpgradeContext<ApplicationServerComponent> upgradeContext) {
+ String inventoriedResourceKey = upgradeContext.getResourceKey();
+
+ ResourceContext<?> parentResourceContext =
upgradeContext.getParentResourceContext();
+ File binDir = getServerBinDirectory(parentResourceContext);
+
+ // The new format is to use paths relative to the server bin dir for scripts in
that dir and to otherwise
+ // use absolute paths, so we only need to upgrade existing keys that start with
the bin dir path.
+ if (!inventoriedResourceKey.startsWith(binDir.getPath())) {
+ // key is already in the new format
+ return null;
+ }
+
+ // key is in the old format - build a key in the new format
+ String resourceKey = buildResourceKey(inventoriedResourceKey, binDir);
+
+ ResourceUpgradeReport upgradeReport = new ResourceUpgradeReport();
+ upgradeReport.setNewResourceKey(resourceKey);
+
+ return upgradeReport;
+ }
+
+ private File getServerBinDirectory(ResourceContext parentResourceContext) {
+ Configuration parentPluginConfig =
parentResourceContext.getPluginConfiguration();
+ String homeDir = parentPluginConfig.getSimple(SERVER_HOME_DIR).getStringValue();
+ return new File(homeDir, "bin");
+ }
+
+ private static String buildResourceKey(String scriptPath, File binDir) {
+ return (scriptPath.startsWith(binDir.getPath())) ?
scriptPath.substring(binDir.getPath().length() + 1) :
+ scriptPath;
+ }
+
private void validatePath(File path) {
if (!path.isAbsolute()) {
throw new InvalidPluginConfigurationException("Path '" + path +
"' is not absolute.");
@@ -123,9 +164,11 @@ public class ScriptDiscoveryComponent implements
ResourceDiscoveryComponent<Appl
}
private DiscoveredResourceDetails createResourceDetails(
- ResourceDiscoveryContext<ApplicationServerComponent> discoveryContext,
Configuration pluginConfig) {
- String key =
pluginConfig.getSimple(ScriptComponent.PATH_CONFIG_PROP).getStringValue();
- String name = new File(key).getName();
+ ResourceDiscoveryContext<ApplicationServerComponent> discoveryContext,
Configuration pluginConfig,
+ File binDir) {
+ String path =
pluginConfig.getSimple(ScriptComponent.PATH_CONFIG_PROP).getStringValue();
+ String key = buildResourceKey(path, binDir);
+ String name = new File(path).getName();
String version = null;
String description = null;
ProcessInfo processInfo = null;
@@ -133,4 +176,5 @@ public class ScriptDiscoveryComponent implements
ResourceDiscoveryComponent<Appl
return new DiscoveredResourceDetails(discoveryContext.getResourceType(), key,
name, version, description,
pluginConfig, processInfo);
}
+
}
diff --git
a/modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/script/ScriptDiscoveryComponent.java
b/modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/script/ScriptDiscoveryComponent.java
index c5e3cf3..667d10f 100644
---
a/modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/script/ScriptDiscoveryComponent.java
+++
b/modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/script/ScriptDiscoveryComponent.java
@@ -1,6 +1,6 @@
/*
* Jopr Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2011 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -32,10 +32,14 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.domain.resource.ResourceUpgradeReport;
import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
+import org.rhq.core.pluginapi.inventory.ResourceContext;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
+import org.rhq.core.pluginapi.upgrade.ResourceUpgradeContext;
+import org.rhq.core.pluginapi.upgrade.ResourceUpgradeFacet;
import org.rhq.core.system.ProcessInfo;
import org.rhq.plugins.jbossas.JBossASServerComponent;
@@ -44,13 +48,16 @@ import org.rhq.plugins.jbossas.JBossASServerComponent;
*
* @author Ian Springer
*/
-public class ScriptDiscoveryComponent implements
ResourceDiscoveryComponent<JBossASServerComponent> {
+public class ScriptDiscoveryComponent implements
ResourceDiscoveryComponent<JBossASServerComponent>,
+ ResourceUpgradeFacet<JBossASServerComponent> {
+
private final Log log = LogFactory.getLog(this.getClass());
public Set<DiscoveredResourceDetails> discoverResources(
ResourceDiscoveryContext<JBossASServerComponent> discoveryContext)
throws InvalidPluginConfigurationException {
- HashSet<DiscoveredResourceDetails> resources = new
HashSet<DiscoveredResourceDetails>();
+ Set<DiscoveredResourceDetails> resources = new
HashSet<DiscoveredResourceDetails>();
+ // TODO: Upgrade to new manual discovery API.
List<Configuration> pluginConfigs =
discoveryContext.getPluginConfigurations();
if (pluginConfigs.isEmpty()) {
processAutoDiscoveredResources(discoveryContext, resources);
@@ -60,12 +67,44 @@ public class ScriptDiscoveryComponent implements
ResourceDiscoveryComponent<JBos
return resources;
}
- private void
processAutoDiscoveredResources(ResourceDiscoveryContext<JBossASServerComponent>
discoveryContext, HashSet<DiscoveredResourceDetails> resources) {
- JBossASServerComponent parentComponent =
discoveryContext.getParentResourceComponent();
- Configuration parentPluginConfig = parentComponent.getPluginConfiguration();
- String homeDir =
parentPluginConfig.getSimple(JBossASServerComponent.JBOSS_HOME_DIR_CONFIG_PROP)
- .getStringValue();
- File binDir = new File(homeDir, "bin");
+ @Override
+ public ResourceUpgradeReport
upgrade(ResourceUpgradeContext<JBossASServerComponent> upgradeContext) {
+ String inventoriedResourceKey = upgradeContext.getResourceKey();
+
+ ResourceContext parentResourceContext =
upgradeContext.getParentResourceContext();
+ File binDir = getServerBinDirectory(parentResourceContext);
+
+ // The new format is to use paths relative to the server bin dir for scripts in
that dir and to otherwise
+ // use absolute paths, so we only need to upgrade existing keys that start with
the bin dir path.
+ if (!inventoriedResourceKey.startsWith(binDir.getPath())) {
+ // key is already in the new format
+ return null;
+ }
+
+ // key is in the old format - build a key in the new format
+ String resourceKey = buildResourceKey(inventoriedResourceKey, binDir);
+
+ ResourceUpgradeReport upgradeReport = new ResourceUpgradeReport();
+ upgradeReport.setNewResourceKey(resourceKey);
+
+ return upgradeReport;
+ }
+
+ private File getServerBinDirectory(ResourceContext parentResourceContext) {
+ Configuration parentPluginConfig =
parentResourceContext.getPluginConfiguration();
+ String homeDir =
parentPluginConfig.getSimple(JBossASServerComponent.JBOSS_HOME_DIR_CONFIG_PROP).getStringValue();
+ return new File(homeDir, "bin");
+ }
+
+ private static String buildResourceKey(String scriptPath, File binDir) {
+ return (scriptPath.startsWith(binDir.getPath())) ?
scriptPath.substring(binDir.getPath().length() + 1) :
+ scriptPath;
+ }
+
+ private void
processAutoDiscoveredResources(ResourceDiscoveryContext<JBossASServerComponent>
discoveryContext,
+ Set<DiscoveredResourceDetails>
resources) {
+ ResourceContext parentResourceContext =
discoveryContext.getParentResourceContext();
+ File binDir = getServerBinDirectory(parentResourceContext);
log.debug("Searching for scripts beneath JBossAS server bin directory
(" + binDir + ")...");
ScriptFileFinder scriptFileFinder = new
ScriptFileFinder(discoveryContext.getSystemInformation(), binDir);
List<File> scriptFiles = scriptFileFinder.findScriptFiles();
@@ -75,17 +114,20 @@ public class ScriptDiscoveryComponent implements
ResourceDiscoveryComponent<JBos
Map<String, String> defaultScriptEnvironment =
getDefaultScriptEnvironment();
pluginConfig.put(new
PropertySimple(ScriptComponent.ENVIRONMENT_VARIABLES_CONFIG_PROP,
toString(defaultScriptEnvironment)));
- DiscoveredResourceDetails resource = createResourceDetails(discoveryContext,
pluginConfig);
+ DiscoveredResourceDetails resource = createResourceDetails(discoveryContext,
pluginConfig, binDir);
log.debug("Auto-discovered script service: " + resource);
resources.add(resource);
}
}
- private void
processManuallyAddedResources(ResourceDiscoveryContext<JBossASServerComponent>
discoveryContext, HashSet<DiscoveredResourceDetails> resources,
List<Configuration> pluginConfigs) {
+ private void
processManuallyAddedResources(ResourceDiscoveryContext<JBossASServerComponent>
discoveryContext,
+ Set<DiscoveredResourceDetails>
resources, List<Configuration> pluginConfigs) {
+ ResourceContext parentResourceContext =
discoveryContext.getParentResourceContext();
+ File binDir = getServerBinDirectory(parentResourceContext);
for (Configuration pluginConfig : pluginConfigs) {
File path = new
File(pluginConfig.getSimple(ScriptComponent.PATH_CONFIG_PROP).getStringValue());
validatePath(path);
- DiscoveredResourceDetails resource = createResourceDetails(discoveryContext,
pluginConfig);
+ DiscoveredResourceDetails resource = createResourceDetails(discoveryContext,
pluginConfig, binDir);
log.debug("Manually added script service: " + resource);
resources.add(resource);
}
@@ -104,7 +146,7 @@ public class ScriptDiscoveryComponent implements
ResourceDiscoveryComponent<JBos
}
private Map<String, String> getDefaultScriptEnvironment() {
- Map<String, String> defaultScriptEnvironment = new HashMap();
+ Map<String, String> defaultScriptEnvironment = new HashMap<String,
String>();
// Name the environment variables after the standard JBossAS properties to make
things more intuitive for users.
// Don't use any "."'s in the environment variable names, as
they confuse UNIX shells (see JBNADM-2762).
@@ -125,9 +167,10 @@ public class ScriptDiscoveryComponent implements
ResourceDiscoveryComponent<JBos
}
private DiscoveredResourceDetails createResourceDetails(
- ResourceDiscoveryContext<JBossASServerComponent> discoveryContext,
Configuration pluginConfig) {
- String key =
pluginConfig.getSimple(ScriptComponent.PATH_CONFIG_PROP).getStringValue();
- String name = new File(key).getName();
+ ResourceDiscoveryContext<JBossASServerComponent> discoveryContext,
Configuration pluginConfig, File homeDir) {
+ String path =
pluginConfig.getSimple(ScriptComponent.PATH_CONFIG_PROP).getStringValue();
+ String key = buildResourceKey(path, homeDir);
+ String name = new File(path).getName();
String version = null;
String description = null;
ProcessInfo processInfo = null;
@@ -135,4 +178,5 @@ public class ScriptDiscoveryComponent implements
ResourceDiscoveryComponent<JBos
return new DiscoveredResourceDetails(discoveryContext.getResourceType(), key,
name, version, description,
pluginConfig, processInfo);
}
+
}
\ No newline at end of file
commit db84c22836d6e1654fd704a1faf889c3affc21cf
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Tue May 17 17:40:00 2011 +0200
Adding the new ResourceUpgradeProgressHandlingTest to:
a) test that parent resources appear upgraded during upgrade of their children
b) test that potential duplicate resource keys are correctly refused during upgrade
c) that resources are rolledback to their original state if the upgrade fails.
diff --git a/modules/core/plugin-container/pom.xml
b/modules/core/plugin-container/pom.xml
index 367e1fa..7a264f8 100644
--- a/modules/core/plugin-container/pom.xml
+++ b/modules/core/plugin-container/pom.xml
@@ -295,6 +295,26 @@
<fileset
dir="${project.build.testOutputDirectory}/tmp/multi/v2"
includes="**/*.class,**/rhq-plugin.xml" />
</jar>
+ <copy
toDir="${project.build.testOutputDirectory}/tmp/progress/v1/META-INF">
+ <fileset
file="${project.build.testSourceDirectory}/org/rhq/core/pc/upgrade/plugins/progress/v1/rhq-plugin.xml"
/>
+ </copy>
+ <!-- <copy
toDir="${project.build.testOutputDirectory}/tmp/progress/v1/org/rhq/core/pc/upgrade/plugins/progress/v1">
+ <fileset
file="${project.build.testOutputDirectory}/org/rhq/core/pc/upgrade/plugins/progress/v1/*.class"
/>
+ </copy> -->
+ <jar
destfile="${project.build.testOutputDirectory}/resource-upgrade-test-plugin-progress-test-1.0.0.jar">
+ <fileset
dir="${project.build.testOutputDirectory}/tmp/progress/v1"
includes="**/*.class,**/rhq-plugin.xml" />
+ </jar>
+
+ <copy
toDir="${project.build.testOutputDirectory}/tmp/progress/v2/META-INF">
+ <fileset
file="${project.build.testSourceDirectory}/org/rhq/core/pc/upgrade/plugins/progress/v2/rhq-plugin.xml"
/>
+ </copy>
+ <!-- <copy
toDir="${project.build.testOutputDirectory}/tmp/progress/v2/org/rhq/core/pc/upgrade/plugins/progress/v2">
+ <fileset
file="${project.build.testOutputDirectory}/org/rhq/core/pc/upgrade/plugins/progress/v2/*.class"
/>
+ </copy> -->
+ <jar
destfile="${project.build.testOutputDirectory}/resource-upgrade-test-plugin-progress-test-2.0.0.jar">
+ <fileset
dir="${project.build.testOutputDirectory}/tmp/progress/v2"
includes="**/*.class,**/rhq-plugin.xml" />
+ </jar>
+
<delete dir="${project.build.testOutputDirectory}/tmp"
/>
</tasks>
</configuration>
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
index 34732fd..f68ee01 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
@@ -368,7 +368,7 @@ public class ResourceUpgradeFailureHandlingTest extends
ResourceUpgradeTestBase
assertEquals(resources.get(type).size(), count, "Unexpected number of "
+ type + " discovered.");
}
- private static void checkResourcesUpgraded(Set<Resource> resources, int
expectedSize) {
+ protected static void checkResourcesUpgraded(Set<Resource> resources, int
expectedSize) {
assertEquals(resources.size(), expectedSize, "The set of resources has
unexpected size.");
for (Resource res : resources) {
assertTrue(res.getResourceKey().startsWith(UPGRADED_RESOURCE_KEY_PREFIX),
"Resource " + res
@@ -441,7 +441,7 @@ public class ResourceUpgradeFailureHandlingTest extends
ResourceUpgradeTestBase
}
}
- private Resource findResourceWithOrdinal(ResType resType, int ordinal) {
+ protected Resource findResourceWithOrdinal(ResType resType, int ordinal) {
ResourceType resourceType =
PluginContainer.getInstance().getPluginManager().getMetadataManager()
.getType(resType.getResourceTypeName(),
resType.getResourceTypePluginName());
@@ -451,7 +451,7 @@ public class ResourceUpgradeFailureHandlingTest extends
ResourceUpgradeTestBase
return findResourceWithOrdinal(resources, ordinal);
}
- private Resource findResourceWithOrdinal(Set<Resource> resources, int ordinal)
{
+ protected Resource findResourceWithOrdinal(Set<Resource> resources, int
ordinal) {
for (Resource r : resources) {
Configuration pluginConfig = r.getPluginConfiguration();
String ordinalString = pluginConfig.getSimpleValue("ordinal",
null);
@@ -464,7 +464,7 @@ public class ResourceUpgradeFailureHandlingTest extends
ResourceUpgradeTestBase
return null;
}
- private Set<Resource> filterResources(Set<Resource> resources, ResType
resType) {
+ protected Set<Resource> filterResources(Set<Resource> resources, ResType
resType) {
Set<Resource> ret = new HashSet<Resource>(resources);
Iterator<Resource> it = ret.iterator();
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeProgressHandlingTest.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeProgressHandlingTest.java
new file mode 100644
index 0000000..0e3bd35
--- /dev/null
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeProgressHandlingTest.java
@@ -0,0 +1,137 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2011 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.core.pc.upgrade;
+
+import static org.testng.Assert.assertNotNull;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.jmock.Expectations;
+import org.jmock.Mockery;
+import org.testng.annotations.Test;
+
+import org.rhq.core.domain.resource.Resource;
+
+/**
+ *
+ *
+ * @author Lukas Krejci
+ */
+@Test
+public class ResourceUpgradeProgressHandlingTest extends
ResourceUpgradeFailureHandlingTest {
+
+ private static final String BASE_PLUGIN_NAME =
"/resource-upgrade-test-plugin-multi-base-1.0.0.jar";
+ private static final String PARENT_DEP_V1_PLUGIN_NAME =
"/resource-upgrade-test-plugin-multi-parentdep-1.0.0.jar";
+ private static final String PARENT_DEP_V2_PLUGIN_NAME =
"/resource-upgrade-test-plugin-multi-parentdep-2.0.0.jar";
+ private static final String ROOT_PLUGIN_NAME =
"/resource-upgrade-test-plugin-multi-root-1.0.0.jar";
+ private static final String UPGRADE_PROGRESS_PLUGIN_V1_FILENAME =
"/resource-upgrade-test-plugin-progress-test-1.0.0.jar";
+ private static final String UPGRADE_PROGRESS_PLUGIN_V2_FILENAME =
"/resource-upgrade-test-plugin-progress-test-2.0.0.jar";
+
+ private static final ResType TEST_TYPE = new ResType("TestResource",
"test");
+ private static final ResType PARENT_DEP_TYPE = new
ResType("ParentDependency", "parentdep");
+ private static final ResType ROOT_TYPE = new ResType("Root",
"root");
+
+ private static final HashMap<String, List<String>> DEPS;
+
+ static {
+ DEPS = new HashMap<String, List<String>>();
+
+ DEPS.put(BASE_PLUGIN_NAME, Collections.<String> emptyList());
+ DEPS.put(PARENT_DEP_V1_PLUGIN_NAME, Arrays.asList(BASE_PLUGIN_NAME,
ROOT_PLUGIN_NAME));
+ DEPS.put(PARENT_DEP_V2_PLUGIN_NAME, DEPS.get(PARENT_DEP_V1_PLUGIN_NAME));
+ DEPS.put(ROOT_PLUGIN_NAME, Arrays.asList(BASE_PLUGIN_NAME));
+ DEPS.put(UPGRADE_PROGRESS_PLUGIN_V1_FILENAME, Arrays.asList(BASE_PLUGIN_NAME,
ROOT_PLUGIN_NAME, PARENT_DEP_V1_PLUGIN_NAME));
+ DEPS.put(UPGRADE_PROGRESS_PLUGIN_V2_FILENAME, Arrays.asList(BASE_PLUGIN_NAME,
ROOT_PLUGIN_NAME, PARENT_DEP_V2_PLUGIN_NAME));
+ }
+
+ private Set<String> getAllDepsFor(String... plugins) {
+ HashSet<String> deps = new HashSet<String>();
+ for (String plugin : plugins) {
+ deps.add(plugin);
+ deps.addAll(DEPS.get(plugin));
+ }
+
+ return deps;
+ }
+
+ @Override
+ protected Collection<String> getRequiredPlugins() {
+ return Arrays.asList(BASE_PLUGIN_NAME, ROOT_PLUGIN_NAME,
PARENT_DEP_V1_PLUGIN_NAME, PARENT_DEP_V2_PLUGIN_NAME,
+ UPGRADE_PROGRESS_PLUGIN_V1_FILENAME, UPGRADE_PROGRESS_PLUGIN_V2_FILENAME);
+ }
+
+ @Test
+ public void testParentResourceStartedUpgradedWhenChildResourceBeingUpgraded() throws
Exception {
+ setCurrentServerSideInventory(new FakeServerInventory());
+
+ executeTestWithPlugins(getAllDepsFor(UPGRADE_PROGRESS_PLUGIN_V1_FILENAME),
+ new AbstractTestPayload(true, Collections.<ResType> emptyList()) {
+ public void test(Map<ResType, Set<Resource>>
resourceUpgradeTestResources) {
+ //in here we set up the failures that are going to happen when
+ //the v2 plugins are run
+
+ Resource parent = findResourceWithOrdinal(PARENT_DEP_TYPE, 0);
+ assertNotNull(parent, "Failed to find the parent.");
+ }
+
+ public Expectations getExpectations(Mockery context) throws Exception {
+ return new Expectations() {
+ {
+ defineDefaultExpectations(this);
+ }
+ };
+ }
+ });
+
+ executeTestWithPlugins(getAllDepsFor(UPGRADE_PROGRESS_PLUGIN_V2_FILENAME),
+ new AbstractTestPayload(false, Arrays.asList(TEST_TYPE, PARENT_DEP_TYPE)) {
+ public void test(Map<ResType, Set<Resource>>
resourceUpgradeTestResources) {
+
checkResourcesUpgraded(resourceUpgradeTestResources.get(PARENT_DEP_TYPE), 1);
+ checkResourcesUpgraded(resourceUpgradeTestResources.get(TEST_TYPE),
2);
+ }
+
+ public Expectations getExpectations(Mockery context) throws Exception {
+ return new Expectations() {
+ {
+ defineDefaultExpectations(this);
+ }
+ };
+ }
+ });
+ }
+
+ @Test
+ public void testDuplicitResourceKeysHandledCorrectly() {
+ //TODO implement
+ }
+
+ @Test
+ public void testResourcesRevertedToOriginalStateAfterFailedUpgrade() {
+ //TODO implement
+ }
+
+}
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseUpgradingDiscoveryComponent.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseUpgradingDiscoveryComponent.java
index 5b8af94..a1acf50 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseUpgradingDiscoveryComponent.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseUpgradingDiscoveryComponent.java
@@ -40,7 +40,7 @@ public class BaseUpgradingDiscoveryComponent<T extends
BaseResourceComponent> ex
int ordinal = pluginConfig.getSimple("ordinal").getIntegerValue();
int parentOrdinal = parent == null ? 0 : parent.getOrdinal();
- boolean fail =
Boolean.getBoolean(pluginConfig.getSimpleValue("failUpgrade",
"false"));
+ boolean fail =
Boolean.parseBoolean(pluginConfig.getSimpleValue("failUpgrade",
"false"));
if (!fail && parent != null) {
String typeName = inventoriedResource.getResourceType().getName();
@@ -52,7 +52,17 @@ public class BaseUpgradingDiscoveryComponent<T extends
BaseResourceComponent> ex
if (fail) {
throw new RuntimeException("Failing the resource upgrade
purposefully.");
}
-
+
+ boolean checkParentUpgraded =
Boolean.parseBoolean(pluginConfig.getSimpleValue("checkParentUpgraded",
"false"));
+
+ if (checkParentUpgraded) {
+ if
(!inventoriedResource.getParentResourceContext().getResourceKey().startsWith("UPGRADED"))
{
+ throw new RuntimeException("The parent resource ["
+ + inventoriedResource.getParentResourceContext().getResourceKey()
+ + "] doesn't seem like it's upgraded but this resource
expects it to be.");
+ }
+ }
+
String newKey = pluginConfig.getSimpleValue("upgradedKey", null);
if (newKey == null) {
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v1/rhq-plugin.xml
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v1/rhq-plugin.xml
new file mode 100644
index 0000000..57c9010
--- /dev/null
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v1/rhq-plugin.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<plugin name="test"
+ displayName="Resource Upgrade Multi Test"
+ description="Resource Upgrade Multi Test"
+ package="org.rhq.core.pc.upgrade.plugins.multi.base"
+ version="1.0.0"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+
+ <depends plugin="base" useClasses="true"/>
+ <depends plugin="parentdep"/>
+
+ <server name="TestResource"
+ discovery="BaseDiscoveryComponent"
+ class="BaseResourceComponent">
+
+ <runs-inside>
+ <parent-resource-type name="ParentDependency"
plugin="parentdep"/>
+ </runs-inside>
+
+ <plugin-configuration>
+ <c:simple-property name="count" default="1" />
+ <c:simple-property name="key"
default="test-resource-parent-%n,parent-%p" />
+ <c:simple-property name="upgradedKey"
default="UPGRADED-test-resource-parent-%n,parent-%p" />
+ <c:simple-property name="checkParentUpgraded"
default="true" />
+ </plugin-configuration>
+ </server>
+
+</plugin>
+
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v2/rhq-plugin.xml
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v2/rhq-plugin.xml
new file mode 100644
index 0000000..b4691ba
--- /dev/null
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/progress/v2/rhq-plugin.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<plugin name="test"
+ displayName="Resource Upgrade Multi Test"
+ description="Resource Upgrade Multi Test"
+ package="org.rhq.core.pc.upgrade.plugins.multi.base"
+ version="1.0.0"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+
+ <depends plugin="base" useClasses="true"/>
+ <depends plugin="parentdep"/>
+
+ <server name="TestResource"
+ discovery="BaseUpgradingDiscoveryComponent"
+ class="BaseResourceComponent">
+
+ <runs-inside>
+ <parent-resource-type name="ParentDependency"
plugin="parentdep"/>
+ </runs-inside>
+
+ <plugin-configuration>
+ <c:simple-property name="count" default="2" />
+ <c:simple-property name="key"
default="UPGRADED-test-resource-parent-%n,parent-%p" />
+ </plugin-configuration>
+ </server>
+
+</plugin>
+
commit 14433fc7a6f81e58d8a66907826ceab2742a09bc
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Tue May 17 17:37:14 2011 +0200
synchronizing the FakeServerInvetory to guard against concurrent access,
making sure the resources are returned in the hierarchical order to ensure
they are merged in the plugin container in the correct order.
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
index 0dd3459..793c0f6 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
@@ -83,18 +83,20 @@ public class FakeServerInventory {
public synchronized CustomAction mergeInventoryReport(final InventoryStatus
requiredInventoryStatus) {
return new CustomAction("updateServerSideInventory") {
public Object invoke(Invocation invocation) throws Throwable {
- throwIfFailing();
-
- InventoryReport inventoryReport = (InventoryReport)
invocation.getParameter(0);
-
- for (Resource res : inventoryReport.getAddedRoots()) {
- Resource persisted = fakePersist(res, requiredInventoryStatus, new
HashSet<String>());
-
- if (res.getParentResource() == Resource.ROOT) {
- platform = persisted;
+ synchronized (FakeServerInventory.this) {
+ throwIfFailing();
+
+ InventoryReport inventoryReport = (InventoryReport)
invocation.getParameter(0);
+
+ for (Resource res : inventoryReport.getAddedRoots()) {
+ Resource persisted = fakePersist(res, requiredInventoryStatus,
new HashSet<String>());
+
+ if (res.getParentResource() == Resource.ROOT) {
+ platform = persisted;
+ }
}
+ return getSyncInfo();
}
- return getSyncInfo();
}
};
}
@@ -102,11 +104,13 @@ public class FakeServerInventory {
public synchronized CustomAction clearPlatform() {
return new CustomAction("updateServerSideInventory - report platform deleted
on the server") {
public Object invoke(Invocation invocation) throws Throwable {
- throwIfFailing();
-
- platform = null;
-
- return getSyncInfo();
+ synchronized (FakeServerInventory.this) {
+ throwIfFailing();
+
+ platform = null;
+
+ return getSyncInfo();
+ }
}
};
}
@@ -115,45 +119,47 @@ public class FakeServerInventory {
return new CustomAction("upgradeServerSideInventory") {
@SuppressWarnings({ "serial", "unchecked" })
public Object invoke(Invocation invocation) throws Throwable {
- throwIfFailing();
-
- Set<ResourceUpgradeRequest> requests =
(Set<ResourceUpgradeRequest>) invocation.getParameter(0);
- Set<ResourceUpgradeResponse> responses = new
HashSet<ResourceUpgradeResponse>();
-
- for (final ResourceUpgradeRequest request : requests) {
- Resource resource = findResource(platform, new Resource() {
- public int getId() {
- return request.getResourceId();
- }
- }, ID_COMPARATOR);
- if (resource != null) {
- if (request.getNewDescription() != null) {
- resource.setDescription(request.getNewDescription());
+ synchronized(FakeServerInventory.this) {
+ throwIfFailing();
+
+ Set<ResourceUpgradeRequest> requests =
(Set<ResourceUpgradeRequest>) invocation.getParameter(0);
+ Set<ResourceUpgradeResponse> responses = new
HashSet<ResourceUpgradeResponse>();
+
+ for (final ResourceUpgradeRequest request : requests) {
+ Resource resource = findResource(platform, new Resource() {
+ public int getId() {
+ return request.getResourceId();
+ }
+ }, ID_COMPARATOR);
+ if (resource != null) {
+ if (request.getNewDescription() != null) {
+ resource.setDescription(request.getNewDescription());
+ }
+ if (request.getNewName() != null) {
+ resource.setName(request.getNewName());
+ }
+
+ if (request.getNewResourceKey() != null) {
+ resource.setResourceKey(request.getNewResourceKey());
+ }
+
+ if (request.getUpgradeErrorMessage() != null) {
+ ResourceError error = new ResourceError(resource,
ResourceErrorType.UPGRADE,
+ request.getUpgradeErrorMessage(),
request.getUpgradeErrorStackTrace(),
+ request.getTimestamp());
+ resource.getResourceErrors().add(error);
+ }
+
+ ResourceUpgradeResponse resp = new
ResourceUpgradeResponse();
+ resp.setResourceId(resource.getId());
+ resp.setUpgradedResourceName(resource.getName());
+ resp.setUpgradedResourceKey(resource.getResourceKey());
+
resp.setUpgradedResourceDescription(resource.getDescription());
+ responses.add(resp);
}
- if (request.getNewName() != null) {
- resource.setName(request.getNewName());
- }
-
- if (request.getNewResourceKey() != null) {
- resource.setResourceKey(request.getNewResourceKey());
- }
-
- if (request.getUpgradeErrorMessage() != null) {
- ResourceError error = new ResourceError(resource,
ResourceErrorType.UPGRADE,
- request.getUpgradeErrorMessage(),
request.getUpgradeErrorStackTrace(),
- request.getTimestamp());
- resource.getResourceErrors().add(error);
- }
-
- ResourceUpgradeResponse resp = new ResourceUpgradeResponse();
- resp.setResourceId(resource.getId());
- resp.setUpgradedResourceName(resource.getName());
- resp.setUpgradedResourceKey(resource.getResourceKey());
- resp.setUpgradedResourceDescription(resource.getDescription());
- responses.add(resp);
}
+ return responses;
}
- return responses;
}
};
}
@@ -162,21 +168,23 @@ public class FakeServerInventory {
return new CustomAction("getResources") {
@SuppressWarnings("unchecked")
public Object invoke(Invocation invocation) throws Throwable {
- throwIfFailing();
-
- Set<Integer> resourceIds = (Set<Integer>)
invocation.getParameter(0);
- boolean includeDescendants = (Boolean) invocation.getParameter(1);
-
- return getResources(resourceIds, includeDescendants);
+ synchronized (FakeServerInventory.this) {
+ throwIfFailing();
+
+ Set<Integer> resourceIds = (Set<Integer>)
invocation.getParameter(0);
+ boolean includeDescendants = (Boolean) invocation.getParameter(1);
+
+ return getResources(resourceIds, includeDescendants);
+ }
}
};
}
- public boolean isFailing() {
+ public synchronized boolean isFailing() {
return failing;
}
- public void setFailing(boolean failing) {
+ public synchronized void setFailing(boolean failing) {
this.failing = failing;
}
@@ -195,7 +203,9 @@ public class FakeServerInventory {
@SuppressWarnings("serial")
private Set<Resource> getResources(Set<Integer> resourceIds, boolean
includeDescendants) {
- Set<Resource> result = new HashSet<Resource>();
+ //it is important to keep the hierarchical order of the resource in the returned
set
+ //so that plugin container can merge the resources from top to bottom.
+ Set<Resource> result = new LinkedHashSet<Resource>();
for (final Integer id : resourceIds) {
Resource r = findResource(platform, new Resource() {
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTestBase.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTestBase.java
index afe3982..e0526a1 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTestBase.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTestBase.java
@@ -358,7 +358,9 @@ public abstract class ResourceUpgradeTestBase {
try {
//give the pc the time to finish resource upgrade
- Thread.sleep(1000);
+ while (!PluginContainer.getInstance().isStarted()) {
+ Thread.sleep(500);
+ }
//execute full discovery
InventoryManager im = PluginContainer.getInstance().getInventoryManager();
commit ec038dd2d72eeebf345d952f12bdc96409c3154e
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Tue May 17 17:35:10 2011 +0200
BZ 704028 - Fixing the resource upgrade logic:
1) The resource key duplicates are checked against what the inventory
will look like after the upgrade finished.
2) The InventoryManager start-up logic has been changed to do the
resource activation and upgrade in one go so that we don't have to
restart the "parent" resources when upgrading their children so that
the upgrade methods of children see the parent resource as if it was
already upgraded.
The initial activation and upgrade will assume the upgrade succeeded
and will only rollback the resources to their initial state if the
upgrade fails.
diff --git
a/modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/upgrade/ResourceUpgradeRequest.java
b/modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/upgrade/ResourceUpgradeRequest.java
index aca9c90..164ea13 100644
---
a/modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/upgrade/ResourceUpgradeRequest.java
+++
b/modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/upgrade/ResourceUpgradeRequest.java
@@ -26,6 +26,7 @@ package org.rhq.core.clientapi.agent.upgrade;
import java.io.PrintWriter;
import java.io.StringWriter;
+import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceUpgradeReport;
/**
@@ -119,6 +120,35 @@ public class ResourceUpgradeRequest extends ResourceUpgradeReport {
setNewResourceKey(report.getNewResourceKey());
}
+ public void fillInFromResource(Resource resource) {
+ setNewDescription(resource.getDescription());
+ setNewName(resource.getName());
+ setNewResourceKey(resource.getResourceKey());
+ }
+
+ public void updateResource(Resource resource) {
+ if (getNewResourceKey() != null) {
+ resource.setResourceKey(getNewResourceKey());
+ }
+
+ if (getNewName() != null) {
+ resource.setName(getNewName());
+ }
+
+ if (getNewDescription() != null) {
+ resource.setDescription(getNewDescription());
+ }
+ }
+
+ /**
+ * Clears all the data to be upgraded apart from the error message, stacktrace and
timestamp
+ */
+ public void clearUpgradeData() {
+ setNewDescription(null);
+ setNewName(null);
+ setNewResourceKey(null);
+ }
+
@Override
public boolean hasSomethingToUpgrade() {
return super.hasSomethingToUpgrade() || upgradeErrorMessage != null ||
upgradeErrorStackTrace != null;
diff --git
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
index 6afb021..9a98f81 100644
---
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
+++
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
@@ -225,7 +225,7 @@ public class InventoryManager extends AgentService implements
ContainerService,
//try the resource upgrade before we have any schedulers set up
//so that we don't get any interventions from concurrently running
//discoveries.
- upgradeResources();
+ activateAndUpgradeResources();
availabilityCollectors = new AvailabilityCollectorThreadPool();
availabilityCollectors.initialize();
@@ -1236,7 +1236,7 @@ public class InventoryManager extends AgentService implements
ContainerService,
return resourceContainer.updateAvailability(availabilityType);
}
- public void mergeResourcesFromUpgrade(Set<ResourceUpgradeRequest>
upgradeRequests) {
+ public void mergeResourcesFromUpgrade(Set<ResourceUpgradeRequest>
upgradeRequests) throws PluginContainerException {
Set<ResourceUpgradeResponse> serverUpdates = null;
try {
ServerServices serverServices = this.configuration.getServerServices();
@@ -1429,44 +1429,42 @@ public class InventoryManager extends AgentService implements
ContainerService,
}
/**
- * This will start the resource's plugin component, creating it first if it has
not yet been created. If the
- * component is already created and started, this method is a no-op.
- *
- * @param resource the resource that the component will manage
- * @param container the wrapper around the resource and its component
- * @param updatedPluginConfig if <code>true</code>, this will indicate
that the resource's plugin configuration is
- * known to have changed since the last time the resource
component was started
- *
- * @throws InvalidPluginConfigurationException when connecting to the managed
resource fails due to an invalid
- * plugin configuration
- * @throws PluginContainerException for all other errors
+ * This method prepares the resource and container for activation.
+ * <p>
+ * After this method has processed the resource and container, it is enough
+ * to call ResourceComponent.start(). All the datastructures needed for that
+ * call are prepared in the container by this method.
+ *
+ * @param resource the resource that we are activating
+ * @param container the container to hold the datastructures
+ * @throws InvalidPluginConfigurationException
+ * @throws PluginContainerException
+ * @return true the resource has been successfully prepared and can be started. False
if the resource should not be started.
*/
- @SuppressWarnings("unchecked")
- public void activateResource(Resource resource, @NotNull ResourceContainer container,
boolean updatedPluginConfig)
- throws InvalidPluginConfigurationException, PluginContainerException {
+ private boolean prepareResourceForActivation(Resource resource, @NotNull
ResourceContainer container, boolean forceReinitialization) throws
InvalidPluginConfigurationException, PluginContainerException {
if (resourceUpgradeDelegate.hasUpgradeFailed(resource)) {
if (log.isTraceEnabled()) {
log.trace("Skipping activation of " + resource + " - it
has failed to upgrade.");
}
- return;
+ return false;
}
-
+
ResourceComponent component = container.getResourceComponent();
// if the component already exists and is started, and the resource's plugin
config has not changed, there is
// nothing to do, so return immediately
- if ((component != null) && (container.getResourceComponentState() ==
ResourceComponentState.STARTED)
- && !updatedPluginConfig) {
+ if ((component != null) && (container.getResourceComponentState() ==
ResourceComponentState.STARTED
+ && !forceReinitialization)) {
if (log.isTraceEnabled()) {
- log.trace("Skipping activation of " + resource + " - its
component is already started and its plugin "
+ log.trace("No need to prepare the activation of resource " +
resource + " - its component is already started and its plugin "
+ "config has not been updated since it was last
started.");
}
- return;
+ return false;
}
if (log.isDebugEnabled()) {
- log.debug("Starting component for [" + resource + "], current
state=["
- + container.getResourceComponentState() + "], new plugin
config=[" + updatedPluginConfig + "]...");
+ log.debug("Preparing component for [" + resource + "] for
activation, current state=["
+ + container.getResourceComponentState() + "], forcing
reinitialization=[" + forceReinitialization + "]...");
}
// If the component does not even exist yet, we need to instantiate it and set it
on the container.
@@ -1482,6 +1480,10 @@ public class InventoryManager extends AgentService implements
ContainerService,
container.setResourceComponent(component);
}
+ //this is a transient field, so reinitialize it just in case this is invoked just
after
+ //loadFromDisk()
+ container.setResourceComponentState(ResourceComponentState.STOPPED);
+
// start the resource, but only if its parent component is running. If the parent
is null, that means
// the resource is, itself, the root platform and we always activate that.
ResourceContainer parentResourceContainer;
@@ -1514,7 +1516,7 @@ public class InventoryManager extends AgentService implements
ContainerService,
ConfigurationUtility.normalizeConfiguration(resource.getPluginConfiguration(), type
.getPluginConfigurationDefinition());
- ResourceComponent parentComponent = null;
+ ResourceComponent<?> parentComponent = null;
if (resource.getParentResource() != null) {
parentComponent = getResourceComponent(resource.getParentResource());
}
@@ -1523,8 +1525,45 @@ public class InventoryManager extends AgentService implements
ContainerService,
container.setResourceContext(context);
+ return true;
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Resource [" + resource + "] not being prepared
for activation; parent isn't started: " + parentResourceContainer);
+ }
+
+ return false;
+ }
+ }
+
+ /**
+ * This will start the resource's plugin component, creating it first if it has
not yet been created. If the
+ * component is already created and started, this method is a no-op.
+ *
+ * @param resource the resource that the component will manage
+ * @param container the wrapper around the resource and its component
+ * @param updatedPluginConfig if <code>true</code>, this will indicate
that the resource's plugin configuration is
+ * known to have changed since the last time the resource
component was started
+ *
+ * @throws InvalidPluginConfigurationException when connecting to the managed
resource fails due to an invalid
+ * plugin configuration
+ * @throws PluginContainerException for all other errors
+ */
+ @SuppressWarnings("unchecked")
+ public void activateResource(Resource resource, @NotNull ResourceContainer container,
boolean updatedPluginConfig)
+ throws InvalidPluginConfigurationException, PluginContainerException {
+ if (resourceUpgradeDelegate.hasUpgradeFailed(resource)) {
+ if (log.isTraceEnabled()) {
+ log.trace("Skipping activation of " + resource + " - it
has failed to upgrade.");
+ }
+ return;
+ }
+
+ if (prepareResourceForActivation(resource, container, updatedPluginConfig)) {
+
+ ResourceContext context = container.getResourceContext();
+
// Wrap the component in a proxy that will provide locking and a timeout for
the call to start().
- component = container.createResourceComponentProxy(ResourceComponent.class,
FacetLockType.READ,
+ ResourceComponent component =
container.createResourceComponentProxy(ResourceComponent.class, FacetLockType.READ,
COMPONENT_START_TIMEOUT, true, false);
try {
@@ -1560,10 +1599,6 @@ public class InventoryManager extends AgentService implements
ContainerService,
// Finally, inform the rest of the plugin container that this resource has
been activated
fireResourceActivated(resource);
- } else {
- if (log.isDebugEnabled()) {
- log.debug("Not activating [" + resource + "]; parent
isn't started: " + parentResourceContainer);
- }
}
}
@@ -1760,10 +1795,7 @@ public class InventoryManager extends AgentService implements
ContainerService,
this.resourceContainers.put(uuid, resourceContainer);
}
- initResourceContainer(this.platform);
- activateFromDisk(this.platform);
-
- log.info("Inventory with size [" +
this.resourceContainers.size() + "] initialized from data file in ["
+ log.info("Inventory with size [" +
this.resourceContainers.size() + "] loaded from data file in ["
+ (System.currentTimeMillis() - start) + "ms]");
}
} catch (Exception e) {
@@ -2630,6 +2662,11 @@ public class InventoryManager extends AgentService implements
ContainerService,
}
private void refreshResourceComponentState(ResourceContainer container, boolean
pluginConfigUpdated) {
+ if (resourceUpgradeDelegate.enabled()) {
+ //don't do anything during upgrade. The resources are only started during
the upgrade process.
+ return;
+ }
+
Resource resource = container.getResource();
switch (resource.getInventoryStatus()) {
case COMMITTED: {
@@ -2652,66 +2689,65 @@ public class InventoryManager extends AgentService implements
ContainerService,
container.setSynchronizationState(ResourceContainer.SynchronizationState.SYNCHRONIZED);
}
- private void upgradeResources() {
+ private void activateAndUpgradeResources() {
try {
- if (!configuration.isInsideAgent()) {
- log.debug("Skipping resource upgrade in embedded mode.");
- return;
- }
-
- log.debug("Executing resource upgrade.");
+ log.info("Starting resource activation and upgrade.");
+ long start = System.currentTimeMillis();
+
+ log.info("Executing the initial inventory synchronization before
upgrade.");
+
boolean syncResult = handleReport(new InventoryReport(getAgent()));
if (!syncResult) {
- log.warn("Resource upgrade failed to sync up the inventory with the
server.");
- return;
+ log.warn("Failed to sync up the inventory with the server. The
resource upgrade will be disabled.");
}
- upgradeResource(getPlatform());
+ log.info("Starting to activate (and upgrade) resources.");
+
+ activateAndUpgradeResourceRecursively(getPlatform(), syncResult);
- log.debug("Sending the upgrade requests to the server.");
+ log.info("Inventory activated and upgrade requests gathered in " +
(System.currentTimeMillis() - start) + "ms.");
+
+ log.info("Sending the upgrade requests to the server.");
resourceUpgradeDelegate.sendRequests();
resourceUpgradeDelegate.disable();
- log.debug("Resource upgrade finished.");
+ log.info("Resource activation and upgrade finished.");
} catch (Throwable t) {
- log.error("Resource upgrade failed with an exception.", t);
+ log.error("Resource activation or upgrade failed with an exception. An
attempt to merely activate the resources will be made now.", t);
+
+ //make sure to at least activate the resources
+ activateAndUpgradeResourceRecursively(getPlatform(), false);
}
}
- private void upgradeResource(Resource resource) {
- ResourceContainer container = getResourceContainer(resource);
- if (container != null) {
- if (container.getResourceComponentState() == ResourceComponentState.STARTED)
{
- try {
- if (resourceUpgradeDelegate.processAndQueue(container)) {
- for (Resource child : resource.getChildResources()) {
- upgradeResource(child);
- }
- }
- } catch (PluginContainerException e) {
- log.error("Exception thrown while upgrading [" + resource +
"].", e);
- }
- } else {
- String message = "The resource container for resource [" +
resource
- + "] wasn't started while upgrading.";
-
- if (resource.getChildResources().isEmpty()) {
- log
- .info(message
- + " If this is the first time the plugin container
starts up and has completely empty inventory, you can ignore this message.");
- } else {
- log
- .error(message
- + " This can potentially cause the discovery to find
resources logically equivalent to already "
- + "existing resources if the corresponding plugins
support upgrade for that particular resource type.");
+ private void activateAndUpgradeResourceRecursively(Resource resource, boolean
doUpgrade) {
+ ResourceContainer container = initResourceContainer(resource);
+
+ boolean activate = true;
+
+ //only do upgrade inside the agent. it does not make sense in embedded mode.
+ if (doUpgrade && configuration.isInsideAgent()) {
+ try {
+ activate = prepareResourceForActivation(resource, container, false);
+ activate = activate &&
resourceUpgradeDelegate.processAndQueue(container);
+ } catch (Throwable t) {
+ log.error("Exception thrown while upgrading [" + resource +
"].", t);
+ activate = false;
+ }
+ }
+
+ if (activate) {
+ try {
+ activateResource(resource, container, false);
+ for (Resource child : resource.getChildResources()) {
+ activateAndUpgradeResourceRecursively(child, doUpgrade);
}
+ } catch (PluginContainerException e) {
+ log.error("Exception thrown while activating [" + resource +
"].", e);
}
- } else {
- log.error("Resource container not initialized for resource [" +
resource
- + "] during upgrade. This should not happen.");
}
}
diff --git
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java
index b3b8716..e8ca94e 100644
---
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java
+++
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java
@@ -59,6 +59,7 @@ public class ResourceUpgradeDelegate {
private boolean enabled = true;
private Set<ResourceUpgradeRequest> requests = new
HashSet<ResourceUpgradeRequest>();
+ private Set<ResourceUpgradeRequest> originalResourceData = new
HashSet<ResourceUpgradeRequest>();
private InventoryManager inventoryManager;
private Set<Resource> failedResources = new HashSet<Resource>();
private Map<Resource, Set<ResourceType>> failedResourceTypesPerParent =
new HashMap<Resource, Set<ResourceType>>();
@@ -85,6 +86,14 @@ public class ResourceUpgradeDelegate {
/**
* Asks the resource's discovery component to upgrade the resource.
+ * The resource will be updated with the data from the upgrade. I.e. when the
resource
+ * is activated after it was queued for upgrade, it will actually start with the
upgraded
+ * data.
+ * <p>
+ * If later on the upgrade fails to finish due to communication error with server or
the
+ * server doesn't approve some upgrades for whatever reason, the resources will
be restarted
+ * with the original data.
+ *
* @param resourceContainer
* @return true if the resource was queued for upgrade with no problems,
* false if there was some problem upgrading and the resource container was
deactivated as
@@ -135,7 +144,62 @@ public class ResourceUpgradeDelegate {
public void sendRequests() throws Throwable {
if (enabled && requests.size() > 0) {
try {
+ //check the validity of the upgrades now that we have a complete picture
+ //about the changes and the inventory looks like it was already
upgraded.
+ for(ResourceUpgradeRequest request : requests) {
+ ResourceContainer container =
inventoryManager.getResourceContainer(request.getResourceId());
+ if (container != null) {
+ Resource resource = container.getResource();
+ String upgradeErrors = null;
+ if ((upgradeErrors = checkUpgradeValid(resource, request)) !=
null) {
+ String errorString = "Upgrading the resource [" +
resource + "] using these updates [" + request
+ + "] would render the inventory invalid because of
the following reasons: " + upgradeErrors;
+
+ log.error(errorString);
+
+ IllegalStateException ex = new
IllegalStateException(errorString);
+ ex.fillInStackTrace();
+
+ //set the error and clear out everything else, so that we
send the error
+ //to the server and locally roll back to the previous state.
+ request.setErrorProperties(ex);
+ request.clearUpgradeData();
+
+ if (request.getUpgradeErrorMessage() != null) {
+ rememberFailure(resource);
+ inventoryManager.deactivateResource(resource);
+ }
+
+ }
+ }
+ }
+
+ //now before we talk to server and sync up the upgraded data,
+ //reset the resources to their original values so that any changes
+ //the server makes to the upgrade data are applied to the
"vanilla" state
+ //of the resources. i.e we only want to make changes the server
approves.
+ for (ResourceUpgradeRequest request : originalResourceData) {
+ ResourceContainer container =
inventoryManager.getResourceContainer(request.getResourceId());
+ if (container != null) {
+ Resource resource = container.getResource();
+ request.updateResource(resource);
+ }
+ }
+
+ //merge the resources with the data as received from the server
+ //(this can differ from what the upgrade "wants" because the
server is
+ //free to disallow some changes, e.g. resource name change)
inventoryManager.mergeResourcesFromUpgrade(requests);
+
+ //and now restart all the "touched" resources with the true
intended
+ //data
+ for (ResourceUpgradeRequest request : requests) {
+ ResourceContainer container =
inventoryManager.getResourceContainer(request.getResourceId());
+ if (container != null) {
+ Resource resource = container.getResource();
+ inventoryManager.activateResource(resource, container, true);
+ }
+ }
} catch (Throwable t) {
mergeFailed = true;
@@ -168,7 +232,7 @@ public class ResourceUpgradeDelegate {
ResourceContext<?> parentResourceContext = parentResourceContainer == null
? null : parentResourceContainer.getResourceContext();
Resource resource = resourceContainer.getResource();
-
+
ResourceDiscoveryComponent<ResourceComponent<T>> discoveryComponent =
PluginContainer.getInstance()
.getPluginComponentFactory().getDiscoveryComponent(resource.getResourceType(),
parentResourceContainer);
@@ -194,44 +258,32 @@ public class ResourceUpgradeDelegate {
}
if (upgradeReport != null && upgradeReport.hasSomethingToUpgrade()) {
- String upgradeErrors = null;
- if ((upgradeErrors = checkUpgradeValid(resource, upgradeReport)) != null) {
- String errorString = "Upgrading the resource [" + resource +
"] using these updates [" + upgradeReport
- + "] would render the inventory invalid because of the following
reasons: " + upgradeErrors;
-
- log.error(errorString);
-
- IllegalStateException ex = new IllegalStateException(errorString);
- ex.fillInStackTrace();
-
- request.setErrorProperties(ex);
- } else {
- request.fillInFromReport(upgradeReport);
- }
-
+ request.fillInFromReport(upgradeReport);
}
- //everything went ok, let's queue a upgrade request that will be sent to the
server
if (request.hasSomethingToUpgrade()) {
requests.add(request);
}
if (request.getUpgradeErrorMessage() != null) {
- failedResources.add(resource);
-
- Set<ResourceType> failedResourceTypesInParent =
failedResourceTypesPerParent.get(parentResource);
- if (failedResourceTypesInParent == null) {
- failedResourceTypesInParent = new HashSet<ResourceType>();
- failedResourceTypesPerParent.put(parentResource,
failedResourceTypesInParent);
- }
-
- failedResourceTypesInParent.add(resource.getResourceType());
-
- inventoryManager.deactivateResource(resource);
-
+ rememberFailure(resource);
return false;
}
-
+
+ //alright, everything went fine with the upgrade. Let's update the data of
the resource
+ //right now so that it starts up as if it was already upgraded. This is to ensure
that
+ //its children will use a parent component that behaves like the upgraded one.
+ //We are going to roll back the upgraded data if the upgrade fails to sync with
the server
+ //later on.
+
+ //remember the original values
+ ResourceUpgradeRequest original = new ResourceUpgradeRequest(resource.getId());
+ original.fillInFromResource(resource);
+ originalResourceData.add(original);
+
+ //update the resource
+ request.updateResource(resource);
+
return true;
}
@@ -248,6 +300,7 @@ public class ResourceUpgradeDelegate {
private boolean checkResourceKeyUniqueAmongSiblings(Resource resource,
ResourceUpgradeReport upgradeReport) {
Resource parent = resource.getParentResource();
if (parent == null) {
+ //there is only a single platform resource on an agent
return true;
}
@@ -267,4 +320,17 @@ public class ResourceUpgradeDelegate {
return true;
}
+
+ private void rememberFailure(Resource resource) {
+ failedResources.add(resource);
+ Resource parentResource = resource.getParentResource();
+
+ Set<ResourceType> failedResourceTypesInParent =
failedResourceTypesPerParent.get(parentResource);
+ if (failedResourceTypesInParent == null) {
+ failedResourceTypesInParent = new HashSet<ResourceType>();
+ failedResourceTypesPerParent.put(parentResource,
failedResourceTypesInParent);
+ }
+
+ failedResourceTypesInParent.add(resource.getResourceType());
+ }
}
commit 058a82ad8f3f1c6d39ce6691428838c70c9dacb2
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Mon May 16 17:21:43 2011 -0400
[BZ 705181 - group, portlet or report alert history view may not display data]
Fix an issue where the datasource may prematurely call processResponse(),
resulting in the the client being notified prior to the records being full
cooked.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
index b3574bc..b4abbb0 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
@@ -237,7 +237,6 @@ public class AlertDataSource extends RPCDataSource<Alert,
AlertCriteria> {
Log.info(result.size() + " alerts fetched in: " + fetchTime +
"ms");
dataRetrieved(result, response, request);
- processResponse(request.getRequestId(), response);
}
});
}
@@ -252,7 +251,8 @@ public class AlertDataSource extends RPCDataSource<Alert,
AlertCriteria> {
case Resource:
response.setData(buildRecords(result));
// for paging to work we have to specify size of full result set
- response.setTotalRows(result.getTotalSize());
+ response.setTotalRows(getTotalRows(result, response, request));
+ processResponse(request.getRequestId(), response);
break;
// disambiguate as the results could be cross-resource
@@ -287,12 +287,28 @@ public class AlertDataSource extends RPCDataSource<Alert,
AlertCriteria> {
}
response.setData(records);
// for paging to work we have to specify size of full result set
- response.setTotalRows(result.getTotalSize());
+ response.setTotalRows(getTotalRows(result, response, request));
+ processResponse(request.getRequestId(), response);
}
});
}
}
+ /**
+ * Sub-classes can override this to add fine-grained control over the result set
size. By default the
+ * total rows are set to the total result set for the query, allowing proper paging.
But some views (portlets)
+ * may want to limit results to a small set (like most recent).
+ * @param result
+ * @param response
+ * @param request
+ *
+ * @return should not exceed result.getTotalSize().
+ */
+ protected int getTotalRows(final PageList<Alert> result, final DSResponse
response, final DSRequest request) {
+
+ return result.getTotalSize();
+ }
+
@Override
protected AlertCriteria getFetchCriteria(DSRequest request) {
AlertPriority[] prioritiesFilter = getArrayFilter(request, FILTER_PRIORITIES,
AlertPriority.class);
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/AbstractRecentAlertsPortlet.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/AbstractRecentAlertsPortlet.java
index b2d1d84..073cee8 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/AbstractRecentAlertsPortlet.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/AbstractRecentAlertsPortlet.java
@@ -300,16 +300,15 @@ public abstract class AbstractRecentAlertsPortlet extends
AlertHistoryView imple
}
/* (non-Javadoc)
- * This override allows us to set the total rows to the number of recent alerts
configured for
+ * This override allows us to set the total rows to the number of recent op
history configured for
* the portlet. This sets the counter appropriately and stops further queries to
the server.
*
- * @see
org.rhq.enterprise.gui.coregui.client.alert.AlertDataSource#dataRetrieved(org.rhq.core.domain.util.PageList,
com.smartgwt.client.data.DSResponse, com.smartgwt.client.data.DSRequest)
+ * @see
org.rhq.enterprise.gui.coregui.client.operation.OperationHistoryDataSource#getTotalRows(org.rhq.core.domain.util.PageList,
com.smartgwt.client.data.DSResponse, com.smartgwt.client.data.DSRequest)
*/
@Override
- protected void dataRetrieved(PageList<Alert> result, DSResponse response,
DSRequest request) {
- super.dataRetrieved(result, response, request);
+ protected int getTotalRows(final PageList<Alert> result, final DSResponse
response, final DSRequest request) {
- response.setTotalRows(result.size());
+ return result.size();
}
@Override
commit a9613dfccb84a93cda6bc6ca6cb3271d61804209
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Mon May 16 17:16:05 2011 -0400
[BZ 705178 - Disambiguation missing from group event history view]
Add missing D12N.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/event/Event.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/event/Event.java
index f0df086..e66e06b 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/event/Event.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/event/Event.java
@@ -72,7 +72,7 @@ import org.rhq.core.domain.resource.Resource;
+ " JOIN ev.source evs JOIN evs.resource res WHERE res.id = :resourceId AND
ev.severity = :severity "
+ " AND ev.timestamp BETWEEN :start AND :end "),
@NamedQuery(name = Event.GET_DETAILS_FOR_EVENT_IDS, query = "SELECT "
- + " new org.rhq.core.domain.event.composite.EventComposite(ev.detail,
res.id, res.name, ev.id, ev.severity, evs.location, ev.timestamp) "
+ + " new org.rhq.core.domain.event.composite.EventComposite(ev.detail,
res.id, res.name, res.ancestry, res.resourceType.id, ev.id, ev.severity, evs.location,
ev.timestamp) "
+ " FROM Event ev JOIN ev.source evs JOIN evs.resource res WHERE ev.id IN
(:eventIds) AND evs.id = ev.source"
+ " AND res.id = evs.resource "), //
@NamedQuery(name = Event.QUERY_EVENT_COUNTS_BY_SEVERITY, query = "" //
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/event/composite/EventComposite.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/event/composite/EventComposite.java
index 53cfa5d..0b6721e 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/event/composite/EventComposite.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/event/composite/EventComposite.java
@@ -1,123 +1,143 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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, version 2, as
- * published by the Free Software Foundation, and/or the GNU Lesser
- * General Public License, version 2.1, also as published by the Free
- * Software Foundation.
- *
- * 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 and the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the GNU Lesser General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-package org.rhq.core.domain.event.composite;
-
-import java.io.Serializable;
-import java.util.Date;
-
-import org.rhq.core.domain.event.EventSeverity;
-
-/**
- * A Data transfer object for the Event structure.
- * Not all fields will be filled in every given time.
- * @author Heiko W. Rupp
- *
- */
-public class EventComposite implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- String eventDetail;
- int resourceId;
- String resourceName;
- int eventId;
- String sourceLocation;
- EventSeverity severity;
- long timestamp = -1;
-
- public EventComposite() {
- // needed by JSON-based UI pages
- }
-
- public EventComposite(String eventDetail, int resourceId, String resourceName, int
eventId, EventSeverity severity,
- String sourceLocation, Long timestamp) {
- super();
- this.eventDetail = eventDetail;
- this.resourceId = resourceId;
- this.resourceName = resourceName;
- this.eventId = eventId;
- this.severity = severity;
- this.sourceLocation = sourceLocation;
- if (timestamp != null) {
- this.timestamp = timestamp;
- }
- }
-
- public String getEventDetail() {
- return eventDetail;
- }
-
- public void setEventDetail(String eventDetail) {
- this.eventDetail = eventDetail;
- }
-
- public int getResourceId() {
- return resourceId;
- }
-
- public void setResourceId(int resourceId) {
- this.resourceId = resourceId;
- }
-
- public String getResourceName() {
- return resourceName;
- }
-
- public void setResourceName(String resourceName) {
- this.resourceName = resourceName;
- }
-
- public int getEventId() {
- return eventId;
- }
-
- public void setEventId(int eventId) {
- this.eventId = eventId;
- }
-
- public String getSourceLocation() {
- return sourceLocation;
- }
-
- public void setSourceLocation(String sourceLocation) {
- this.sourceLocation = sourceLocation;
- }
-
- public EventSeverity getSeverity() {
- return severity;
- }
-
- public void setSeverity(EventSeverity severity) {
- this.severity = severity;
- }
-
- public Date getTimestamp() {
- return new Date(timestamp);
- }
-
- public void setTimestamp(Date timestamp) {
- this.timestamp = timestamp.getTime();
- }
-
-}
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.rhq.core.domain.event.composite;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import org.rhq.core.domain.event.EventSeverity;
+
+/**
+ * A Data transfer object for the Event structure.
+ * Not all fields will be filled in every given time.
+ * @author Heiko W. Rupp
+ *
+ */
+public class EventComposite implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private String eventDetail;
+ private int resourceId;
+ private String resourceName;
+ private String resourceAncestry;
+ private int resourceTypeId;
+ private int eventId;
+ private String sourceLocation;
+ private EventSeverity severity;
+ private long timestamp = -1;
+
+ public EventComposite() {
+ // needed by JSON-based UI pages
+ }
+
+ public EventComposite(String eventDetail, int resourceId, String resourceName, String
resourceAncestry,
+ int resourceTypeId, int eventId, EventSeverity severity, String sourceLocation,
Long timestamp) {
+ super();
+ this.eventDetail = eventDetail;
+ this.resourceId = resourceId;
+ this.resourceName = resourceName;
+ this.resourceAncestry = resourceAncestry;
+ this.resourceTypeId = resourceTypeId;
+ this.eventId = eventId;
+ this.severity = severity;
+ this.sourceLocation = sourceLocation;
+ if (timestamp != null) {
+ this.timestamp = timestamp;
+ }
+ }
+
+ public String getEventDetail() {
+ return eventDetail;
+ }
+
+ public void setEventDetail(String eventDetail) {
+ this.eventDetail = eventDetail;
+ }
+
+ public int getResourceId() {
+ return resourceId;
+ }
+
+ public void setResourceId(int resourceId) {
+ this.resourceId = resourceId;
+ }
+
+ public String getResourceName() {
+ return resourceName;
+ }
+
+ public void setResourceName(String resourceName) {
+ this.resourceName = resourceName;
+ }
+
+ public int getEventId() {
+ return eventId;
+ }
+
+ public void setEventId(int eventId) {
+ this.eventId = eventId;
+ }
+
+ public String getSourceLocation() {
+ return sourceLocation;
+ }
+
+ public void setSourceLocation(String sourceLocation) {
+ this.sourceLocation = sourceLocation;
+ }
+
+ public EventSeverity getSeverity() {
+ return severity;
+ }
+
+ public void setSeverity(EventSeverity severity) {
+ this.severity = severity;
+ }
+
+ public Date getTimestamp() {
+ return new Date(timestamp);
+ }
+
+ public void setTimestamp(Date timestamp) {
+ this.timestamp = timestamp.getTime();
+ }
+
+ public String getResourceAncestry() {
+ return resourceAncestry;
+ }
+
+ public void setResourceAncestry(String resourceAncestry) {
+ this.resourceAncestry = resourceAncestry;
+ }
+
+ public int getResourceTypeId() {
+ return resourceTypeId;
+ }
+
+ public void setResourceTypeId(int resourceTypeId) {
+ this.resourceTypeId = resourceTypeId;
+ }
+
+}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java
index d12c4fa..bd736e3 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java
@@ -22,31 +22,43 @@
*/
package org.rhq.enterprise.gui.coregui.client.inventory.common.event;
+import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSourceField;
import com.smartgwt.client.data.Record;
-import com.smartgwt.client.data.fields.DataSourceIntegerField;
-import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.rpc.RPCResponse;
-import com.smartgwt.client.types.FieldType;
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.grid.CellFormatter;
+import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.common.EntityContext;
import org.rhq.core.domain.criteria.EventCriteria;
import org.rhq.core.domain.event.EventSeverity;
import org.rhq.core.domain.event.composite.EventComposite;
+import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.ImageManager;
+import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
-import org.rhq.enterprise.gui.coregui.client.util.HighlightingDatasourceTextField;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
+import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
+import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository.TypesLoadedCallback;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* @author Joseph Marques
@@ -64,29 +76,118 @@ public class EventCompositeDatasource extends
RPCDataSource<EventComposite, Even
addFields(fields);
}
- @Override
- protected List<DataSourceField> addDataSourceFields() {
- List<DataSourceField> fields = super.addDataSourceFields();
+ /**
+ * The view that contains the list grid which will display this datasource's data
will call this
+ * method to get the field information which is used to control the display of the
data.
+ *
+ * @return list grid fields used to display the datasource data
+ */
+ public ArrayList<ListGridField> getListGridFields() {
+ ArrayList<ListGridField> fields = new ArrayList<ListGridField>(6);
- DataSourceField id = new DataSourceIntegerField("id",
MSG.common_title_id());
- id.setPrimaryKey(true);
- fields.add(id);
+ ListGridField timestampField = new ListGridField("timestamp",
MSG.view_inventory_eventHistory_timestamp());
+ TimestampCellFormatter.prepareDateField(timestampField);
+ fields.add(timestampField);
- DataSourceTextField timestamp = new DataSourceTextField("timestamp",
MSG
- .view_inventory_eventHistory_timestamp());
- timestamp.setType(FieldType.DATETIME);
- fields.add(timestamp);
+ ListGridField severityField = new ListGridField("severity",
MSG.view_inventory_eventHistory_severity());
+ severityField.setAlign(Alignment.CENTER);
+ severityField.setCellFormatter(new CellFormatter() {
+ public String format(Object o, ListGridRecord listGridRecord, int i, int i1)
{
+ String icon =
ImageManager.getEventSeverityBadge(EventSeverity.valueOf(o.toString()));
+ return Canvas.imgHTML(icon);
+ }
+ });
+ severityField.setShowHover(true);
+ severityField.setHoverCustomizer(new HoverCustomizer() {
+ @Override
+ public String hoverHTML(Object value, ListGridRecord record, int rowNum, int
colNum) {
+ EventSeverity severity =
EventSeverity.valueOf(record.getAttribute("severity"));
+ switch (severity) {
+ case DEBUG:
+ return MSG.common_severity_debug();
+ case INFO:
+ return MSG.common_severity_info();
+ case WARN:
+ return MSG.common_severity_warn();
+ case ERROR:
+ return MSG.common_severity_error();
+ case FATAL:
+ return MSG.common_severity_fatal();
+ }
+ return null;
+ }
+ });
+ fields.add(severityField);
- DataSourceTextField severity = new DataSourceTextField("severity",
MSG.view_inventory_eventHistory_severity());
- fields.add(severity);
+ ListGridField detailField = new ListGridField("detail",
MSG.view_inventory_eventHistory_details());
+ detailField.setCellFormatter(new CellFormatter() {
+ @Override
+ public String format(Object value, ListGridRecord record, int rowNum, int
colNum) {
+ if (null == value) {
+ return "";
+ } else if (((String) value).length() <= 200) {
+ return (String) value;
+ } else {
+ return ((String) value).substring(0, 200); // first 200 chars
+ }
+ }
+ });
+ fields.add(detailField);
- DataSourceTextField details = new
HighlightingDatasourceTextField("detail", MSG
- .view_inventory_eventHistory_details());
- fields.add(details);
+ ListGridField sourceField = new ListGridField("source",
MSG.view_inventory_eventHistory_sourceLocation());
+ sourceField.setCellFormatter(new CellFormatter() {
+ public String format(Object o, ListGridRecord listGridRecord, int i, int i1)
{
+ String sourceLocation = listGridRecord.getAttribute("source");
+ int length = sourceLocation.length();
+ if (length > 40) {
+ return "..." + sourceLocation.substring(length - 40); //
the last 40 chars
+ }
+ return sourceLocation;
+ }
+ });
+ sourceField.setShowHover(true);
+ sourceField.setHoverCustomizer(new HoverCustomizer() {
+ @Override
+ public String hoverHTML(Object value, ListGridRecord record, int rowNum, int
colNum) {
+ String sourceLocation = record.getAttribute("source");
+ return (sourceLocation.length() > 40) ? sourceLocation : null;
+ }
+ });
+ fields.add(sourceField);
- DataSourceTextField sourceLocation = new DataSourceTextField("source",
MSG
- .view_inventory_eventHistory_sourceLocation());
- fields.add(sourceLocation);
+ if (this.entityContext.type != EntityContext.Type.Resource) {
+ ListGridField resourceNameField = new
ListGridField(AncestryUtil.RESOURCE_NAME, MSG.common_title_resource());
+ resourceNameField.setCellFormatter(new CellFormatter() {
+ public String format(Object o, ListGridRecord listGridRecord, int i, int
i1) {
+ String url = LinkManager
+
.getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID));
+ return SeleniumUtility.getLocatableHref(url, o.toString(), null);
+ }
+ });
+ resourceNameField.setShowHover(true);
+ resourceNameField.setHoverCustomizer(new HoverCustomizer() {
+
+ public String hoverHTML(Object value, ListGridRecord listGridRecord, int
rowNum, int colNum) {
+ return AncestryUtil.getResourceHoverHTML(listGridRecord, 0);
+ }
+ });
+ fields.add(resourceNameField);
+
+ ListGridField ancestryField = AncestryUtil.setupAncestryListGridField();
+ fields.add(ancestryField);
+
+ timestampField.setWidth(155);
+ severityField.setWidth(55);
+ detailField.setWidth("*");
+ sourceField.setWidth(180);
+ resourceNameField.setWidth("20%");
+ ancestryField.setWidth("25%");
+ } else {
+ timestampField.setWidth(155);
+ severityField.setWidth(55);
+ detailField.setWidth("*");
+ sourceField.setWidth(220);
+ }
return fields;
}
@@ -106,6 +207,12 @@ public class EventCompositeDatasource extends
RPCDataSource<EventComposite, Even
record.setAttribute("severity", from.getSeverity().name());
record.setAttribute("source", from.getSourceLocation());
+ // for ancestry handling
+ record.setAttribute(AncestryUtil.RESOURCE_ID, from.getResourceId());
+ record.setAttribute(AncestryUtil.RESOURCE_NAME, from.getResourceName());
+ record.setAttribute(AncestryUtil.RESOURCE_ANCESTRY, from.getResourceAncestry());
+ record.setAttribute(AncestryUtil.RESOURCE_TYPE_ID, from.getResourceTypeId());
+
return record;
}
@@ -125,14 +232,69 @@ public class EventCompositeDatasource extends
RPCDataSource<EventComposite, Even
response.setStatus(RPCResponse.STATUS_FAILURE);
}
- public void onSuccess(PageList<EventComposite> result) {
+ public void onSuccess(final PageList<EventComposite> result) {
+ dataRetrieved(result, response, request);
+ }
+ });
+ }
+
+ /**
+ * Additional processing to support entity-specific or cross-resource views, and
something that can be overidden.
+ */
+ protected void dataRetrieved(final PageList<EventComposite> result, final
DSResponse response,
+ final DSRequest request) {
+ switch (entityContext.type) {
+
+ // no need to disambiguate, the alerts are for a singe resource
+ case Resource:
+ Record[] records = buildRecords(result);
+ highlightFilterMatches(request, records);
+ response.setData(records);
+ // for paging to work we have to specify size of full result set
+ response.setTotalRows(result.getTotalSize());
+ processResponse(request.getRequestId(), response);
+
+ break;
+
+ // disambiguate as the results could be cross-resource
+ default:
+ Set<Integer> typesSet = new HashSet<Integer>();
+ Set<String> ancestries = new HashSet<String>();
+ for (EventComposite composite : result) {
+ typesSet.add(composite.getResourceTypeId());
+ ancestries.add(composite.getResourceAncestry());
+ }
+
+ // In addition to the types of the result resources, get the types of their
ancestry
+ typesSet.addAll(AncestryUtil.getAncestryTypeIds(ancestries));
+
+ ResourceTypeRepository typeRepo =
ResourceTypeRepository.Cache.getInstance();
+ typeRepo.getResourceTypes(typesSet.toArray(new Integer[typesSet.size()]), new
TypesLoadedCallback() {
+ @Override
+ public void onTypesLoaded(Map<Integer, ResourceType> types) {
+ // Smartgwt has issues storing a Map as a ListGridRecord attribute.
Wrap it in a pojo.
+ AncestryUtil.MapWrapper typesWrapper = new
AncestryUtil.MapWrapper(types);
+
Record[] records = buildRecords(result);
highlightFilterMatches(request, records);
+
+ for (Record record : records) {
+ // To avoid a lot of unnecessary String construction, be lazy
about building ancestry hover text.
+ // Store the types map off the records so we can build a detailed
hover string as needed.
+ record.setAttribute(AncestryUtil.RESOURCE_ANCESTRY_TYPES,
typesWrapper);
+
+ // Build the decoded ancestry Strings now for display
+ record
+ .setAttribute(AncestryUtil.RESOURCE_ANCESTRY_VALUE,
AncestryUtil.getAncestryValue(record));
+ }
+
response.setData(records);
+ // for paging to work we have to specify size of full result set
response.setTotalRows(result.getTotalSize());
processResponse(request.getRequestId(), response);
}
});
+ }
}
@SuppressWarnings("unchecked")
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java
index 0965096..fa623f1 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java
@@ -29,12 +29,10 @@ import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.data.SortSpecifier;
-import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.SortDirection;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.grid.CellFormatter;
-import com.smartgwt.client.widgets.grid.HoverCustomizer;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
@@ -130,78 +128,8 @@ public class EventCompositeHistoryView extends
TableSection<EventCompositeDataso
@Override
protected void configureTable() {
- ListGridField timestampField = new ListGridField("timestamp",
MSG.view_inventory_eventHistory_timestamp());
- TimestampCellFormatter.prepareDateField(timestampField);
-
- ListGridField severityField = new ListGridField("severity",
MSG.view_inventory_eventHistory_severity());
- severityField.setAlign(Alignment.CENTER);
- severityField.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int i, int i1)
{
- String icon =
ImageManager.getEventSeverityBadge(EventSeverity.valueOf(o.toString()));
- return Canvas.imgHTML(icon);
- }
- });
- severityField.setShowHover(true);
- severityField.setHoverCustomizer(new HoverCustomizer() {
- @Override
- public String hoverHTML(Object value, ListGridRecord record, int rowNum, int
colNum) {
- EventSeverity severity =
EventSeverity.valueOf(record.getAttribute("severity"));
- switch (severity) {
- case DEBUG:
- return MSG.common_severity_debug();
- case INFO:
- return MSG.common_severity_info();
- case WARN:
- return MSG.common_severity_warn();
- case ERROR:
- return MSG.common_severity_error();
- case FATAL:
- return MSG.common_severity_fatal();
- }
- return null;
- }
- });
-
- ListGridField detailField = new ListGridField("detail",
MSG.view_inventory_eventHistory_details());
- detailField.setCellFormatter(new CellFormatter() {
- @Override
- public String format(Object value, ListGridRecord record, int rowNum, int
colNum) {
- if (null == value) {
- return "";
- } else if (((String) value).length() <= 200) {
- return (String) value;
- } else {
- return ((String) value).substring(0, 200); // first 200 chars
- }
- }
- });
-
- ListGridField sourceField = new ListGridField("source",
MSG.view_inventory_eventHistory_sourceLocation());
- sourceField.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int i, int i1)
{
- String sourceLocation = listGridRecord.getAttribute("source");
- int length = sourceLocation.length();
- if (length > 40) {
- return "..." + sourceLocation.substring(length - 40); //
the last 40 chars
- }
- return sourceLocation;
- }
- });
- sourceField.setShowHover(true);
- sourceField.setHoverCustomizer(new HoverCustomizer() {
- @Override
- public String hoverHTML(Object value, ListGridRecord record, int rowNum, int
colNum) {
- String sourceLocation = record.getAttribute("source");
- return (sourceLocation.length() > 40) ? sourceLocation : null;
- }
- });
-
- timestampField.setWidth(155);
- severityField.setWidth(55);
- detailField.setWidth("*");
- sourceField.setWidth(220);
-
- setListGridFields(timestampField, severityField, detailField, sourceField);
+ ArrayList<ListGridField> dataSourceFields =
getDataSource().getListGridFields();
+ getListGrid().setFields(dataSourceFields.toArray(new
ListGridField[dataSourceFields.size()]));
setupTableInteractions();
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/event/EventManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/event/EventManagerBean.java
index b75688a..6369543 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/event/EventManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/event/EventManagerBean.java
@@ -462,6 +462,8 @@ public class EventManagerBean implements EventManagerLocal,
EventManagerRemote {
+ " event.detail," //
+ " event.source.resource.id," //
+ " event.source.resource.name," //
+ + " event.source.resource.ancestry," //
+ + " event.source.resource.resourceType.id," //
+ " event.id," //
+ " event.severity," //
+ " event.source.location," //
commit 40faf17da8333709db1e1894cf38309412ff8602
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Mon May 16 16:35:39 2011 -0400
[BZ 685007] make sure simplified interfaces have different packages than the original
interfaces to prevent security exceptions when the jars containing the original interfaces
are signed (
https://bugzilla.redhat.com/show_bug.cgi?id=685007)
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/AbstractRhqFacadeProxy.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/AbstractRhqFacadeProxy.java
index bacdafb..7f3a56f 100644
---
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/AbstractRhqFacadeProxy.java
+++
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/AbstractRhqFacadeProxy.java
@@ -16,7 +16,6 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-
package org.rhq.bindings.client;
import java.lang.reflect.InvocationHandler;
@@ -93,7 +92,7 @@ public abstract class AbstractRhqFacadeProxy<T extends RhqFacade>
implements Inv
* and <code>args</code> are de-simplified (and thus the method can't
be supplied just as a simple {@link Method} instance).
*
* @param proxy the proxy the method is executing on
- * @param method the original method
+ * @param originalMethod the original method
* @param argTypes the de-simplified argument types
* @param args the de-simplified argumens
* @return the result of the invocation
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/InterfaceSimplifier.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/InterfaceSimplifier.java
index fba954a..8407206 100644
---
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/InterfaceSimplifier.java
+++
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/InterfaceSimplifier.java
@@ -16,7 +16,6 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-
package org.rhq.bindings.util;
import javassist.CannotCompileException;
@@ -50,21 +49,22 @@ public class InterfaceSimplifier {
try {
ClassPool cp = ClassPool.getDefault();
- String simpleName = intf.getName() + "Simple";
+ String simplifiedName = getSimplifiedName(intf);
+ LOG.debug("Simplifying " + intf + " (simplified interface
name: " + simplifiedName + ")...");
try {
- CtClass cached = cp.get(simpleName);
- return Class.forName(simpleName, false, cp.getClassLoader());
+ CtClass cached = cp.get(simplifiedName);
+ return Class.forName(simplifiedName, false, cp.getClassLoader());
} catch (NotFoundException e) {
// ok... load it
} catch (ClassNotFoundException e) {
- LOG.debug("Class [" + simpleName + "] not found - cause:
" + e);
+ LOG.debug("Class [" + simplifiedName + "] not found -
cause: " + e);
}
CtClass cc = cp.get(intf.getName());
- CtClass cz = cp.getAndRename(intf.getName(), simpleName);
+ CtClass cz = cp.getAndRename(intf.getName(), simplifiedName);
// CtClass cz = cp.makeInterface(simpleName, cc);
cz.defrost();
@@ -125,4 +125,13 @@ public class InterfaceSimplifier {
return intf;
}
+ private static String getSimplifiedName(Class<?> interfaceClass) {
+ String fullName = interfaceClass.getName();
+ String simpleName = interfaceClass.getSimpleName();
+ Package pkg = interfaceClass.getPackage();
+ String packageName = (pkg != null) ? pkg.getName() :
+ fullName.substring(0, fullName.length() - (simpleName.length() + 1));
+ return packageName + ".wrapped." + simpleName + "Simple";
+ }
+
}
commit 770bca96b77cc9bb44f7ca5d9003e623bb980ee0
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Mon May 16 13:49:59 2011 -0400
Changes to facilitate selenium testing on templates. Make the section
stack and the rollover canvases locatable.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
index f933711..80720e1 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
@@ -60,6 +60,7 @@ import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTyp
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository.TypesLoadedCallback;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableImgButton;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableListGrid;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableTreeGrid;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
@@ -133,7 +134,7 @@ public class ResourceTypeTreeView extends LocatableVLayout implements
Bookmarkab
titleBar.setExtraSpace(10);
layout.addMember(titleBar);
- SectionStack sectionStack = new SectionStack();
+ SectionStack sectionStack = new
LocatableSectionStack(extendLocatorId("TypeStack"));
sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);
ListGrid platformsList = new
CustomResourceTypeListGrid(extendLocatorId("platformsList"));
@@ -308,6 +309,20 @@ public class ResourceTypeTreeView extends LocatableVLayout implements
Bookmarkab
@Override
protected Canvas getRollOverCanvas(Integer rowNum, Integer colNum) {
rollOverRecord = this.getRecord(rowNum);
+ String typeLocator = "unused";
+
+ // If locators are enabled (i.e. this is a selenium test env) ensure we have
a usable locator, so
+ // don't reuse the rollover canvas, create a new one for the current
type.
+ if (!SeleniumUtility.isUseDefaultIds()) {
+ typeLocator =
rollOverRecord.getAttribute(ResourceTypeTreeNodeBuilder.ATTRIB_PLUGIN) + "_"
+ +
rollOverRecord.getAttribute(ResourceTypeTreeNodeBuilder.ATTRIB_NAME);
+
+ if (null != rollOverCanvas) {
+ Canvas temp = rollOverCanvas;
+ rollOverCanvas = null;
+ temp.markForDestroy();
+ }
+ }
if (rollOverCanvas == null) {
rollOverCanvas = new HLayout(3);
@@ -315,7 +330,7 @@ public class ResourceTypeTreeView extends LocatableVLayout implements
Bookmarkab
rollOverCanvas.setWidth(50);
rollOverCanvas.setHeight(22);
- LocatableImgButton metricTemplateImg = new
LocatableImgButton(extendLocatorId("Metric_" + rowNum));
+ LocatableImgButton metricTemplateImg = new
LocatableImgButton(extendLocatorId("Metric_" + typeLocator));
metricTemplateImg.setShowDown(false);
metricTemplateImg.setShowRollOver(false);
metricTemplateImg.setLayoutAlign(Alignment.CENTER);
@@ -329,7 +344,7 @@ public class ResourceTypeTreeView extends LocatableVLayout implements
Bookmarkab
}
});
- LocatableImgButton alertTemplateImg = new
LocatableImgButton(extendLocatorId("Alert_" + rowNum));
+ LocatableImgButton alertTemplateImg = new
LocatableImgButton(extendLocatorId("Alert_" + typeLocator));
alertTemplateImg.setShowDown(false);
alertTemplateImg.setShowRollOver(false);
alertTemplateImg.setLayoutAlign(Alignment.CENTER);
commit a9c0a5e545b732a5da78f5935ec328a920e7d2f1
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Mon May 16 13:31:09 2011 -0400
[BZ 653496] for 64-bit Windows platforms, return "Win64", rather than
"Win32", for the value of the "OS Name" trait
(
https://bugzilla.redhat.com/show_bug.cgi?id=653496)
diff --git
a/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/PlatformComponent.java
b/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/PlatformComponent.java
index 9fc68ff..4cf56a3 100644
---
a/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/PlatformComponent.java
+++
b/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/PlatformComponent.java
@@ -82,10 +82,10 @@ public class PlatformComponent implements ResourceComponent,
ConfigurationFacet,
private static final String TRAIT_INDICATOR = "Trait.";
// these are the "property" names for all trait metrics
- private static final String TRAIT_HOSTNAME = TRAIT_INDICATOR + "hostname";
- private static final String TRAIT_OSNAME = TRAIT_INDICATOR + "osname";
- private static final String TRAIT_OSVERSION = TRAIT_INDICATOR +
"osversion";
- private static final String TRAIT_ARCH = TRAIT_INDICATOR + "sysarch";
+ protected static final String TRAIT_HOSTNAME = TRAIT_INDICATOR +
"hostname";
+ protected static final String TRAIT_OSNAME = TRAIT_INDICATOR + "osname";
+ protected static final String TRAIT_OSVERSION = TRAIT_INDICATOR +
"osversion";
+ protected static final String TRAIT_ARCH = TRAIT_INDICATOR + "sysarch";
protected ResourceContext resourceContext;
private SystemInfo sysinfo;
@@ -188,7 +188,7 @@ public class PlatformComponent implements ResourceComponent,
ConfigurationFacet,
return Double.NaN;
}
- private MeasurementDataTrait getMeasurementDataTrait(MeasurementScheduleRequest
request) {
+ protected MeasurementDataTrait getMeasurementDataTrait(MeasurementScheduleRequest
request) {
String name = request.getName();
MeasurementDataTrait trait = new MeasurementDataTrait(request, "?");
@@ -242,4 +242,9 @@ public class PlatformComponent implements ResourceComponent,
ConfigurationFacet,
throw new UnsupportedOperationException("Operation [" + name + "]
not supported on "
+ resourceContext.getResourceType() + ".");
}
+
+ public SystemInfo getSysinfo() {
+ return sysinfo;
+ }
+
}
\ No newline at end of file
diff --git
a/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/WindowsPlatformComponent.java
b/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/WindowsPlatformComponent.java
index 60f451a..aa8d2e8 100644
---
a/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/WindowsPlatformComponent.java
+++
b/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/WindowsPlatformComponent.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2011 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -37,6 +37,8 @@ import org.rhq.core.domain.content.transfer.DeployPackageStep;
import org.rhq.core.domain.content.transfer.DeployPackagesResponse;
import org.rhq.core.domain.content.transfer.RemovePackagesResponse;
import org.rhq.core.domain.content.transfer.ResourcePackageDetails;
+import org.rhq.core.domain.measurement.MeasurementDataTrait;
+import org.rhq.core.domain.measurement.MeasurementScheduleRequest;
import org.rhq.core.pluginapi.content.ContentFacet;
import org.rhq.core.pluginapi.content.ContentServices;
import org.rhq.core.pluginapi.inventory.ResourceContext;
@@ -47,6 +49,9 @@ import org.rhq.plugins.platform.win.WindowsSoftwareDelegate;
* @author Greg Hinkle
*/
public class WindowsPlatformComponent extends PlatformComponent implements ContentFacet
{
+
+ private static final String OS_NAME_WIN32 = "Win32";
+ private static final String OS_NAME_WIN64 = "Win64";
private final Log log = LogFactory.getLog(WindowsPlatformComponent.class);
private Win32EventLogDelegate eventLogDelegate;
@@ -113,4 +118,18 @@ public class WindowsPlatformComponent extends PlatformComponent
implements Conte
public InputStream retrievePackageBits(ResourcePackageDetails packageDetails) {
return null;
}
+
+ @Override
+ protected MeasurementDataTrait getMeasurementDataTrait(MeasurementScheduleRequest
request) {
+ MeasurementDataTrait trait = super.getMeasurementDataTrait(request);
+ // SIGAR returns "Win32" as the OS name for all Windows systems, even
64-bit ones, so add some special code
+ // to instead return "Win64" for 64-bit systems.
+ if (trait.getName().equals(TRAIT_OSNAME) &&
trait.getValue().equals(OS_NAME_WIN32)) {
+ if ("x64".equals(getSysinfo().getSystemArchitecture())) {
+ trait.setValue(OS_NAME_WIN64);
+ }
+ }
+ return trait;
+ }
+
}
commit 1bb8460dc7c2d2fca29b847aba8c7d0231b7855c
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Mon May 16 13:07:42 2011 -0400
[BZ 694660] fix several underlying bugs in the as5 plugin that were causing
https://bugzilla.redhat.com/show_bug.cgi?id=694660
diff --git a/modules/jopr/etc/jbas5-jnp-client/src/main/java/test/RmiClient.java
b/modules/jopr/etc/jbas5-jnp-client/src/main/java/test/RmiClient.java
index 685897b..76dade4 100644
--- a/modules/jopr/etc/jbas5-jnp-client/src/main/java/test/RmiClient.java
+++ b/modules/jopr/etc/jbas5-jnp-client/src/main/java/test/RmiClient.java
@@ -47,17 +47,27 @@ public class RmiClient
ComponentType localTxDataSourceType = new ComponentType("DataSource",
"LocalTx");
ManagedComponent defaultDSComponent =
managementView.getComponent("DefaultDS", localTxDataSourceType);
- ManagedProperty maxPoolSizeProp =
defaultDSComponent.getProperty("max-pool-size");
+ ManagedProperty maxPoolSizeProp =
defaultDSComponent.getProperty("query-timeout");
SimpleValueSupport maxPoolSizeValue =
(SimpleValueSupport)maxPoolSizeProp.getValue();
- System.err.println("original value: " + maxPoolSizeValue.getValue());
+ System.err.println("getValue(): " + maxPoolSizeValue.getValue());
+
+ System.err.println("setValue(33)");
+ maxPoolSizeValue.setValue(33);
+ managementView.updateComponent(defaultDSComponent);
+ managementView.load();
+ defaultDSComponent = managementView.getComponent("DefaultDS",
localTxDataSourceType);
+ maxPoolSizeProp = defaultDSComponent.getProperty("query-timeout");
+ maxPoolSizeValue = ((SimpleValueSupport)maxPoolSizeProp.getValue());
+ System.err.println("getValue(): " + maxPoolSizeValue.getValue());
+
+ System.err.println("setValue(null)");
maxPoolSizeValue.setValue(null);
managementView.updateComponent(defaultDSComponent);
-
managementView.load();
defaultDSComponent = managementView.getComponent("DefaultDS",
localTxDataSourceType);
- maxPoolSizeProp = defaultDSComponent.getProperty("max-pool-size");
+ maxPoolSizeProp = defaultDSComponent.getProperty("query-timeout");
maxPoolSizeValue = ((SimpleValueSupport)maxPoolSizeProp.getValue());
- System.err.println("new value: " + maxPoolSizeValue.getValue());
+ System.err.println("getValue(): " + maxPoolSizeValue.getValue());
}
}
diff --git
a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ManagedComponentComponent.java
b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ManagedComponentComponent.java
index 6d564ee..0e5f00a 100644
---
a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ManagedComponentComponent.java
+++
b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ManagedComponentComponent.java
@@ -148,7 +148,8 @@ public class ManagedComponentComponent extends
AbstractManagedComponent implemen
public Configuration loadResourceConfiguration() {
Configuration resourceConfig;
try {
- Map<String, ManagedProperty> managedProperties =
getManagedComponent().getProperties();
+ ManagedComponent managedComponent = getManagedComponent(true);
+ Map<String, ManagedProperty> managedProperties =
managedComponent.getProperties();
Map<String, PropertySimple> customProps =
ResourceComponentUtils.getCustomProperties(getResourceContext()
.getPluginConfiguration());
if (this.log.isDebugEnabled())
@@ -172,7 +173,7 @@ public class ManagedComponentComponent extends
AbstractManagedComponent implemen
Configuration resourceConfig = configurationUpdateReport.getConfiguration();
Configuration pluginConfig = getResourceContext().getPluginConfiguration();
try {
- ManagedComponent managedComponent = getManagedComponent();
+ ManagedComponent managedComponent = getManagedComponent(true);
Map<String, ManagedProperty> managedProperties =
managedComponent.getProperties();
Map<String, PropertySimple> customProps =
ResourceComponentUtils.getCustomProperties(pluginConfig);
if (this.log.isDebugEnabled())
diff --git
a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/adapter/api/AbstractPropertySimpleAdapter.java
b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/adapter/api/AbstractPropertySimpleAdapter.java
index 866ab89..d37c52f 100644
---
a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/adapter/api/AbstractPropertySimpleAdapter.java
+++
b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/adapter/api/AbstractPropertySimpleAdapter.java
@@ -1,6 +1,6 @@
/*
* Jopr Management Platform
- * Copyright (C) 2005-2009 Red Hat, Inc.
+ * Copyright (C) 2005-2011 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -48,36 +48,19 @@ public abstract class AbstractPropertySimpleAdapter implements
PropertyAdapter<P
public void populateMetaValueFromProperty(PropertySimple propSimple, MetaValue
metaValue,
PropertyDefinitionSimple propDefSimple)
{
- if (metaValue == null)
+ if (metaValue == null) {
throw new IllegalArgumentException("MetaValue to be populated is
null.");
- String value;
- if (propSimple == null || propSimple.getStringValue() == null)
- {
- // Value is null (i.e. prop is unset) - figure out what to use as a default
value.
- String defaultValue = propDefSimple.getDefaultValue();
- if (defaultValue != null)
- {
- log.debug("Simple property '" + propDefSimple.getName()
- + "' has a null value - setting inner value of
corresponding ManagedProperty's MetaValue to plugin-specified default ('"
- + defaultValue + "')...");
- value = defaultValue;
- }
- else
- {
- if (metaValue.getMetaType().isPrimitive())
- // If it's a primitive, don't mess with the MetaValue - just
let it keep whatever inner value it
- // currently has.
- return;
- // It's a non-primitive - set its value to null. In most cases, this
should tell the managed resource
- // to use its internal default.
- log.debug("Simple property '" + propDefSimple.getName()
- + "' has a null value - setting inner value of
corresponding ManagedProperty's MetaValue to null...");
- value = null;
- }
}
- else
- {
- value = propSimple.getStringValue();
+ String value = (propSimple != null) ? propSimple.getStringValue() : null;
+ if (value == null && metaValue.getMetaType().isPrimitive()) {
+ // For primitive types, if we set the value to null, the Profile Service will
set the value to 0, which
+ // is not good, so for such properties, we make sure to define a default
value in the plugin descriptor, so
+ // we can explicitly set the value to that default, rather than null, here.
+ value = propDefSimple.getDefaultValue();
+ if (value == null) {
+ log.warn("Plugin error: Managed property [" +
propDefSimple.getName()
+ + "] has a primitive type, but the corresponding RHQ
property definition does not provide a default value.");
+ }
}
setInnerValue(value, metaValue, propDefSimple);
}
diff --git a/modules/plugins/jboss-as-5/src/main/resources/META-INF/rhq-plugin.xml
b/modules/plugins/jboss-as-5/src/main/resources/META-INF/rhq-plugin.xml
index b88813c..40e2441 100644
--- a/modules/plugins/jboss-as-5/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/jboss-as-5/src/main/resources/META-INF/rhq-plugin.xml
@@ -406,7 +406,8 @@
displayName="Query Timeout"
type="integer"
units="seconds"
- required="false">
+ required="false"
+ defaultValue="0">
<c:description>
Any configured query timeout in seconds. A value of 0 means no timeout. The
default is 0.
</c:description>
commit 69527e20958f1b63720c8bc5d67d1251e9b262a1
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Mon May 16 18:12:53 2011 +0200
Fixing the apache hostnames tests - let's not assume that
InetAddress.getLocalHost() returns the loopback address and specifically require it.
diff --git
a/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/SnmpMappingTest.java
b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/SnmpMappingTest.java
index 0716ade..19fdb67 100644
--- a/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/SnmpMappingTest.java
+++ b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/SnmpMappingTest.java
@@ -86,7 +86,7 @@ public class SnmpMappingTest {
@BeforeClass
public void initExpectedResults() throws Exception {
- String localhost = InetAddress.getLocalHost().getHostName();
+ String localhost = InetAddress.getByName("127.0.0.1").getHostName();
for(int i = 0; i < EXPECTED_SNMP_NAMES.length; ++i) {
EXPECTED_SNMP_NAMES[i] =
EXPECTED_SNMP_NAMES[i].replaceAll("<<<LOCALHOST>>>",
localhost);
}
commit e4c0710027cc11a248a71b68b6e5edde9a7edc1f
Author: John Sanda <jsanda(a)redhat.com>
Date: Mon May 16 10:36:46 2011 -0400
Updating IntelliJ code formatting rules
diff --git a/etc/intellij-tools/rhq-style.xml b/etc/intellij-tools/rhq-style.xml
index 367e8fa..bdf5072 100644
--- a/etc/intellij-tools/rhq-style.xml
+++ b/etc/intellij-tools/rhq-style.xml
@@ -9,30 +9,33 @@
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
+ <option name="USE_RELATIVE_INDENTS" value="false" />
</value>
</option>
- <option name="CATCH_ON_NEW_LINE" value="false" />
- <option name="INDENT_CASE_FROM_SWITCH" value="false" />
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND"
value="999999" />
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND"
value="999999" />
<option name="IMPORT_LAYOUT_TABLE">
<value>
- <package name="java" withSubpackages="true" />
+ <package name="java" withSubpackages="true"
static="false" />
<emptyLine />
- <package name="javax" withSubpackages="true" />
+ <package name="javax" withSubpackages="true"
static="false" />
<emptyLine />
- <package name="com" withSubpackages="true" />
+ <package name="com" withSubpackages="true"
static="false" />
<emptyLine />
- <package name="org" withSubpackages="true" />
+ <package name="org" withSubpackages="true"
static="false" />
<emptyLine />
- <package name="org.jboss" withSubpackages="true" />
+ <package name="org.jboss" withSubpackages="true"
static="false" />
<emptyLine />
- <package name="org.rhq" withSubpackages="true" />
+ <package name="org.rhq" withSubpackages="true"
static="false" />
<emptyLine />
- <package name="" withSubpackages="true" />
+ <package name="" withSubpackages="true"
static="false" />
<emptyLine />
+ <package name="" withSubpackages="true"
static="true" />
</value>
</option>
+ <option name="JD_P_AT_EMPTY_LINES" value="false" />
+ <option name="HTML_DO_NOT_ALIGN_CHILDREN_OF_MIN_LINES"
value="500" />
+ <option name="INDENT_CASE_FROM_SWITCH" value="false" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="1" />
<option name="EXTENDS_LIST_WRAP" value="1" />
@@ -44,16 +47,25 @@
<option name="TERNARY_OPERATION_WRAP" value="1" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<option name="WRAP_COMMENTS" value="true" />
- <option name="JD_P_AT_EMPTY_LINES" value="false" />
- <option name="HTML_DO_NOT_ALIGN_CHILDREN_OF_MIN_LINES"
value="500" />
- <ADDITIONAL_INDENT_OPTIONS fileType="">
- <option name="INDENT_SIZE" value="4" />
+ <ADDITIONAL_INDENT_OPTIONS fileType="clj">
+ <option name="INDENT_SIZE" value="2" />
+ <option name="CONTINUATION_INDENT_SIZE" value="8" />
+ <option name="TAB_SIZE" value="2" />
+ <option name="USE_TAB_CHARACTER" value="false" />
+ <option name="SMART_TABS" value="false" />
+ <option name="LABEL_INDENT_SIZE" value="0" />
+ <option name="LABEL_INDENT_ABSOLUTE" value="false" />
+ <option name="USE_RELATIVE_INDENTS" value="false" />
+ </ADDITIONAL_INDENT_OPTIONS>
+ <ADDITIONAL_INDENT_OPTIONS fileType="groovy">
+ <option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
+ <option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="java">
<option name="INDENT_SIZE" value="4" />
@@ -63,6 +75,17 @@
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
+ <option name="USE_RELATIVE_INDENTS" value="false" />
+ </ADDITIONAL_INDENT_OPTIONS>
+ <ADDITIONAL_INDENT_OPTIONS fileType="js">
+ <option name="INDENT_SIZE" value="4" />
+ <option name="CONTINUATION_INDENT_SIZE" value="8" />
+ <option name="TAB_SIZE" value="4" />
+ <option name="USE_TAB_CHARACTER" value="false" />
+ <option name="SMART_TABS" value="false" />
+ <option name="LABEL_INDENT_SIZE" value="0" />
+ <option name="LABEL_INDENT_ABSOLUTE" value="false" />
+ <option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="jsp">
<option name="INDENT_SIZE" value="4" />
@@ -72,6 +95,17 @@
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
+ <option name="USE_RELATIVE_INDENTS" value="false" />
+ </ADDITIONAL_INDENT_OPTIONS>
+ <ADDITIONAL_INDENT_OPTIONS fileType="py">
+ <option name="INDENT_SIZE" value="4" />
+ <option name="CONTINUATION_INDENT_SIZE" value="8" />
+ <option name="TAB_SIZE" value="4" />
+ <option name="USE_TAB_CHARACTER" value="false" />
+ <option name="SMART_TABS" value="false" />
+ <option name="LABEL_INDENT_SIZE" value="0" />
+ <option name="LABEL_INDENT_ABSOLUTE" value="false" />
+ <option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="sql">
<option name="INDENT_SIZE" value="2" />
@@ -81,6 +115,7 @@
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
+ <option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="xml">
<option name="INDENT_SIZE" value="4" />
@@ -90,6 +125,17 @@
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
+ <option name="USE_RELATIVE_INDENTS" value="false" />
+ </ADDITIONAL_INDENT_OPTIONS>
+ <ADDITIONAL_INDENT_OPTIONS fileType="yml">
+ <option name="INDENT_SIZE" value="2" />
+ <option name="CONTINUATION_INDENT_SIZE" value="8" />
+ <option name="TAB_SIZE" value="4" />
+ <option name="USE_TAB_CHARACTER" value="false" />
+ <option name="SMART_TABS" value="false" />
+ <option name="LABEL_INDENT_SIZE" value="0" />
+ <option name="LABEL_INDENT_ABSOLUTE" value="false" />
+ <option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
</code_scheme>
commit dfce189ee21ec257b9e01a089b8fdb15ba9054fd
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Mon May 16 13:13:25 2011 +0200
BZ 705004 - Made the vhost upgrade method just throw an exception on failed upgrade to
better follow the upgrade workflow and to make recovery from that condition possible in
some cases.
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceComponent.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceComponent.java
index 8277f8c..63d5dbf 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceComponent.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceComponent.java
@@ -77,7 +77,6 @@ public class ApacheVirtualHostServiceComponent implements
ResourceComponent<Apac
public static final String URL_CONFIG_PROP = "url";
public static final String MAIN_SERVER_RESOURCE_KEY = "MainServer";
- public static final String FAILED_UPGRADE_RESOURCE_KEY_PREFIX =
"FailedUpgrade";
public static final String RESPONSE_TIME_LOG_FILE_CONFIG_PROP =
ResponseTimeConfiguration.RESPONSE_TIME_LOG_FILE_CONFIG_PROP;
public static final String RESPONSE_TIME_URL_EXCLUDES_CONFIG_PROP =
ResponseTimeConfiguration.RESPONSE_TIME_URL_EXCLUDES_CONFIG_PROP;
@@ -99,14 +98,6 @@ public class ApacheVirtualHostServiceComponent implements
ResourceComponent<Apac
public static final String RESOURCE_TYPE_NAME = "Apache Virtual Host";
public void start(ResourceContext<ApacheServerComponent> resourceContext)
throws Exception {
- if
(resourceContext.getResourceKey().startsWith(FAILED_UPGRADE_RESOURCE_KEY_PREFIX)) {
- throw new IllegalStateException(
- "The apache plugin failed to upgrade this virtual host from a
previous version. "
- + "A new virtual host resource will be (or has been) discovered
that corresponds to this resource but it was not possible to "
- + "safely and deterministically find a match between these two
(due to ambiguous identification of virtual hosts "
- + "in the previous version of the plugin). This resource is now
defunct and you can uninventory it.");
- }
-
this.resourceContext = resourceContext;
Configuration pluginConfig = this.resourceContext.getPluginConfiguration();
String url = pluginConfig.getSimple(URL_CONFIG_PROP).getStringValue();
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
index 032814b..d6a36fb 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
@@ -253,16 +253,10 @@ public class ApacheVirtualHostServiceDiscoveryComponent implements
ResourceDisco
Set<VHostSpec> matchingVhosts = possibleMatchesPerRK.get(resourceKey);
if (matchingVhosts == null || matchingVhosts.size() != 1) {
- newResourceKey =
ApacheVirtualHostServiceComponent.FAILED_UPGRADE_RESOURCE_KEY_PREFIX + "_" +
resourceKey
- + "_" + UUID.randomUUID().toString();
- log.info("Failed to uniquely identify the vhost from the old-style
resource key. The old resource key is '"
+ throw new IllegalArgumentException("Failed to uniquely identify the
vhost from the old-style resource key. The old resource key is '"
+ resourceKey
- + "' which can be matched with the following new-style resource
keys: "
- + matchingVhosts
- + ". The match could not be established and the resource key was
reset to '"
- + newResourceKey
- + "' so that this vhost resource never starts up again. This is
to prevent collisions with the discoveries made "
- + "by this version of the plugin.");
+ + "' which couldn't be matched with any of the following
possible new-style resource keys: "
+ + matchingVhosts);
} else {
VHostSpec vhost = matchingVhosts.iterator().next();
if (vhost == null) {
commit e265710deb2fa6abb4516ad8191c6257e3a17afb
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Mon May 16 13:12:29 2011 +0200
BZ 705004 - hardened the vhost upgrade process by:
a) doing a cross-check that the SNMP WWW Service Index value actually
corresponds to the resource we're upgrading and if not fall back to
resource key matching.
b) Use the actual code from RHQ 3 codebase to determine the possible
legacy resource keys. This is to reduce the number of possible
collisions.
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerComponent.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerComponent.java
index 309ef43..92d51da 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerComponent.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerComponent.java
@@ -443,7 +443,7 @@ public class ApacheServerComponent implements
AugeasRHQComponent<PlatformCompone
if (!matcher.matches())
throw new Exception("Wrong format of virtual host resource
name. The right format is Address:Port.");
- addr = getAddressUtility().getVirtualHostSampleAddress(parserTree,
vhostDefs[0], serverName);
+ addr = getAddressUtility().getVirtualHostSampleAddress(parserTree,
vhostDefs[0], serverName, false);
} catch (Exception e) {
report.setStatus(CreateResourceStatus.FAILURE);
report.setErrorMessage("Wrong format of virtual host resource
name.");
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
index c7272ad..032814b 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
@@ -23,7 +23,6 @@ import java.net.InetAddress;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
@@ -46,10 +45,11 @@ import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
import org.rhq.core.pluginapi.upgrade.ResourceUpgradeContext;
import org.rhq.core.pluginapi.upgrade.ResourceUpgradeFacet;
-import org.rhq.plugins.apache.parser.ApacheDirective;
import org.rhq.plugins.apache.parser.ApacheDirectiveTree;
import org.rhq.plugins.apache.util.HttpdAddressUtility;
import org.rhq.plugins.apache.util.RuntimeApacheConfiguration;
+import org.rhq.plugins.apache.util.VHostSpec;
+import org.rhq.plugins.apache.util.VirtualHostLegacyResourceKeyUtil;
import org.rhq.plugins.apache.util.HttpdAddressUtility.Address;
import org.rhq.plugins.www.snmp.SNMPException;
import org.rhq.plugins.www.snmp.SNMPSession;
@@ -102,7 +102,7 @@ public class ApacheVirtualHostServiceDiscoveryComponent implements
ResourceDisco
Configuration pluginConfiguration = context.getDefaultPluginConfiguration();
- Address address =
serverComponent.getAddressUtility().getVirtualHostSampleAddress(tree, firstAddress,
vhost.serverName);
+ Address address =
serverComponent.getAddressUtility().getVirtualHostSampleAddress(tree, firstAddress,
vhost.serverName, false);
if (address != null) {
String scheme = address.scheme;
String hostToPing = address.host;
@@ -169,6 +169,8 @@ public class ApacheVirtualHostServiceDiscoveryComponent implements
ResourceDisco
serverComponent.getCurrentBinaryInfo(), serverComponent.getModuleNames(),
false);
List<VHostSpec> vhosts = VHostSpec.detect(tree);
+ VirtualHostLegacyResourceKeyUtil legacyResourceKeyUtil = new
VirtualHostLegacyResourceKeyUtil(serverComponent, tree);
+
//first, let's see if the inventoried resource has the snmpWwwServiceIndex
property set
//if it does, use that to determine what vhost this corresponds to.
@@ -188,10 +190,17 @@ public class ApacheVirtualHostServiceDiscoveryComponent implements
ResourceDisco
if (snmpServiceIndex > 0) {
//yay, we can use the snmpService index to determine which vhost
we're dealing with
if (snmpServiceIndex == 1) {
- newResourceKey =
ApacheVirtualHostServiceComponent.MAIN_SERVER_RESOURCE_KEY;
+ //k, looks the vhost was representing the main server. Let's
do a cross-check.
+ List<String> legacyResourceKeys =
legacyResourceKeyUtil.getLegacyMainServerResourceKeys();
+ if (legacyResourceKeys.contains(resourceKey)) {
+ newResourceKey =
ApacheVirtualHostServiceComponent.MAIN_SERVER_RESOURCE_KEY;
+ } else {
+ log.debug("The cross-check of the SNMP WWW Service Index
value and resource key failed for virtual host with old resource key: "
+ + resourceKey + ". The upgrade will continue using
resource key matching.");
+ }
} else {
if (vhosts.size() + 1 < snmpServiceIndex) {
- log.warn("The "
+ log.debug("The "
+ LEGACY_SNMP_SERVICE_INDEX_CONFIG_PROP
+ " property contains incorrect value ("
+ snmpServiceIndex
@@ -202,7 +211,16 @@ public class ApacheVirtualHostServiceDiscoveryComponent implements
ResourceDisco
//the SNMP indices are in the reverse order of the
definitions in the config files
//+1, where the main server is always on index 1.
VHostSpec vhost = vhosts.get(vhosts.size() - snmpServiceIndex
+ 1);
- newResourceKey = createResourceKey(vhost.serverName,
vhost.hosts);
+
+ //right, let's do a cross-check before we actually create
the resource key so
+ //that we catch user-generated errors.
+ List<String> legacyResourceKeys =
legacyResourceKeyUtil.getLegacyVirtualHostResourceKeys(vhost);
+ if (legacyResourceKeys.contains(resourceKey)) {
+ newResourceKey = createResourceKey(vhost.serverName,
vhost.hosts);
+ } else {
+ log.debug("The cross-check of the SNMP WWW Service
Index value and resource key failed for virtual host with old resource key: "
+ + resourceKey + ". The upgrade will continue
using resource key matching.");
+ }
}
}
} else {
@@ -219,20 +237,19 @@ public class ApacheVirtualHostServiceDiscoveryComponent implements
ResourceDisco
return report;
}
-
+
Map<String, Set<VHostSpec>> possibleMatchesPerRK = new
HashMap<String, Set<VHostSpec>>();
- for (VHostSpec vhost : vhosts) {
- String[] legacyResourceKeys = createLegacyResourceKeys(serverComponent, tree,
vhost.serverName, vhost.hosts);
+ for (VHostSpec vhost : vhosts) {
+ List<String> legacyResourceKeys =
legacyResourceKeyUtil.getLegacyVirtualHostResourceKeys(vhost);
- addPossibleRKMatch(legacyResourceKeys[0], vhost, possibleMatchesPerRK);
- addPossibleRKMatch(legacyResourceKeys[1], vhost, possibleMatchesPerRK);
+ for(String legacyRK : legacyResourceKeys) {
+ addPossibleRKMatch(legacyRK, vhost, possibleMatchesPerRK);
+ }
}
- String[] mainServerRKs = createLegacyMainServerResourceKey(serverComponent,
tree);
- if (mainServerRKs[0] != null) {
- addPossibleRKMatch(mainServerRKs[0], null, possibleMatchesPerRK);
+ for(String legacyRK : legacyResourceKeyUtil.getLegacyMainServerResourceKeys()) {
+ addPossibleRKMatch(legacyRK, null, possibleMatchesPerRK);
}
- addPossibleRKMatch(mainServerRKs[1], null, possibleMatchesPerRK);
Set<VHostSpec> matchingVhosts = possibleMatchesPerRK.get(resourceKey);
if (matchingVhosts == null || matchingVhosts.size() != 1) {
@@ -316,113 +333,6 @@ public class ApacheVirtualHostServiceDiscoveryComponent implements
ResourceDisco
return keyBuilder.toString();
}
- /**
- * This returns the 2 possible resource keys that a vhost could have had.
- *
- * The first element in the array is the resource key as it would be reported
- * by the SNMP module. This would apply if we were upgrading from RHQ 1.3 or
- * from RHQ 1.4 with the resource using the SNMP module.
- * <p>
- * The second element in the array is the resource key that would have been
- * returned by RHQ 1.4 if the SNMP module wasn't used.
- *
- * @param serverComponent the parent server component
- * @param serverName the servername of the vhost
- * @param hosts the list of hosts. This has to have at least 1 element
- * @return an array of possible resource keys as described
- */
- private static String[] createLegacyResourceKeys(ApacheServerComponent
serverComponent, ApacheDirectiveTree runtimeConfig, String serverName, List<String>
hosts) {
- String[] ret = new String[2];
- HttpdAddressUtility.Address internalAddress =
serverComponent.getAddressUtility().getHttpdInternalVirtualHostAddressRepresentation(runtimeConfig,
hosts.get(0), serverName);
- ret[0] = internalAddress.host + ":" + internalAddress.port;
-
- //this is the procedure RHQ 1.4 used to determine the resource key
- String host = hosts.get(0);
- HttpdAddressUtility.Address hostAddr = HttpdAddressUtility.Address.parse(host);
- if (serverName != null) {
- HttpdAddressUtility.Address serverAddr =
HttpdAddressUtility.Address.parse(serverName);
- hostAddr.host = serverAddr.host;
- }
-
- try {
- InetAddress hostName = InetAddress.getByName(hostAddr.host);
- hostAddr.host = hostName.getHostName();
- } catch (UnknownHostException e) {
- log.debug("Host " + hostAddr.host + " is not
resolvable.", e);
- }
-
- ret[1] = hostAddr.host + ":" + hostAddr.port;
-
- return ret;
- }
-
- /**
- * This returns the 2 possible legacy resource keys for the main server:
- *
- * 1) The URL as specified in the parent component (this can be null)
- * 2) The host:port as would be returned from the SNMP module
- * ( 3) MainServer could be returned as well, but this is handled otherwise in the
upgrade method )
- *
- * @param serverComponent
- * @return
- */
- private static String[] createLegacyMainServerResourceKey(ApacheServerComponent
serverComponent, ApacheDirectiveTree runtimeConfig) {
- String[] ret = new String[2];
-
- ret[0] = serverComponent.getServerUrl();
-
- if (serverComponent.getServerUrl() != null) {
- try {
- URI mainServerUri = new URI(serverComponent.getServerUrl());
- String host = mainServerUri.getHost();
- int port = mainServerUri.getPort();
- if (port == -1) {
- port = 80;
- }
-
- ret[0] = host + ":" + port;
- } catch (URISyntaxException e) {
- }
- }
-
- HttpdAddressUtility.Address addr =
serverComponent.getAddressUtility().getHttpdInternalMainServerAddressRepresentation(runtimeConfig);
- ret[1] = addr.host + ":" + addr.port;
-
- return ret;
- }
-
- private static class VHostSpec {
- public String serverName;
- public List<String> hosts;
-
- public static List<VHostSpec> detect(ApacheDirectiveTree config) {
- List<ApacheDirective> virtualHosts =
config.search("/<VirtualHost");
-
- List<VHostSpec> ret = new
ArrayList<VHostSpec>(virtualHosts.size());
-
- for(ApacheDirective dir : virtualHosts) {
- ret.add(new VHostSpec(dir));
- }
-
- return ret;
- }
-
- public VHostSpec(ApacheDirective vhostDirective) {
- hosts = vhostDirective.getValues();
-
- List<ApacheDirective> serverNames =
vhostDirective.getChildByName("ServerName");
- serverName = null;
- if (serverNames.size() > 0) {
- serverName = serverNames.get(serverNames.size() -
1).getValuesAsString();
- }
- }
-
- @Override
- public String toString() {
- return createResourceKey(serverName, hosts);
- }
- }
-
private static void addPossibleRKMatch(String resourceKey, VHostSpec vhost,
Map<String, Set<VHostSpec>> possibleMatches) {
Set<VHostSpec> matches = possibleMatches.get(resourceKey);
if (matches == null) {
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
index c7d2328..abd6dd9 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
@@ -322,14 +322,20 @@ public enum HttpdAddressUtility {
* @param ag the augeas tree of the httpd configuration
* @param virtualHost the port or address:port of the virtual host
* @param serverName the server name for the namebased virtual hosts (or null if the
virtual host is ip based)
+ * @param legacyWildcardHostHandling use the legacy handling of wildcard hosts. This
should always be false unless you are calling this method
+ * from the code generating the legacy resource keys during vhost upgrade
* @return the address on which the virtual host can be accessed or null on error
*/
- public Address getVirtualHostSampleAddress(ApacheDirectiveTree ag, String
virtualHost, String serverName) {
+ public Address getVirtualHostSampleAddress(ApacheDirectiveTree ag, String
virtualHost, String serverName, boolean legacyWildcardHostHandling) {
try {
Address addr = Address.parse(virtualHost);
if (addr.isHostDefault() || addr.isHostWildcard()) {
Address serverAddr = null;
- serverAddr = getMainServerSampleAddress(ag, null, addr.port);
+ if (legacyWildcardHostHandling) {
+ serverAddr = getLocalhost(addr.port);
+ } else {
+ serverAddr = getMainServerSampleAddress(ag, null, addr.port);
+ }
if (serverAddr == null)
return null;
addr.host = serverAddr.host;
@@ -461,7 +467,7 @@ public enum HttpdAddressUtility {
* If this flag is set to true, this method takes that into account.
* @return
*/
- private static boolean isAddressConforming(Address listen, String limitingHost, int
limitingPort, boolean snmpModuleCompatibleMode) {
+ public static boolean isAddressConforming(Address listen, String limitingHost, int
limitingPort, boolean snmpModuleCompatibleMode) {
if (Address.DEFAULT_HOST.equals(limitingHost) ||
Address.WILDCARD.equals(limitingHost)) {
limitingHost = null;
}
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/VHostSpec.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/VHostSpec.java
new file mode 100644
index 0000000..0e269ee
--- /dev/null
+++ b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/VHostSpec.java
@@ -0,0 +1,90 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2011 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.plugins.apache.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.rhq.plugins.apache.ApacheVirtualHostServiceDiscoveryComponent;
+import org.rhq.plugins.apache.parser.ApacheDirective;
+import org.rhq.plugins.apache.parser.ApacheDirectiveTree;
+
+public class VHostSpec {
+ public String serverName;
+ public List<String> hosts;
+
+ public static List<VHostSpec> detect(ApacheDirectiveTree config) {
+ List<ApacheDirective> virtualHosts =
config.search("/<VirtualHost");
+
+ List<VHostSpec> ret = new ArrayList<VHostSpec>(virtualHosts.size());
+
+ for(ApacheDirective dir : virtualHosts) {
+ ret.add(new VHostSpec(dir));
+ }
+
+ return ret;
+ }
+
+ public VHostSpec(ApacheDirective vhostDirective) {
+ hosts = new ArrayList<String>(vhostDirective.getValues());
+
+ List<ApacheDirective> serverNames =
vhostDirective.getChildByName("ServerName");
+ serverName = null;
+ if (serverNames.size() > 0) {
+ serverName = serverNames.get(serverNames.size() - 1).getValuesAsString();
+ }
+ }
+
+ @Override
+ public String toString() {
+ return ApacheVirtualHostServiceDiscoveryComponent.createResourceKey(serverName,
hosts);
+ }
+
+ @Override
+ public int hashCode() {
+ int ret = serverName != null ? serverName.hashCode() : 1;
+ for(String host : hosts) {
+ ret = 31 * ret * host.hashCode();
+ }
+
+ return ret;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+
+ if (!(o instanceof VHostSpec)) {
+ return false;
+ }
+
+ VHostSpec other = (VHostSpec) o;
+
+ boolean serverNameEqual = serverName == null ? other.serverName == null :
serverName.equals(other.serverName);
+
+ if (!serverNameEqual) {
+ return false;
+ }
+
+ return hosts.equals(other.hosts);
+ }
+}
\ No newline at end of file
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/VirtualHostLegacyResourceKeyUtil.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/VirtualHostLegacyResourceKeyUtil.java
new file mode 100644
index 0000000..6c8436e
--- /dev/null
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/VirtualHostLegacyResourceKeyUtil.java
@@ -0,0 +1,284 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2011 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.plugins.apache.util;
+
+import java.net.InetAddress;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.rhq.plugins.apache.ApacheServerComponent;
+import org.rhq.plugins.apache.ApacheVirtualHostServiceComponent;
+import org.rhq.plugins.apache.parser.ApacheDirectiveTree;
+
+/**
+ * A helper class to create legacy resource keys for vhosts.
+ *
+ * @author Lukas Krejci
+ */
+public class VirtualHostLegacyResourceKeyUtil {
+
+ private List<VHostSpec> vhosts;
+ private List<HttpdAddressUtility.Address> snmpLikeReport;
+ private HttpdAddressUtility addressUtility;
+ private ApacheDirectiveTree runtimeConfig;
+ private ApacheServerComponent serverComponent;
+
+ public VirtualHostLegacyResourceKeyUtil(ApacheServerComponent serverComponent,
ApacheDirectiveTree runtimeConfig) {
+ this.runtimeConfig = runtimeConfig;
+ this.addressUtility = serverComponent.getAddressUtility();
+ this.serverComponent = serverComponent;
+
+ vhosts = VHostSpec.detect(runtimeConfig);
+ snmpLikeReport = new ArrayList<HttpdAddressUtility.Address>();
+
snmpLikeReport.add(addressUtility.getHttpdInternalMainServerAddressRepresentation(runtimeConfig));
+ for(VHostSpec vhost : vhosts) {
+ HttpdAddressUtility.Address snmpRecord =
addressUtility.getHttpdInternalVirtualHostAddressRepresentation(runtimeConfig,
vhost.hosts.get(0), vhost.serverName);
+ snmpLikeReport.add(snmpRecord);
+ }
+ }
+
+ /**
+ * This creates a list of possible resource keys for the main server.
+ * <p>
+ * This uses the algoritms used in the RHQ 3 codebase and returns both the resource
key
+ * that would be generated wihout SNMP support and with it.
+ * <p>
+ * The returned list contains either 1 or 2 elements. The first element is always the
resource
+ * key as it would be generated without SNMP support. The second element is the
resource key as
+ * it would be derived from the SNMP record. If the legacy algorithm wouldn't be
able to
+ * deduce the resource key from SNMP (which could happen), the second element
wouldn't be present
+ * in the resulting list.
+ * .
+ * @return possible resource keys of the main server.
+ */
+ public List<String> getLegacyMainServerResourceKeys() {
+ String mainServerUrl = serverComponent.getServerUrl();
+
+ String key = null;
+
+ if (mainServerUrl != null && !"null".equals(mainServerUrl)) {
+ try {
+ URI mainServerUri = new URI(mainServerUrl);
+ String host = mainServerUri.getHost();
+ int port = mainServerUri.getPort();
+ if (port == -1) {
+ port = 80;
+ }
+
+ key = host + ":" + port;
+ } catch (URISyntaxException e) {
+ //hmm.. strange
+ }
+ } else {
+ key = ApacheVirtualHostServiceComponent.MAIN_SERVER_RESOURCE_KEY;
+ }
+
+ String snmpKey = getSNMPResourceKey(key);
+
+ String[] ret = new String[snmpKey == null ? 1 : 2];
+
+ ret[0] = key;
+ if (snmpKey != null) {
+ ret[1] = snmpKey;
+ }
+
+ return Arrays.asList(ret);
+ }
+
+ /**
+ * Returns a list of possible resource keys that the RHQ 3 code could generate for
the specified
+ * vhost.
+ * <p>
+ * As with {@link #getLegacyMainServerResourceKeys()} the resulting list will contain
either 1 or
+ * 2 elements depending on the ability of the legacy algorithm to deduce the resource
key from SNMP.
+ *
+ * @param vhost
+ * @return the possible vhosts
+ */
+ public List<String> getLegacyVirtualHostResourceKeys(VHostSpec vhost) {
+ String host = vhost.hosts.get(0);
+ HttpdAddressUtility.Address hostAddr = HttpdAddressUtility.Address.parse(host);
+ if (vhost.serverName != null) {
+ HttpdAddressUtility.Address serverAddr =
HttpdAddressUtility.Address.parse(vhost.serverName);
+ hostAddr.host = serverAddr.host;
+ }
+
+ //the SNMP module seems to resolve the IPs to hostnames.
+ try {
+ InetAddress hostName = InetAddress.getByName(hostAddr.host);
+ hostAddr.host = hostName.getHostName();
+ } catch (UnknownHostException e) {
+ }
+
+ String key = hostAddr.host + ":" + hostAddr.port;
+
+ String snmpKey = getSNMPResourceKey(key);
+
+ String[] ret = new String[snmpKey == null ? 1 : 2];
+ ret[0] = key;
+
+ if (snmpKey != null) {
+ ret[1] = snmpKey;
+ }
+
+ return Arrays.asList(ret);
+ }
+
+ private String getSNMPResourceKey(String nonSnmpResourceKey) {
+ int idx = getMatchingWwwServiceIndex(nonSnmpResourceKey);
+
+ if (idx < 0) {
+ return null;
+ } else {
+ HttpdAddressUtility.Address snmpRecord = snmpLikeReport.get(idx);
+ return snmpRecord.host + ":" + snmpRecord.port;
+ }
+ }
+
+ /**
+ * This is the adaptation of the matching algoritm that was used in the
ApacheVirtualHostServiceComponent
+ * to match a vhost to an SNMP index based on its resource key.
+ *
+ * @param resourceKey
+ * @return
+ */
+ private int getMatchingWwwServiceIndex(String resourceKey) {
+ int ret = -1;
+
+ //figure out the servername and addresses of this virtual host
+ //from the resource key.
+ String vhostServerName = null;
+ String[] vhostAddressStrings = null;
+ int pipeIdx = resourceKey.indexOf('|');
+ if (pipeIdx >= 0) {
+ vhostServerName = resourceKey.substring(0, pipeIdx);
+ }
+ vhostAddressStrings = resourceKey.substring(pipeIdx + 1).split(" ");
+
+ //convert the vhost addresses into fully qualified ip/port addresses
+ List<HttpdAddressUtility.Address> vhostAddresses = new
ArrayList<HttpdAddressUtility.Address>(
+ vhostAddressStrings.length);
+
+ if (vhostAddressStrings.length == 1 &&
ApacheVirtualHostServiceComponent.MAIN_SERVER_RESOURCE_KEY.equals(vhostAddressStrings[0]))
{
+ HttpdAddressUtility.Address serverAddr =
addressUtility.getMainServerSampleAddress(runtimeConfig, null, 0);
+ if (serverAddr != null) {
+ vhostAddresses.add(serverAddr);
+ }
+ } else {
+ for (int i = 0; i < vhostAddressStrings.length; ++i) {
+ HttpdAddressUtility.Address vhostAddr =
addressUtility.getVirtualHostSampleAddress(runtimeConfig, vhostAddressStrings[i],
+ vhostServerName, true);
+ if (vhostAddr != null) {
+ vhostAddresses.add(vhostAddr);
+ } else {
+ //this is not to choke on the old style resource keys for the main
server. without this, we'd never be able
+ //to match the main server with its snmp index below.
+ HttpdAddressUtility.Address addr =
HttpdAddressUtility.Address.parse(vhostAddressStrings[i]);
+ vhostAddr = addressUtility.getMainServerSampleAddress(runtimeConfig,
addr.host, addr.port);
+ if (vhostAddr != null) {
+ vhostAddresses.add(vhostAddr);
+ }
+ }
+ }
+ }
+
+ //finding the snmp index that corresponds to the address(es) of the vhost
isn't that simple
+ //because the snmp module in apache always resolves the IPs to hostnames.
+ //on the other hand, the resource key tries to be more accurate about what a
+ //vhost can actually be represented as. A vhost is represented by at most 1
hostname (i.e. ServerName)
+ //and possibly multiple IP addresses.
+ int bestMatchRate = 0;
+
+ int idx = 0;
+ for(HttpdAddressUtility.Address snmpAddress : snmpLikeReport) {
+
+ int matchRate = matchRate(vhostAddresses, snmpAddress);
+ if (matchRate > bestMatchRate) {
+ ret = idx;
+ bestMatchRate = matchRate;
+ }
+
+ ++idx;
+ }
+
+ return ret;
+ }
+
+ private static int matchRate(List<HttpdAddressUtility.Address> addresses,
HttpdAddressUtility.Address addressToCheck) {
+ for(HttpdAddressUtility.Address a : addresses) {
+ if (HttpdAddressUtility.isAddressConforming(addressToCheck, a.host, a.port,
true)) {
+ return 3;
+ }
+ }
+
+ //try to get the IP of the address to check
+ InetAddress[] ipAddresses;
+ try {
+ ipAddresses = InetAddress.getAllByName(addressToCheck.host);
+ for(InetAddress ip : ipAddresses) {
+ HttpdAddressUtility.Address newCheck = new
HttpdAddressUtility.Address(ip.getHostAddress(), addressToCheck.port);
+
+ for(HttpdAddressUtility.Address a : addresses) {
+ if (HttpdAddressUtility.isAddressConforming(newCheck, a.host, a.port,
true)) {
+ return 2;
+ }
+ }
+ }
+ } catch (UnknownHostException e) {
+ return 0;
+ }
+
+ //because of the lack of documentation on the SNMP module, we assumed
+ //some wrong things in the past.. this is one of them...
+ int addressPort = addressToCheck.port;
+ if (addressPort == 80) {
+ addressPort = 0;
+ }
+
+ //ok, try the hardest...
+ for(HttpdAddressUtility.Address listAddress: addresses) {
+ int listPort = listAddress.port;
+ if (listPort == 80) {
+ listPort = 0;
+ }
+
+ InetAddress[] listAddresses;
+ try {
+ listAddresses = InetAddress.getAllByName(listAddress.host);
+ } catch (UnknownHostException e) {
+ return 0;
+ }
+
+ for (InetAddress listInetAddr : listAddresses) {
+ for (InetAddress ip : ipAddresses) {
+ if (ip.equals(listInetAddr) && addressPort == listPort) {
+ return 1;
+ }
+ }
+ }
+ }
+
+ return 0;
+ }
+}
commit 551678a46f8f5f1461716d7f91106b6fd37f2c92
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Fri May 13 12:53:13 2011 +0200
PERF - don't compile the regex patterns each time we instantiate a directive
Pattern class is immutable and therefore thread safe, there's no need
to initialize in each ApacheDirective instance (which we create a lot of).
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/parser/ApacheDirective.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/parser/ApacheDirective.java
index ae8e23e..ae2f025 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/parser/ApacheDirective.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/parser/ApacheDirective.java
@@ -14,12 +14,12 @@ public class ApacheDirective implements Cloneable {
private boolean isComment;
private static final String WS = "[ \t]*";
private static final String WORD =
"\"(?:[^\"\n]|\\\")*\"|'(?:[^'\n]|\\\')*'|[^'\"
\t\n]+";
- private static final String DIRECTIVE_PATTERN = WS + "(" + WORD +
")" + WS;
- private static final String COMMENT_PATTERN="^[\t ]*#.*+$";
+ private static final String DIRECTIVE_REGEX = WS + "(" + WORD +
")" + WS;
+ private static final String COMMENT_REGEX="^[\t ]*#.*+$";
private boolean updated=false;
- private final Pattern directivePattern = Pattern.compile(DIRECTIVE_PATTERN);
- private final Pattern commentPattern = Pattern.compile(COMMENT_PATTERN);
+ private static final Pattern DIRECTIVE_PATTERN = Pattern.compile(DIRECTIVE_REGEX);
+ private static final Pattern COMMENT_PATTERN = Pattern.compile(COMMENT_REGEX);
private List<ApacheDirective> childNodes;
private ApacheDirective parentNode;
private String file;
@@ -33,7 +33,7 @@ public class ApacheDirective implements Cloneable {
values = new ArrayList<String>();
childNodes = new ArrayList<ApacheDirective>();
- Matcher matcher = commentPattern.matcher(directive);
+ Matcher matcher = COMMENT_PATTERN.matcher(directive);
if (matcher.matches()){
isComment = true;
values.add(directive);
@@ -43,7 +43,7 @@ public class ApacheDirective implements Cloneable {
boolean updated = true;
while (updated & startIndex < directive.length()){
updated = false;
- Matcher m = directivePattern.matcher(directive);
+ Matcher m = DIRECTIVE_PATTERN.matcher(directive);
while (m.find(startIndex)) {
for (int i = 1; i <= m.groupCount(); i++) {
String val = m.group(i);
commit 6b9629ab665e458076993e30b73c68a222937ad5
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Mon May 16 13:10:48 2011 +0200
BZ-550046 (httpd) new virtual host creation fails if Resource Name is string.
- Resource name format for created virtual hosts is Address:Port.
- updated error messages
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerComponent.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerComponent.java
index ca89fea..309ef43 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerComponent.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerComponent.java
@@ -22,12 +22,12 @@ import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
@@ -38,6 +38,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+
import org.rhq.augeas.AugeasProxy;
import org.rhq.augeas.config.AugeasModuleConfig;
import org.rhq.augeas.node.AugeasNode;
@@ -45,7 +46,6 @@ import org.rhq.augeas.tree.AugeasTree;
import org.rhq.augeas.util.Glob;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
-import org.rhq.core.domain.configuration.PluginConfigurationUpdate;
import org.rhq.core.domain.configuration.Property;
import org.rhq.core.domain.configuration.PropertyList;
import org.rhq.core.domain.configuration.PropertyMap;
@@ -438,6 +438,11 @@ public class ApacheServerComponent implements
AugeasRHQComponent<PlatformCompone
ApacheParser parser = new
ApacheParserImpl(parserTree,getServerRoot().getAbsolutePath());
ApacheConfigReader.buildTree(getHttpdConfFile().getAbsolutePath(),
parser);
+ Pattern virtualHostPattern =
Pattern.compile(".+:([\\d]+|\\*)");
+ Matcher matcher = virtualHostPattern.matcher(vhostDefs[0]);
+ if (!matcher.matches())
+ throw new Exception("Wrong format of virtual host resource
name. The right format is Address:Port.");
+
addr = getAddressUtility().getVirtualHostSampleAddress(parserTree,
vhostDefs[0], serverName);
} catch (Exception e) {
report.setStatus(CreateResourceStatus.FAILURE);
commit 4bdfdfa198868d8e52b90a398843ddb058cc7d25
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Thu May 12 12:40:23 2011 +0200
BZ 694476 - improved module detection by assuming that the module is not loaded
if we don't know the module-name-module-file mapping and the module
is identified by the module name in IfModule and we didn't see
a LoadModule for it.
Also reduced the log file spamming if we can't determine if the module
is loaded or not. During the server discovery (where we only can use
the default list of modules), such unknown modules are only reported
once per plugin lifetime.
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerDiscoveryComponent.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerDiscoveryComponent.java
index 7ff86ee..130acee 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerDiscoveryComponent.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheServerDiscoveryComponent.java
@@ -324,7 +324,7 @@ public class ApacheServerDiscoveryComponent implements
ResourceDiscoveryComponen
ApacheDirectiveTree serverConfig = loadParser(serverConfigFile.getAbsolutePath(),
serverRoot);
//extract the runtime configuration out of declared config
- serverConfig = RuntimeApacheConfiguration.extract(serverConfig,
process.getProcessInfo(), binaryInfo, getDefaultModuleNames(binaryInfo.getVersion()));
+ serverConfig = RuntimeApacheConfiguration.extract(serverConfig,
process.getProcessInfo(), binaryInfo, getDefaultModuleNames(binaryInfo.getVersion()),
true);
String serverUrl = null;
String vhostsGlobInclude = null;
@@ -336,7 +336,7 @@ public class ApacheServerDiscoveryComponent implements
ResourceDiscoveryComponen
serverRootProp.setValue(serverRoot);
//reparse the configuration with the new ServerRoot
serverConfig = loadParser(serverConfigFile.getAbsolutePath(), serverRoot);
- serverConfig = RuntimeApacheConfiguration.extract(serverConfig,
process.getProcessInfo(), binaryInfo, getDefaultModuleNames(binaryInfo.getVersion()));
+ serverConfig = RuntimeApacheConfiguration.extract(serverConfig,
process.getProcessInfo(), binaryInfo, getDefaultModuleNames(binaryInfo.getVersion()),
true);
}
serverUrl = getUrl(serverConfig, binaryInfo.getVersion());
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceComponent.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceComponent.java
index f6e261c..8277f8c 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceComponent.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceComponent.java
@@ -365,7 +365,7 @@ public class ApacheVirtualHostServiceComponent implements
ResourceComponent<Apac
public void visitConditionalNode(AugeasNode node, boolean isSatisfied) {
}
- }, tree, server.getCurrentProcessInfo(), server.getCurrentBinaryInfo(),
server.getModuleNames());
+ }, tree, server.getCurrentProcessInfo(), server.getCurrentBinaryInfo(),
server.getModuleNames(), false);
//transform the SNMP index into the index of the vhost
int idx = allVhosts.size() - snmpIdx + 1;
@@ -484,7 +484,7 @@ public class ApacheVirtualHostServiceComponent implements
ResourceComponent<Apac
//only look for the vhost entry if the vhost we're looking for isn't the
main server
if (!MAIN_SERVER_RESOURCE_KEY.equals(vhostAddressStrings[0])) {
ApacheDirectiveTree tree = parent.loadParser();
- tree = RuntimeApacheConfiguration.extract(tree,
parent.getCurrentProcessInfo(), parent.getCurrentBinaryInfo(), parent.getModuleNames());
+ tree = RuntimeApacheConfiguration.extract(tree,
parent.getCurrentProcessInfo(), parent.getCurrentBinaryInfo(), parent.getModuleNames(),
false);
//find the vhost entry the resource key represents
List<ApacheDirective> vhosts =
tree.search("/<VirtualHost");
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
index 8cc8204..c7272ad 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
@@ -83,7 +83,7 @@ public class ApacheVirtualHostServiceDiscoveryComponent implements
ResourceDisco
ApacheServerComponent serverComponent = context.getParentResourceComponent();
ApacheDirectiveTree tree = serverComponent.loadParser();
- tree = RuntimeApacheConfiguration.extract(tree,
serverComponent.getCurrentProcessInfo(), serverComponent.getCurrentBinaryInfo(),
serverComponent.getModuleNames());
+ tree = RuntimeApacheConfiguration.extract(tree,
serverComponent.getCurrentProcessInfo(), serverComponent.getCurrentBinaryInfo(),
serverComponent.getModuleNames(), false);
//first define the root server as one virtual host
discoverMainServer(context, discoveredResources);
@@ -166,7 +166,7 @@ public class ApacheVirtualHostServiceDiscoveryComponent implements
ResourceDisco
ApacheDirectiveTree tree = serverComponent.loadParser();
tree = RuntimeApacheConfiguration.extract(tree,
serverComponent.getCurrentProcessInfo(),
- serverComponent.getCurrentBinaryInfo(), serverComponent.getModuleNames());
+ serverComponent.getCurrentBinaryInfo(), serverComponent.getModuleNames(),
false);
List<VHostSpec> vhosts = VHostSpec.detect(tree);
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/RuntimeApacheConfiguration.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/RuntimeApacheConfiguration.java
index 8524691..3e11ff3 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/RuntimeApacheConfiguration.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/RuntimeApacheConfiguration.java
@@ -22,6 +22,7 @@ package org.rhq.plugins.apache.util;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
@@ -47,6 +48,8 @@ public class RuntimeApacheConfiguration {
private static final Log LOG = LogFactory.getLog(RuntimeApacheConfiguration.class);
+ private static final Set<String> LOGGED_UNKNOWN_MODULES =
Collections.synchronizedSet(new HashSet<String>());
+
private enum ModuleLoadedState {
LOADED, NOT_LOADED, UNKNOWN
}
@@ -188,9 +191,10 @@ public class RuntimeApacheConfiguration {
public Map<String, String> moduleNames;
public Map<String, String> moduleFiles;
public String httpdVersion;
-
+ public boolean suppressUnknownModuleWarnings;
+
public TransformState(ProcessInfo httpdProcessInfo, ApacheBinaryInfo
httpdBinaryInfo,
- Map<String, String> moduleNames) {
+ Map<String, String> moduleNames, boolean suppressUnknownModuleWarnings)
{
defines = new HashSet<String>(httpdBinaryInfo.getCompiledInDefines());
if (httpdProcessInfo != null) {
@@ -235,6 +239,8 @@ public class RuntimeApacheConfiguration {
}
httpdVersion = httpdBinaryInfo.getVersion();
+
+ this.suppressUnknownModuleWarnings = suppressUnknownModuleWarnings;
}
}
@@ -251,19 +257,20 @@ public class RuntimeApacheConfiguration {
* @param httpdBinaryInfo
* @param moduleNames the mapping from the module filename to the module name
* (i.e. mapping from the name used in IfModule to the name used in LoadModule)
+ * @param suppressUnknownModuleWarnings true if the method should suppress logging
the warnings about unknown modules
* @return a new directive tree that represents the runtime configuration
*/
public static ApacheDirectiveTree extract(ApacheDirectiveTree tree, ProcessInfo
httpdProcessInfo,
- ApacheBinaryInfo httpdBinaryInfo, Map<String, String> moduleNames) {
+ ApacheBinaryInfo httpdBinaryInfo, Map<String, String> moduleNames, boolean
suppressUnknownModuleWarnings) {
ApacheDirectiveTree ret = tree.clone();
transform(new TransformingWalker(), ret.getRootNode(), new
TransformState(httpdProcessInfo, httpdBinaryInfo,
- moduleNames));
+ moduleNames, suppressUnknownModuleWarnings));
return ret;
}
public static void walkRuntimeConfig(final NodeVisitor<ApacheDirective>
visitor, ApacheDirectiveTree tree,
- ProcessInfo httpdProcessInfo, ApacheBinaryInfo httpdBinaryInfo, Map<String,
String> moduleNames) {
+ ProcessInfo httpdProcessInfo, ApacheBinaryInfo httpdBinaryInfo, Map<String,
String> moduleNames, boolean suppressUnknownModuleWarnings) {
TreeWalker<ApacheDirective> walker = new
TreeWalker<ApacheDirective>() {
public void visitConditionalNode(ApacheDirective node, boolean isSatisfied)
{
visitor.visitConditionalNode(node, isSatisfied);
@@ -296,11 +303,11 @@ public class RuntimeApacheConfiguration {
}
};
- transform(walker, tree.getRootNode(), new TransformState(httpdProcessInfo,
httpdBinaryInfo, moduleNames));
+ transform(walker, tree.getRootNode(), new TransformState(httpdProcessInfo,
httpdBinaryInfo, moduleNames, suppressUnknownModuleWarnings));
}
public static void walkRuntimeConfig(final NodeVisitor<AugeasNode> visitor,
AugeasTree tree,
- ProcessInfo httpdProcessInfo, ApacheBinaryInfo httpdBinaryInfo, Map<String,
String> moduleNames) {
+ ProcessInfo httpdProcessInfo, ApacheBinaryInfo httpdBinaryInfo, Map<String,
String> moduleNames, boolean suppressUnknownModuleWarnings) {
TreeWalker<AugeasNode> walker = new TreeWalker<AugeasNode>() {
public void visitConditionalNode(AugeasNode node, boolean isSatisfied) {
visitor.visitConditionalNode(node, isSatisfied);
@@ -343,7 +350,7 @@ public class RuntimeApacheConfiguration {
return node.getLabel();
}
};
- transform(walker, tree.getRootNode(), new TransformState(httpdProcessInfo,
httpdBinaryInfo, moduleNames));
+ transform(walker, tree.getRootNode(), new TransformState(httpdProcessInfo,
httpdBinaryInfo, moduleNames, suppressUnknownModuleWarnings));
}
private static <T> void transform(TreeWalker<T> walker, T parentNode,
TransformState state) {
@@ -377,7 +384,13 @@ public class RuntimeApacheConfiguration {
result = false;
break;
case UNKNOWN:
- LOG.warn("Encountered unknown module name in an IfModule
directive: " + moduleFile);
+ if (state.suppressUnknownModuleWarnings &&
LOGGED_UNKNOWN_MODULES.contains(moduleFile)) {
+ LOG.debug("Encountered unknown module name in an IfModule
directive: " + moduleFile);
+ } else {
+ LOG.warn("Encountered unknown module name in an IfModule
directive: "
+ + moduleFile + ". If you are using Apache 2.1 or later,
you can try changing the module identifier from the source file to "
+ + "the actual module name as used in the LoadModule
directive to get rid of this warning.");
+ }
continue;
}
@@ -503,11 +516,19 @@ public class RuntimeApacheConfiguration {
moduleIdentifier = moduleFiles.get(moduleName);
if (moduleIdentifier == null) {
- //reverse lookup failed - there is no such module in the mappings
- //the last attempt is to see if the modulename wasn't used one of the
previous
- //load module directives
- if (!currentlyLoadedModules.contains(moduleName)) {
+ //reverse lookup failed - there is no such module in the mappings
+ //we still have 2 options here.
+ //If the identifier we were given is a module name, we can assume that
+ //that module just wasn't loaded if we can't find it in the
loaded modules set.
+ //If on the other hand the identifier is a module source file, we have no
other
+ //option but to give up, because we don't know the mapping from
module name to
+ //module source file and thus cannot determine whether there was a
LoadModule
+ //directive that would load the module.
+ if (moduleName.endsWith(".c")) {
return ModuleLoadedState.UNKNOWN;
+ } else {
+ return currentlyLoadedModules.contains(moduleName) ?
ModuleLoadedState.LOADED
+ : ModuleLoadedState.NOT_LOADED;
}
}
}
diff --git
a/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/RuntimeConfigurationTest.java
b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/RuntimeConfigurationTest.java
index 0b7e52e..4a15b40 100644
---
a/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/RuntimeConfigurationTest.java
+++
b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/RuntimeConfigurationTest.java
@@ -101,7 +101,7 @@ public class RuntimeConfigurationTest {
ApacheParser parser = new ApacheParserImpl(tree, new File(tmpDir,
"runtime-config/conditional").getAbsolutePath());
ApacheConfigReader.buildTree(new File(tmpDir,
"runtime-config/conditional/httpd.conf").getAbsolutePath(), parser);
- tree = RuntimeApacheConfiguration.extract(tree, pinfo, binfo,
ApacheServerDiscoveryComponent.MODULE_SOURCE_FILE_TO_MODULE_NAME_20);
+ tree = RuntimeApacheConfiguration.extract(tree, pinfo, binfo,
ApacheServerDiscoveryComponent.MODULE_SOURCE_FILE_TO_MODULE_NAME_20, false);
List<VhostSpec> vhosts = VhostSpec.detect(tree);
@@ -131,7 +131,7 @@ public class RuntimeConfigurationTest {
ApacheParser parser = new ApacheParserImpl(tree, new File(tmpDir,
"runtime-config/incl-order").getAbsolutePath());
ApacheConfigReader.buildTree(new File(tmpDir,
"runtime-config/incl-order/httpd.conf").getAbsolutePath(), parser);
- tree = RuntimeApacheConfiguration.extract(tree, pinfo, binfo,
ApacheServerDiscoveryComponent.MODULE_SOURCE_FILE_TO_MODULE_NAME_20);
+ tree = RuntimeApacheConfiguration.extract(tree, pinfo, binfo,
ApacheServerDiscoveryComponent.MODULE_SOURCE_FILE_TO_MODULE_NAME_20, false);
List<ApacheDirective> listens = tree.search("/Listen");
commit 10261c194c6a411673e1b7b791183f06b8f44ddf
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Fri May 6 14:16:34 2011 +0200
BZ 694476 - Augeas tree abstraction now replaces the Include nodes with their contents
instead of just appending their contents to their children list. This seems to be the
original intended behavior of the class according to its description but actually was not
the case.
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/augeas/ApacheAugeasNode.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/augeas/ApacheAugeasNode.java
index 6cb168e..99cc8cb 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/augeas/ApacheAugeasNode.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/augeas/ApacheAugeasNode.java
@@ -24,7 +24,10 @@ package org.rhq.plugins.apache.augeas;
import java.io.File;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.rhq.augeas.node.AugeasNode;
import org.rhq.augeas.node.AugeasNodeLazy;
@@ -42,13 +45,14 @@ import org.rhq.augeas.tree.AugeasTreeException;
* and modifies the get* methods to handle these as well.
*
* @author Filip Drabek
+ * @author Lukas Krejci
*/
public class ApacheAugeasNode extends AugeasNodeLazy implements AugeasNode {
/**
* List of included nodes.
*/
- private List<AugeasNode> includedNodes;
+ private Map<Integer, List<AugeasNode>> includedNodes;
public ApacheAugeasNode(String fullPath, AugeasTree tree) {
super(fullPath, tree);
@@ -72,8 +76,22 @@ public class ApacheAugeasNode extends AugeasNodeLazy implements
AugeasNode {
public List<AugeasNode> getChildNodes() {
List<AugeasNode> nodes = null;
nodes = ag.match(getFullPath() + File.separatorChar + "*");
- if (includedNodes != null)
- nodes.addAll(includedNodes);
+
+ if (includedNodes != null) {
+ //to avoid having to recompute indexes to insert the included nodes into the
+ //list of nodes as seen by augeas, let's include them from the biggest
index
+ //to the lowest.
+ List<Integer> includeNodeIndexes = new
ArrayList<Integer>(includedNodes.keySet());
+ Collections.sort(includeNodeIndexes, Collections.reverseOrder());
+
+ for(Integer idx : includeNodeIndexes) {
+ //remove the include node itself
+ nodes.remove(idx);
+
+ //add the included nodes instead of it
+ nodes.addAll(idx, includedNodes.get(idx));
+ }
+ }
return nodes;
}
@@ -83,26 +101,36 @@ public class ApacheAugeasNode extends AugeasNodeLazy implements
AugeasNode {
*
* @param nodes
*/
- public void addIncludeNodes(List<AugeasNode> nodes) {
+ public void addIncludeNodes(AugeasNode includeNode, List<AugeasNode> nodes) {
if (nodes.isEmpty())
return;
if (includedNodes == null)
- includedNodes = new ArrayList<AugeasNode>();
-
- includedNodes.addAll(nodes);
- }
-
- /**
- * Adds the node to the list of the included child nodes.
- *
- * @param node
- */
- public void addIncludeNode(AugeasNode node) {
- if (includedNodes == null)
- includedNodes = new ArrayList<AugeasNode>();
-
- includedNodes.add(node);
+ includedNodes = new HashMap<Integer, List<AugeasNode>>();
+
+ List<AugeasNode> childNodes = super.getChildNodes();
+ int idx = 0;
+ boolean found = false;
+
+ for(AugeasNode child : childNodes) {
+ if (child.getLabel().equals(includeNode.getLabel()) && child.getSeq()
== includeNode.getSeq()) {
+ found = true;
+ break;
+ }
+
+ ++idx;
+ }
+
+ if (found) {
+ List<AugeasNode> alreadyIncluded = includedNodes.get(idx);
+ if (alreadyIncluded == null) {
+ //copy the nodes over to a new list so that we can modify it later
without modifying the original collection
+ //which might be unexpected on the caller site.
+ includedNodes.put(idx, new ArrayList<AugeasNode>(nodes));
+ } else {
+ alreadyIncluded.addAll(nodes);
+ }
+ }
}
public AugeasNode getParentNode() {
@@ -132,7 +160,8 @@ public class ApacheAugeasNode extends AugeasNodeLazy implements
AugeasNode {
//else if this node is included from another file
//and we would destroy that association here.
}
+
public void setParentNode(AugeasNode node){
this.parentNode = node;
- }
+ }
}
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/augeas/AugeasTreeBuilderApache.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/augeas/AugeasTreeBuilderApache.java
index d35613b..fbde74f 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/augeas/AugeasTreeBuilderApache.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/augeas/AugeasTreeBuilderApache.java
@@ -43,7 +43,6 @@ public class AugeasTreeBuilderApache implements AugeasTreeBuilder {
private Map<String, List<File>> includes;
private Map<AugeasNode, List<String>> incl;
- private static final String[] NESTED_INCLUDE_DIRECTIVES = {
"<VirtualHost", "<Directory" };
private Augeas ag;
public AugeasTreeBuilderApache() {
@@ -87,7 +86,7 @@ public class AugeasTreeBuilderApache implements AugeasTreeBuilder {
includes.put(inclName, files);
}
- updateIncludes((ApacheAugeasNode) rootNode, tree, rootPath, false);
+ updateIncludes((ApacheAugeasNode) rootNode, tree, rootPath, null);
//List<String> rootconf = new ArrayList<String>();
// rootconf.add(ApacheAugeasTree.AUGEAS_DATA_PATH + rootPath);
@@ -97,7 +96,7 @@ public class AugeasTreeBuilderApache implements AugeasTreeBuilder {
return tree;
}
- public void updateIncludes(ApacheAugeasNode parentNode, AugeasTree tree, String
fileName, boolean update)
+ public void updateIncludes(ApacheAugeasNode parentNode, AugeasTree tree, String
fileName, AugeasNode includeNode)
throws AugeasRhqException {
List<String> nestedNodes = ag.match(ApacheAugeasTree.AUGEAS_DATA_PATH +
fileName + File.separator + "*");
@@ -111,14 +110,14 @@ public class AugeasTreeBuilderApache implements AugeasTreeBuilder {
createdNodes.add(newNode);
}
- if (update)
- parentNode.addIncludeNodes(createdNodes);
+ if (includeNode != null)
+ parentNode.addIncludeNodes(includeNode, createdNodes);
for (AugeasNode node : createdNodes) {
- if (canContainIncludes(node.getLabel())) {
+ if (canContainNestedNodes(node.getLabel())) {
String labelName = node.getLabel()
+ ((node.getSeq() != 0) ? "[" +
String.valueOf(node.getSeq()) + "]" : "");
- updateIncludes((ApacheAugeasNode) node, tree, fileName + File.separator +
labelName, false);
+ updateIncludes((ApacheAugeasNode) node, tree, fileName + File.separator +
labelName, null);
}
if (node.getLabel().equals("Include")) {
String val = ag.get(node.getFullPath() + File.separator +
"param");
@@ -128,7 +127,7 @@ public class AugeasTreeBuilderApache implements AugeasTreeBuilder {
List<String> names = new ArrayList<String>();
for (File file : files) {
names.add(ApacheAugeasTree.AUGEAS_DATA_PATH +
file.getAbsolutePath());
- updateIncludes((ApacheAugeasNode) node.getParentNode(), tree,
file.getAbsolutePath(), true);
+ updateIncludes((ApacheAugeasNode) node.getParentNode(), tree,
file.getAbsolutePath(), node);
}
if (incl.containsKey(node.getParentNode())) {
List<String> list = incl.get(node.getParentNode());
@@ -140,11 +139,7 @@ public class AugeasTreeBuilderApache implements AugeasTreeBuilder {
}
}
- private boolean canContainIncludes(String name) {
- for (String directive : NESTED_INCLUDE_DIRECTIVES) {
- if (directive.equals(name))
- return true;
- }
- return false;
+ private boolean canContainNestedNodes(String name) {
+ return name.startsWith("<");
}
}
commit 74cd18df13fdfcb4f2ec18f2a1a0e876194583d5
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Fri May 6 14:59:12 2011 +0200
Adding tests for the ability to produce the same server and port
identifications as advertised by SNMP module in various scenarios.
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
index 9477e95..8cc8204 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceDiscoveryComponent.java
@@ -142,7 +142,7 @@ public class ApacheVirtualHostServiceDiscoveryComponent implements
ResourceDisco
pluginConfiguration.put(rtLogProp);
//redefine the resourcename using the virtual host sample address
- resourceName = address.toString(false);
+ resourceName = address.toString(false, true);
}
discoveredResources.add(new DiscoveredResourceDetails(resourceType,
resourceKey, resourceName, null, null,
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
index 7db7514..c7d2328 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
@@ -251,10 +251,10 @@ public enum HttpdAddressUtility {
@Override
public String toString() {
- return toString(true);
+ return toString(true, true);
}
- public String toString(boolean includeScheme) {
+ public String toString(boolean includeScheme, boolean interpretWildcardPort) {
StringBuilder bld = new StringBuilder();
if (includeScheme) {
@@ -266,7 +266,7 @@ public enum HttpdAddressUtility {
if (port != NO_PORT_SPECIFIED_VALUE) {
bld.append(":");
- if (port == PORT_WILDCARD_VALUE) {
+ if (port == PORT_WILDCARD_VALUE && interpretWildcardPort) {
bld.append(WILDCARD);
} else {
bld.append(port);
diff --git
a/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/SnmpMappingTest.java
b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/SnmpMappingTest.java
new file mode 100644
index 0000000..0716ade
--- /dev/null
+++ b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/SnmpMappingTest.java
@@ -0,0 +1,140 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2011 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.plugins.apache;
+
+import static org.testng.Assert.assertEquals;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import org.rhq.core.pluginapi.util.FileUtils;
+import org.rhq.core.util.file.FileUtil;
+import org.rhq.core.util.stream.StreamUtil;
+import org.rhq.plugins.apache.parser.ApacheConfigReader;
+import org.rhq.plugins.apache.parser.ApacheDirective;
+import org.rhq.plugins.apache.parser.ApacheDirectiveTree;
+import org.rhq.plugins.apache.parser.ApacheParser;
+import org.rhq.plugins.apache.parser.ApacheParserImpl;
+import org.rhq.plugins.apache.util.HttpdAddressUtility;
+import org.rhq.plugins.apache.util.MockApacheBinaryInfo;
+import org.rhq.plugins.apache.util.MockProcessInfo;
+
+/**
+ *
+ *
+ * @author Lukas Krejci
+ */
+@Test
+public class SnmpMappingTest {
+
+ private File tmpDir;
+
+ private static final String[] VHOST_NAMES_CONFIGURATION_TEST_FILES = {
+ "snmp-mapping/httpd.conf",
+ "snmp-mapping/vhost-with-servername-by-ip.conf",
+ "snmp-mapping/vhost-with-servername-by-unresolvable-hostname.conf",
+ "snmp-mapping/vhost-without-servername-resolvable-ip.conf",
+ "snmp-mapping/vhost-without-servername-unresolvable-hostname.conf",
+ "snmp-mapping/vhost-without-servername-unresolvable-ip.conf"
+ };
+
+ private static final String[] EXPECTED_SNMP_NAMES = {
+ "the-main-server-name:42", //httpd.conf
+ "12.34.56.78:0", //vhost-with-servername-by-ip.conf
+ "this-will-never-resolve.weird-server.net:90",
//vhost-with-servername-by-unresolvable-hostname.conf
+ "<<<LOCALHOST>>>:1002",
//vhost-without-servernama-resolvable-ip.conf
+ "bogus_host_without_forward_dns:42",
//vhost-without-servername-unresolvable-hostname.conf
+ "bogus_host_without_reverse_dns:1003"
//vhost-without-servername-unresolvable-ip.conf
+ };
+
+ @BeforeClass
+ public void copyConfigurationFiles() throws Exception {
+ tmpDir = FileUtil.createTempDirectory("apache-runtime-config-tests",
null, null);
+
+ for(String path : VHOST_NAMES_CONFIGURATION_TEST_FILES) {
+ copyResourceToFile(path, new File(tmpDir, path));
+ }
+ }
+
+ @BeforeClass
+ public void initExpectedResults() throws Exception {
+ String localhost = InetAddress.getLocalHost().getHostName();
+ for(int i = 0; i < EXPECTED_SNMP_NAMES.length; ++i) {
+ EXPECTED_SNMP_NAMES[i] =
EXPECTED_SNMP_NAMES[i].replaceAll("<<<LOCALHOST>>>",
localhost);
+ }
+ }
+
+ @AfterClass
+ public void deleteConfigurationFiles() throws IOException {
+ FileUtils.purge(tmpDir, true);
+ }
+
+
+ public void testVhostNames() {
+ MockApacheBinaryInfo binfo = new MockApacheBinaryInfo();
+ binfo.setVersion("2.2.17");
+ MockProcessInfo pinfo = new MockProcessInfo();
+ pinfo.setCommandLine(new String[] {"blahblah"});
+
+ ApacheDirectiveTree tree = new ApacheDirectiveTree();
+ ApacheParser parser = new ApacheParserImpl(tree, new File(tmpDir,
"snmp-mapping").getAbsolutePath());
+ ApacheConfigReader.buildTree(new File(tmpDir,
"snmp-mapping/httpd.conf").getAbsolutePath(), parser);
+
+ HttpdAddressUtility addrUtil = HttpdAddressUtility.get("2.2.17");
+ List<ApacheDirective> vhosts = tree.search("/<VirtualHost");
+ List<String> snmpNames = new ArrayList<String>(vhosts.size() + 1);
+
snmpNames.add(addrUtil.getHttpdInternalMainServerAddressRepresentation(tree).toString(false,
false));
+ for(ApacheDirective vhost : vhosts) {
+ String vhostDef = vhost.getValues().get(0);
+ String serverName = null;
+ List<ApacheDirective> serverNames =
vhost.getChildByName("ServerName");
+ if (serverNames.size() > 0) {
+ serverName = serverNames.get(serverNames.size() -
1).getValuesAsString();
+ }
+
+ snmpNames.add(addrUtil.getHttpdInternalVirtualHostAddressRepresentation(tree,
vhostDef, serverName).toString(false, false));
+ }
+
+ assertEquals(snmpNames, Arrays.asList(EXPECTED_SNMP_NAMES));
+ }
+
+
+ private void copyResourceToFile(String resourcePath, File destination) throws
IOException {
+ InputStream input =
getClass().getClassLoader().getResourceAsStream(resourcePath);
+
+ if (input != null) {
+ destination.getParentFile().mkdirs();
+ destination.createNewFile();
+
+ StreamUtil.copy(input, new BufferedOutputStream(new
FileOutputStream(destination)), true);
+ }
+ }
+}
diff --git a/modules/plugins/apache/src/test/resources/snmp-mapping/httpd.conf
b/modules/plugins/apache/src/test/resources/snmp-mapping/httpd.conf
new file mode 100644
index 0000000..29a43eb
--- /dev/null
+++ b/modules/plugins/apache/src/test/resources/snmp-mapping/httpd.conf
@@ -0,0 +1,5 @@
+Listen 80
+Listen 127.0.0.1:90
+ServerName the-main-server-name:42
+
+Include vhost-*.conf
diff --git
a/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-with-servername-by-ip.conf
b/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-with-servername-by-ip.conf
new file mode 100644
index 0000000..978892c
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-with-servername-by-ip.conf
@@ -0,0 +1,3 @@
+<VirtualHost 127.0.0.1:1000>
+ ServerName 12.34.56.78
+</VirtualHost>
diff --git
a/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-with-servername-by-unresolvable-hostname.conf
b/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-with-servername-by-unresolvable-hostname.conf
new file mode 100644
index 0000000..d38cfc3
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-with-servername-by-unresolvable-hostname.conf
@@ -0,0 +1,3 @@
+<VirtualHost 127.0.0.1:1001>
+ ServerName this-will-never-resolve.weird-server.net:90
+</VirtualHost>
diff --git
a/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-without-servername-resolvable-ip.conf
b/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-without-servername-resolvable-ip.conf
new file mode 100644
index 0000000..16586d1
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-without-servername-resolvable-ip.conf
@@ -0,0 +1,3 @@
+<VirtualHost 127.0.0.1:1002>
+
+</VirtualHost>
diff --git
a/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-without-servername-unresolvable-hostname.conf
b/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-without-servername-unresolvable-hostname.conf
new file mode 100644
index 0000000..3ec4c24
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-without-servername-unresolvable-hostname.conf
@@ -0,0 +1,3 @@
+<VirtualHost unresolvable-hostname.weird-domain.net:1004>
+
+</VirtualHost>
diff --git
a/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-without-servername-unresolvable-ip.conf
b/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-without-servername-unresolvable-ip.conf
new file mode 100644
index 0000000..0891c1b
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/snmp-mapping/vhost-without-servername-unresolvable-ip.conf
@@ -0,0 +1,3 @@
+<VirtualHost 12.34.56.78:1003>
+
+</VirtualHost>
\ No newline at end of file
commit b6b3473574dd38234ec33e26bbba768263e8c3c8
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Fri May 6 13:14:08 2011 +0200
Adding IfVersion detection tests, removed the vhost-names test that will
come in as standalone test because their not part of the runtime
configuration extraction.
diff --git
a/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/RuntimeConfigurationTest.java
b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/RuntimeConfigurationTest.java
index 260c4c6..0b7e52e 100644
---
a/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/RuntimeConfigurationTest.java
+++
b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/RuntimeConfigurationTest.java
@@ -36,6 +36,7 @@ import org.testng.annotations.Test;
import org.rhq.core.pluginapi.util.FileUtils;
import org.rhq.core.util.file.FileUtil;
+import org.rhq.core.util.stream.StreamUtil;
import org.rhq.plugins.apache.parser.ApacheConfigReader;
import org.rhq.plugins.apache.parser.ApacheDirective;
import org.rhq.plugins.apache.parser.ApacheDirectiveTree;
@@ -61,6 +62,7 @@ public class RuntimeConfigurationTest {
"runtime-config/conditional/ifdefine-undefined.conf",
"runtime-config/conditional/ifmodule-loaded.conf",
"runtime-config/conditional/ifmodule-not-loaded.conf",
+ "runtime-config/conditional/ifversion.conf",
"runtime-config/conditional/nested-mess.conf"
};
@@ -71,29 +73,17 @@ public class RuntimeConfigurationTest {
"runtime-config/incl-order/httpd.conf"
};
- private static final String[] VHOST_NAMES_CONFIGURATION_TEST_FILES = {
- "runtime-config/vhost-names/httpd.conf",
- "runtime-config/vhost-names/vhost-with-servername-by-ip.conf",
-
"runtime-config/vhost-names/vhost-with-servername-by-unresolvable-hostname.conf",
-
"runtime-config/vhost-names/vhost-without-servername-resolvable-ip.conf",
-
"runtime-config/vhost-names/vhost-without-servername-unresolvable-ip.conf"
- };
-
@BeforeClass
public void copyConfigurationFiles() throws Exception {
tmpDir = FileUtil.createTempDirectory("apache-runtime-config-tests",
null, null);
- for(String path : CONDITIONAL_CONFIGURATION_TEST_FILES) {
+ for(String path : CONDITIONAL_CONFIGURATION_TEST_FILES) {
copyResourceToFile(path, new File(tmpDir, path));
}
for(String path : INCLUSION_ORDER_CONFIGURATION_TEST_FILES) {
copyResourceToFile(path, new File(tmpDir, path));
}
-
- for(String path : VHOST_NAMES_CONFIGURATION_TEST_FILES) {
- copyResourceToFile(path, new File(tmpDir, path));
- }
}
@AfterClass
@@ -102,12 +92,10 @@ public class RuntimeConfigurationTest {
}
public void testConditionalInclusion() {
- //TODO add tests for IfVersion!!!
-
MockApacheBinaryInfo binfo = new MockApacheBinaryInfo();
binfo.setVersion("2.2.17");
MockProcessInfo pinfo = new MockProcessInfo();
- pinfo.setCommandLine(new String[] {"/usr/sbin/httpd", "-D",
"DEFINED"});
+ pinfo.setCommandLine(new String[] {"blahblah", "-D",
"DEFINED"});
ApacheDirectiveTree tree = new ApacheDirectiveTree();
ApacheParser parser = new ApacheParserImpl(tree, new File(tmpDir,
"runtime-config/conditional").getAbsolutePath());
@@ -119,11 +107,16 @@ public class RuntimeConfigurationTest {
List<VhostSpec> expectedVhosts = new ArrayList<VhostSpec>();
- expectedVhosts.add(new VhostSpec(Collections.singleton("127.0.0.1:80"),
"ifdefine.defined"));
- expectedVhosts.add(new VhostSpec(Collections.singleton("127.0.0.1:82"),
"ifmodule.loaded.source-file"));
- expectedVhosts.add(new VhostSpec(Collections.singleton("127.0.0.1:83"),
"ifmodule.loaded.module-name"));
- expectedVhosts.add(new VhostSpec(Collections.singleton("127.0.0.1:88"),
"ifdefine.ifmodule.loaded.source-file"));
- expectedVhosts.add(new VhostSpec(Collections.singleton("127.0.0.1:89"),
"ifdefine.ifmodule.loaded.module-name"));
+ expectedVhosts.add(new
VhostSpec(Collections.singleton("127.0.0.1:100"),
"ifdefine.defined"));
+ expectedVhosts.add(new
VhostSpec(Collections.singleton("127.0.0.1:300"),
"ifmodule.loaded.source-file"));
+ expectedVhosts.add(new
VhostSpec(Collections.singleton("127.0.0.1:301"),
"ifmodule.loaded.module-name"));
+ expectedVhosts.add(new
VhostSpec(Collections.singleton("127.0.0.1:501"),
"ifversion.module-loaded.implied-equals"));
+ expectedVhosts.add(new
VhostSpec(Collections.singleton("127.0.0.1:502"),
"ifversion.module-loaded.equals"));
+ expectedVhosts.add(new
VhostSpec(Collections.singleton("127.0.0.1:503"),
"ifversion.module-loaded.not-equals"));
+ expectedVhosts.add(new
VhostSpec(Collections.singleton("127.0.0.1:504"),
"ifversion.module-loaded.regex"));
+ expectedVhosts.add(new
VhostSpec(Collections.singleton("127.0.0.1:505"),
"ifversion.module-loaded.implied-regex"));
+ expectedVhosts.add(new
VhostSpec(Collections.singleton("127.0.0.1:602"),
"ifdefine.ifmodule.loaded.source-file"));
+ expectedVhosts.add(new
VhostSpec(Collections.singleton("127.0.0.1:603"),
"ifdefine.ifmodule.loaded.module-name"));
assertEquals(vhosts, expectedVhosts);
}
@@ -132,7 +125,7 @@ public class RuntimeConfigurationTest {
MockApacheBinaryInfo binfo = new MockApacheBinaryInfo();
binfo.setVersion("2.2.17");
MockProcessInfo pinfo = new MockProcessInfo();
- pinfo.setCommandLine(new String[] {"/usr/sbin/httpd"});
+ pinfo.setCommandLine(new String[] {"blahblah"});
ApacheDirectiveTree tree = new ApacheDirectiveTree();
ApacheParser parser = new ApacheParserImpl(tree, new File(tmpDir,
"runtime-config/incl-order").getAbsolutePath());
@@ -149,39 +142,14 @@ public class RuntimeConfigurationTest {
assertEquals(listens.get(2).getValuesAsString(), "82");
}
- public void testVhostNames() {
- MockApacheBinaryInfo binfo = new MockApacheBinaryInfo();
- binfo.setVersion("2.2.17");
- MockProcessInfo pinfo = new MockProcessInfo();
- pinfo.setCommandLine(new String[] {"/usr/sbin/httpd"});
-
- ApacheDirectiveTree tree = new ApacheDirectiveTree();
- ApacheParser parser = new ApacheParserImpl(tree, new File(tmpDir,
"runtime-config/vhost-names").getAbsolutePath());
- ApacheConfigReader.buildTree(new File(tmpDir,
"runtime-config/vhost-names/httpd.conf").getAbsolutePath(), parser);
-
- tree = RuntimeApacheConfiguration.extract(tree, pinfo, binfo,
ApacheServerDiscoveryComponent.MODULE_SOURCE_FILE_TO_MODULE_NAME_20);
-
- //TODO implement this
- }
-
- private void copyResourceToFile(String resourcePath, File destination) throws
IOException {
+ private void copyResourceToFile(String resourcePath, File destination) throws
IOException {
InputStream input =
getClass().getClassLoader().getResourceAsStream(resourcePath);
if (input != null) {
destination.getParentFile().mkdirs();
destination.createNewFile();
- BufferedOutputStream output = new BufferedOutputStream(new
FileOutputStream(destination));
-
- try {
- int data;
- while((data = input.read()) != -1) {
- output.write(data);
- }
- } finally {
- input.close();
- output.close();
- }
+ StreamUtil.copy(input, new BufferedOutputStream(new
FileOutputStream(destination)), true);
}
}
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-defined.conf
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-defined.conf
index 7631a5c..c098499 100644
---
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-defined.conf
+++
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-defined.conf
@@ -1,5 +1,5 @@
<IfDefine DEFINED>
- <VirtualHost 127.0.0.1:80>
+ <VirtualHost 127.0.0.1:100>
ServerName ifdefine.defined
</VirtualHost>
</IfDefine>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-undefined.conf
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-undefined.conf
index 6acd1a5..03d0c07 100644
---
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-undefined.conf
+++
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-undefined.conf
@@ -1,5 +1,5 @@
<IfDefine UNDEFINED>
- <VirtualHost 127.0.0.1:81>
+ <VirtualHost 127.0.0.1:200>
ServerName ifdefine.undefined
</VirtualHost>
</IfDefine>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-loaded.conf
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-loaded.conf
index f9aba0a..a977465 100644
---
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-loaded.conf
+++
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-loaded.conf
@@ -1,13 +1,13 @@
LoadModule alias_module
<IfModule mod_alias.c>
- <VirtualHost 127.0.0.1:82>
+ <VirtualHost 127.0.0.1:300>
ServerName ifmodule.loaded.source-file
</VirtualHost>
</IfModule>
<IfModule alias_module>
- <VirtualHost 127.0.0.1:83>
+ <VirtualHost 127.0.0.1:301>
ServerName ifmodule.loaded.module-name
</VirtualHost>
</IfModule>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-not-loaded.conf
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-not-loaded.conf
index 611ba1a..fffb61d 100644
---
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-not-loaded.conf
+++
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-not-loaded.conf
@@ -1,11 +1,11 @@
<IfModule mod_not_loaded.c>
- <VirtualHost 127.0.0.1:84>
+ <VirtualHost 127.0.0.1:400>
ServerName ifmodule.not-loaded.source-file
</VirtualHost>
</IfModule>
<IfModule not_loaded_module>
- <VirtualHost 127.0.0.1:85>
+ <VirtualHost 127.0.0.1:401>
ServerName ifmodule.not-loaded.module-name
</VirtualHost>
</IfModule>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifversion.conf
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifversion.conf
new file mode 100644
index 0000000..46413de
--- /dev/null
+++ b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifversion.conf
@@ -0,0 +1,43 @@
+<IfVersion 2.2.17>
+ <VirtualHost 127.0.0.1:500>
+ ServerName ifversion.module-not-loaded
+ </VirtualHost>
+</IfVersion>
+
+LoadModule version_module
+
+<IfVersion 2.2.17>
+ <VirtualHost 127.0.0.1:501>
+ ServerName ifversion.module-loaded.implied-equals
+ </VirtualHost>
+</IfVersion>
+
+<IfVersion = 2.2.17>
+ <VirtualHost 127.0.0.1:502>
+ ServerName ifversion.module-loaded.equals
+ </VirtualHost>
+</IfVersion>
+
+<IfVersion != 2.2.18>
+ <VirtualHost 127.0.0.1:503>
+ ServerName ifversion.module-loaded.not-equals
+ </VirtualHost>
+</IfVersion>
+
+<IfVersion ~ 2\.2\.1[7-9]>
+ <VirtualHost 127.0.0.1:504>
+ ServerName ifversion.module-loaded.regex
+ </VirtualHost>
+</IfVersion>
+
+<IfVersion /2\.2\.1[7-9]/>
+ <VirtualHost 127.0.0.1:505>
+ ServerName ifversion.module-loaded.implied-regex
+ </VirtualHost>
+</IfVersion>
+
+<IfVersion /2\.2\.1[8-9]/>
+ <VirtualHost 127.0.0.1:506>
+ ServerName ifversion.module-loaded.implied-regex.unmatched
+ </VirtualHost>
+</IfVersion>
\ No newline at end of file
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/nested-mess.conf
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/nested-mess.conf
index 5a2ab62..edde513 100644
---
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/nested-mess.conf
+++
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/nested-mess.conf
@@ -1,24 +1,24 @@
<IfDefine DEFINED>
<IfModule mod_not_loaded.c>
- <VirtualHost 127.0.0.1:86>
+ <VirtualHost 127.0.0.1:600>
ServerName ifdefine.ifmodule.not-loaded.source-file
</VirtualHost>
</IfModule>
<IfModule not_loaded_module>
- <VirtualHost 127.0.0.1:87>
+ <VirtualHost 127.0.0.1:601>
ServerName ifdefine.ifmodule.not-loaded.module-name
</VirtualHost>
</IfModule>
<IfModule mod_alias.c>
- <VirtualHost 127.0.0.1:88>
+ <VirtualHost 127.0.0.1:602>
ServerName ifdefine.ifmodule.loaded.source-file
</VirtualHost>
</IfModule>
<IfModule alias_module>
- <VirtualHost 127.0.0.1:89>
+ <VirtualHost 127.0.0.1:603>
ServerName ifdefine.ifmodule.loaded.module-name
</VirtualHost>
</IfModule>
@@ -26,28 +26,26 @@
<IfDefine UNDEFINED>
<IfModule mod_not_loaded.c>
- <VirtualHost 127.0.0.1:90>
+ <VirtualHost 127.0.0.1:604>
ServerName not-ifdefine.ifmodule.not-loaded.source-file
</VirtualHost>
</IfModule>
<IfModule not_loaded_module>
- <VirtualHost 127.0.0.1:91>
+ <VirtualHost 127.0.0.1:605>
ServerName not-ifdefine.ifmodule.not-loaded.module-name
</VirtualHost>
</IfModule>
<IfModule mod_alias.c>
- <VirtualHost 127.0.0.1:92>
+ <VirtualHost 127.0.0.1:606>
ServerName not-ifdefine.ifmodule.loaded.source-file
</VirtualHost>
</IfModule>
<IfModule alias_module>
- <VirtualHost 127.0.0.1:93>
+ <VirtualHost 127.0.0.1:607>
ServerName not-ifdefine.ifmodule.loaded.module-name
</VirtualHost>
</IfModule>
</IfDefine>
-
-
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/httpd.conf
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/httpd.conf
deleted file mode 100644
index 29a43eb..0000000
--- a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/httpd.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-Listen 80
-Listen 127.0.0.1:90
-ServerName the-main-server-name:42
-
-Include vhost-*.conf
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-with-servername-by-ip.conf
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-with-servername-by-ip.conf
deleted file mode 100644
index 978892c..0000000
---
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-with-servername-by-ip.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-<VirtualHost 127.0.0.1:1000>
- ServerName 12.34.56.78
-</VirtualHost>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-with-servername-by-unresolvable-hostname.conf
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-with-servername-by-unresolvable-hostname.conf
deleted file mode 100644
index d38cfc3..0000000
---
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-with-servername-by-unresolvable-hostname.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-<VirtualHost 127.0.0.1:1001>
- ServerName this-will-never-resolve.weird-server.net:90
-</VirtualHost>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-without-servername-resolvable-ip.conf
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-without-servername-resolvable-ip.conf
deleted file mode 100644
index 16586d1..0000000
---
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-without-servername-resolvable-ip.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-<VirtualHost 127.0.0.1:1002>
-
-</VirtualHost>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-without-servername-unresolvable-ip.conf
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-without-servername-unresolvable-ip.conf
deleted file mode 100644
index 1637446..0000000
---
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-without-servername-unresolvable-ip.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-<VirtualHost 12.34.56.78:1003>
-
-</VirtualHost>
commit 635df1088bb12a327b698af04cd71a2146a304ee
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Fri May 6 13:18:50 2011 +0200
BZ 694476 - behave the same as apache when handling the corner case of unresolvable
hostnames in virtual host address definition.
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
index 7c55fb4..7db7514 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
@@ -410,6 +410,12 @@ public enum HttpdAddressUtility {
}
} catch (UnknownHostException e) {
ret.host = BOGUS_HOST_WITHOUT_FORWARD_DNS;
+
+ //weird, as it seems, apache uses the port of the main server
+ //with the unknown host even if the port was specified in the vhost
+ //definition
+ Address mainAddress =
getHttpdInternalMainServerAddressRepresentation(runtimeConfig);
+ ret.port = mainAddress.port;
}
}
commit 36d6333dd1c78717942f2850c72ca70e165ac3de
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Fri May 6 11:37:29 2011 +0200
Tests for the inclusion order and IfModule and IfDefine detection.
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/ApacheBinaryInfo.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/ApacheBinaryInfo.java
index aedb144..724fc19 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/ApacheBinaryInfo.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/ApacheBinaryInfo.java
@@ -65,7 +65,7 @@ public class ApacheBinaryInfo {
private Set<String> compiledInModules = new HashSet<String>();
private Set<String> compiledInDefines = new HashSet<String>();
- private ApacheBinaryInfo(@NotNull
+ protected ApacheBinaryInfo(@NotNull
String binaryPath) {
this.binaryPath = binaryPath;
}
diff --git
a/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/RuntimeConfigurationTest.java
b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/RuntimeConfigurationTest.java
new file mode 100644
index 0000000..260c4c6
--- /dev/null
+++
b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/RuntimeConfigurationTest.java
@@ -0,0 +1,240 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2011 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.plugins.apache;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import static org.testng.Assert.*;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import org.rhq.core.pluginapi.util.FileUtils;
+import org.rhq.core.util.file.FileUtil;
+import org.rhq.plugins.apache.parser.ApacheConfigReader;
+import org.rhq.plugins.apache.parser.ApacheDirective;
+import org.rhq.plugins.apache.parser.ApacheDirectiveTree;
+import org.rhq.plugins.apache.parser.ApacheParser;
+import org.rhq.plugins.apache.parser.ApacheParserImpl;
+import org.rhq.plugins.apache.util.MockApacheBinaryInfo;
+import org.rhq.plugins.apache.util.MockProcessInfo;
+import org.rhq.plugins.apache.util.RuntimeApacheConfiguration;
+
+/**
+ *
+ *
+ * @author Lukas Krejci
+ */
+@Test
+public class RuntimeConfigurationTest {
+
+ private File tmpDir;
+
+ private static final String[] CONDITIONAL_CONFIGURATION_TEST_FILES = {
+ "runtime-config/conditional/httpd.conf",
+ "runtime-config/conditional/ifdefine-defined.conf",
+ "runtime-config/conditional/ifdefine-undefined.conf",
+ "runtime-config/conditional/ifmodule-loaded.conf",
+ "runtime-config/conditional/ifmodule-not-loaded.conf",
+ "runtime-config/conditional/nested-mess.conf"
+ };
+
+ private static final String[] INCLUSION_ORDER_CONFIGURATION_TEST_FILES = {
+ "runtime-config/incl-order/a.conf",
+ "runtime-config/incl-order/b.conf",
+ "runtime-config/incl-order/c.conf",
+ "runtime-config/incl-order/httpd.conf"
+ };
+
+ private static final String[] VHOST_NAMES_CONFIGURATION_TEST_FILES = {
+ "runtime-config/vhost-names/httpd.conf",
+ "runtime-config/vhost-names/vhost-with-servername-by-ip.conf",
+
"runtime-config/vhost-names/vhost-with-servername-by-unresolvable-hostname.conf",
+
"runtime-config/vhost-names/vhost-without-servername-resolvable-ip.conf",
+
"runtime-config/vhost-names/vhost-without-servername-unresolvable-ip.conf"
+ };
+
+ @BeforeClass
+ public void copyConfigurationFiles() throws Exception {
+ tmpDir = FileUtil.createTempDirectory("apache-runtime-config-tests",
null, null);
+
+ for(String path : CONDITIONAL_CONFIGURATION_TEST_FILES) {
+ copyResourceToFile(path, new File(tmpDir, path));
+ }
+
+ for(String path : INCLUSION_ORDER_CONFIGURATION_TEST_FILES) {
+ copyResourceToFile(path, new File(tmpDir, path));
+ }
+
+ for(String path : VHOST_NAMES_CONFIGURATION_TEST_FILES) {
+ copyResourceToFile(path, new File(tmpDir, path));
+ }
+ }
+
+ @AfterClass
+ public void deleteConfigurationFiles() throws IOException {
+ FileUtils.purge(tmpDir, true);
+ }
+
+ public void testConditionalInclusion() {
+ //TODO add tests for IfVersion!!!
+
+ MockApacheBinaryInfo binfo = new MockApacheBinaryInfo();
+ binfo.setVersion("2.2.17");
+ MockProcessInfo pinfo = new MockProcessInfo();
+ pinfo.setCommandLine(new String[] {"/usr/sbin/httpd", "-D",
"DEFINED"});
+
+ ApacheDirectiveTree tree = new ApacheDirectiveTree();
+ ApacheParser parser = new ApacheParserImpl(tree, new File(tmpDir,
"runtime-config/conditional").getAbsolutePath());
+ ApacheConfigReader.buildTree(new File(tmpDir,
"runtime-config/conditional/httpd.conf").getAbsolutePath(), parser);
+
+ tree = RuntimeApacheConfiguration.extract(tree, pinfo, binfo,
ApacheServerDiscoveryComponent.MODULE_SOURCE_FILE_TO_MODULE_NAME_20);
+
+ List<VhostSpec> vhosts = VhostSpec.detect(tree);
+
+ List<VhostSpec> expectedVhosts = new ArrayList<VhostSpec>();
+
+ expectedVhosts.add(new VhostSpec(Collections.singleton("127.0.0.1:80"),
"ifdefine.defined"));
+ expectedVhosts.add(new VhostSpec(Collections.singleton("127.0.0.1:82"),
"ifmodule.loaded.source-file"));
+ expectedVhosts.add(new VhostSpec(Collections.singleton("127.0.0.1:83"),
"ifmodule.loaded.module-name"));
+ expectedVhosts.add(new VhostSpec(Collections.singleton("127.0.0.1:88"),
"ifdefine.ifmodule.loaded.source-file"));
+ expectedVhosts.add(new VhostSpec(Collections.singleton("127.0.0.1:89"),
"ifdefine.ifmodule.loaded.module-name"));
+
+ assertEquals(vhosts, expectedVhosts);
+ }
+
+ public void testInclusionOrder() {
+ MockApacheBinaryInfo binfo = new MockApacheBinaryInfo();
+ binfo.setVersion("2.2.17");
+ MockProcessInfo pinfo = new MockProcessInfo();
+ pinfo.setCommandLine(new String[] {"/usr/sbin/httpd"});
+
+ ApacheDirectiveTree tree = new ApacheDirectiveTree();
+ ApacheParser parser = new ApacheParserImpl(tree, new File(tmpDir,
"runtime-config/incl-order").getAbsolutePath());
+ ApacheConfigReader.buildTree(new File(tmpDir,
"runtime-config/incl-order/httpd.conf").getAbsolutePath(), parser);
+
+ tree = RuntimeApacheConfiguration.extract(tree, pinfo, binfo,
ApacheServerDiscoveryComponent.MODULE_SOURCE_FILE_TO_MODULE_NAME_20);
+
+ List<ApacheDirective> listens = tree.search("/Listen");
+
+ assertEquals(listens.size(), 3, "There should be 3 listen
directives");
+
+ assertEquals(listens.get(0).getValuesAsString(), "80");
+ assertEquals(listens.get(1).getValuesAsString(), "81");
+ assertEquals(listens.get(2).getValuesAsString(), "82");
+ }
+
+ public void testVhostNames() {
+ MockApacheBinaryInfo binfo = new MockApacheBinaryInfo();
+ binfo.setVersion("2.2.17");
+ MockProcessInfo pinfo = new MockProcessInfo();
+ pinfo.setCommandLine(new String[] {"/usr/sbin/httpd"});
+
+ ApacheDirectiveTree tree = new ApacheDirectiveTree();
+ ApacheParser parser = new ApacheParserImpl(tree, new File(tmpDir,
"runtime-config/vhost-names").getAbsolutePath());
+ ApacheConfigReader.buildTree(new File(tmpDir,
"runtime-config/vhost-names/httpd.conf").getAbsolutePath(), parser);
+
+ tree = RuntimeApacheConfiguration.extract(tree, pinfo, binfo,
ApacheServerDiscoveryComponent.MODULE_SOURCE_FILE_TO_MODULE_NAME_20);
+
+ //TODO implement this
+ }
+
+ private void copyResourceToFile(String resourcePath, File destination) throws
IOException {
+ InputStream input =
getClass().getClassLoader().getResourceAsStream(resourcePath);
+
+ if (input != null) {
+ destination.getParentFile().mkdirs();
+ destination.createNewFile();
+
+ BufferedOutputStream output = new BufferedOutputStream(new
FileOutputStream(destination));
+
+ try {
+ int data;
+ while((data = input.read()) != -1) {
+ output.write(data);
+ }
+ } finally {
+ input.close();
+ output.close();
+ }
+ }
+ }
+
+ private static class VhostSpec {
+ public List<String> definition;
+ public String serverName;
+
+ public static List<VhostSpec> detect(ApacheDirectiveTree tree) {
+ List<VhostSpec> ret = new ArrayList<VhostSpec>();
+
+ for(ApacheDirective vhost : tree.search("/<VirtualHost")) {
+ ret.add(new VhostSpec(vhost));
+ }
+
+ return ret;
+ }
+
+ public VhostSpec(ApacheDirective vhost) {
+ definition = vhost.getValues();
+ List<ApacheDirective> serverNames =
vhost.getChildByName("ServerName");
+ if (serverNames.size() > 0) {
+ serverName = serverNames.get(0).getValuesAsString();
+ }
+ }
+
+ public VhostSpec(Collection<String> definition, String serverName) {
+ this.definition = new ArrayList<String>(definition);
+ this.serverName = serverName;
+ }
+
+ @Override
+ public String toString() {
+ return "VhostSpec[serverName='" + serverName + "',
definition=" + definition + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ return serverName.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == this) {
+ return true;
+ }
+
+ if (!(other instanceof VhostSpec)) {
+ return false;
+ }
+
+ VhostSpec o = (VhostSpec) other;
+
+ return serverName.equals(o.serverName) &&
definition.equals(o.definition);
+ }
+ }
+}
diff --git
a/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/util/MockApacheBinaryInfo.java
b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/util/MockApacheBinaryInfo.java
new file mode 100644
index 0000000..adb5ac8
--- /dev/null
+++
b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/util/MockApacheBinaryInfo.java
@@ -0,0 +1,126 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2011 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.plugins.apache.util;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Class used to represent the apache binary in the runtime configuration tests.
+ *
+ * @author Lukas Krejci
+ */
+public class MockApacheBinaryInfo extends ApacheBinaryInfo {
+
+ private Set<String> defines = new HashSet<String>();
+ private Set<String> modules = new HashSet<String>();
+ private String configFile;
+ private String binaryPath;
+ private String built;
+ private long lastModified;
+ private String mpm;
+ private String root;
+ private String version;
+
+ public MockApacheBinaryInfo() {
+ super(null);
+ }
+
+ @Override
+ public String getBinaryPath() {
+ return binaryPath;
+ }
+
+ public void setBinaryPath(String path) {
+ this.binaryPath = path;
+ }
+
+ @Override
+ public String getBuilt() {
+ return built;
+ }
+
+ public void setBuilt(String built) {
+ this.built = built;
+ }
+
+ @Override
+ public Set<String> getCompiledInDefines() {
+ return defines;
+ }
+
+ public void setCompiledInDefines(Set<String> defines) {
+ this.defines = defines;
+ }
+
+ @Override
+ public Set<String> getCompiledInModules() {
+ return modules;
+ }
+
+ public void setCompiledInModules(Set<String> modules) {
+ this.modules = modules;
+ }
+
+ @Override
+ public String getCtl() {
+ return configFile;
+ }
+
+ public void setCtl(String ctl) {
+ this.configFile = ctl;
+ }
+
+ @Override
+ public long getLastModified() {
+ return lastModified;
+ }
+
+ public void setLastModified(long lastModified) {
+ this.lastModified = lastModified;
+ }
+
+ @Override
+ public String getMpm() {
+ return mpm;
+ }
+
+ public void setMpm(String mpm) {
+ this.mpm = mpm;
+ }
+
+ @Override
+ public String getRoot() {
+ return root;
+ }
+
+ public void setRoot(String root) {
+ this.root = root;
+ }
+
+ @Override
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+}
diff --git
a/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/util/MockProcessInfo.java
b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/util/MockProcessInfo.java
new file mode 100644
index 0000000..2832ce2
--- /dev/null
+++
b/modules/plugins/apache/src/test/java/org/rhq/plugins/apache/util/MockProcessInfo.java
@@ -0,0 +1,51 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2011 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.plugins.apache.util;
+
+import org.rhq.core.system.ProcessInfo;
+
+/**
+ * Class used to pretend the apache process info in the runtime configuration tests.
+ *
+ * @author Lukas Krejci
+ */
+public class MockProcessInfo extends ProcessInfo {
+
+ private long pid;
+ private String[] commandLine;
+
+ @Override
+ public long getPid() {
+ return pid;
+ }
+
+ public void setPid(long pid) {
+ this.pid = pid;
+ }
+
+ @Override
+ public String[] getCommandLine() {
+ return commandLine;
+ }
+
+ public void setCommandLine(String[] commandLine) {
+ this.commandLine = commandLine;
+ }
+}
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/httpd.conf
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/httpd.conf
new file mode 100644
index 0000000..7325704
--- /dev/null
+++ b/modules/plugins/apache/src/test/resources/runtime-config/conditional/httpd.conf
@@ -0,0 +1,2 @@
+Include if*.conf
+Include nested-mess.conf
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-defined.conf
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-defined.conf
new file mode 100644
index 0000000..7631a5c
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-defined.conf
@@ -0,0 +1,5 @@
+<IfDefine DEFINED>
+ <VirtualHost 127.0.0.1:80>
+ ServerName ifdefine.defined
+ </VirtualHost>
+</IfDefine>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-undefined.conf
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-undefined.conf
new file mode 100644
index 0000000..6acd1a5
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifdefine-undefined.conf
@@ -0,0 +1,5 @@
+<IfDefine UNDEFINED>
+ <VirtualHost 127.0.0.1:81>
+ ServerName ifdefine.undefined
+ </VirtualHost>
+</IfDefine>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-loaded.conf
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-loaded.conf
new file mode 100644
index 0000000..f9aba0a
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-loaded.conf
@@ -0,0 +1,13 @@
+LoadModule alias_module
+
+<IfModule mod_alias.c>
+ <VirtualHost 127.0.0.1:82>
+ ServerName ifmodule.loaded.source-file
+ </VirtualHost>
+</IfModule>
+
+<IfModule alias_module>
+ <VirtualHost 127.0.0.1:83>
+ ServerName ifmodule.loaded.module-name
+ </VirtualHost>
+</IfModule>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-not-loaded.conf
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-not-loaded.conf
new file mode 100644
index 0000000..611ba1a
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/ifmodule-not-loaded.conf
@@ -0,0 +1,11 @@
+<IfModule mod_not_loaded.c>
+ <VirtualHost 127.0.0.1:84>
+ ServerName ifmodule.not-loaded.source-file
+ </VirtualHost>
+</IfModule>
+
+<IfModule not_loaded_module>
+ <VirtualHost 127.0.0.1:85>
+ ServerName ifmodule.not-loaded.module-name
+ </VirtualHost>
+</IfModule>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/conditional/nested-mess.conf
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/nested-mess.conf
new file mode 100644
index 0000000..5a2ab62
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/runtime-config/conditional/nested-mess.conf
@@ -0,0 +1,53 @@
+<IfDefine DEFINED>
+ <IfModule mod_not_loaded.c>
+ <VirtualHost 127.0.0.1:86>
+ ServerName ifdefine.ifmodule.not-loaded.source-file
+ </VirtualHost>
+ </IfModule>
+
+ <IfModule not_loaded_module>
+ <VirtualHost 127.0.0.1:87>
+ ServerName ifdefine.ifmodule.not-loaded.module-name
+ </VirtualHost>
+ </IfModule>
+
+ <IfModule mod_alias.c>
+ <VirtualHost 127.0.0.1:88>
+ ServerName ifdefine.ifmodule.loaded.source-file
+ </VirtualHost>
+ </IfModule>
+
+ <IfModule alias_module>
+ <VirtualHost 127.0.0.1:89>
+ ServerName ifdefine.ifmodule.loaded.module-name
+ </VirtualHost>
+ </IfModule>
+</IfDefine>
+
+<IfDefine UNDEFINED>
+ <IfModule mod_not_loaded.c>
+ <VirtualHost 127.0.0.1:90>
+ ServerName not-ifdefine.ifmodule.not-loaded.source-file
+ </VirtualHost>
+ </IfModule>
+
+ <IfModule not_loaded_module>
+ <VirtualHost 127.0.0.1:91>
+ ServerName not-ifdefine.ifmodule.not-loaded.module-name
+ </VirtualHost>
+ </IfModule>
+
+ <IfModule mod_alias.c>
+ <VirtualHost 127.0.0.1:92>
+ ServerName not-ifdefine.ifmodule.loaded.source-file
+ </VirtualHost>
+ </IfModule>
+
+ <IfModule alias_module>
+ <VirtualHost 127.0.0.1:93>
+ ServerName not-ifdefine.ifmodule.loaded.module-name
+ </VirtualHost>
+ </IfModule>
+</IfDefine>
+
+
diff --git a/modules/plugins/apache/src/test/resources/runtime-config/incl-order/a.conf
b/modules/plugins/apache/src/test/resources/runtime-config/incl-order/a.conf
new file mode 100644
index 0000000..5c1d82b
--- /dev/null
+++ b/modules/plugins/apache/src/test/resources/runtime-config/incl-order/a.conf
@@ -0,0 +1 @@
+Listen 80
diff --git a/modules/plugins/apache/src/test/resources/runtime-config/incl-order/b.conf
b/modules/plugins/apache/src/test/resources/runtime-config/incl-order/b.conf
new file mode 100644
index 0000000..15adf3c
--- /dev/null
+++ b/modules/plugins/apache/src/test/resources/runtime-config/incl-order/b.conf
@@ -0,0 +1 @@
+Listen 81
diff --git a/modules/plugins/apache/src/test/resources/runtime-config/incl-order/c.conf
b/modules/plugins/apache/src/test/resources/runtime-config/incl-order/c.conf
new file mode 100644
index 0000000..dd36fbd
--- /dev/null
+++ b/modules/plugins/apache/src/test/resources/runtime-config/incl-order/c.conf
@@ -0,0 +1 @@
+Listen 82
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/incl-order/httpd.conf
b/modules/plugins/apache/src/test/resources/runtime-config/incl-order/httpd.conf
new file mode 100644
index 0000000..ee1ee60
--- /dev/null
+++ b/modules/plugins/apache/src/test/resources/runtime-config/incl-order/httpd.conf
@@ -0,0 +1 @@
+Include ?.conf
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/httpd.conf
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/httpd.conf
new file mode 100644
index 0000000..29a43eb
--- /dev/null
+++ b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/httpd.conf
@@ -0,0 +1,5 @@
+Listen 80
+Listen 127.0.0.1:90
+ServerName the-main-server-name:42
+
+Include vhost-*.conf
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-with-servername-by-ip.conf
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-with-servername-by-ip.conf
new file mode 100644
index 0000000..978892c
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-with-servername-by-ip.conf
@@ -0,0 +1,3 @@
+<VirtualHost 127.0.0.1:1000>
+ ServerName 12.34.56.78
+</VirtualHost>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-with-servername-by-unresolvable-hostname.conf
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-with-servername-by-unresolvable-hostname.conf
new file mode 100644
index 0000000..d38cfc3
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-with-servername-by-unresolvable-hostname.conf
@@ -0,0 +1,3 @@
+<VirtualHost 127.0.0.1:1001>
+ ServerName this-will-never-resolve.weird-server.net:90
+</VirtualHost>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-without-servername-resolvable-ip.conf
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-without-servername-resolvable-ip.conf
new file mode 100644
index 0000000..16586d1
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-without-servername-resolvable-ip.conf
@@ -0,0 +1,3 @@
+<VirtualHost 127.0.0.1:1002>
+
+</VirtualHost>
diff --git
a/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-without-servername-unresolvable-ip.conf
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-without-servername-unresolvable-ip.conf
new file mode 100644
index 0000000..1637446
--- /dev/null
+++
b/modules/plugins/apache/src/test/resources/runtime-config/vhost-names/vhost-without-servername-unresolvable-ip.conf
@@ -0,0 +1,3 @@
+<VirtualHost 12.34.56.78:1003>
+
+</VirtualHost>
commit 508fae8bb1cb9a3d161754a753a36b7781315ccd
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Fri May 6 17:35:20 2011 +0200
BZ 702691 - ResourceContext.getNativeProcess() now always reports the current process
info or null if no process exists for given resource.
diff --git
a/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/ResourceContext.java
b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/ResourceContext.java
index 34aa633..a86a08d 100644
---
a/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/ResourceContext.java
+++
b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/ResourceContext.java
@@ -202,16 +202,30 @@ public class ResourceContext<T extends ResourceComponent> {
* @return information on the resource's process
*/
public ProcessInfo getNativeProcess() {
- if ((this.processInfo == null) || !this.processInfo.isRunning()) {
- // TODO: should we null out processInfo? if it isn't running, the old
processInfo is no longer valid
+ boolean rediscover = this.processInfo == null;
+
+ if (!rediscover) {
+ //if the process info thinks the process is running,
+ //refresh it to check its facts again
+ if (this.processInfo.isRunning()) {
+ this.processInfo.refresh();
+ }
+ rediscover = !this.processInfo.isRunning();
+ }
+
+ if (rediscover) {
+ //This method is documented to return null if the process can no longer be
found.
+ //Let's make sure that's the case and null it out now. The discovery
might or might not
+ //reassign it.
+ this.processInfo = null;
if (this.resourceDiscoveryComponent != null) {
try {
Set<DiscoveredResourceDetails> details;
- ResourceDiscoveryContext context;
+ ResourceDiscoveryContext<ResourceComponent<?>> context;
- context = new ResourceDiscoveryContext(this.resourceType,
this.parentResourceComponent, this,
- this.systemInformation, getNativeProcessesForType(),
Collections.EMPTY_LIST,
- getPluginContainerName(), getPluginContainerDeployment());
+ context = new
ResourceDiscoveryContext<ResourceComponent<?>>(this.resourceType,
+ this.parentResourceComponent, this, this.systemInformation,
getNativeProcessesForType(),
+ Collections.EMPTY_LIST, getPluginContainerName(),
getPluginContainerDeployment());
details =
this.resourceDiscoveryComponent.discoverResources(context);
commit 43332d44c33e12ff5dfcfed715d53f7709697bfb
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Thu May 5 18:16:48 2011 +0200
BZ 694476 - apache vhost resource configuration loading/update converted to take
advantage of the SNMP WWW Service Index property, no imperfect RK matching anymore.
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceComponent.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceComponent.java
index ed610c1..f6e261c 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceComponent.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/ApacheVirtualHostServiceComponent.java
@@ -341,73 +341,47 @@ public class ApacheVirtualHostServiceComponent implements
ResourceComponent<Apac
public AugeasNode getNode(AugeasTree tree) {
String resourceKey = resourceContext.getResourceKey();
- if
(ApacheVirtualHostServiceComponent.MAIN_SERVER_RESOURCE_KEY.equals(resourceKey)) {
- return tree.getRootNode();
- }
+ int snmpIdx = getWwwServiceIndex();
- String serverName = null;
- int pipeIdx = resourceKey.indexOf('|');
- //the resource key always contains the '|' so we're only checking for
non-empty
- //server names
- if (pipeIdx > 0) {
- serverName = resourceKey.substring(0, pipeIdx);
- }
+ ApacheServerComponent server = resourceContext.getParentResourceComponent();
- String[] addrs = resourceKey.substring(pipeIdx + 1).split(" ");
- List<AugeasNode> nodes = tree.matchRelative(tree.getRootNode(),
"<VirtualHost");
- List<AugeasNode> virtualHosts = new ArrayList<AugeasNode>();
+ if (snmpIdx < 1) {
+ throw new IllegalStateException(
+ "Could not determine the index of the virtual host [" +
resourceKey + "] in the runtime configuration. This is very strange.");
+ }
- boolean matching = false;
+ if (snmpIdx == 1) {
+ return tree.getRootNode();
+ }
- for (AugeasNode node : nodes) {
- matching = false;
- List<AugeasNode> serverNameNodes = tree.matchRelative(node,
"ServerName/param");
- String tempServerName = null;
+ final List<AugeasNode> allVhosts = new ArrayList<AugeasNode>();
- if (!(serverNameNodes.isEmpty())) {
- tempServerName = serverNameNodes.get(0).getValue();
- }
- if (tempServerName == null & serverName == null) {
- matching = true;
- }
-
- if (tempServerName != null & serverName != null) {
- if (tempServerName.equals(serverName)) {
- matching = true;
+ RuntimeApacheConfiguration.walkRuntimeConfig(new
RuntimeApacheConfiguration.NodeVisitor<AugeasNode>() {
+ public void visitOrdinaryNode(AugeasNode node) {
+ if ("<VirtualHost".equalsIgnoreCase(node.getLabel())) {
+ allVhosts.add(node);
}
}
-
- if (matching) {
- List<AugeasNode> params = node.getChildByLabel("param");
- for (AugeasNode nd : params) {
- matching = false;
- for (String adr : addrs) {
- if (adr.equals(nd.getValue())) {
- matching = true;
- }
- }
- if (!matching) {
- break;
- }
- }
- if (matching) {
- virtualHosts.add(node);
- }
+ public void visitConditionalNode(AugeasNode node, boolean isSatisfied) {
}
- }
-
- if (virtualHosts.size() == 0) {
- throw new IllegalStateException("Could not find virtual host
configuration in augeas for virtual host: "
- + resourceKey);
- }
+ }, tree, server.getCurrentProcessInfo(), server.getCurrentBinaryInfo(),
server.getModuleNames());
- if (virtualHosts.size() > 1) {
- throw new IllegalStateException("Found more than 1 virtual host
configuration in augeas for virtual host: "
- + resourceKey);
- }
+ //transform the SNMP index into the index of the vhost
+ int idx = allVhosts.size() - snmpIdx + 1;
+
+ AugeasNode vhost = allVhosts.get(idx);
- return virtualHosts.get(0);
+ //now check if there are any If* directives underneath this vhost.
+ //we don't support configuring such beasts.
+ if (vhost.getChildByLabel("<IfDefine").isEmpty() &&
vhost.getChildByLabel("<IfModule").isEmpty()
+ && vhost.getChildByLabel("<IfVersion").isEmpty()) {
+
+ return vhost;
+ } else {
+ throw new IllegalStateException("Configuration of the virtual host
[" + resourceKey
+ + "] contains conditional blocks. This is not supported by this
plugin.");
+ }
}
/**
diff --git
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/RuntimeApacheConfiguration.java
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/RuntimeApacheConfiguration.java
index 894dd11..8524691 100644
---
a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/RuntimeApacheConfiguration.java
+++
b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/RuntimeApacheConfiguration.java
@@ -19,7 +19,10 @@
package org.rhq.plugins.apache.util;
+import java.util.ArrayDeque;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -30,6 +33,8 @@ import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.rhq.augeas.node.AugeasNode;
+import org.rhq.augeas.tree.AugeasTree;
import org.rhq.core.domain.util.OSGiVersionComparator;
import org.rhq.core.system.ProcessInfo;
import org.rhq.plugins.apache.parser.ApacheDirective;
@@ -41,16 +46,199 @@ import org.rhq.plugins.apache.parser.ApacheDirectiveTree;
public class RuntimeApacheConfiguration {
private static final Log LOG = LogFactory.getLog(RuntimeApacheConfiguration.class);
-
+
private enum ModuleLoadedState {
LOADED, NOT_LOADED, UNKNOWN
}
-
+
private RuntimeApacheConfiguration() {
}
/**
+ * This is a node visitor interface to be implemented by the users of the
+ * {@link RuntimeApacheConfiguration#walkRuntimeConfig(ApacheAugeasTree, ProcessInfo,
ApacheBinaryInfo, Map)}
+ * or {@link RuntimeApacheConfiguration#walkRuntimeConfig(ApacheDirectiveTree,
ProcessInfo, ApacheBinaryInfo, Map)}
+ * methods.
+ */
+ public interface NodeVisitor<T> {
+
+ /**
+ * This method is called whenever the apache config tree walker encounters one of
the If* directives (IfModule, IfDefine, IfVersion).
+ *
+ * @param node the If* directive
+ * @param isSatisfied true if the directive's condition is satisfied, false
otherwise
+ */
+ void visitConditionalNode(T node, boolean isSatisfied);
+
+ /**
+ * This method is called for all "ordinary" directives that the apache
config tree walker encounters (i.e. all but the ones handled by the {@link
#visitConditionalNode(Object)}
+ * method.
+ *
+ * @param node the directive
+ */
+ void visitOrdinaryNode(T node);
+ }
+
+ /**
+ * Extension of the {@link NodeVisitor} that is used internally to abstract out the
+ * algorithm from the underlying data model.
+ * There's just one transform method that walks any kind of apache config tree
representation
+ * and produces the runtime config. Different impls of this interface can
+ * produce different "side-effects" of that walk.
+ *
+ * @author Lukas Krejci
+ */
+ private interface TreeWalker<T> extends NodeVisitor<T> {
+
+ void onBeforeChildrenScan(T node);
+
+ void onAfterChildrenScan(T node);
+
+ Collection<T> getChildren(T node);
+
+ String getValue(T node);
+
+ List<String> getValues(T node);
+
+ String getName(T node);
+ }
+
+ /**
+ * Impl of {@link TreeWalker} interface that transforms the tree by replacing
+ * the conditional directives that are satisfied with their "contents".
+ *
+ * @author Lukas Krejci
+ */
+ private static class TransformingWalker implements TreeWalker<ApacheDirective>
{
+
+ private static class NodesToModify {
+ ArrayList<ApacheDirective> nodesToRemove = new
ArrayList<ApacheDirective>();
+ ArrayList<ApacheDirective> nodesToPromote = new
ArrayList<ApacheDirective>();
+ }
+
+ private Deque<NodesToModify> currentNodeStack = new
ArrayDeque<NodesToModify>();
+
+ public void visitConditionalNode(ApacheDirective node, boolean isSatisfied) {
+ NodesToModify nodes = currentNodeStack.peek();
+ if (isSatisfied) {
+ nodes.nodesToPromote.add(node);
+ } else {
+ nodes.nodesToRemove.add(node);
+ }
+ }
+
+ public void visitOrdinaryNode(ApacheDirective node) {
+ }
+
+ public void onBeforeChildrenScan(ApacheDirective node) {
+ currentNodeStack.push(new NodesToModify());
+ }
+
+ public void onAfterChildrenScan(ApacheDirective parentNode) {
+ NodesToModify nodes = currentNodeStack.pop();
+
+ for (ApacheDirective node : nodes.nodesToRemove) {
+ parentNode.getChildDirectives().remove(node);
+ }
+
+ //add the children of node as children of parent node at the place node
+ //was declared and remove node ... i.e. make it so as if the child nodes
+ //of node were directly in the parentNode in the place of node
+ for (ApacheDirective node : nodes.nodesToPromote) {
+ int nodeIdx = parentNode.getChildDirectives().indexOf(node);
+
+ List<ApacheDirective> childNodes = node.getChildDirectives();
+ for (int i = childNodes.size() - 1; i >= 0; --i) {
+ ApacheDirective childNode = childNodes.get(i);
+ parentNode.getChildDirectives().add(nodeIdx, childNode);
+ childNode.setParentNode(parentNode);
+ }
+
+ parentNode.getChildDirectives().remove(nodeIdx + childNodes.size());
+ }
+ }
+
+ public Collection<ApacheDirective> getChildren(ApacheDirective node) {
+ return node.getChildDirectives();
+ }
+
+ public String getValue(ApacheDirective node) {
+ return node.getValuesAsString();
+ }
+
+ public List<String> getValues(ApacheDirective node) {
+ return node.getValues();
+ }
+
+ public String getName(ApacheDirective node) {
+ return node.getName();
+ }
+ }
+
+ /**
+ * This is a "wrapping" class for the number of parameters that are needed
+ * in the transform method.
+ *
+ * @author Lukas Krejci
+ */
+ private static class TransformState {
+ public Set<String> loadedModules;
+ public Set<String> defines;
+ public Map<String, String> moduleNames;
+ public Map<String, String> moduleFiles;
+ public String httpdVersion;
+
+ public TransformState(ProcessInfo httpdProcessInfo, ApacheBinaryInfo
httpdBinaryInfo,
+ Map<String, String> moduleNames) {
+ defines = new HashSet<String>(httpdBinaryInfo.getCompiledInDefines());
+
+ if (httpdProcessInfo != null) {
+ String[] args = httpdProcessInfo.getCommandLine();
+ for (int i = 1; i < args.length; ++i) {
+ String define = null;
+ if (args[i] != null && args[i].startsWith("-D")) {
+ define = args[i].substring(2).trim();
+ }
+
+ if (define != null && define.isEmpty()) {
+ //this means we saw an empty -D arg. This can happen if there is
a space between -D and the value.
+ //That is legal though, so we have to accomodate for that.
+ if (i < args.length - 1) {
+ define = args[i + 1].trim();
+ if (define.startsWith("-")) {
+ //this would be another option
+ define = null;
+ } else {
+ ++i; //we can skip the next arg
+ }
+ } else {
+ define = null; //well -D is the last argument
+ }
+ }
+
+ if (define != null) {
+ defines.add(define);
+ }
+ }
+ }
+
+ loadedModules = new HashSet<String>();
+ loadedModules.addAll(httpdBinaryInfo.getCompiledInModules());
+
+ this.moduleNames = moduleNames;
+
+ //build a map for reverse lookup we might need in the transform method
+ moduleFiles = new HashMap<String, String>(moduleNames.size());
+ for (Map.Entry<String, String> e : moduleNames.entrySet()) {
+ moduleFiles.put(e.getValue(), e.getKey());
+ }
+
+ httpdVersion = httpdBinaryInfo.getVersion();
+ }
+ }
+
+ /**
* Given the apache configuration and information about the parameters httpd was
executed
* with this method provides the directive tree that corresponds to the actual
* runtime configuration as used by httpd.
@@ -65,127 +253,173 @@ public class RuntimeApacheConfiguration {
* (i.e. mapping from the name used in IfModule to the name used in LoadModule)
* @return a new directive tree that represents the runtime configuration
*/
- public static ApacheDirectiveTree extract(ApacheDirectiveTree tree, ProcessInfo
httpdProcessInfo, ApacheBinaryInfo httpdBinaryInfo, Map<String, String> moduleNames)
{
+ public static ApacheDirectiveTree extract(ApacheDirectiveTree tree, ProcessInfo
httpdProcessInfo,
+ ApacheBinaryInfo httpdBinaryInfo, Map<String, String> moduleNames) {
ApacheDirectiveTree ret = tree.clone();
-
- List<String> defines = new
ArrayList<String>(httpdBinaryInfo.getCompiledInDefines());
-
- if (httpdProcessInfo != null) {
- String[] args = httpdProcessInfo.getCommandLine();
- for(int i = 1; i < args.length; ++i) {
- String define = null;
- if (args[i] != null && args[i].startsWith("-D")) {
- define = args[i].substring(2).trim();
- }
-
- if (define != null && define.isEmpty()) {
- //this means we saw an empty -D arg. This can happen if there is a
space between -D and the value.
- //That is legal though, so we have to accomodate for that.
- if (i < args.length - 1) {
- define = args[i + 1].trim();
- if (define.startsWith("-")) {
- //this would be another option
- define = null;
- } else {
- ++i; //we can skip the next arg
- }
- } else {
- define = null; //well -D is the last argument
- }
+ transform(new TransformingWalker(), ret.getRootNode(), new
TransformState(httpdProcessInfo, httpdBinaryInfo,
+ moduleNames));
+
+ return ret;
+ }
+
+ public static void walkRuntimeConfig(final NodeVisitor<ApacheDirective>
visitor, ApacheDirectiveTree tree,
+ ProcessInfo httpdProcessInfo, ApacheBinaryInfo httpdBinaryInfo, Map<String,
String> moduleNames) {
+ TreeWalker<ApacheDirective> walker = new
TreeWalker<ApacheDirective>() {
+ public void visitConditionalNode(ApacheDirective node, boolean isSatisfied)
{
+ visitor.visitConditionalNode(node, isSatisfied);
+ }
+
+ public void visitOrdinaryNode(ApacheDirective node) {
+ visitor.visitOrdinaryNode(node);
+ }
+
+ public void onBeforeChildrenScan(ApacheDirective node) {
+ }
+
+ public void onAfterChildrenScan(ApacheDirective node) {
+ }
+
+ public Collection<ApacheDirective> getChildren(ApacheDirective node) {
+ return node.getChildDirectives();
+ }
+
+ public String getValue(ApacheDirective node) {
+ return node.getValuesAsString();
+ }
+
+ public List<String> getValues(ApacheDirective node) {
+ return node.getValues();
+ }
+
+ public String getName(ApacheDirective node) {
+ return node.getName();
+ }
+ };
+
+ transform(walker, tree.getRootNode(), new TransformState(httpdProcessInfo,
httpdBinaryInfo, moduleNames));
+ }
+
+ public static void walkRuntimeConfig(final NodeVisitor<AugeasNode> visitor,
AugeasTree tree,
+ ProcessInfo httpdProcessInfo, ApacheBinaryInfo httpdBinaryInfo, Map<String,
String> moduleNames) {
+ TreeWalker<AugeasNode> walker = new TreeWalker<AugeasNode>() {
+ public void visitConditionalNode(AugeasNode node, boolean isSatisfied) {
+ visitor.visitConditionalNode(node, isSatisfied);
+ }
+
+ public void visitOrdinaryNode(AugeasNode node) {
+ visitor.visitOrdinaryNode(node);
+ }
+
+ public void onBeforeChildrenScan(AugeasNode node) {
+ }
+
+ public void onAfterChildrenScan(AugeasNode node) {
+ }
+
+ public Collection<AugeasNode> getChildren(AugeasNode node) {
+ return node.getChildNodes();
+ }
+
+ public String getValue(AugeasNode node) {
+ StringBuilder bld = new StringBuilder();
+ for (String val : getValues(node)) {
+ bld.append(val);
}
-
- if (define != null) {
- defines.add(define);
+ return bld.toString();
+ }
+
+ public List<String> getValues(AugeasNode node) {
+ ArrayList<String> ret = new ArrayList<String>();
+
+ List<AugeasNode> params = node.getChildByLabel("param");
+
+ for (AugeasNode n : params) {
+ ret.add(n.getValue());
}
+ return ret;
}
- }
-
- HashSet<String> loadedModules = new HashSet<String>();
- loadedModules.addAll(httpdBinaryInfo.getCompiledInModules());
-
- //build a map for reverse lookup we might need in the transform method
- HashMap<String, String> moduleFiles = new HashMap<String,
String>(moduleNames.size());
- for(Map.Entry<String, String> e : moduleNames.entrySet()) {
- moduleFiles.put(e.getValue(), e.getKey());
- }
-
- transform(ret.getRootNode(), loadedModules, defines, moduleNames, moduleFiles,
httpdBinaryInfo.getVersion());
- return ret;
+ public String getName(AugeasNode node) {
+ return node.getLabel();
+ }
+ };
+ transform(walker, tree.getRootNode(), new TransformState(httpdProcessInfo,
httpdBinaryInfo, moduleNames));
}
-
- private static void transform(ApacheDirective parentNode, Set<String>
currentlyLoadedModules, List<String> defines, Map<String, String> moduleNames,
Map<String, String> moduleFiles, String httpdVersion) {
- if (parentNode.getChildDirectives().isEmpty()) {
+
+ private static <T> void transform(TreeWalker<T> walker, T parentNode,
TransformState state) {
+ if (walker.getChildren(parentNode).isEmpty()) {
return;
}
-
- ArrayList<ApacheDirective> nodesToRemove = new
ArrayList<ApacheDirective>();
- ArrayList<ApacheDirective> nodesToPromote = new
ArrayList<ApacheDirective>();
-
- for (ApacheDirective node : parentNode.getChildDirectives()) {
- if (node.getName().equalsIgnoreCase("LoadModule")) {
- currentlyLoadedModules.add(node.getValues().get(0));
- } else if (node.getName().equalsIgnoreCase("<IfModule")) {
- String moduleFile = node.getValuesAsString();
+
+ walker.onBeforeChildrenScan(parentNode);
+
+ for (T node : walker.getChildren(parentNode)) {
+ boolean recurseFurther = true;
+
+ if (walker.getName(node).equalsIgnoreCase("LoadModule")) {
+ state.loadedModules.add(walker.getValue(node));
+ walker.visitOrdinaryNode(node);
+ } else if (walker.getName(node).equalsIgnoreCase("<IfModule"))
{
+ String moduleFile = walker.getValue(node);
boolean negate = false;
if (moduleFile.startsWith("!")) {
negate = true;
moduleFile = moduleFile.substring(1);
}
-
+
boolean result = false;
-
- switch(isModuleLoaded(moduleFile, currentlyLoadedModules, moduleNames,
moduleFiles)) {
- case LOADED : result = true; break;
- case NOT_LOADED : result = false; break;
- case UNKNOWN :
+
+ switch (isModuleLoaded(moduleFile, state.loadedModules,
state.moduleNames, state.moduleFiles)) {
+ case LOADED:
+ result = true;
+ break;
+ case NOT_LOADED:
+ result = false;
+ break;
+ case UNKNOWN:
LOG.warn("Encountered unknown module name in an IfModule
directive: " + moduleFile);
continue;
}
-
- if (result != negate) {
- nodesToPromote.add(node);
- } else {
- nodesToRemove.add(node);
- }
- } else if (node.getName().equalsIgnoreCase("<IfDefine")) {
- String define = node.getValuesAsString();
+
+ recurseFurther = result != negate;
+
+ walker.visitConditionalNode(node, recurseFurther);
+ } else if (walker.getName(node).equalsIgnoreCase("<IfDefine"))
{
+ String define = walker.getValue(node);
boolean negate = false;
if (define.startsWith("!")) {
negate = true;
define = define.substring(1);
}
-
- boolean result = defines.contains(define);
-
- if (negate != result) {
- nodesToPromote.add(node);
- } else {
- nodesToRemove.add(node);
- }
- } else if (node.getName().equalsIgnoreCase("<IfVersion")) {
+
+ boolean result = state.defines.contains(define);
+
+ recurseFurther = result != negate;
+
+ walker.visitConditionalNode(node, recurseFurther);
+ } else if (walker.getName(node).equalsIgnoreCase("<IfVersion"))
{
//<IfVersion [[!]operator] version> ... </IfVersion>
//operator: =, ==, >, >=, <, <=, ~
//version major[.minor[.patch]] or /regex/
//if operator is ~, the version is assumed regex
//if operator is omitted, = is assumed
-
- if (isModuleLoaded("mod_version.c", currentlyLoadedModules,
moduleNames, moduleFiles) != ModuleLoadedState.LOADED) {
+
+ if (isModuleLoaded("mod_version.c", state.loadedModules,
state.moduleNames, state.moduleFiles) != ModuleLoadedState.LOADED) {
LOG.debug("mod_version not loaded and IfVersion directive
encountered. Skipping it.");
continue;
}
-
- List<String> values = node.getValues();
+
+ List<String> values = walker.getValues(node);
String operator = null;
String version = null;
boolean negate = false;
boolean regex = false;
-
+
if (values.size() == 0) {
LOG.warn("Invalid IfVersion directive.");
continue;
}
-
+
if (values.size() == 1) {
operator = "=";
version = values.get(0);
@@ -196,87 +430,72 @@ public class RuntimeApacheConfiguration {
LOG.warn("Too many arguments to a IfVersion directive: " +
values);
continue;
}
-
+
if (operator == null || version == null) {
LOG.warn("Invalid IfVersion with parameters: " + values);
continue;
}
-
+
if (operator.charAt(0) == '!') {
negate = true;
operator = operator.substring(1);
}
-
+
if ("==".equals(operator)) {
operator = "=";
}
-
+
if (version.charAt(0) == '/') {
if ("=".equals(operator) || "~".equals(operator))
{
regex = true;
version = version.substring(1, version.length() - 1);
} else {
- LOG.warn("Unsupported operator " + operator + "
with regex version comparison in IfVersion directive.");
+ LOG.warn("Unsupported operator " + operator
+ + " with regex version comparison in IfVersion
directive.");
continue;
}
}
-
+
OSGiVersionComparator comp = new OSGiVersionComparator();
-
+
boolean result = false;
if ("=".equals(operator)) {
if (regex) {
- result = Pattern.matches(version, httpdVersion);
+ result = Pattern.matches(version, state.httpdVersion);
} else {
- result = comp.compare(version, httpdVersion) == 0;
+ result = comp.compare(version, state.httpdVersion) == 0;
}
} else if ("~".equals(operator)) {
- result = Pattern.matches(version, httpdVersion);
+ result = Pattern.matches(version, state.httpdVersion);
} else if (">".equals(operator)) {
- result = comp.compare(httpdVersion, version) > 0;
+ result = comp.compare(state.httpdVersion, version) > 0;
} else if (">=".equals(operator)) {
- result = comp.compare(httpdVersion, version) >= 0;
+ result = comp.compare(state.httpdVersion, version) >= 0;
} else if ("<".equals(operator)) {
- result = comp.compare(httpdVersion, version) < 0;
+ result = comp.compare(state.httpdVersion, version) < 0;
} else if ("<=".equals(operator)) {
- result = comp.compare(httpdVersion, version) <= 0;
+ result = comp.compare(state.httpdVersion, version) <= 0;
} else {
LOG.warn("Unknown operator " + operator + " in an
IfVersion directive.");
continue;
}
-
- if (negate != result) {
- nodesToPromote.add(node);
- } else {
- nodesToRemove.add(node);
- }
- }
-
- transform(node, currentlyLoadedModules, defines, moduleNames, moduleFiles,
httpdVersion);
- }
-
- for(ApacheDirective node : nodesToRemove) {
- parentNode.getChildDirectives().remove(node);
- }
-
- //add the children of node as children of parent node at the place node
- //was declared and remove node ... i.e. make it so as if the child nodes
- //of node were directly in the parentNode in the place of node
- for(ApacheDirective node : nodesToPromote) {
- int nodeIdx = parentNode.getChildDirectives().indexOf(node);
-
- List<ApacheDirective> childNodes = node.getChildDirectives();
- for(int i = childNodes.size() - 1; i >= 0; --i) {
- ApacheDirective childNode = childNodes.get(i);
- parentNode.getChildDirectives().add(nodeIdx, childNode);
- childNode.setParentNode(parentNode);
+
+ recurseFurther = result != negate;
+
+ walker.visitConditionalNode(node, recurseFurther);
+ } else {
+ walker.visitOrdinaryNode(node);
}
- parentNode.getChildDirectives().remove(nodeIdx + childNodes.size());
- }
+ if (recurseFurther) {
+ transform(walker, node, state);
+ }
+ }
+ walker.onAfterChildrenScan(parentNode);
}
-
- private static ModuleLoadedState isModuleLoaded(String moduleIdentifier,
Set<String> currentlyLoadedModules, Map<String, String> moduleNames,
Map<String, String> moduleFiles) {
+
+ private static ModuleLoadedState isModuleLoaded(String moduleIdentifier,
Set<String> currentlyLoadedModules,
+ Map<String, String> moduleNames, Map<String, String> moduleFiles) {
String moduleName = moduleNames.get(moduleIdentifier);
if (moduleName == null) {
//as of apache 2.1 module files and module names can both be used in
IfModule
@@ -298,7 +517,7 @@ public class RuntimeApacheConfiguration {
//module name - consistent, huh?
boolean result = currentlyLoadedModules.contains(moduleIdentifier)
|| currentlyLoadedModules.contains(moduleName);
-
+
return result ? ModuleLoadedState.LOADED : ModuleLoadedState.NOT_LOADED;
- }
+ }
}
commit 1010ac2fc1e155c0867e6fcba330b2302f9258aa
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Sun May 15 18:02:03 2011 -0400
Ensure the component canvases in RadioGroupWithComponentsItem are properly
destroyed.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDistroFileStep.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDistroFileStep.java
index ca08fdb..a70b907 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDistroFileStep.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDistroFileStep.java
@@ -78,9 +78,9 @@ public class BundleUploadDistroFileStep extends AbstractWizardStep {
radioItems.put(RECIPE_OPTION, createRecipeForm());
if (parent != null) {
- mainCanvasForm = new
LocatableDynamicForm(parent.extendLocatorId("mainCanvasForm"));
+ mainCanvasForm = new
RadioDynamicForm(parent.extendLocatorId("mainCanvasForm"));
} else {
- mainCanvasForm = new LocatableDynamicForm("mainCanvasForm");
+ mainCanvasForm = new RadioDynamicForm("mainCanvasForm");
}
radioGroup = new
RadioGroupWithComponentsItem("bundleDistRadioGroup", MSG
@@ -324,4 +324,18 @@ public class BundleUploadDistroFileStep extends AbstractWizardStep {
new Message(MSG.view_bundle_createWizard_failedToUploadDistroFile(),
errorMessage, Severity.Error));
}
}
+
+ private class RadioDynamicForm extends LocatableDynamicForm {
+
+ public RadioDynamicForm(String locatorId) {
+ super(locatorId);
+ }
+
+ @Override
+ public void destroy() {
+ radioGroup.destroyComponents();
+ super.destroy();
+ }
+
+ }
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/RadioGroupWithComponentsItem.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/RadioGroupWithComponentsItem.java
index 7c7bd91..7a3d1e6 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/RadioGroupWithComponentsItem.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/RadioGroupWithComponentsItem.java
@@ -56,12 +56,12 @@ public class RadioGroupWithComponentsItem extends CanvasItem {
DynamicForm form) {
super(name, title);
-
+
this.valueMap = new LinkedHashMap<NameAndTitle, Canvas>();
- for(Map.Entry<String, ? extends Canvas> entry : valueMap.entrySet()) {
+ for (Map.Entry<String, ? extends Canvas> entry : valueMap.entrySet()) {
this.valueMap.put(new NameAndTitle(entry.getKey()), entry.getValue());
}
-
+
this.form = form;
// since the name is an internal identifier I think it can be used as the
locatorId
this.canvas = new RGWCCanvas(name);
@@ -77,18 +77,18 @@ public class RadioGroupWithComponentsItem extends CanvasItem {
if (selected == null) {
return -1;
}
-
+
int idx = 0;
- for(NameAndTitle t : valueMap.keySet()) {
+ for (NameAndTitle t : valueMap.keySet()) {
if (selected.equals(t.getTitle())) {
break;
}
++idx;
}
-
+
return idx;
}
-
+
public void setSelected(String selected) {
RadioGroupItem radio = (RadioGroupItem)
canvas.getItem(SeleniumUtility.getSafeId(selected));
if (radio != null) {
@@ -98,7 +98,7 @@ public class RadioGroupWithComponentsItem extends CanvasItem {
form.markForRedraw();
}
}
-
+
public Canvas getSelectedComponent() {
if (null == this.selected) {
return null;
@@ -110,41 +110,41 @@ public class RadioGroupWithComponentsItem extends CanvasItem {
private static class NameAndTitle {
private String name;
private String title;
-
+
public NameAndTitle(String title) {
name = SeleniumUtility.getSafeId(title);
this.title = title;
}
-
- public String getName() {
+
+ public String getName() {
return name;
}
-
+
public String getTitle() {
return title;
}
-
+
@Override
public int hashCode() {
return name.hashCode();
}
-
+
@Override
public boolean equals(Object other) {
if (other == this) {
return true;
}
-
+
if (!(other instanceof NameAndTitle)) {
return false;
}
-
+
NameAndTitle o = (NameAndTitle) other;
-
+
return name.equals(o.name);
}
}
-
+
public class RGWCCanvas extends LocatableDynamicForm {
public RGWCCanvas(String locatorId) {
@@ -224,4 +224,14 @@ public class RadioGroupWithComponentsItem extends CanvasItem {
}
}
+ public void destroyComponents() {
+ for (Canvas canvas : valueMap.values()) {
+ try {
+ canvas.destroy();
+ } catch (Throwable t) {
+ int i = 0;
+ }
+ }
+ }
+
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ResourceFactoryPackageStep.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ResourceFactoryPackageStep.java
index d0cde69..8d0b6c9 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ResourceFactoryPackageStep.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ResourceFactoryPackageStep.java
@@ -36,7 +36,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.Locatable;
*/
public class ResourceFactoryPackageStep extends AbstractWizardStep {
- private PackageVersionFileUploadForm form;
+ private PackageVersionFileUploadForm uploadForm;
private ResourceFactoryCreateWizard wizard;
private boolean isUploadComplete = false;
private int packageVersionId;
@@ -46,39 +46,39 @@ public class ResourceFactoryPackageStep extends AbstractWizardStep {
}
public Canvas getCanvas(Locatable parent) {
- if (null == form) {
+ if (null == uploadForm) {
if (parent != null) {
- form = new
PackageVersionFileUploadForm(parent.extendLocatorId("ResFactPackageStep"),
wizard
+ uploadForm = new
PackageVersionFileUploadForm(parent.extendLocatorId("ResFactPackageStep"),
wizard
.getNewResourcePackageType().getId(),
wizard.getChildType().getName(), wizard
.getNewResourceVersion(), wizard.getNewResourceArchitectureId(),
null, true, true, null);
} else {
- form = new PackageVersionFileUploadForm("ResFactPackageStep",
wizard.getNewResourcePackageType()
+ uploadForm = new
PackageVersionFileUploadForm("ResFactPackageStep",
wizard.getNewResourcePackageType()
.getId(), wizard.getChildType().getName(),
wizard.getNewResourceVersion(), wizard
.getNewResourceArchitectureId(), null, true, true, null);
}
- form.setPadding(20);
- form.addFormHandler(new DynamicFormHandler() {
+ uploadForm.setPadding(20);
+ uploadForm.addFormHandler(new DynamicFormHandler() {
public void onSubmitComplete(DynamicFormSubmitCompleteEvent event) {
processUpload();
}
});
- form.addFormSubmitFailedHandler(new FormSubmitFailedHandler() {
+ uploadForm.addFormSubmitFailedHandler(new FormSubmitFailedHandler() {
public void onFormSubmitFailed(FormSubmitFailedEvent event) {
return;
}
});
}
- return form;
+ return uploadForm;
}
private void processUpload() {
- if (Boolean.TRUE.equals(form.getUploadResult())) {
+ if (Boolean.TRUE.equals(uploadForm.getUploadResult())) {
isUploadComplete = true;
- this.wizard.setNewResourcePackageVersionId(form.getPackageVersionId());
+
this.wizard.setNewResourcePackageVersionId(uploadForm.getPackageVersionId());
} else {
- String errorMessage = form.getUploadError();
+ String errorMessage = uploadForm.getUploadError();
handleUploadError(errorMessage, true);
}
}
@@ -86,15 +86,15 @@ public class ResourceFactoryPackageStep extends AbstractWizardStep {
public boolean nextPage() {
wizard.getView().hideMessage();
- if (form.isUploadInProgress()) {
+ if (uploadForm.isUploadInProgress()) {
handleUploadError(MSG.widget_resourceFactoryWizard_uploadInProgress(),
false);
return false;
}
if (!isUploadComplete) {
- form.submitForm();
+ uploadForm.submitForm();
// on certain errors the form may never be submitted, report these errors
outside submit handlers
- handleUploadError(form.getUploadError(), false);
+ handleUploadError(uploadForm.getUploadError(), false);
return false;
}
commit fe42299afaf13792fc86ade7fd07ce002ceac0a2
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Sun May 15 18:00:58 2011 -0400
[704499 - Some button clicks in IE8 do not work]
Remove bad override of IE specific override of DynamicCallbackFormImpl. The
unhookEvents call made during the destroy call-chain referenced an old,
now unprovided param, in browser-native code. Also clean up some jdoc in
this class, and the superclass.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/DynamicCallbackFormImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/DynamicCallbackFormImpl.java
index 084d2c7..43c0e0f 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/DynamicCallbackFormImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/DynamicCallbackFormImpl.java
@@ -57,7 +57,6 @@ public class DynamicCallbackFormImpl {
* Hooks the iframe's onLoad event and the form's onSubmit event.
*
* @param iframe the iframe whose onLoad event is to be hooked
- * @param form the form whose onSubmit event is to be hooked
* @param listener the listener to receive notification
*/
public native void hookEvents(Element iframe,
@@ -78,7 +77,7 @@ public class DynamicCallbackFormImpl {
/**
* Submits a form.
*
- * @param form the form to be submitted
+ * @param action the submit action
* @param iframe the iframe that is targetted, or <code>null</code>
*/
public native void submit(String action, Element iframe) /*-{
@@ -92,7 +91,6 @@ public class DynamicCallbackFormImpl {
* Unhooks the iframe's onLoad event.
*
* @param iframe the iframe whose onLoad event is to be unhooked
- * @param form the form whose onSubmit event is to be unhooked
*/
public native void unhookEvents(Element iframe) /*-{
if (iframe)
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/DynamicCallbackFormImplIE6.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/DynamicCallbackFormImplIE6.java
index c8d8a03..f026085 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/DynamicCallbackFormImplIE6.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/DynamicCallbackFormImplIE6.java
@@ -40,10 +40,4 @@ public class DynamicCallbackFormImplIE6 extends DynamicCallbackFormImpl
{
}
}-*/;
- @Override
- public native void unhookEvents(Element iframe) /*-{
- if (iframe)
- iframe.onreadystatechange = null;
- form.onsubmit = null;
- }-*/;
}
commit 3625629ce609ebd6b5c227f8da4a40602d4dabe7
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri May 13 16:48:19 2011 -0400
[BZ 704354 - IE only, Operation Schedule New button throws Exception]
A second fix in the same area, this one for group operation schedule.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDetailsView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDetailsView.java
index 40615db..013bc85 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDetailsView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDetailsView.java
@@ -90,7 +90,7 @@ public class GroupOperationScheduleDetailsView extends
AbstractOperationSchedule
protected LocatableVLayout buildContentPane() {
LocatableVLayout contentPane = super.buildContentPane();
- HTMLFlow hr = new HTMLFlow("<p/><hr/><p/>");
+ HTMLFlow hr = new HTMLFlow("<hr/>");
contentPane.addMember(hr);
this.executionModeForm = new
EnhancedDynamicForm(extendLocatorId("ExecutionModeForm"), isReadOnly());
commit 3c4939917519960b854daec60c269379a1e58b66
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri May 13 14:22:21 2011 -0400
[704354 - IE only, Number Format Exception when scheduling an operation]
Actually solves one of potentially two problems for this BZ. Remove
some raw HTML that IE didn't like. Final rendering is minimally impacted.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
index 8573b4d..528f2ef 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
@@ -92,6 +92,8 @@ public abstract class AbstractOperationScheduleDetailsView extends
ResourceType resourceType, int scheduleId) {
super(locatorId, dataSource, scheduleId,
MSG.view_operationScheduleDetails_operationSchedule(), null);
+ this.setMembersMargin(5);
+
Set<OperationDefinition> operationDefinitions =
resourceType.getOperationDefinitions();
for (OperationDefinition operationDefinition : operationDefinitions) {
this.operationIdToNameMap.put(operationDefinition.getId(),
operationDefinition.getName());
@@ -167,12 +169,13 @@ public abstract class AbstractOperationScheduleDetailsView extends
this.operationParametersConfigurationHolder.setVisible(false);
contentPane.addMember(this.operationParametersConfigurationHolder);
- HTMLFlow hr = new HTMLFlow("<p/><hr/><p/>");
+ HTMLFlow hr = new HTMLFlow("<hr/>");
contentPane.addMember(hr);
this.triggerEditor = new
JobTriggerEditor(extendLocatorId("TriggerEditor"), isReadOnly());
contentPane.addMember(this.triggerEditor);
- hr = new HTMLFlow("<p/><hr/><p/>");
+
+ hr = new HTMLFlow("<hr/>");
contentPane.addMember(hr);
this.notesForm = new EnhancedDynamicForm(extendLocatorId("NotesForm"),
isReadOnly(), isNewRecord());
commit f5b7730ac641f40ac2a1ca48cea554a9ffdf11cd
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri May 13 13:51:13 2011 -0400
[BZ 702099] add an Expires: <one-year-from-now> HTTP header to responses to
requests for image files (
https://bugzilla.redhat.com/show_bug.cgi?id=702099)
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/filter/CacheControlFilter.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/filter/CacheControlFilter.java
index 3f49857..dcd0cfb 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/filter/CacheControlFilter.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/filter/CacheControlFilter.java
@@ -30,8 +30,9 @@ import java.io.IOException;
import java.util.Date;
/**
- * Specify the cache policy browsers should use for GWT-compiled files. See
- *
http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebuggin...
for more info.
+ * Specify the cache policy browsers should use for GWT-compiled files, as well as static
images. See
+ *
http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebuggin...
for more info on
+ * caching of GWT-compiled files.
*
* @author Ian Springer
*/
@@ -57,7 +58,7 @@ public class CacheControlFilter implements Filter {
httpResponse.setDateHeader("Expires", now.getTime() - 1);
httpResponse.setHeader("Pragma", "no-cache");
httpResponse.setHeader("Cache-Control", "public, max-age=0,
must-revalidate");
- } else if (requestURI.contains(".cache.")) {
+ } else if (requestURI.contains(".cache.") ||
requestURI.contains("/images/")) {
// Tell browser to cache the content for one year.
Date now = new Date();
HttpServletResponse httpResponse = (HttpServletResponse) response;
commit 28a77d47955f0d577dfaddd0901bf450ccb45f84
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Fri May 13 17:23:51 2011 +0200
Add a trait, that follows the same rules
diff --git
a/modules/plugins/pattern-generator/src/main/java/org/rhq/plugins/pattern/PatternComponent.java
b/modules/plugins/pattern-generator/src/main/java/org/rhq/plugins/pattern/PatternComponent.java
index 5ac3304..8a44947 100644
---
a/modules/plugins/pattern-generator/src/main/java/org/rhq/plugins/pattern/PatternComponent.java
+++
b/modules/plugins/pattern-generator/src/main/java/org/rhq/plugins/pattern/PatternComponent.java
@@ -8,6 +8,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.measurement.MeasurementDataTrait;
import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.measurement.MeasurementDataNumeric;
@@ -23,7 +24,9 @@ public class PatternComponent implements ResourceComponent,
MeasurementFacet
private final Log log = LogFactory.getLog(this.getClass());
int count = 0;
+ int traitCount = 0;
int number = 0; // We start with returning zeros
+ int numerForTrait = 0;
int[] wanted = new int[2];
/**
@@ -79,9 +82,6 @@ public class PatternComponent implements ResourceComponent,
MeasurementFacet
val = (double) number;
- if (number==1)
- System.out.println("XX 1 _ " + new Date());
-
count++;
// enough of this? Flip over to the other number and reset the series.
if (count>=wanted[number]) {
@@ -92,6 +92,19 @@ public class PatternComponent implements ResourceComponent,
MeasurementFacet
MeasurementDataNumeric res = new MeasurementDataNumeric(req, val);
report.addData(res);
}
+ else if (req.getName().equals("text1")) {
+
+ String trait = "Trait_" + number;
+ traitCount++;
+ // enough of this? Flip over to the other number and reset the series.
+ if (traitCount>=wanted[number]) {
+ number = 1-number;
+ traitCount=0;
+ }
+
+ MeasurementDataTrait res = new MeasurementDataTrait(req,trait);
+ report.addData(res);
+ }
}
}
}
diff --git a/modules/plugins/pattern-generator/src/main/resources/META-INF/rhq-plugin.xml
b/modules/plugins/pattern-generator/src/main/resources/META-INF/rhq-plugin.xml
index c3ad075..a4f5da4 100644
--- a/modules/plugins/pattern-generator/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/pattern-generator/src/main/resources/META-INF/rhq-plugin.xml
@@ -20,6 +20,7 @@
</plugin-configuration>
<metric property="pattern1" displayName="Pattern 1 metric"
defaultInterval="60000" displayType="summary"
defaultOn="true"/>
+ <metric property="text1" displayName="Pattern 1 trait"
defaultInterval="60000" displayType="summary"
defaultOn="true" dataType="trait"/>
</server>
commit 1a12b018b847d04916026468c0c5e8a7c6125c78
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri May 13 11:19:59 2011 -0400
move commented out block for http->https redirects from global web.xml to coregui
web.xml and portla-war web.xml, since adding it to the global web.xml breaks servlet comm,
because it affects the JBoss Remoting servlet invoker webapp
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
index d06fa58..9a86f83 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
+++ b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
@@ -309,4 +309,20 @@
<welcome-file>CoreGUI.html</welcome-file>
</welcome-file-list>
+
+ <!-- Uncomment the below to automatically redirect all HTTP requests to the
+ corresponding HTTPS URLs. -->
+ <!--
+ <security-constraint>
+ <display-name>Redirect HTTP to HTTPS</display-name>
+ <web-resource-collection>
+ <web-resource-name>Entire Application</web-resource-name>
+ <url-pattern>/*</url-pattern>
+ </web-resource-collection>
+ <user-data-constraint>
+ <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+ </user-data-constraint>
+ </security-constraint>
+ -->
+
</web-app>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/web.xml
b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/web.xml
index c9b61e7..1beef97 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/web.xml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/web.xml
@@ -532,4 +532,19 @@
<location>/common/GenericError.jsp</location>
</error-page>
+ <!-- Uncomment the below to automatically redirect all HTTP requests to the
+ corresponding HTTPS URLs. -->
+ <!--
+ <security-constraint>
+ <display-name>Redirect HTTP to HTTPS</display-name>
+ <web-resource-collection>
+ <web-resource-name>Entire Application</web-resource-name>
+ <url-pattern>/*</url-pattern>
+ </web-resource-collection>
+ <user-data-constraint>
+ <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+ </user-data-constraint>
+ </security-constraint>
+ -->
+
</web-app>
diff --git
a/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/conf/web.xml
b/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/conf/web.xml
index 82e7b98..7ff68c2 100644
---
a/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/conf/web.xml
+++
b/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/conf/web.xml
@@ -1248,19 +1248,4 @@
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
- <!-- Uncomment the below to automatically redirect all HTTP requests to the
- corresponding HTTPS URLs. -->
- <!--
- <security-constraint>
- <display-name>Redirect HTTP to HTTPS</display-name>
- <web-resource-collection>
- <web-resource-name>Entire Application</web-resource-name>
- <url-pattern>/*</url-pattern>
- </web-resource-collection>
- <user-data-constraint>
- <transport-guarantee>CONFIDENTIAL</transport-guarantee>
- </user-data-constraint>
- </security-constraint>
- -->
-
</web-app>
commit 37ed1572023e699e4a7c354a57e4b011bd0f2f13
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri May 13 10:33:09 2011 -0400
add lines to global web.xml that can be uncommented to force HTTPS; remove a few
lingering "JON" references from comments in xml files
diff --git
a/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/conf/web.xml
b/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/conf/web.xml
index 6ba5884..82e7b98 100644
---
a/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/conf/web.xml
+++
b/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/conf/web.xml
@@ -273,7 +273,7 @@
</init-param>
<!-- Uncomment to use jdk1.5 features in jsp pages -->
- <!-- JON: Uncommented. -->
+ <!-- RHQ: Uncommented. -->
<init-param>
<param-name>compilerSourceVM</param-name>
<param-value>1.5</param-value>
@@ -303,7 +303,7 @@
<param-value>jstl.jar</param-value>
</init-param>
-->
- <!-- JON: Note, we could instead load the JSF RI's impls of the
+ <!-- RHQ: Note, we could instead load the JSF RI's impls of the
standard JSF taglibs here, but, since we're using
Facelets rather than JSP, there's no point in doing so. -->
@@ -1248,4 +1248,19 @@
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
+ <!-- Uncomment the below to automatically redirect all HTTP requests to the
+ corresponding HTTPS URLs. -->
+ <!--
+ <security-constraint>
+ <display-name>Redirect HTTP to HTTPS</display-name>
+ <web-resource-collection>
+ <web-resource-name>Entire Application</web-resource-name>
+ <url-pattern>/*</url-pattern>
+ </web-resource-collection>
+ <user-data-constraint>
+ <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+ </user-data-constraint>
+ </security-constraint>
+ -->
+
</web-app>
diff --git
a/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/server.xml
b/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/server.xml
index 56ffb58..4d4ae48 100644
---
a/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/server.xml
+++
b/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/server.xml
@@ -92,7 +92,8 @@
keystorePass="RHQManagement" />
-->
- <!-- Define an AJP 1.3 Connector --><!-- JON -->
+ <!-- Define an AJP 1.3 Connector -->
+ <!-- RHQ -->
<!-- BZ: 557815 Commented out by default as the AJP component support is not on
par with the http/https connectors.
<Connector port="${rhq.server.startup.ajp.port}"
address="${jboss.bind.address}" protocol="AJP/1.3"
diff --git
a/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/mail-service.xml
b/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/mail-service.xml
index 2558574..d21950d 100644
---
a/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/mail-service.xml
+++
b/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/mail-service.xml
@@ -2,7 +2,7 @@
<!-- $Id: mail-service.xml 62349 2007-04-15 16:48:15Z dimitris(a)jboss.org $ -->
<server>
- <!-- JON Server Mail Connection Factory -->
+ <!-- RHQ Server Mail Connection Factory -->
<mbean code="org.jboss.mail.MailService"
name="jboss:service=Mail">
commit 5274e3aaf3b41616eda24559098b6be860c1062a
Merge: d478885 727b1d6
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Fri May 13 16:17:12 2011 +0200
Merge branch 'master' of
ssh://git.fedorahosted.org/git/rhq/rhq
commit d47888535b2c8b90fb8ef16566e111d66674f672
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Fri May 13 16:16:36 2011 +0200
Fix the pom
diff --git a/modules/plugins/pattern-generator/pom.xml
b/modules/plugins/pattern-generator/pom.xml
index e3799d8..ff74955 100644
--- a/modules/plugins/pattern-generator/pom.xml
+++ b/modules/plugins/pattern-generator/pom.xml
@@ -9,7 +9,7 @@
<parent>
<groupId>org.rhq</groupId>
<artifactId>rhq-plugins-parent</artifactId>
- <version>4.1.0-SNAPSHOT</version><!-- TODO adjust RHQ version
-->
+ <version>4.1.0-SNAPSHOT</version>
</parent>
<groupId>org.rhq</groupId>
@@ -19,11 +19,16 @@
<name>RHQ pattern Plugin</name>
<description>Generate metrics that follow given patterns</description>
+ <scm>
+
<
connection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/modules/plug...
+
<
developerConnection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/mod...
+ </scm>
+
<properties>
- <scm.module.path>TODO</scm.module.path>
- <rhq.version>4.1.0-SNAPSHOT</rhq.version> <!-- TODO adjust, see
above too -->
+ <scm.module.path>modules/plugins/pattern-generator/</scm.module.path>
</properties>
+
<build>
<plugins>
<plugin>
@@ -155,21 +160,21 @@
<version>${commons-logging.version}</version>
</dependency>
<dependency>
- <groupId>org.rhq</groupId>
+ <groupId>${rhq.groupId}</groupId>
<artifactId>rhq-core-domain</artifactId>
- <version>${rhq.version}</version>
+ <version>${project.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.rhq</groupId>
+ <groupId>${rhq.groupId}</groupId>
<artifactId>rhq-core-plugin-api</artifactId>
- <version>${rhq.version}</version>
+ <version>${project.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.rhq</groupId>
+ <groupId>${rhq.groupId}</groupId>
<artifactId>rhq-core-native-system</artifactId>
- <version>${rhq.version}</version>
+ <version>${project.version}</version>
<scope>provided</scope>
</dependency>
commit 727b1d6b18d1bdfc3586f53d82bc004de8285e9c
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu May 12 16:52:46 2011 -0400
An attempt to give us roughly centered logo box on gui load, across
browsers (specifically to fix the left adjusted IE situation).
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
index c98b4b3..d589fa8 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
+++ b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
@@ -37,7 +37,7 @@
<script type="text/javascript" language="javascript"
src="org.rhq.enterprise.gui.coregui.CoreGUI/org.rhq.enterprise.gui.coregui.CoreGUI.nocache.js"></script>
-<div id="Loading-Panel" style="width: 214px; height: 90px; margin-top:
300px; margin-left: auto; margin-right: auto;">
+<div id="Loading-Panel" style="width: 214px; height: 90px; margin-top:
300px; margin-left: 40%; margin-right: 40%;">
<div style="text-align: center; border: 3px solid lightgray;">
<img src="images/rhq_logo_animated_100px.gif"
alt="Loading..." style="border: none;">
Loading...
commit 2bed056128215163bc434f458960b1de4855e54c
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu May 12 16:46:10 2011 -0400
[704335 - Selected top menu button: balck text on dark blue background]
Hopefully now using a reasonable background color.
diff --git
a/modules/enterprise/gui/coregui/src/main/webapp/images/header/header_bg_selected.png
b/modules/enterprise/gui/coregui/src/main/webapp/images/header/header_bg_selected.png
index 896d805..680c3fc 100644
Binary files
a/modules/enterprise/gui/coregui/src/main/webapp/images/header/header_bg_selected.png and
b/modules/enterprise/gui/coregui/src/main/webapp/images/header/header_bg_selected.png
differ
commit 29474f537fd058af080436f96103cd3cf87f1f0a
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu May 12 15:58:24 2011 -0400
add note specifying why the "ie6" gwt userAgent should be used for IE8/IE9,
rather than the "ie8" userAgent
diff --git a/modules/enterprise/gui/coregui/pom.xml
b/modules/enterprise/gui/coregui/pom.xml
index abb5ad6..a8d7293 100644
--- a/modules/enterprise/gui/coregui/pom.xml
+++ b/modules/enterprise/gui/coregui/pom.xml
@@ -48,12 +48,15 @@
gwt-user.jar:com/google/gwt/user/UserAgent.gwt.xml) are as follows:
ie6: IE6/IE7
- ie8: IE8
+ ie8: IE8/IE9
gecko: FF1 (NOTE: Support for this was dropped in GWT 2.1.)
gecko1_8: FF2/FF3/FF4
safari: Safari/Chrome
opera: Opera
+ *NOTE*: Since we specify the meta "X-UA-Compatible: IE=EmulateIE7"
HTTP header in CoreGUI.html, IE8 and IE9
+ will emulate IE7, and so in order to run on IE8/IE9, "ie6"
must be specified, rather than "ie8".
+
Multiple agents can be specified as a comma-delimited list, as demonstrated by
the default
value below.
-->
diff --git
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
index 5a9ae91..e880e49 100644
---
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
+++
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
@@ -87,12 +87,15 @@
gwt-user.jar:com/google/gwt/user/UserAgent.gwt.xml) are as follows:
ie6: IE6/IE7
- ie8: IE8
+ ie8: IE8/IE9
gecko: FF1 (NOTE: Support for this was dropped in GWT 2.1.)
gecko1_8: FF2/FF3/FF4
safari: Safari/Chrome
opera: Opera
+ *NOTE*: Since we specify the meta "X-UA-Compatible: IE=EmulateIE7"
HTTP header in CoreGUI.html, IE8 and IE9
+ will emulate IE7, and so in order to run on IE8/IE9, "ie6"
must be specified, rather than "ie8".
+
Multiple agents can be specified as a comma-delimited list.
The gwt.userAgent property is substituted by the Maven resources plugin
commit e8a36ad17e2984b855b4598cb5f9cab1f2217d95
Merge: 4fbb062 eab921b
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu May 12 15:51:56 2011 -0400
Merge branch 'master' of
ssh://git.fedorahosted.org/git/rhq/rhq
commit eab921b5d519f99786bf6363e4e4deedb64bd607
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu May 12 14:37:59 2011 -0400
Fix a small merge issue.
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
index 1429e3c..c98b4b3 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
+++ b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
@@ -11,7 +11,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"
>
<!-- support internationalized characters -->
- <meta http-equiv="content-type"
content="text/html;charset=utf-8" />
+ <meta http-equiv="Content-Type"
content="text/html;charset=UTF-8" />
<title>RHQ Core Application</title>
<link rel="icon" type="image/png"
href="/images/favicon.png" />
commit 4fbb062720efe36a975f4868487735434a315655
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu May 12 14:31:18 2011 -0400
[BZ 704294] enable GZIP compression in Tomcat http and https connectors for text files
larger than 50K to speed up page load times, particuarly the initial page load
(
https://bugzilla.redhat.com/show_bug.cgi?id=704294)
diff --git
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
index 69db4a5..5a9ae91 100644
---
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
+++
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
@@ -10,6 +10,11 @@
<inherits name='com.smartgwt.SmartGwt' />
<inherits name="com.smartgwt.tools.SmartGwtTools"/>
+ <!-- TODO: Consider uncommenting this instead of enabling compression in
Tomcat's server.xml once we upgrade to GWT
+ 2.1 or later. -->
+ <!-- precompress .html, .js, and .css files -->
+ <!--<inherits
name="com.google.gwt.precompress.Precompress"/>-->
+
<!-- removing this, we can add it back if we find something that looks odd. But,
1) it seemed like a trouble spot during initial load for certain IE
configurations
2) we probably don't want to be defaulting to GWT standards as opposed to
SmartGWT.
diff --git
a/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/server.xml
b/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/server.xml
index 3e75f3a..56ffb58 100644
---
a/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/server.xml
+++
b/modules/enterprise/server/container/src/main/resources/jbossas/server/default/deploy/jboss-web.deployer/server.xml
@@ -1,4 +1,4 @@
-<!-- JON -->
+<!-- RHQ -->
<!-- Docs for this file:
http://tomcat.apache.org/tomcat-5.5-doc/config/ -->
<Server>
@@ -20,9 +20,9 @@
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
- Define a non-SSL HTTP/1.1 Connector on port 8080
+ Define a non-SSL HTTP/1.1 Connector on port 7080
-->
- <!-- JON -->
+ <!-- RHQ -->
<Connector port="${rhq.server.startup.web.http.port}"
address="${jboss.bind.address}"
protocol="HTTP/1.1"
@@ -31,18 +31,20 @@
acceptCount="300"
maxHttpHeaderSize="10240"
enableLookups="false"
+ compression="51200"
+
compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css"
emptySessionPath="true"
redirectPort="${rhq.server.startup.web.https.port}"
connectionTimeout="20000"
strategy="ms"
disableUploadTimeout="true"/>
- <!-- Define a SSL HTTP/1.1 Connector on port 8443
+ <!-- Define a SSL HTTP/1.1 Connector on port 7443
This connector uses the JSSE configuration, when using APR, the
connector should be using the OpenSSL style configuration
described in the APR documentation -->
- <!-- JON -->
- <!-- SSL/TLS Connector configuration using the JON keystore -->
+ <!-- RHQ -->
+ <!-- SSL/TLS Connector configuration using the RHQ keystore -->
<Connector port="${rhq.server.startup.web.https.port}"
address="${jboss.bind.address}"
protocol="HTTP/1.1"
@@ -51,6 +53,8 @@
acceptCount="300"
maxHttpHeaderSize="10240"
enableLookups="false"
+ compression="51200"
+
compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css"
secure="true"
SSLEnabled="true"
clientAuth="${rhq.server.tomcat.security.client-auth-mode}"
commit be6c71ed2e27124addb6abb68526b66834dbaae1
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu May 12 14:09:44 2011 -0400
[BZ 703252 - IE (IE7, IE8) unable to load CoreGUI]
Revert the use of DOCTYPE as "standards" mode causes various issues in
several browsers. This is basically due to the fact that SmartGWT codes
for browser's native "quirks" behavior. As such SmartGWT is more
predictable when avoiding "standards" modes. But we still had a need to
direct IE in some way to give us the behavior we want. Todo this we add the
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"
>
directive to our initializing html (CoreGUI.html). This instructs IE to
emulate IE7 quirks mode. In effect, this means that if our code looks good
with IE7 it should continue to work well even if users upgrade to IE8, IE9,
etc... It also seems to provide enough guidance to IE to get perform the
proper loading, assuming we build the "ie6" gwt.userAgent. And it gets
around a SmartGWT tree rendering issue with IE8 modes.
Since this is ignored by non-IE browsers they will continue to run in their
own quirks mode, thus avoiding issues like BZ 703515, which is a regression
brought about by the original DOCTYPE approach.
Alternatively,
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
index 5713c87..1429e3c 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
+++ b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
@@ -1,6 +1,18 @@
-<!doctype html>
<html>
<head>
+ <!-- this forces us to emulate IE7 "quirks" mode regardless of IE
browser version. It:
+ 1) Follows the SmartGWT recommendation of not declaring a DOCTYPE and instead
using these meta elements.
+ 2) solves initial app load issues that we experienced on some XP and Vista
flavors.
+ 3) avoids an IE8/SmartGWT issue regarding poor tree rendering (unindented,
vertical gaps).
+
+ Note, when building the app, you must include the "ie6" gwt.userAgent
since we're emulating IE7 (which
+ requires the "ie6" userAgent.
+ -->
+ <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"
>
+
+ <!-- support internationalized characters -->
+ <meta http-equiv="content-type"
content="text/html;charset=utf-8" />
+
<title>RHQ Core Application</title>
<link rel="icon" type="image/png"
href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" />
@@ -8,11 +20,6 @@
<script type="text/javascript">
var isomorphicDir = "org.rhq.enterprise.gui.coregui.CoreGUI/sc/";
</script>
- <!--<script type="text/javascript"
src="js/jquery-1.4.4.js"></script>
- <script type="text/javascript"
src="js/jquery.sparkline-1.6.js"></script>-->
-
- <!-- support internationalized characters -->
- <meta http-equiv="Content-Type"
content="text/html;charset=UTF-8" />
<link rel="stylesheet" href="CoreGUI.css">
<link rel="stylesheet" href="css/search.css">
@@ -26,6 +33,7 @@
</style>
</head>
<body>
+
<script type="text/javascript" language="javascript"
src="org.rhq.enterprise.gui.coregui.CoreGUI/org.rhq.enterprise.gui.coregui.CoreGUI.nocache.js"></script>
commit fc301489b5d3cec0200ff52d3d757ae98b672e3b
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu May 12 13:31:34 2011 -0400
support shutting down agent copies on windows
diff --git a/etc/agentspawn/src/scripts/agentcopy.xml
b/etc/agentspawn/src/scripts/agentcopy.xml
index 591782d..1d9c819 100644
--- a/etc/agentspawn/src/scripts/agentcopy.xml
+++ b/etc/agentspawn/src/scripts/agentcopy.xml
@@ -253,8 +253,6 @@ RHQ_AGENT_CMDLINE_OPTS="--daemon --pref=${_index}
${_cmdlineopts}"</echo>
<!-- ========== -->
<target name="stop" description="Stops all the agents (not available
on Windows).">
- <fail if="iswindows" message="Stopping agents with this script is
not supported on Windows"/>
-
<echo>Stopping all agents...</echo>
<foreach param="_index"
list="${agentcopy.agent.spawn.list}"
@@ -275,10 +273,22 @@ RHQ_AGENT_CMDLINE_OPTS="--daemon --pref=${_index}
${_cmdlineopts}"</echo>
<echo>Stopping agent [${_index}] with pid [${_pid}]</echo>
- <exec executable="kill">
- <arg value="-TERM" />
- <arg value="${_pid}" />
- </exec>
+ <if>
+ <os family="windows"/>
+ <then>
+ <exec executable="taskkill.exe">
+ <arg value="/F" />
+ <arg value="/PID" />
+ <arg value="${_pid}" />
+ </exec>
+ </then>
+ <else>
+ <exec executable="kill">
+ <arg value="-TERM" />
+ <arg value="${_pid}" />
+ </exec>
+ </else>
+ </if>
</target>
</project>
commit 9f926435c6f4e80d65bfae7486de887ccc818aa3
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu May 12 12:15:25 2011 -0400
fix syntax of timed meta Refresh header (remove space after semicolon), so it will
work w/ Webkit-based browsers (i.e. Chrome and Safari); use consistence letter case for
various meta http headers across portal-war and coregui
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
index 1b96d09..5713c87 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
+++ b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
@@ -12,7 +12,7 @@
<script type="text/javascript"
src="js/jquery.sparkline-1.6.js"></script>-->
<!-- support internationalized characters -->
- <meta http-equiv="content-type"
content="text/html;charset=utf-8" />
+ <meta http-equiv="Content-Type"
content="text/html;charset=UTF-8" />
<link rel="stylesheet" href="CoreGUI.css">
<link rel="stylesheet" href="css/search.css">
diff --git a/modules/enterprise/gui/installer-war/src/main/webapp/createdb.jsp
b/modules/enterprise/gui/installer-war/src/main/webapp/createdb.jsp
index 797a5d4..7b00972 100644
--- a/modules/enterprise/gui/installer-war/src/main/webapp/createdb.jsp
+++ b/modules/enterprise/gui/installer-war/src/main/webapp/createdb.jsp
@@ -14,7 +14,7 @@
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
- <meta http-equiv="Cache-control" content="no-cache" />
+ <meta http-equiv="Cache-Control" content="no-cache" />
</head>
<body>
diff --git a/modules/enterprise/gui/installer-war/src/main/webapp/header.jsp
b/modules/enterprise/gui/installer-war/src/main/webapp/header.jsp
index df38c2d..c3cb048 100644
--- a/modules/enterprise/gui/installer-war/src/main/webapp/header.jsp
+++ b/modules/enterprise/gui/installer-war/src/main/webapp/header.jsp
@@ -14,7 +14,7 @@
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
- <meta http-equiv="Cache-control" content="no-cache" />
+ <meta http-equiv="Cache-Control" content="no-cache" />
<%-- we only do our AJAX forwarding to the login page if fully deployed but not
on the installer start page --%>
<c:if test="<%= new ServerInformation().isFullyDeployed() &&
request.getRequestURI().indexOf("installer/start") == -1 %>">
diff --git a/modules/enterprise/gui/installer-war/src/main/webapp/index.html
b/modules/enterprise/gui/installer-war/src/main/webapp/index.html
index 04a87fa..2b0686c 100644
--- a/modules/enterprise/gui/installer-war/src/main/webapp/index.html
+++ b/modules/enterprise/gui/installer-war/src/main/webapp/index.html
@@ -6,7 +6,7 @@
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
-<meta http-equiv="Cache-control" content="no-cache" />
+<meta http-equiv="Cache-Control" content="no-cache" />
<script type="text/javascript" language="JavaScript">
<!--
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/admin/test/agent.jsp
b/modules/enterprise/gui/portal-war/src/main/webapp/admin/test/agent.jsp
index 16242c1..289d812 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/admin/test/agent.jsp
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/admin/test/agent.jsp
@@ -16,7 +16,7 @@
<%@page import="org.rhq.enterprise.communications.Ping"%>
<html>
<head>
-<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
+<meta http-equiv="Content-Type"
content="text/html;charset=ISO-8859-1">
<title>Test Agent Communications</title>
</head>
<body>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/admin/test/browser.jsp
b/modules/enterprise/gui/portal-war/src/main/webapp/admin/test/browser.jsp
index a939783..67587db 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/admin/test/browser.jsp
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/admin/test/browser.jsp
@@ -28,7 +28,7 @@
<html>
<head>
- <meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
+ <meta http-equiv="Content-Type"
content="text/html;charset=UTF-8">
<title>EJB3 Entity browser</title>
</head>
<body>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/index.html
b/modules/enterprise/gui/portal-war/src/main/webapp/index.html
index 74eaaa5..c3ecd0c 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/index.html
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/index.html
@@ -1,7 +1,7 @@
<html>
<head>
- <meta http-equiv="Refresh" content="0;
URL=/coregui/"/>
+ <meta http-equiv="Refresh" content="0;URL=/coregui/"/>
</head>
<body bgcolor="white">
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/portal/MainLayout.jsp
b/modules/enterprise/gui/portal-war/src/main/webapp/portal/MainLayout.jsp
index 2e85aaa..c76bd25 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/portal/MainLayout.jsp
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/portal/MainLayout.jsp
@@ -7,10 +7,10 @@
<%@ taglib
uri="http://richfaces.org/a4j" prefix="a4j" %>
<html:html>
<head>
- <meta http-equiv="EXPIRES" content="-1">
- <meta http-equiv="PRAGMA" content="NO-CACHE">
- <meta http-equiv="MAX-AGE" content="0">
- <meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
+ <meta http-equiv="Expires" content="-1">
+ <meta http-equiv="Pragma" content="no-cache">
+ <meta http-equiv="Max-Age" content="0">
+ <meta http-equiv="Cache-Control" content="no-cache">
<link rel="stylesheet" type="text/css"
media="screen" href="/css/win.css"/>
<link rel="stylesheet" type="text/css"
media="screen" href="/css/layout.css"/>
diff --git
a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/visibility/DashCharts.jsp
b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/visibility/DashCharts.jsp
index 9760f0a..84f4173 100644
---
a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/visibility/DashCharts.jsp
+++
b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/visibility/DashCharts.jsp
@@ -25,7 +25,7 @@
<META Http-Equiv="Pragma" Content="no-cache">
<META Http-Equiv="Expires" Content="0">
<c:if test="${not empty refreshPeriod}">
- <meta http-equiv="refresh" content="<c:out
value='${refreshPeriod}' />">
+ <meta http-equiv="Refresh" content="<c:out
value='${refreshPeriod}' />">
</c:if>
<script src="<html:rewrite page="/js/functions.js"/>"
type="text/javascript"></script>
diff --git
a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/group/operation/groupOperationHistoryDetails.xhtml
b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/group/operation/groupOperationHistoryDetails.xhtml
index 6972761..396fad9 100644
---
a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/group/operation/groupOperationHistoryDetails.xhtml
+++
b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/group/operation/groupOperationHistoryDetails.xhtml
@@ -28,7 +28,7 @@
<ui:define name="metaHeaders">
<f:verbatim rendered="#{item.status eq 'INPROGRESS'}">
- <meta http-equiv="refresh" content="10"/>
+ <meta http-equiv="Refresh" content="10"/>
</f:verbatim>
</ui:define>
diff --git
a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history-request-plain.xhtml
b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history-request-plain.xhtml
index 1419931..a897944 100644
---
a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history-request-plain.xhtml
+++
b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history-request-plain.xhtml
@@ -19,7 +19,7 @@
<ui:param name="selectedTabName" value="Content.History"/>
<ui:define name="metaHeaders">
- <meta http-equiv="refresh" content="10"/>
+ <meta http-equiv="Refresh" content="10"/>
</ui:define>
<ui:define name="content">
diff --git
a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history-request.xhtml
b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history-request.xhtml
index 26ce06d..584d481 100644
---
a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history-request.xhtml
+++
b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history-request.xhtml
@@ -19,7 +19,7 @@
<ui:param name="selectedTabName" value="Content.History"/>
<ui:define name="metaHeaders">
- <meta http-equiv="refresh" content="10"/>
+ <meta http-equiv="Refresh" content="10"/>
</ui:define>
<ui:define name="content">
diff --git
a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history.xhtml
b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history.xhtml
index 18059f2..223774a 100644
---
a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history.xhtml
+++
b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/history.xhtml
@@ -19,7 +19,7 @@
<ui:param name="selectedTabName" value="Content.History"/>
<ui:define name="metaHeaders">
- <meta http-equiv="refresh" content="10"/>
+ <meta http-equiv="Refresh" content="10"/>
</ui:define>
<ui:define name="content">
diff --git
a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/operation/resourceOperationHistoryDetails.xhtml
b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/operation/resourceOperationHistoryDetails.xhtml
index 25cd3a6..0a61d68 100644
---
a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/operation/resourceOperationHistoryDetails.xhtml
+++
b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/operation/resourceOperationHistoryDetails.xhtml
@@ -28,7 +28,7 @@
<ui:define name="metaHeaders">
<f:verbatim rendered="#{item.status eq 'INPROGRESS'}">
- <meta http-equiv="refresh" content="10" />
+ <meta http-equiv="Refresh" content="10" />
</f:verbatim>
</ui:define>
commit 7d3d67fd9e7b766d13f0daf39eaf07d7c625f11b
Merge: c10d876 0a31209
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Thu May 12 10:22:16 2011 +0200
Merge branch 'master' of
ssh://git.fedorahosted.org/git/rhq/rhq
commit c10d8762ef84e49c214e91dcf1eafee51cf2607f
Author: Jijun Liu <lxjijun(a)gmail.com>
Date: Thu May 12 10:13:51 2011 +0200
Chinese Installer messages.
diff --git
a/modules/enterprise/gui/installer-war/src/main/resources/InstallerMessages_zh.properties
b/modules/enterprise/gui/installer-war/src/main/resources/InstallerMessages_zh.properties
new file mode 100644
index 0000000..06c2191
--- /dev/null
+++
b/modules/enterprise/gui/installer-war/src/main/resources/InstallerMessages_zh.properties
@@ -0,0 +1,250 @@
+createDatabaseUserTitle=\u521b\u5efa\u6570\u636e\u5e93/\u7528\u6237
+createDatabaseUserHelp=\u5728\u8fd9\u91cc\u8f93\u5165\u7ba1\u7406\u5458\u4fe1\u606f,\u70b9\u51fb\u6309\u94ae\u6765\u521b\u5efa\u4e00\u4e2a\u6570\u636e\u5e93\u548c\u7528\u6237.
+adminConnectionUrl=DB\u8fde\u63a5URL
+adminUsername=\u6570\u636e\u5e93\u7ba1\u7406\u5458\u540d\u79f0
+adminPassword=\u6570\u636e\u5e93\u7ba1\u7406\u5458\u5bc6\u7801
+experimentalDb=\u5df2\u9009\u7684\u6570\u636e\u5e93\u53ea\u80fd\u7528\u6765\u4f5c\u6f14\u793a\u76ee\u7684.\u4e0d\u5e94\u8be5\u7528\u4e8e\u6b63\u5f0f\u4ea7\u54c1\u4f7f\u7528.
\u4f7f\u7528H2\u6216MS SQL\u5c06\u6ca1\u6709\u5b89\u88c5\u652f\u6301.
+createDatabaseNote=\u5982\u679c\u4e0d\u5b58\u5728,\u5c06\u521b\u5efa\u6570\u636e\u5e93/\u7528\u6237
+createDatabaseButton=\u521b\u5efa\u6570\u636e\u5e93
+testDatabaseNote=\u9a8c\u8bc1\u6570\u636e\u5e93\u914d\u7f6e
+testDatabaseButton=\u6d4b\u8bd5\u8fde\u63a5
+existingSchemaQuestion=\u6307\u5b9a\u7684\u6570\u636e\u5e93\u5b58\u5728.\u5c06\u5982\u4f55\u64cd\u4f5c?
+existingSchemaAnswerOverwrite=\u8986\u76d6 (\u8986\u76d6\u5df2\u5b58\u5728\u6570\u636e)
+existingSchemaAnswerUpgrade=\u4fdd\u7559 (\u7ef4\u62a4\u5b58\u5728\u6570\u636e)
+existingSchemaAnswerSkip=\u8df3\u8fc7 (\u4e0d\u505a\u4efb\u4f55\u64cd\u4f5c)
+invalidNumber=\u5c5e\u6027{0}\u662f\u65e0\u6548\u6570\u5b57[{1}]
+invalidBoolean=\u5e03\u5c14\u503c{0}\u5e94\u8be5\u662f'true'\u6216'false'\u800c\u4e0d\u5e94\u662f[{1}]
+invalidString=\u5c5e\u6027{0}\u5fc5\u987b\u8bbe\u7f6e.
+saveFailure=\u4fdd\u5b58\u5c5e\u6027\u5b8c\u5168\u90e8\u7f72\u5931\u8d25 -
RHQ\u5c06\u4e0d\u80fd\u6b63\u5e38\u5de5\u4f5c\n\
+\u539f\u56e0: {0}
+errorLabel=\u9519\u8bef
+saveError=\u56e0\u672a\u77e5\u539f\u56e0\u65e0\u6cd5\u4fdd\u5b58\u8bbe\u7f6e.
+invalidDatabaseSettings=\u65e0\u6cd5\u8fde\u63a5\u5230\u7ed9\u5b9a\u6570\u636e\u5e93.
\n\
+\u8bf7\u68c0\u67e5\u6570\u636e\u5e93\u914d\u7f6e\u5e76\u4e14\u786e\u8ba4\u6570\u636e\u5e93\u5728\u8fd0\u884c\u4e2d.
+setPropertiesInstructions=\u8fd9\u662fRHQ\u670d\u52a1\u5668\u5b89\u88c5\u7684\u914d\u7f6e\u8bbe\u7f6e.
\n\
+\u4f60\u53ef\u4ee5\u6309\u9700\u5b9a\u5236.
\u5355\u51fb\u4e0d\u540c\u9009\u9879\u540d\u67e5\u770b\u5e2e\u52a9.
\u5bf9\u4e8e\u6807\u8bb0\u4e3a"\u9700\u8981\u91cd\u542f"\u7684\u9009\u9879 \n\
+\u9700\u8981\u91cd\u542f\u624d\u80fd\u751f\u6548.
\u6240\u4ee5\u5b89\u88c5\u5b8c\u6210\u540e,\u8981\u9a6c\u4e0a\u91cd\u542f\u670d\u52a1\u5668.
+advancedSettingsInstructions=\u5355\u51fb\u4e0b\u9762\u590d\u9009\u6846\u67e5\u770b\u6807\u51c6\u8bbe\u7f6e\u548c\u9ad8\u7ea7\u8bbe\u7f6e.
+installButtonsText=\u5355\u51fb'\u5b89\u88c5\u4ea7\u54c1'\u5f00\u59cb\u666e\u901a\u5b89\u88c5.\n\
+\u5355\u51fb\u6309\u94ae'\u5d4c\u5165\u5f0f\u5b89\u88c5'\u5c06\u5feb\u901f\u7684\u521b\u5efa\u4e00\u4e2a\u5e26\u6709\u6570\u636e\u5e93\u548c\u5d4c\u5165\u7684Agent\u7684\u5b8c\u6574\u73af\u5883.\u5d4c\u5165\u5f0f\u5b89\u88c5\u53ea\u80fd\u7528\u6765\u6f14\u793a\u6216\u8bc4\u4f30!
+orText=-- or --
+saveEmbeddedMode=\u5d4c\u5165\u5f0f\u5b89\u88c5
+databaseSettingsInstructions=\u6570\u636e\u5e93\u914d\u7f6e.
\u6240\u6709\u4fe1\u606f\u90fd\u8981\u8f93\u5165.
\u4f7f\u7528\u6309\u94ae"\u6d4b\u8bd5\u8fde\u63a5"\u6765\u9a8c\u8bc1\u8bbe\u7f6e.
+installSettingsInstructions=
\u5b9a\u4e49\u9700\u8981\u7684\u670d\u52a1\u5668\u4fe1\u606f.
+installSettingsNote1=\u5982\u679c\u5347\u7ea7\u6216\u91cd\u88c5\u8bf7\u5728\u5217\u8868\u4e2d\u9009\u62e9\u6ce8\u518c\u7684\u670d\u52a1\u5668:
+installSettingsNote2=\u5982\u679c\u5b89\u88c5\u4e00\u4e2a\u65b0\u670d\u52a1\u5668\u8bf7\u5728\u4e0b\u9762\u8f93\u5165\u670d\u52a1\u5668\u7aef\u914d\u7f6e:
+serverSettingsInstructions=\u4ee5\u4e0b\u9009\u9879\u90fd\u662f\u5fc5\u987b\u7684.
+save=\u5b89\u88c5\u670d\u52a1\u5668!
+yesString=\u662f
+noString=\u5426
+propertyName=\u5c5e\u6027\u540d
+value=\u503c
+requiresRestart=\u9700\u8981\u91cd\u542f?
+welcomeTitle=\u6b22\u8fce\u4f7f\u7528RHQ!
+welcomeMessage=\u5f00\u59cb\u5b89\u88c5RHQ. \u8fd9\u4e2a\u9875\u9762\u7528\u6765\n\
+\u5b89\u88c5\u914d\u7f6eRHQ\u670d\u52a1\u5668. \n\
+\u5b89\u88c5\u5b8c\u6210\u4ee5\u540e,\u5c06\u53ef\u4ee5\u767b\u5f55\u4f7f\u7528RHQ.
+starting=\u8fdb\u884c\u4e2d,\u8bf7\u7b49\u5f85 ...
+alreadyInstalled=RHQ\u5c06\u8981\u5b89\u88c5!
+alreadyInstalledStartedLink=\u5b8c\u6210!\u70b9\u51fb\u6b64\u5904\u5f00\u59cb!
+startInstallingLink=\u7ee7\u7eed\u5b89\u88c5\u8bf7\u70b9\u51fb\u8fd9\u91cc
+backToSettingsLink=\u8fd4\u56de\u914d\u7f6e\u9875\u9762
+showAdvancedSettings=\u663e\u793a\u9ad8\u7ea7\u9009\u9879
+propertyDatabaseType=\u6570\u636e\u5e93\u7c7b\u578b
+propertyDatabaseTypeHelp=-DatabaseType
+propertyDatabaseConnectionUrl=\u6570\u636e\u5e93\u8fde\u63a5URL
+propertyDatabaseConnectionUrlHelp=-DatabaseConnectionURL
+propertyDatabaseDriverClass=\u6570\u636e\u5e93JDBC\u9a71\u52a8
+propertyDatabaseDriverClassHelp=-DatabaseJDBCDriverClass
+propertyDatabaseXADataSourceClass=\u6570\u636e\u5e93XA\u6570\u636e\u6e90\u7c7b
+propertyDatabaseXADataSourceClassHelp=-DatabaseXADataSourceClass
+propertyDatabaseUserName=\u6570\u636e\u5e93\u7528\u6237\u540d
+propertyDatabaseUserNameHelp=-DatabaseUserName
+propertyDatabasePassword=\u6570\u636e\u5e93\u5bc6\u7801
+propertyDatabasePasswordHelp=-DatabasePassword
+propertyBindAddress=\u670d\u52a1\u5668\u76d1\u542c\u5730\u5740
+propertyBindAddressHelp=-ServerBindAddress
+propertyHttpPort=HTTP\u7aef\u53e3
+propertyHttpPortHelp=-HTTPPort
+propertyHttpsPort=\u5b89\u5168HTTPS\u7aef\u53e3
+propertyHttpsPortHelp=-SecureHTTPSPort
+propertyWebServicePort=Web Service\u7aef\u53e3
+propertyWebServicePortHelp=-WebServicePort
+propertyNamingServicePort=Naming Service\u7aef\u53e3
+propertyNamingServicePortHelp=-NamingServicePort
+propertyNamingServiceRmiPort=Naming Service RMI\u7aef\u53e3
+propertyNamingServiceRmiPortHelp=-NamingServiceRMIPort
+propertyJrmpInvokerRmiPort=JRMP Invoker RMI\u7aef\u53e3
+propertyJrmpInvokerRmiPortHelp=-JRMPInvokerRMIPort
+propertyPooledInvokerRmiPort=Pooled Invoker RMI\u7aef\u53e3
+propertyPooledInvokerRmiPortHelp=-PooledInvokerRMIPort
+propertyAjpPort=AJP\u7aef\u53e3
+propertyAjpPortHelp=-AJPPort
+propertyUnifiedInvokerPort=\u7edf\u4e00Invoker\u7aef\u53e3
+propertyUnifiedInvokerPortHelp=-UnifiedInvokerPort
+propertyAspectDeployerPort=Aspect Deployer\u7aef\u53e3
+propertyAspectDeployerPortHelp=-AspectDeployerPort
+propertyTomcatClientAuthMode=Tomcat\u5ba2\u6237\u7aef\u6388\u6743\u6a21\u5f0f
+propertyTomcatClientAuthModeHelp=-TomcatClientAuthMode
+propertyTomcatAlgorithm=Tomcat Keystore/Truststore\u7b97\u6cd5
+propertyTomcatAlgorithmHelp=-TomcatAlgorithm
+propertyTomcatKeystoreFilename=Tomcat Keystore
+propertyTomcatKeystoreFilenameHelp=-TomcatKeystore
+propertyTomcatKeystorePassword=Tomcat Keystore\u5bc6\u7801
+propertyTomcatKeystorePasswordHelp=-TomcatKeystorePassword
+propertyTomcatKeystoreType=Tomcat Keystore\u7c7b\u578b
+propertyTomcatKeystoreTypeHelp=-TomcatKeystoreType
+propertyTomcatKeystoreAlias=Tomcat Keystore Alias
+propertyTomcatKeystoreAliasHelp=-TomcatKeystoreAlias
+propertyTomcatTruststoreFilename=Tomcat Truststore
+propertyTomcatTruststoreFilenameHelp=-TomcatTruststore
+propertyTomcatTruststorePassword=Tomcat Truststore\u5bc6\u7801
+propertyTomcatTruststorePasswordHelp=-TomcatTruststorePassword
+propertyTomcatTruststoreType=Tomcat Truststore\u7c7b\u578b
+propertyTomcatTruststoreTypeHelp=-TomcatTruststoreType
+propertyTomcatSslProtocol=Tomcat SSL\u534f\u8bae
+propertyTomcatSslProtocolHelp=-TomcatSSLProtocol
+propertyConnectorTransport=\u63a5\u6536Agent\u901a\u4fe1\u4f20\u8f93
+propertyConnectorTransportHelp=-IncomingAgentCommunicationsTransport
+propertyConnectorBindAddress=\u63a5\u6536Agent\u901a\u4fe1\u76d1\u542c\u5730\u5740
+propertyConnectorBindAddressHelp=-IncomingAgentCommunicationsBindAddress
+propertyConnectorBindPort=\u63a5\u6536Agent\u901a\u4fe1\u7aef\u53e3
+propertyConnectorBindPortHelp=-IncomingAgentCommunicationsPort
+propertyConnectorTransportParams=\u63a5\u6536Agent\u901a\u4fe1\u4f20\u8f93\u53c2\u6570
+propertyConnectorTransportParamsHelp=-IncomingAgentCommunicationsTransportParameters
+propertyAgentMulticastDetectorEnabled=\u542f\u7528Agent\u591a\u64ad\u63a2\u6d4b\u5668
+propertyAgentMulticastDetectorEnabledHelp=-AgentMulticastDetectorEnabled
+propertyAgentMulticastDetectorBindAddress=Agent\u591a\u64ad\u63a2\u6d4b\u5668\u76d1\u542c\u5730\u5740
+propertyAgentMulticastDetectorBindAddressHelp=-AgentMulticastDetectorBindAddress
+propertyAgentMulticastDetectorMulticastAddress=Agent
\u7ec4\u64ad\u5730\u5740\u591a\u64ad\u63a2\u6d4b\u5668
+propertyAgentMulticastDetectorMulticastAddressHelp=-AgentMulticastDetectorMulticastAddress
+propertyAgentMulticastDetectorPort=Agent\u591a\u64ad\u63a2\u6d4b\u5668\u7aef\u53e3
+propertyAgentMulticastDetectorPortHelp=-AgentMulticastDetectorPort
+propertySecurityServerSecureSocketProtocol=\u63a5\u6536\u5b89\u5168 -
\u5b89\u5168Socket\u534f\u8bae
+propertySecurityServerSecureSocketProtocolHelp=-IncomingSecureSocketProtocol
+propertySecurityServerKeystoreFile=\u63a5\u6536\u5b89\u5168 - Keystore\u6587\u4ef6
+propertySecurityServerKeystoreFileHelp=-IncomingKeystoreFile
+propertySecurityServerKeystoreAlgorithm=\u63a5\u6536\u5b89\u5168 - Keystore\u7b97\u6cd5
+propertySecurityServerKeystoreAlgorithmHelp=-IncomingKeystoreAlgorithm
+propertySecurityServerKeystoreType=\u63a5\u6536\u5b89\u5168 - Keystore\u7c7b\u578b
+propertySecurityServerKeystoreTypeHelp=-IncomingKeystoreType
+propertySecurityServerKeystorePassword=\u63a5\u6536\u5b89\u5168 - Keystore\u5bc6\u7801
+propertySecurityServerKeystorePasswordHelp=-IncomingKeystorePassword
+propertySecurityServerKeystoreKeyPassword=\u63a5\u6536\u5b89\u5168 - Keystore
Key\u5bc6\u7801
+propertySecurityServerKeystoreKeyPasswordHelp=-IncomingKeystoreKeyPassword
+propertySecurityServerKeystoreAlias=\u63a5\u6536\u5b89\u5168 - Keystore Alias
+propertySecurityServerKeystoreAliasHelp=-IncomingKeystoreAlias
+propertySecurityServerTruststoreFile=\u63a5\u6536\u5b89\u5168 - Truststore\u6587\u4ef6
+propertySecurityServerTruststoreFileHelp=-IncomingTruststoreFile
+propertySecurityServerTruststoreAlgorithm=\u63a5\u6536\u5b89\u5168 -
Truststore\u7b97\u6cd5
+propertySecurityServerTruststoreAlgorithmHelp=-IncomingTruststoreAlgorithm
+propertySecurityServerTruststoreType=\u63a5\u6536\u5b89\u5168 - Truststore\u7c7b\u578b
+propertySecurityServerTruststoreTypeHelp=-IncomingTruststoreType
+propertySecurityServerTruststorePassword=\u63a5\u6536\u5b89\u5168 -
Truststore\u5bc6\u7801
+propertySecurityServerTruststorePasswordHelp=-IncomingTruststorePassword
+propertySecurityServerClientAuthMode=\u63a5\u6536\u5b89\u5168 -
\u5ba2\u6237\u7aef\u6388\u6743\u6a21\u5f0f
+propertySecurityServerClientAuthModeHelp=-IncomingClientAuthenticationMode
+propertySecurityClientSecureSocketProtocol=\u5916\u53d1\u5b89\u5168 -
\u5b89\u5168Socket\u534f\u8bae
+propertySecurityClientSecureSocketProtocolHelp=-OutgoingSecureSocketProtocol
+propertySecurityClientKeystoreFile=\u5916\u53d1\u5b89\u5168 - Keystore\u6587\u4ef6
+propertySecurityClientKeystoreFileHelp=-OutgoingKeystoreFile
+propertySecurityClientKeystoreAlgorithm=\u5916\u53d1\u5b89\u5168 - Keystore\u7b97\u6cd5
+propertySecurityClientKeystoreAlgorithmHelp=-OutgoingKeystoreAlgorithm
+propertySecurityClientKeystoreType=\u5916\u53d1\u5b89\u5168 - Keystore\u7c7b\u578b
+propertySecurityClientKeystoreTypeHelp=-OutgoingKeystoreType
+propertySecurityClientKeystorePassword=\u5916\u53d1\u5b89\u5168 - Keystore\u5bc6\u7801
+propertySecurityClientKeystorePasswordHelp=-OutgoingKeystorePassword
+propertySecurityClientKeystoreKeyPassword=\u5916\u53d1\u5b89\u5168 - Keystore
Key\u5bc6\u7801
+propertySecurityClientKeystoreKeyPasswordHelp=-OutgoingKeystoreKeyPassword
+propertySecurityClientKeystoreAlias=\u5916\u53d1\u5b89\u5168 - Keystore Alias
+propertySecurityClientKeystoreAliasHelp=-OutgoingKeystoreAlias
+propertySecurityClientTruststoreFile=\u5916\u53d1\u5b89\u5168 - Truststore\u6587\u4ef6
+propertySecurityClientTruststoreFileHelp=-OutgoingTruststoreFile
+propertySecurityClientTruststoreAlgorithm=\u5916\u53d1\u5b89\u5168 -
Truststore\u7b97\u6cd5
+propertySecurityClientTruststoreAlgorithmHelp=-OutgoingTruststoreAlgorithm
+propertySecurityClientTruststoreType=\u5916\u53d1\u5b89\u5168 - Truststore\u7c7b\u578b
+propertySecurityClientTruststoreTypeHelp=-OutgoingTruststoreType
+propertySecurityClientTruststorePassword=\u5916\u53d1\u5b89\u5168 -
Truststore\u5bc6\u7801
+propertySecurityClientTruststorePasswordHelp=-OutgoingTruststorePassword
+propertySecurityClientServerAuthModeEnabled=\u5916\u53d1\u5b89\u5168 -
\u542f\u7528\u670d\u52a1\u5668\u6388\u6743\u6a21\u5f0f
+propertySecurityClientServerAuthModeEnabledHelp=-OutgoingServerAuthenticationModeEnabled
+propertyEmbeddedRHQAgentEnabled=\u542f\u7528\u5d4c\u5165Agent
+propertyEmbeddedRHQAgentEnabledHelp=-EmbeddedRHQAgentEnabled
+propertyEmbeddedRHQAgentName=\u5d4c\u5165Agent\u540d\u79f0
+propertyEmbeddedRHQAgentNameHelp=-EmbeddedRHQAgentName
+propertyEmbeddedRHQAgentDisableNativeSystem=\u5d4c\u5165Agent\u7981\u7528\u672c\u5730\u7cfb\u7edf
+propertyEmbeddedRHQAgentDisableNativeSystemHelp=-EmbeddedRHQAgentDisableNativeSystem
+propertyEmbeddedRHQAgentResetConfiguration=\u5d4c\u5165Agent\u91cd\u7f6e\u914d\u7f6e
+propertyEmbeddedRHQAgentResetConfigurationHelp=-EmbeddedRHQAgentResetConfiguration
+propertyEmailSmtpHost=\u90ae\u4ef6SMTP\u4e3b\u673a\u540d
+propertyEmailSmtpHostHelp=-EmailSMTPHostname
+propertyEmailSmtpPort=\u90ae\u4ef6SMTP\u7aef\u53e3
+propertyEmailSmtpPortHelp=-EmailSMTPPort
+propertyEmailFromAddress=\u53d1\u9001\u90ae\u4ef6\u5730\u5740
+propertyEmailFromAddressHelp=-EmailFromAddress
+propertyOperationTimeout=\u9ed8\u8ba4Operation Invocation\u8d85\u65f6\u65f6\u95f4
+propertyOperationTimeoutHelp=-OperationInvocationDefaultTimeout
+propertyClusterPartitionName=\u96c6\u7fa4 - Partition Name
+propertyClusterPartitionNameHelp=-PartitionName
+propertyClusterPartitionBindAddress=\u96c6\u7fa4 - Partition\u76d1\u542c\u5730\u5740
+propertyClusterPartitionBindAddressHelp=-PartitionBindAddress
+propertyClusterUdpGroup=\u96c6\u7fa4 - Partition UDP Multicast Group IP\u5730\u5740
+propertyClusterUdpGroupHelp=-PartitionUDPMulticastGroupIPAddress
+propertyClusterHaPartitionPort=\u96c6\u7fa4 - Partition UDP\u591a\u64ad\u7aef\u53e3
+propertyClusterHaPartitionPortHelp=-PartitionUDPMulticastPort
+propertyClusterEjb3CachePort=\u96c6\u7fa4 - Partition UDP
EJB3\u5b9e\u4f53\u7f13\u5b58\u591a\u64ad\u7aef\u53e3
+propertyClusterEjb3CachePortHelp=-PartitionUDPEJB3EntityCacheMulticastPort
+propertyClusterAlertCachePort=\u96c6\u7fa4 - Partition
UDP\u544a\u8b66\u7f13\u5b58\u591a\u64ad\u7aef\u53e3
+propertyClusterAlertCachePortHelp=-PartitionUDPAlertCacheMulticastPort
+propertyClusterUdpLoopback=\u96c6\u7fa4 - Partition UDP\u56de\u73af
+propertyClusterUdpLoopbackHelp=-PartitionUDPLoopback
+propertyClusterHaJndiPort=\u96c6\u7fa4 - HA JNDI\u7aef\u53e3
+propertyClusterHaJndiPortHelp=-HAJNDIPort
+propertyClusterHaJndiRmiPort=\u96c6\u7fa4 - HA JNDI RMI\u7aef\u53e3
+propertyClusterHaJndiRmiPortHelp=-HAJNDIRMIPort
+propertyClusterHaJndiAutoDiscoveryPort=\u96c6\u7fa4 - HA
JNDI\u81ea\u52a8\u53d1\u73b0\u7ec4\u7aef\u53e3
+propertyClusterHaJndiAutoDiscoveryPortHelp=-HAJNDIAutoDiscoveryGroupPort
+propertyClusterHaJrmpInvokerRmiPort=\u96c6\u7fa4 - HA JRMP Invoker RMI\u7aef\u53e3
+propertyClusterHaJrmpInvokerRmiPortHelp=-HAJRMPInvokerRMIPort
+propertyClusterHaPooledInvokerPort=\u96c6\u7fa4 - HA Pooled Invoker\u7aef\u53e3
+propertyClusterHaPooledInvokerPortHelp=-HAPooledInvokerPort
+propertyClusterJGroupsUdpIpTtl=\u96c6\u7fa4 - JGroups UDP IP\u5b58\u6d3b\u65f6\u95f4
+propertyClusterJGroupsUdpIpTtlHelp=-JGroupsUDPIPTimeToLive
+propertyConcurrencyLimitWebConns=\u5e76\u53d1\u6570\u9650\u5236 -
\u6700\u5927Web\u8fde\u63a5\u6570
+propertyConcurrencyLimitWebConnsHelp=-WebConnections
+propertyConcurrencyLimitGlobal=\u5e76\u53d1\u6570\u9650\u5236 - \u5168\u5c40
+propertyConcurrencyLimitGlobalHelp=-GlobalConcurrencyLimit
+propertyConcurrencyLimitInventoryReport=\u5e76\u53d1\u6570\u9650\u5236 -
\u6e05\u5355\u62a5\u8868
+propertyConcurrencyLimitInventoryReportHelp=-InventoryReport
+propertyConcurrencyLimitAvailabilityReport=\u5e76\u53d1\u6570\u9650\u5236 -
\u53ef\u7528\u6027\u62a5\u8868
+propertyConcurrencyLimitAvailabilityReportHelp=-AvailabilityReport
+propertyConcurrencyLimitInventorySync=\u5e76\u53d1\u6570\u9650\u5236 -
\u6e05\u5355\u540c\u6b65
+propertyConcurrencyLimitInventorySyncHelp=-InventorySynchronization
+propertyConcurrencyLimitContentReport=\u5e76\u53d1\u6570\u9650\u5236 -
Content\u62a5\u8868
+propertyConcurrencyLimitContentReportHelp=-ContentReport
+propertyConcurrencyLimitContentDownload=\u5e76\u53d1\u6570\u9650\u5236 -
Content\u4e0b\u8f7d
+propertyConcurrencyLimitContentDownloadHelp=-ContentDownload
+propertyConcurrencyLimitMeasurementReport=\u5e76\u53d1\u6570\u9650\u5236 -
\u6027\u80fd\u62a5\u8868
+propertyConcurrencyLimitMeasurementReportHelp=-MeasurementReport
+propertyConcurrencyLimitMeasurementScheduleRequest=\u5e76\u53d1\u6570\u9650\u5236 -
Measurement Schedule\u8bf7\u6c42
+propertyConcurrencyLimitMeasurementScheduleRequestHelp=-MeasurementScheduleRequest
+introduceHelpDocs=\u60f3\u66f4\u591a\u4e86\u89e3RHQ,\u8bf7\u67e5\u770b\u4e0b\u9762\u7684\u6587\u6863\u94fe\u63a5:
+helpDocRHQServerInstallGuide=\u5b89\u88c5
+helpDocRHQServerInstallGuideLabel=RHQ\u670d\u52a1\u5668\u5b89\u88c5\u6307\u5357
+helpDocRHQGuiConsoleUsersGuide=GUI+Console+Users+Guide
+helpDocRHQGuiConsoleUsersGuideLabel=RHQ GUI Console\u7528\u6237\u6307\u5357
+helpDocRHQServerUsersGuide=Running+the+RHQ+Server
+helpDocRHQServerUsersGuideLabel=RHQ\u670d\u52a1\u5668\u7528\u6237\u6307\u5357
+helpDocRHQAgentUsersGuide=Running+the+RHQ+Agent
+helpDocRHQAgentUsersGuideLabel=RHQ Agent\u7528\u6237\u6307\u5357
+helpDocFaq=FAQ
+helpDocFaqLabel=\u7591\u96be\u89e3\u7b54
+helpDocRHQServerPropParentPage=http://support.rhq-project.org/display/JOPR2/Startup+Properties#ConfiguringtheServer
+newServerSelectItem=\u65b0\u670d\u52a1\u5668
+registeredServersLabel=\u6ce8\u518c\u7684\u670d\u52a1\u5668:
+propertyHighAvailabilityName=\u670d\u52a1\u5668\u540d\u79f0
+propertyHighAvailabilityNameHelp=-ServerName
+propertyMaintenanceModeAtStart=\u542f\u52a8\u7ef4\u62a4\u6a21\u5f0f
+propertyMaintenanceModeAtStartHelp=-MaintenanceModeAtStart
+propertyHighAvailabilityEndpointAddress=\u670d\u52a1\u5668\u516c\u5171\u5730\u5740
+propertyHighAvailabilityAffinityGroup=\u76f8\u4f3c\u7684\u670d\u52a1\u5668\u7ec4\u540d
diff --git a/modules/enterprise/gui/installer-war/src/main/webapp/WEB-INF/faces-config.xml
b/modules/enterprise/gui/installer-war/src/main/webapp/WEB-INF/faces-config.xml
index 9ad7a36..6fd2bb4 100644
--- a/modules/enterprise/gui/installer-war/src/main/webapp/WEB-INF/faces-config.xml
+++ b/modules/enterprise/gui/installer-war/src/main/webapp/WEB-INF/faces-config.xml
@@ -58,6 +58,7 @@
<supported-locale>de</supported-locale>
<supported-locale>fr</supported-locale>
<supported-locale>pt</supported-locale>
+ <supported-locale>zh</supported-locale>
</locale-config>
</application>
commit 0a3120904a5b601477819460b8b99817e43256dc
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Wed May 11 14:57:21 2011 -0400
[BZ 693232] configure AlertManagerBean, AuthorizationManagerBean, and
SubjectManagerBean to use the strict max instance pool since they also are called
(indirectly) by AlertConditionConsumerBean (part of fix for
https://bugzilla.redhat.com/show_bug.cgi?id=693232)
diff --git a/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
b/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
index 8892da8..b7c5c66 100644
--- a/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
+++ b/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
@@ -9,11 +9,12 @@
<!--
The AlertConditionLogManagerBean, AlertConditionManagerBean,
AlertDampeningManagerBean,
- AlertDefinitionManagerBean, and CachedConditionManagerBean SLSB's are all
invoked, either directly or
- indirectly, by the AlertConditionConsumerBean MDB. Since MDB invocations are
always done in new threads, using
- the default SLSB pool impl (ThreadlocalPool) would cause a new instance of this
SLSB to be created
- every time it was invoked by AlertConditionConsumerBean. This would be bad if
only because an existing instance would
- not be reused, but it is really bad because the instance would also never get
destroyed, causing heap space to
+ AlertDefinitionManagerBean, AlertManagerBean, AuthorizationManagerBean,
CachedConditionManagerBean, and
+ SubjectManager SLSB's are all invoked, either directly or indirectly, by the
AlertConditionConsumerBean MDB.
+ Since MDB invocations are always done in new threads, using the default SLSB
pool impl (ThreadlocalPool) would
+ cause a new instance of these SLSB's to be created every time they were
invoked by AlertConditionConsumerBean.
+ This would be bad if only because existing instances would
+ not be reused, but it is really bad because the instances would also never get
destroyed, causing heap space to
gradually leak until the Server eventually ran out of memory. Hence, we must use
a StrictMaxPool, which
will use a fixed pool of instances of this SLSB, instead of a ThreadlocalPool.
Because lots of alert
definitions could result in many concurrent calls to AlertConditionConsumerBean,
and because most of these
@@ -21,7 +22,7 @@
minimize the chances of AlertConditionConsumerBean invocations, which are the
most critical, from having to
block and potentially getting backed up in the queue. We set the pool timeout
extremely high to essentially
prevent queued callers from timing out. Note, MDB's are configured in
ejb3-interceptors-aop.xml to use a strict
- max pool with a max of 15 and a timeout of 10000, so AlertConditionConsumerBean
could become a bottleneck for
+ max pool with a max of 15 and a timeout of 10000, so AlertConditionConsumerBean
might become a bottleneck for
systems with a lot of alerts defined. (ips, 05/10/11)
For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232 .
@@ -64,6 +65,24 @@
</session>
<session>
+ <ejb-name>AlertManagerBean</ejb-name>
+ <pool-config>
+ <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
+ <pool-max-size>100</pool-max-size>
+ <pool-timeout>1000000000</pool-timeout>
+ </pool-config>
+ </session>
+
+ <session>
+ <ejb-name>AuthorizationManagerBean</ejb-name>
+ <pool-config>
+ <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
+ <pool-max-size>100</pool-max-size>
+ <pool-timeout>1000000000</pool-timeout>
+ </pool-config>
+ </session>
+
+ <session>
<ejb-name>CachedConditionManagerBean</ejb-name>
<pool-config>
<pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
@@ -72,6 +91,15 @@
</pool-config>
</session>
+ <session>
+ <ejb-name>SubjectManagerBean</ejb-name>
+ <pool-config>
+ <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
+ <pool-max-size>100</pool-max-size>
+ <pool-timeout>1000000000</pool-timeout>
+ </pool-config>
+ </session>
+
<!--
The CacheConsistencyManagerBean, CloudManagerBean, ServerManagerBean,
StatusManagerBean, and SystemManagerBean
@@ -138,4 +166,3 @@
</enterprise-beans>
</jboss>
-
commit 8069e7fe667aaca09d61489ac2b5ca06570564a1
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Tue May 10 13:19:19 2011 -0400
modifying floating edit fields in templates to be locatable for selenium automation.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
index fecac0b..f933711 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
@@ -26,7 +26,6 @@ import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.SelectionStyle;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.ImgButton;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
@@ -59,6 +58,7 @@ import
org.rhq.enterprise.gui.coregui.client.components.table.ResourceCategoryCe
import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository.TypesLoadedCallback;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableImgButton;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableListGrid;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableTreeGrid;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
@@ -315,7 +315,7 @@ public class ResourceTypeTreeView extends LocatableVLayout implements
Bookmarkab
rollOverCanvas.setWidth(50);
rollOverCanvas.setHeight(22);
- ImgButton metricTemplateImg = new ImgButton();
+ LocatableImgButton metricTemplateImg = new
LocatableImgButton(extendLocatorId("Metric_" + rowNum));
metricTemplateImg.setShowDown(false);
metricTemplateImg.setShowRollOver(false);
metricTemplateImg.setLayoutAlign(Alignment.CENTER);
@@ -329,7 +329,7 @@ public class ResourceTypeTreeView extends LocatableVLayout implements
Bookmarkab
}
});
- ImgButton alertTemplateImg = new ImgButton();
+ LocatableImgButton alertTemplateImg = new
LocatableImgButton(extendLocatorId("Alert_" + rowNum));
alertTemplateImg.setShowDown(false);
alertTemplateImg.setShowRollOver(false);
alertTemplateImg.setLayoutAlign(Alignment.CENTER);
@@ -428,7 +428,7 @@ public class ResourceTypeTreeView extends LocatableVLayout implements
Bookmarkab
rollOverCanvas.setWidth(50);
rollOverCanvas.setHeight(22);
- ImgButton metricTemplateImg = new ImgButton();
+ LocatableImgButton metricTemplateImg = new
LocatableImgButton(extendLocatorId("Metric_" + rowNum));
metricTemplateImg.setShowDown(false);
metricTemplateImg.setShowRollOver(false);
metricTemplateImg.setLayoutAlign(Alignment.CENTER);
@@ -442,7 +442,7 @@ public class ResourceTypeTreeView extends LocatableVLayout implements
Bookmarkab
}
});
- ImgButton alertTemplateImg = new ImgButton();
+ LocatableImgButton alertTemplateImg = new
LocatableImgButton(extendLocatorId("Alert_" + rowNum));
alertTemplateImg.setShowDown(false);
alertTemplateImg.setShowRollOver(false);
alertTemplateImg.setLayoutAlign(Alignment.CENTER);
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableImgButton.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableImgButton.java
new file mode 100644
index 0000000..f1deb36
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableImgButton.java
@@ -0,0 +1,23 @@
+package org.rhq.enterprise.gui.coregui.client.util.selenium;
+
+import com.smartgwt.client.widgets.ImgButton;
+
+/**
+ * Wrapper for com.smartgwt.client.widgets.Img that sets the ID for use with selenium
scLocators.
+ *
+ * @author Simeon Pinder
+ */
+public class LocatableImgButton extends ImgButton {
+
+ /**
+ * <pre>
+ * ID Format: "simpleClassname_locatorId"
+ * </pre>
+ * @param locatorId not null.
+ * @param img not null or empty.
+ */
+ public LocatableImgButton(String locatorId) {
+ SeleniumUtility.setID(this, locatorId);
+ }
+
+}
commit a62f196717a056c1d73967999938ca447818c237
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Wed May 11 09:17:30 2011 +0200
Prevent NPE if processInfo is null.
diff --git
a/modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaServerComponent.java
b/modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaServerComponent.java
index 9bd3859..d50f324 100644
--- a/modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaServerComponent.java
+++ b/modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaServerComponent.java
@@ -152,16 +152,18 @@ public class SambaServerComponent extends
AugeasConfigurationComponent implement
public void getValues(MeasurementReport report, Set<MeasurementScheduleRequest>
metrics) throws Exception {
NetworkStats stats =
resourceContext.getSystemInformation().getNetworkStats("localhost", PORT);
-
- processInfo.refresh();
-
- for (MeasurementScheduleRequest request : metrics) {
- if (request.getName().startsWith("NetworkStat.")) {
- int val =
stats.getByName(request.getName().substring("NetworkStat.".length()));
- report.addData(new MeasurementDataNumeric(request, (double) val));
- } else if (request.getName().startsWith("Process.")) {
- Double value = ObjectUtil.lookupDeepNumericAttributeProperty(processInfo,
request.getName().substring("Process.".length()));
- report.addData(new MeasurementDataNumeric(request, value));
+
+ if (processInfo!=null) {
+ processInfo.refresh();
+
+ for (MeasurementScheduleRequest request : metrics) {
+ if (request.getName().startsWith("NetworkStat.")) {
+ int val =
stats.getByName(request.getName().substring("NetworkStat.".length()));
+ report.addData(new MeasurementDataNumeric(request, (double) val));
+ } else if (request.getName().startsWith("Process.")) {
+ Double value =
ObjectUtil.lookupDeepNumericAttributeProperty(processInfo,
request.getName().substring("Process.".length()));
+ report.addData(new MeasurementDataNumeric(request, value));
+ }
}
}
}
@@ -269,7 +271,7 @@ public class SambaServerComponent extends AugeasConfigurationComponent
implement
if (args != null) {
processExecution.setArguments(args.split(" "));
}
-
+
processExecution.setCaptureOutput(true);
processExecution.setWaitForCompletion(1000L);
processExecution.setKillOnTimeout(true);
commit 48bf82fcfaaf7cd9d3aa7549de7d49d793964b5f
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Tue May 10 15:14:44 2011 -0400
Related to [BZ 702390 - Large number of BundleDeployments for a single Bundle causes
fetch serialization issues]
Ensure (optional=false) set for LAZY load required (i.e. nullable = false)
associations.
This should ensure efficient lazy load.
For clarity, and to give Hibernate as many hints as possible, mark all
XxxToOne associations with the 'optional' attribute, whether true or false,
lazy or not. And set nullable on the JoinColumn annotations as well.
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertCondition.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertCondition.java
index 640648b..355c854 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertCondition.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertCondition.java
@@ -299,8 +299,8 @@ public class AlertCondition implements Serializable {
@Enumerated(EnumType.STRING)
private AlertConditionCategory category;
- @JoinColumn(name = "MEASUREMENT_DEFINITION_ID", referencedColumnName =
"ID")
- @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "MEASUREMENT_DEFINITION_ID", referencedColumnName =
"ID", nullable = true)
+ @ManyToOne(fetch = FetchType.LAZY, optional = true)
@XmlTransient
private MeasurementDefinition measurementDefinition;
@@ -319,8 +319,8 @@ public class AlertCondition implements Serializable {
@Column(name = "TRIGGER_ID")
private Integer triggerId;
- @JoinColumn(name = "ALERT_DEFINITION_ID", referencedColumnName =
"ID")
- @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "ALERT_DEFINITION_ID", referencedColumnName =
"ID", nullable = true)
+ @ManyToOne(fetch = FetchType.LAZY, optional = true)
@XmlTransient
private AlertDefinition alertDefinition;
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
index cfbb9d7..31fc9ab 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
@@ -111,11 +111,11 @@ public class BundleVersion implements Serializable {
private String recipe;
@JoinColumn(name = "BUNDLE_ID", referencedColumnName = "ID",
nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
private Bundle bundle;
@JoinColumn(name = "CONFIG_DEF_ID", referencedColumnName = "ID",
nullable = true)
- @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+ @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = true)
private ConfigurationDefinition configurationDefinition;
@OneToMany(mappedBy = "bundleVersion", fetch = FetchType.LAZY, cascade =
CascadeType.REMOVE)
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/PluginConfigurationUpdate.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/PluginConfigurationUpdate.java
index e7c5845..32a526e 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/PluginConfigurationUpdate.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/PluginConfigurationUpdate.java
@@ -139,12 +139,12 @@ public class PluginConfigurationUpdate extends
AbstractResourceConfigurationUpda
public static final String QUERY_DELETE_GROUP_UPDATE =
"pluginConfigurationUpdate.deleteGroupUpdate";
@JoinColumn(name = "PLUGIN_CONFIG_RES_ID", referencedColumnName =
"ID", nullable = true)
- @ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
+ @ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.LAZY, optional = true)
@XmlTransient
private Resource resource;
@JoinColumn(name = "AGG_PLUGIN_UPDATE_ID", referencedColumnName =
"ID", nullable = true)
- @ManyToOne
+ @ManyToOne(optional = true)
private GroupPluginConfigurationUpdate groupConfigurationUpdate;
protected PluginConfigurationUpdate() {
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSource.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSource.java
index 00877bd..a94c4ab 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSource.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSource.java
@@ -59,7 +59,7 @@ import org.rhq.core.domain.configuration.Configuration;
* @author Jason Dobies
*/
@Entity
-@NamedQueries({
+@NamedQueries( {
@NamedQuery(name = ContentSource.QUERY_FIND_ALL, query = "SELECT cs FROM
ContentSource cs "),
@NamedQuery(name = ContentSource.QUERY_FIND_ALL_WITH_CONFIG, query = "SELECT cs
FROM ContentSource cs LEFT JOIN FETCH cs.configuration"),
@NamedQuery(name = ContentSource.QUERY_FIND_BY_NAME_AND_TYPENAME, query =
"SELECT cs " + " FROM ContentSource cs "
@@ -94,7 +94,7 @@ public class ContentSource implements Serializable {
private int id;
@JoinColumn(name = "CONTENT_SOURCE_TYPE_ID", referencedColumnName =
"ID", nullable = false)
- @ManyToOne
+ @ManyToOne(optional = false)
private ContentSourceType contentSourceType;
@Column(name = "NAME", nullable = false)
@@ -117,7 +117,7 @@ public class ContentSource implements Serializable {
private String loadErrorMessage;
@JoinColumn(name = "CONFIGURATION_ID", referencedColumnName =
"ID", nullable = true)
- @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+ @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = true)
private Configuration configuration;
@Column(name = "CREATION_TIME", nullable = false)
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSourceType.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSourceType.java
index 2c6b41d..52e6cce 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSourceType.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSourceType.java
@@ -100,7 +100,7 @@ public class ContentSourceType implements Serializable {
private String defaultSyncSchedule = "0 0 3 * * ?";
@JoinColumn(name = "SOURCE_CONFIG_DEF_ID", nullable = true)
- @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+ @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = true)
@XmlTransient
private ConfigurationDefinition contentSourceConfigurationDefinition;
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/content/InstalledPackageHistory.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/content/InstalledPackageHistory.java
index 9b21fe2..5d52d7f 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/content/InstalledPackageHistory.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/content/InstalledPackageHistory.java
@@ -54,7 +54,7 @@ import org.rhq.core.domain.resource.Resource;
* @author Jason Dobies
*/
@Entity
-@NamedQueries({
+@NamedQueries( {
@NamedQuery(name =
InstalledPackageHistory.QUERY_FIND_CONFIG_BY_PACKAGE_VERSION_AND_REQ, query = "SELECT
dcv FROM InstalledPackageHistory iph JOIN iph.deploymentConfigurationValues dcv "
+ "WHERE iph.packageVersion = :packageVersion "
+ "AND iph.contentServiceRequest = :contentServiceRequest "
@@ -92,7 +92,7 @@ public class InstalledPackageHistory implements Serializable {
private int id;
@JoinColumn(name = "PACKAGE_VERSION_ID", referencedColumnName =
"ID", nullable = false)
- @ManyToOne
+ @ManyToOne(optional = false)
private PackageVersion packageVersion;
@Column(name = "STATUS", nullable = false)
@@ -115,7 +115,7 @@ public class InstalledPackageHistory implements Serializable {
* case that the package type does not define any deploy time properties.
*/
@JoinColumn(name = "DEPLOYMENT_CONFIG_ID", referencedColumnName =
"ID", nullable = true)
- @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+ @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = true)
private Configuration deploymentConfigurationValues;
/**
@@ -132,11 +132,11 @@ public class InstalledPackageHistory implements Serializable {
* This history item described a package that was on this resource.
*/
@JoinColumn(name = "RESOURCE_ID", referencedColumnName = "ID",
nullable = false)
- @ManyToOne
+ @ManyToOne(optional = false)
private Resource resource;
@JoinColumn(name = "CONTENT_SERVICE_REQUEST_ID", referencedColumnName =
"ID", nullable = true)
- @ManyToOne
+ @ManyToOne(optional = true)
private ContentServiceRequest contentServiceRequest;
public int getId() {
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageType.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageType.java
index d9e3ea3..9c78af5 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageType.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageType.java
@@ -41,7 +41,6 @@ import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
-import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlTransient;
@@ -72,8 +71,7 @@ import org.rhq.core.domain.resource.ResourceType;
+ "JOIN pt.resourceType rt "
+ "LEFT JOIN FETCH pt.deploymentConfigurationDefinition cd "
+ "LEFT JOIN FETCH cd.templates cts " + "WHERE rt.id = :typeId AND
pt.isCreationData = true"),
- @NamedQuery(name = PackageType.QUERY_DYNAMIC_CONFIG_VALUES, query = "SELECT
pt.resourceType.plugin || ' - ' || pt.resourceType.name || ' - ' ||
pt.displayName, pt.name FROM PackageType AS pt")
-})
+ @NamedQuery(name = PackageType.QUERY_DYNAMIC_CONFIG_VALUES, query = "SELECT
pt.resourceType.plugin || ' - ' || pt.resourceType.name || ' - ' ||
pt.displayName, pt.name FROM PackageType AS pt") })
@SequenceGenerator(name = "SEQ", sequenceName =
"RHQ_PACKAGE_TYPE_ID_SEQ")
@Table(name = "RHQ_PACKAGE_TYPE")
@XmlAccessorType(XmlAccessType.FIELD)
@@ -121,18 +119,18 @@ public class PackageType implements Serializable {
private boolean supportsArchitecture;
@JoinColumn(name = "DEPLOYMENT_CONFIG_DEF_ID", referencedColumnName =
"ID", nullable = true)
- @OneToOne(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, optional = true)
private ConfigurationDefinition deploymentConfigurationDefinition;
@JoinColumn(name = "PACKAGE_EXTRA_CONFIG_ID", referencedColumnName =
"ID", nullable = true)
- @OneToOne(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, optional = true)
private ConfigurationDefinition packageExtraPropertiesDefinition;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "packageType", cascade = {
CascadeType.REMOVE })
private Set<Package> packages;
@JoinColumn(name = "RESOURCE_TYPE_ID", referencedColumnName =
"ID", nullable = true)
- @ManyToOne
+ @ManyToOne(optional = true)
@XmlTransient
private ResourceType resourceType;
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java
index 76dbff4..d64d8a5 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java
@@ -78,7 +78,7 @@ import org.rhq.core.domain.util.OSGiVersionComparator;
+ " WHERE pv.generalPackage.name = :packageName "
+ " AND pv.generalPackage.packageType.name = :packageTypeName "
+ " AND pv.generalPackage.packageType.resourceType = :resourceType "
- + " AND pv.architecture.name = :architectureName " + " AND
pv.version = :version "),
+ + " AND pv.architecture.name = :architectureName " + " AND
pv.version = :version "),
@NamedQuery(name = PackageVersion.QUERY_FIND_ID_BY_PACKAGE_DETAILS_KEY_AND_RES_ID,
query = "SELECT pv.id "
+ " FROM PackageVersion AS pv " + " JOIN
pv.generalPackage.packageType.resourceType.resources r "
+ " WHERE pv.generalPackage.name = :packageName "
@@ -251,17 +251,13 @@ import org.rhq.core.domain.util.OSGiVersionComparator;
+ "WHERE p.id IN (SELECT pv.generalPackage.id FROM PackageVersion AS pv
WHERE pv.fileName = :rpmName)"),
@NamedQuery(name = PackageVersion.QUERY_FIND_PACKAGEVERSION_BY_FILENAME, query =
"SELECT pv FROM PackageVersion AS pv WHERE pv.fileName = :rpmName)"),
@NamedQuery(name = PackageVersion.QUERY_FIND_BY_PACKAGE_AND_REPO_ID, query =
"SELECT pv"
- + " FROM PackageVersion pv"
- + " JOIN pv.repoPackageVersions rpv"
- + " WHERE pv.generalPackage.id = :packageId"
+ + " FROM PackageVersion pv" + " JOIN pv.repoPackageVersions
rpv" + " WHERE pv.generalPackage.id = :packageId"
+ " AND rpv.repo.id = :repoId"),
- @NamedQuery(name = PackageVersion.QUERY_FIND_DELETEABLE_IDS_IN_REPO, query =
"SELECT pv.id FROM PackageVersion pv"
+ @NamedQuery(name = PackageVersion.QUERY_FIND_DELETEABLE_IDS_IN_REPO, query =
"SELECT pv.id FROM PackageVersion pv"
+ " WHERE (pv.id, 1) IN"
+ " (SELECT pv2.id, (SELECT COUNT(rpv) FROM RepoPackageVersion rpv WHERE
rpv.packageVersion.id = pv2.id)"
- + " FROM PackageVersion pv2"
- + " WHERE pv2.id IN ( :packageVersionIds )"
- + " AND pv2.id IN (SELECT rpv.packageVersion.id FROM RepoPackageVersion
rpv WHERE rpv.repo.id = :repoId))")
-})
+ + " FROM PackageVersion pv2" + " WHERE pv2.id IN (
:packageVersionIds )"
+ + " AND pv2.id IN (SELECT rpv.packageVersion.id FROM RepoPackageVersion
rpv WHERE rpv.repo.id = :repoId))") })
@SequenceGenerator(name = "SEQ", sequenceName =
"RHQ_PACKAGE_VERSION_ID_SEQ")
@Table(name = "RHQ_PACKAGE_VERSION")
public class PackageVersion implements Serializable {
@@ -300,7 +296,7 @@ public class PackageVersion implements Serializable {
public static final String QUERY_FIND_PACKAGE_BY_FILENAME =
"PackageVersion.findPackageByFilename";
public static final String QUERY_FIND_PACKAGEVERSION_BY_FILENAME =
"PackageVersion.findPackageVersionByFilename";
public static final String QUERY_FIND_DELETEABLE_IDS_IN_REPO =
"PackageVersion.findDeleteableVersionIds";
-
+
/**
* This is a default {@link Comparator} implementation for package versions.
* If the package versions being compared both have non-null {@link
PackageVersion#getVersion() versions}
@@ -319,9 +315,9 @@ public class PackageVersion implements Serializable {
public int compare(PackageVersion p1, PackageVersion p2) {
String v1 = p1.getVersion();
String v2 = p2.getVersion();
-
+
OSGiVersionComparator c = new OSGiVersionComparator();
-
+
if (v1 != null && v2 != null) {
try {
return c.compare(v1, v2);
@@ -329,23 +325,23 @@ public class PackageVersion implements Serializable {
//well, this can happen.. not all packages have OSGi type versions.
}
}
-
+
if (p1.getFileCreatedDate() != null && p2.getFileCreatedDate() !=
null) {
return p1.getFileCreatedDate().compareTo(p2.getFileCreatedDate());
}
-
+
//hmm... there's actually nothing we can sort these two by..
//let's compare them by id - the one inserted sooner will have a lower
id
-
+
return Integer.valueOf(p1.getId()).compareTo(p2.getId());
}
};
-
+
/**
* @see DefaultPackageVersionComparator
*/
public static final DefaultPackageVersionComparator DEFAULT_COMPARATOR = new
DefaultPackageVersionComparator();
-
+
// Attributes --------------------------------------------
@Column(name = "ID", nullable = false)
@@ -354,7 +350,7 @@ public class PackageVersion implements Serializable {
private int id;
@JoinColumn(name = "PACKAGE_ID", referencedColumnName = "ID",
nullable = false)
- @ManyToOne(cascade = { CascadeType.MERGE, CascadeType.PERSIST })
+ @ManyToOne(cascade = { CascadeType.MERGE, CascadeType.PERSIST }, optional = false)
private Package generalPackage;
@Column(name = "DISPLAY_NAME", nullable = true)
@@ -373,7 +369,7 @@ public class PackageVersion implements Serializable {
private String displayVersion;
@JoinColumn(name = "ARCHITECTURE_ID", referencedColumnName =
"ID", nullable = false)
- @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
+ @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST, optional = false)
private Architecture architecture;
@Column(name = "FILE_NAME", nullable = true)
@@ -401,7 +397,7 @@ public class PackageVersion implements Serializable {
private byte[] metadata;
@JoinColumn(name = "CONFIG_ID", referencedColumnName = "ID",
nullable = true)
- @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+ @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = true)
private Configuration extraProperties;
@OneToMany(mappedBy = "packageVersion", fetch = FetchType.LAZY, cascade =
CascadeType.REMOVE)
@@ -415,11 +411,11 @@ public class PackageVersion implements Serializable {
@OneToMany(mappedBy = "packageVersion", fetch = FetchType.LAZY)
private Set<InstalledPackageHistory> installedPackageHistory;
- // No longer use cascade PERSIST on this. We'll associate it manually due to
intracacies in blob handling
+ // No longer use cascade PERSIST on this. We'll associate it manually due to
intracacies in blob handling
@JoinColumn(name = "PACKAGE_BITS_ID", referencedColumnName =
"ID", nullable = true)
- @OneToOne(cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)
+ @OneToOne(cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY, optional = true)
@XmlTransient
- private PackageBits packageBits; // do NOT eager load this - is has the BLOB contents
of the package
+ private PackageBits packageBits;
@OneToMany(mappedBy = "packageVersion", cascade = { CascadeType.REMOVE },
fetch = FetchType.LAZY)
private Set<ProductVersionPackageVersion> productVersionPackageVersions;
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/dashboard/Dashboard.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/dashboard/Dashboard.java
index 2f5d41e..601d817 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/dashboard/Dashboard.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/dashboard/Dashboard.java
@@ -88,20 +88,20 @@ public class Dashboard implements Serializable {
@Column(name = "SHARED", nullable = false)
private boolean shared = false;
- @JoinColumn(name = "CONFIGURATION_ID", referencedColumnName =
"ID")
- @OneToOne(cascade = { CascadeType.ALL })
+ @JoinColumn(name = "CONFIGURATION_ID", referencedColumnName =
"ID", nullable = true)
+ @OneToOne(cascade = { CascadeType.ALL }, optional = true)
private Configuration configuration = new Configuration();
@JoinColumn(name = "SUBJECT_ID", nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
private Subject owner;
@JoinColumn(name = "RESOURCE_ID", nullable = true)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = true)
private Resource resource;
@JoinColumn(name = "GROUP_ID", nullable = true)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = true)
private ResourceGroup group;
@OneToMany(mappedBy = "dashboard", fetch = FetchType.EAGER)
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/discovery/ResourceSyncInfo.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/discovery/ResourceSyncInfo.java
index 4bcc267..eb3b97d 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/discovery/ResourceSyncInfo.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/discovery/ResourceSyncInfo.java
@@ -72,8 +72,8 @@ public class ResourceSyncInfo implements Serializable {
@Enumerated(EnumType.STRING)
private InventoryStatus inventoryStatus;
- @JoinColumn(name = "PARENT_RESOURCE_ID")
- @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "PARENT_RESOURCE_ID", nullable = true)
+ @ManyToOne(fetch = FetchType.LAZY, optional = true)
private ResourceSyncInfo parent;
@OneToMany(mappedBy = "parent", fetch = FetchType.EAGER)
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/event/Event.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/event/Event.java
index dfb8d34..f0df086 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/event/Event.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/event/Event.java
@@ -112,7 +112,7 @@ public class Event implements Serializable {
private int id;
@JoinColumn(name = "EVENT_SOURCE_ID", referencedColumnName =
"ID", nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
private EventSource source;
@Column(name = "TIMESTAMP", nullable = false)
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/event/EventDefinition.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/event/EventDefinition.java
index 75f7b73..5db91bb 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/event/EventDefinition.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/event/EventDefinition.java
@@ -58,7 +58,7 @@ public class EventDefinition implements Serializable {
private int id;
@JoinColumn(name = "RESOURCE_TYPE_ID", referencedColumnName =
"ID", nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
private ResourceType resourceType;
@Column(name = "RESOURCE_TYPE_ID", insertable = false, updatable = false)
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/event/EventSource.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/event/EventSource.java
index 2424edb..f1d8108 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/event/EventSource.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/event/EventSource.java
@@ -74,7 +74,7 @@ public class EventSource implements Serializable {
private EventDefinition eventDefinition;
@JoinColumn(name = "RESOURCE_ID", nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
private Resource resource;
@Column(name = "RESOURCE_ID", insertable = false, updatable = false)
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/Availability.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/Availability.java
index 260adc5..9647632 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/Availability.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/Availability.java
@@ -1,292 +1,292 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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, version 2, as
- * published by the Free Software Foundation, and/or the GNU Lesser
- * General Public License, version 2.1, also as published by the Free
- * Software Foundation.
- *
- * 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 and the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the GNU Lesser General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.rhq.core.domain.measurement;
-
-import java.io.Serializable;
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
-
-import org.rhq.core.domain.resource.Resource;
-
-/**
- * This Entity Bean stores information about resource availability. The actual data is
run-length encoded. This means
- * that the {@link #getAvailabilityType() availability state} (e.g. UP or DOWN) changed
at the
- * {@link #getStartTime() start time}.
- *
- * This provides historical data regarding when a resource was up or down. To get the
current availability
- * of a resource, it is best to use the {@link ResourceAvailability} entity instead.
- *
- * @see ResourceAvailability
- *
- * @author Heiko W. Rupp
- * @author John Mazzitelli
- */
-@Entity
-@NamedQueries( { @NamedQuery(name = Availability.FIND_CURRENT_BY_RESOURCE, query =
"" //
- + " SELECT av " //
- + " FROM Availability av " //
- + " WHERE av.resource.id = :resourceId " //
- + " AND av.endTime IS NULL " //
- + "ORDER BY av.startTime ASC "), // this order by is on purpose - for
handling NonUniqueResultException problems
- @NamedQuery(name = Availability.FIND_BY_RESOURCE, query = "" //
- + " SELECT av " //
- + " FROM Availability av " //
- + " WHERE av.resource.id = :resourceId " //
- + "ORDER BY av.startTime ASC"), //
- @NamedQuery(name = Availability.FIND_BY_RESOURCE_NO_SORT, query = "" //
- + "SELECT av " //
- + " FROM Availability av " //
- + " WHERE av.resource.id = :resourceId "), //
-
- // get all current resource availabilities for those that do not match a given
availability type
- @NamedQuery(name = Availability.FIND_NONMATCHING_WITH_RESOURCE_ID_BY_AGENT_AND_TYPE,
query = "" //
- + "SELECT new
org.rhq.core.domain.resource.composite.ResourceIdWithAvailabilityComposite(av.resource.id,
av) " //
- + " FROM Availability av " //
- + " WHERE av.resource.agent.id = :agentId " //
- + " AND ((av.availabilityType <> :availabilityType AND
:availabilityType IS NOT NULL) " //
- + " OR (av.availabilityType IS NOT NULL AND :availabilityType IS
NULL) " //
- + " OR (av.availabilityType IS NULL AND :availabilityType IS NOT
NULL))" //
- + " AND av.endTime IS NULL"), //
- @NamedQuery(name = Availability.FIND_FOR_RESOURCE_WITHIN_INTERVAL, query =
"" //
- + "SELECT av FROM Availability av " //
- + " WHERE av.resource.id = :resourceId " //
- + " AND ((av.startTime <= :start AND (av.endTime >= :start OR
av.endTime IS NULL) ) " /* availability straddles :start */
- + " OR (av.startTime BETWEEN :start AND :end)) " /* interval
straddles availability.startTime */
- + "ORDER BY av.startTime ASC"), //
- @NamedQuery(name = Availability.FIND_FOR_RESOURCE_GROUP_WITHIN_INTERVAL, query =
"" //
- + "SELECT av FROM Availability av " //
- + " WHERE av.resource.id IN ( SELECT ires.id " //
- + " FROM ResourceGroup rg " //
- + " JOIN rg.implicitResources ires " //
- + " WHERE rg.id = :groupId ) " //
- + " AND ((av.startTime <= :start AND (av.endTime >= :start OR
av.endTime IS NULL) ) " /* availability straddles :start */
- + " OR (av.startTime BETWEEN :start AND :end)) " /* interval
straddles availability.startTime */
- + "ORDER BY av.startTime ASC"), //
- @NamedQuery(name = Availability.FIND_FOR_AUTO_GROUP_WITHIN_INTERVAL, query =
"" //
- + " SELECT av FROM Availability av " //
- + " JOIN av.resource res JOIN res.parentResource parent JOIN
res.resourceType type " //
- + " WHERE parent.id = :parentId " //
- + " AND type.id = :typeId " //
- + " AND ((av.startTime <= :start AND (av.endTime >= :start OR
av.endTime IS NULL)) " /* availability straddles :start */
- + " OR (av.startTime BETWEEN :start AND :end)) " /* interval
straddles availability.startTime */
- + "ORDER BY av.startTime ASC"), //
- @NamedQuery(name = Availability.FIND_BY_RESOURCE_AND_DATE, query = "" //
- + "SELECT av FROM Availability av " //
- + " WHERE av.resource.id = :resourceId " //
- + " AND av.startTime <= :aTime " //
- + " AND ( av.endTime >= :aTime OR av.endTime IS NULL ) "), //
- @NamedQuery(name = Availability.QUERY_DELETE_BY_RESOURCES, query = "" //
- + " DELETE Availability a " //
- + " WHERE a.resource.id IN ( :resourceIds )") })
-@SequenceGenerator(name = "Generator", sequenceName =
"RHQ_AVAILABILITY_ID_SEQ")
-@Table(name = "RHQ_AVAILABILITY")
-public class Availability implements Serializable {
- private static final long serialVersionUID = 1L;
-
- public static final String FIND_CURRENT_BY_RESOURCE =
"Availability.findCurrentByResource";
- public static final String FIND_BY_RESOURCE =
"Availability.findByResource";
- public static final String FIND_BY_RESOURCE_NO_SORT =
"Availability.findByResourceNoSort";
- public static final String FIND_NONMATCHING_WITH_RESOURCE_ID_BY_AGENT_AND_TYPE =
"Availability.findNonmatchingWithResourceIdByAgentAndType";
- public static final String FIND_FOR_RESOURCE_WITHIN_INTERVAL =
"Availability.findForResourceWithinInterval";
- public static final String FIND_FOR_RESOURCE_GROUP_WITHIN_INTERVAL =
"Availability.findForResourceGroupWithinInterval";
- public static final String FIND_FOR_AUTO_GROUP_WITHIN_INTERVAL =
"Availability.findForAutoGroupWithinInterval";
- public static final String FIND_BY_RESOURCE_AND_DATE =
"Availability.findByResourceAndDate";
- public static final String QUERY_DELETE_BY_RESOURCES =
"Availability.deleteByResources";
-
- public static final String NATIVE_QUERY_PURGE = "DELETE FROM RHQ_AVAILABILITY
WHERE END_TIME < ?";
-
- @Column(name = "ID", nullable = false)
- @GeneratedValue(strategy = GenerationType.AUTO, generator = "Generator")
- @Id
- private int id;
-
- /**
- * Start time of this availability state
- */
- @Column(name = "START_TIME", nullable = false)
- private long startTime;
-
- /**
- * End time of this availability state (which is the start of the next availability
time period)
- */
- @Column(name = "END_TIME", nullable = true)
- private Long endTime;
-
- /**
- * Availability state for this time period
- */
- @Column(name = "AVAILABILITY_TYPE", nullable = true)
- @Enumerated(EnumType.ORDINAL)
- private AvailabilityType availabilityType;
-
- @JoinColumn(name = "RESOURCE_ID", referencedColumnName = "ID",
nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
- private Resource resource;
-
- protected Availability() {
- // for JPA use only
- }
-
- /**
- * Constructor for {@link Availability}. If <code>type</code> is
<code>null</code>, it will be considered unknown.
- *
- * @param resource
- * @param startTime
- * @param type
- */
- public Availability(Resource resource, Date startTime, AvailabilityType type) {
- if (resource == null) {
- throw new IllegalArgumentException("resource==null");
- }
-
- this.resource = resource;
- this.availabilityType = type;
- this.startTime = (startTime != null) ? startTime.getTime() : new
Date().getTime();
- this.endTime = null;
- }
-
- public int getId() {
- return id;
- }
-
- public Resource getResource() {
- return resource;
- }
-
- public Date getStartTime() {
- return new Date(startTime);
- }
-
- public void setStartTime(Date startTime) {
- this.startTime = startTime.getTime();
- }
-
- /**
- * The end time of this availability period. This will be
<code>null</code> if this represents the last known
- * availability.
- *
- * @return end of the availability period
- */
- public Date getEndTime() {
- return (endTime != null) ? new Date(endTime.longValue()) : null;
- }
-
- public void setEndTime(Date endTime) {
- this.endTime = (endTime != null) ? endTime.getTime() : null;
- }
-
- /**
- * Indicates the availability status as either UP or DOWN; if
<code>null</code> is returned, the status is unknown.
- *
- * @return availability status
- */
- public AvailabilityType getAvailabilityType() {
- return availabilityType;
- }
-
- /**
- * Sets the availability status. This can be <code>null</code> to
indicate an "unknown" availability status.
- *
- * @param availabilityType
- */
- public void setAvailabilityType(AvailabilityType availabilityType) {
- this.availabilityType = availabilityType;
- }
-
- @Override
- public String toString() {
- return "Availability[id=" + id + ",type=" +
this.availabilityType + ",start-time=" + getStartTime()
- + ",end-time=" + getEndTime() + "]";
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = (prime * result) + ((availabilityType == null) ? 0 :
availabilityType.hashCode());
- result = (prime * result) + ((endTime == null) ? 0 : endTime.hashCode());
- result = (prime * result) + ((resource == null) ? 0 : resource.hashCode());
- result = (prime * result) + (int) (startTime ^ (startTime >>> 32));
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
-
- if (obj == null) {
- return false;
- }
-
- if (!(obj instanceof Availability)) {
- return false;
- }
-
- final Availability other = (Availability) obj;
- if (availabilityType == null) {
- if (other.availabilityType != null) {
- return false;
- }
- } else if (!availabilityType.equals(other.availabilityType)) {
- return false;
- }
-
- if (endTime == null) {
- if (other.endTime != null) {
- return false;
- }
- } else if (!endTime.equals(other.endTime)) {
- return false;
- }
-
- if (resource == null) {
- if (other.resource != null) {
- return false;
- }
- } else if (!resource.equals(other.resource)) {
- return false;
- }
-
- if (startTime != other.startTime) {
- return false;
- }
-
- return true;
- }
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.core.domain.measurement;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+
+import org.rhq.core.domain.resource.Resource;
+
+/**
+ * This Entity Bean stores information about resource availability. The actual data is
run-length encoded. This means
+ * that the {@link #getAvailabilityType() availability state} (e.g. UP or DOWN) changed
at the
+ * {@link #getStartTime() start time}.
+ *
+ * This provides historical data regarding when a resource was up or down. To get the
current availability
+ * of a resource, it is best to use the {@link ResourceAvailability} entity instead.
+ *
+ * @see ResourceAvailability
+ *
+ * @author Heiko W. Rupp
+ * @author John Mazzitelli
+ */
+@Entity
+@NamedQueries( { @NamedQuery(name = Availability.FIND_CURRENT_BY_RESOURCE, query =
"" //
+ + " SELECT av " //
+ + " FROM Availability av " //
+ + " WHERE av.resource.id = :resourceId " //
+ + " AND av.endTime IS NULL " //
+ + "ORDER BY av.startTime ASC "), // this order by is on purpose - for
handling NonUniqueResultException problems
+ @NamedQuery(name = Availability.FIND_BY_RESOURCE, query = "" //
+ + " SELECT av " //
+ + " FROM Availability av " //
+ + " WHERE av.resource.id = :resourceId " //
+ + "ORDER BY av.startTime ASC"), //
+ @NamedQuery(name = Availability.FIND_BY_RESOURCE_NO_SORT, query = "" //
+ + "SELECT av " //
+ + " FROM Availability av " //
+ + " WHERE av.resource.id = :resourceId "), //
+
+ // get all current resource availabilities for those that do not match a given
availability type
+ @NamedQuery(name = Availability.FIND_NONMATCHING_WITH_RESOURCE_ID_BY_AGENT_AND_TYPE,
query = "" //
+ + "SELECT new
org.rhq.core.domain.resource.composite.ResourceIdWithAvailabilityComposite(av.resource.id,
av) " //
+ + " FROM Availability av " //
+ + " WHERE av.resource.agent.id = :agentId " //
+ + " AND ((av.availabilityType <> :availabilityType AND
:availabilityType IS NOT NULL) " //
+ + " OR (av.availabilityType IS NOT NULL AND :availabilityType IS
NULL) " //
+ + " OR (av.availabilityType IS NULL AND :availabilityType IS NOT
NULL))" //
+ + " AND av.endTime IS NULL"), //
+ @NamedQuery(name = Availability.FIND_FOR_RESOURCE_WITHIN_INTERVAL, query =
"" //
+ + "SELECT av FROM Availability av " //
+ + " WHERE av.resource.id = :resourceId " //
+ + " AND ((av.startTime <= :start AND (av.endTime >= :start OR
av.endTime IS NULL) ) " /* availability straddles :start */
+ + " OR (av.startTime BETWEEN :start AND :end)) " /* interval
straddles availability.startTime */
+ + "ORDER BY av.startTime ASC"), //
+ @NamedQuery(name = Availability.FIND_FOR_RESOURCE_GROUP_WITHIN_INTERVAL, query =
"" //
+ + "SELECT av FROM Availability av " //
+ + " WHERE av.resource.id IN ( SELECT ires.id " //
+ + " FROM ResourceGroup rg " //
+ + " JOIN rg.implicitResources ires " //
+ + " WHERE rg.id = :groupId ) " //
+ + " AND ((av.startTime <= :start AND (av.endTime >= :start OR
av.endTime IS NULL) ) " /* availability straddles :start */
+ + " OR (av.startTime BETWEEN :start AND :end)) " /* interval
straddles availability.startTime */
+ + "ORDER BY av.startTime ASC"), //
+ @NamedQuery(name = Availability.FIND_FOR_AUTO_GROUP_WITHIN_INTERVAL, query =
"" //
+ + " SELECT av FROM Availability av " //
+ + " JOIN av.resource res JOIN res.parentResource parent JOIN
res.resourceType type " //
+ + " WHERE parent.id = :parentId " //
+ + " AND type.id = :typeId " //
+ + " AND ((av.startTime <= :start AND (av.endTime >= :start OR
av.endTime IS NULL)) " /* availability straddles :start */
+ + " OR (av.startTime BETWEEN :start AND :end)) " /* interval
straddles availability.startTime */
+ + "ORDER BY av.startTime ASC"), //
+ @NamedQuery(name = Availability.FIND_BY_RESOURCE_AND_DATE, query = "" //
+ + "SELECT av FROM Availability av " //
+ + " WHERE av.resource.id = :resourceId " //
+ + " AND av.startTime <= :aTime " //
+ + " AND ( av.endTime >= :aTime OR av.endTime IS NULL ) "), //
+ @NamedQuery(name = Availability.QUERY_DELETE_BY_RESOURCES, query = "" //
+ + " DELETE Availability a " //
+ + " WHERE a.resource.id IN ( :resourceIds )") })
+@SequenceGenerator(name = "Generator", sequenceName =
"RHQ_AVAILABILITY_ID_SEQ")
+@Table(name = "RHQ_AVAILABILITY")
+public class Availability implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ public static final String FIND_CURRENT_BY_RESOURCE =
"Availability.findCurrentByResource";
+ public static final String FIND_BY_RESOURCE =
"Availability.findByResource";
+ public static final String FIND_BY_RESOURCE_NO_SORT =
"Availability.findByResourceNoSort";
+ public static final String FIND_NONMATCHING_WITH_RESOURCE_ID_BY_AGENT_AND_TYPE =
"Availability.findNonmatchingWithResourceIdByAgentAndType";
+ public static final String FIND_FOR_RESOURCE_WITHIN_INTERVAL =
"Availability.findForResourceWithinInterval";
+ public static final String FIND_FOR_RESOURCE_GROUP_WITHIN_INTERVAL =
"Availability.findForResourceGroupWithinInterval";
+ public static final String FIND_FOR_AUTO_GROUP_WITHIN_INTERVAL =
"Availability.findForAutoGroupWithinInterval";
+ public static final String FIND_BY_RESOURCE_AND_DATE =
"Availability.findByResourceAndDate";
+ public static final String QUERY_DELETE_BY_RESOURCES =
"Availability.deleteByResources";
+
+ public static final String NATIVE_QUERY_PURGE = "DELETE FROM RHQ_AVAILABILITY
WHERE END_TIME < ?";
+
+ @Column(name = "ID", nullable = false)
+ @GeneratedValue(strategy = GenerationType.AUTO, generator = "Generator")
+ @Id
+ private int id;
+
+ /**
+ * Start time of this availability state
+ */
+ @Column(name = "START_TIME", nullable = false)
+ private long startTime;
+
+ /**
+ * End time of this availability state (which is the start of the next availability
time period)
+ */
+ @Column(name = "END_TIME", nullable = true)
+ private Long endTime;
+
+ /**
+ * Availability state for this time period
+ */
+ @Column(name = "AVAILABILITY_TYPE", nullable = true)
+ @Enumerated(EnumType.ORDINAL)
+ private AvailabilityType availabilityType;
+
+ @JoinColumn(name = "RESOURCE_ID", referencedColumnName = "ID",
nullable = false)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
+ private Resource resource;
+
+ protected Availability() {
+ // for JPA use only
+ }
+
+ /**
+ * Constructor for {@link Availability}. If <code>type</code> is
<code>null</code>, it will be considered unknown.
+ *
+ * @param resource
+ * @param startTime
+ * @param type
+ */
+ public Availability(Resource resource, Date startTime, AvailabilityType type) {
+ if (resource == null) {
+ throw new IllegalArgumentException("resource==null");
+ }
+
+ this.resource = resource;
+ this.availabilityType = type;
+ this.startTime = (startTime != null) ? startTime.getTime() : new
Date().getTime();
+ this.endTime = null;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public Resource getResource() {
+ return resource;
+ }
+
+ public Date getStartTime() {
+ return new Date(startTime);
+ }
+
+ public void setStartTime(Date startTime) {
+ this.startTime = startTime.getTime();
+ }
+
+ /**
+ * The end time of this availability period. This will be
<code>null</code> if this represents the last known
+ * availability.
+ *
+ * @return end of the availability period
+ */
+ public Date getEndTime() {
+ return (endTime != null) ? new Date(endTime.longValue()) : null;
+ }
+
+ public void setEndTime(Date endTime) {
+ this.endTime = (endTime != null) ? endTime.getTime() : null;
+ }
+
+ /**
+ * Indicates the availability status as either UP or DOWN; if
<code>null</code> is returned, the status is unknown.
+ *
+ * @return availability status
+ */
+ public AvailabilityType getAvailabilityType() {
+ return availabilityType;
+ }
+
+ /**
+ * Sets the availability status. This can be <code>null</code> to
indicate an "unknown" availability status.
+ *
+ * @param availabilityType
+ */
+ public void setAvailabilityType(AvailabilityType availabilityType) {
+ this.availabilityType = availabilityType;
+ }
+
+ @Override
+ public String toString() {
+ return "Availability[id=" + id + ",type=" +
this.availabilityType + ",start-time=" + getStartTime()
+ + ",end-time=" + getEndTime() + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = (prime * result) + ((availabilityType == null) ? 0 :
availabilityType.hashCode());
+ result = (prime * result) + ((endTime == null) ? 0 : endTime.hashCode());
+ result = (prime * result) + ((resource == null) ? 0 : resource.hashCode());
+ result = (prime * result) + (int) (startTime ^ (startTime >>> 32));
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ if (obj == null) {
+ return false;
+ }
+
+ if (!(obj instanceof Availability)) {
+ return false;
+ }
+
+ final Availability other = (Availability) obj;
+ if (availabilityType == null) {
+ if (other.availabilityType != null) {
+ return false;
+ }
+ } else if (!availabilityType.equals(other.availabilityType)) {
+ return false;
+ }
+
+ if (endTime == null) {
+ if (other.endTime != null) {
+ return false;
+ }
+ } else if (!endTime.equals(other.endTime)) {
+ return false;
+ }
+
+ if (resource == null) {
+ if (other.resource != null) {
+ return false;
+ }
+ } else if (!resource.equals(other.resource)) {
+ return false;
+ }
+
+ if (startTime != other.startTime) {
+ return false;
+ }
+
+ return true;
+ }
}
\ No newline at end of file
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementBaseline.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementBaseline.java
index 9b3e9ec..020eb0b 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementBaseline.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementBaseline.java
@@ -215,7 +215,7 @@ public class MeasurementBaseline implements Serializable {
private long computeTime;
@JoinColumn(name = "SCHEDULE_ID", nullable = false)
- @OneToOne(fetch = FetchType.LAZY)
+ @OneToOne(fetch = FetchType.LAZY, optional = false)
private MeasurementSchedule schedule;
// we need this to support autobaseline insertion queries
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementData.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementData.java
index 2c99f85..d0d26ab 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementData.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementData.java
@@ -1,25 +1,25 @@
- /*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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, version 2, as
- * published by the Free Software Foundation, and/or the GNU Lesser
- * General Public License, version 2.1, also as published by the Free
- * Software Foundation.
- *
- * 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 and the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the GNU Lesser General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
package org.rhq.core.domain.measurement;
import java.io.Serializable;
@@ -36,9 +36,9 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
- /**
- * Represents data that was collected either due to a schedule or an on-demand, live
collection.
- */
+/**
+* Represents data that was collected either due to a schedule or an on-demand, live
collection.
+*/
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@XmlAccessorType(XmlAccessType.FIELD)
@@ -50,8 +50,8 @@ public abstract class MeasurementData implements Serializable {
@EmbeddedId
MeasurementDataPK id;
- @JoinColumn(name = "SCHEDULE_ID", insertable = false, updatable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "SCHEDULE_ID", insertable = false, updatable = false,
nullable = false)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
MeasurementSchedule schedule;
@Transient
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/ResourceAvailability.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/ResourceAvailability.java
index 6a9b0fb..4e008f9 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/ResourceAvailability.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/ResourceAvailability.java
@@ -1,196 +1,196 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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, version 2, as
- * published by the Free Software Foundation, and/or the GNU Lesser
- * General Public License, version 2.1, also as published by the Free
- * Software Foundation.
- *
- * 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 and the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the GNU Lesser General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.rhq.core.domain.measurement;
-
-import java.io.Serializable;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.OneToOne;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
-
-import org.rhq.core.domain.resource.Resource;
-
-/**
- * This entity represents the latest known availability data for a resource.
- *
- * @author Joseph Marques
- */
-@Entity
-@Table(name = ResourceAvailability.TABLE_NAME)
-@NamedQueries( //
-{ @NamedQuery(name = ResourceAvailability.QUERY_FIND_BY_RESOURCE_ID, query = ""
//
- + " SELECT ra FROM ResourceAvailability ra WHERE ra.resourceId = :resourceId
"),
- @NamedQuery(name = ResourceAvailability.UPDATE_BY_AGENT_ID, query = "" //
- + " UPDATE ResourceAvailability " //
- + " SET availabilityType = :availabilityType " //
- + " WHERE resourceId IN ( SELECT res.id " //
- + " FROM Resource res " //
- + " WHERE res.agent.id = :agentId ) "),
- @NamedQuery(name = ResourceAvailability.INSERT_BY_RESOURCE_IDS, query = ""
//
- + " INSERT INTO ResourceAvailability ( resourceId ) " //
- + " SELECT res.id " //
- + " FROM Resource res " //
- + " LEFT JOIN res.currentAvailability avail " //
- + " WHERE res.id IN ( :resourceIds ) " //
- + " AND avail IS NULL "),
- /*
- * Platform plugins always return up for availability. Platforms are
- * only down if the check-suspect-agent's backfiller sets them down.
- * Thus this agent has been backfilled if it's platform is not up.
- *
- * Returns 0 if the agent has NOT been backfilled, non-zero if it is.
- */
- @NamedQuery(name = ResourceAvailability.QUERY_IS_AGENT_BACKFILLED, query =
"" //
- + "SELECT COUNT(avail.id) " // return count of
- + " FROM Resource res " //
- + " JOIN res.currentAvailability avail " // we only want the current
availability
- + " WHERE res.agent.id = :agentId " // use id not name to prevent an
unnecessary join to agent table
- + " AND res.parentResource IS NULL " // we only want platforms
- + " AND avail.availabilityType <> 1") // get all DOWN or
UNKNOWN
-})
-@SequenceGenerator(name = "RHQ_RESOURCE_AVAIL_SEQ", sequenceName =
"RHQ_RESOURCE_AVAIL_ID_SEQ", allocationSize = 100)
-public class ResourceAvailability implements Serializable {
- private static final long serialVersionUID = 1L;
-
- public static final String TABLE_NAME = "RHQ_RESOURCE_AVAIL";
-
- public static final String QUERY_FIND_BY_RESOURCE_ID =
"ResourceAvailability.findByResourceId";
- public static final String UPDATE_BY_AGENT_ID =
"ResourceAvailability.updateByAgentId";
- public static final String INSERT_BY_RESOURCE_IDS =
"ResourceAvailability.insertByResourceIds";
- public static final String QUERY_IS_AGENT_BACKFILLED =
"ResourceAvailability.isAgentBackfilled";
-
- @SuppressWarnings("unused")
- @Column(name = "ID", nullable = false)
- @GeneratedValue(strategy = GenerationType.AUTO, generator =
"RHQ_RESOURCE_AVAIL_SEQ")
- @Id
- private int id;
-
- @JoinColumn(name = "RESOURCE_ID", referencedColumnName = "ID",
nullable = false)
- @OneToOne(fetch = FetchType.LAZY)
- private Resource resource;
-
- @Column(name = "RESOURCE_ID", insertable = false, updatable = false)
- private int resourceId;
-
- /**
- * Availability state for this time period
- */
- @Column(name = "AVAILABILITY_TYPE", nullable = true)
- @Enumerated(EnumType.ORDINAL)
- private AvailabilityType availabilityType;
-
- protected ResourceAvailability() {
- // for JPA use only
- }
-
- /**
- * Constructor for {@link ResourceAvailability}. If <code>type</code> is
<code>null</code>, it will be
- * considered unknown.
- *
- * @param resource
- * @param type
- */
- public ResourceAvailability(Resource resource, AvailabilityType type) {
- if (resource == null) {
- throw new IllegalArgumentException("resource==null");
- }
-
- this.resource = resource;
- this.resourceId = resource.getId();
- this.availabilityType = type;
- }
-
- public Resource getResource() {
- return resource;
- }
-
- /**
- * Indicates the availability status as either UP or DOWN; if
<code>null</code> is returned, the status is unknown.
- *
- * @return availability status
- */
- public AvailabilityType getAvailabilityType() {
- return availabilityType;
- }
-
- /**
- * Sets the availability status. This can be <code>null</code> to
indicate an "unknown" availability status.
- *
- * @param availabilityType
- */
- public void setAvailabilityType(AvailabilityType availabilityType) {
- this.availabilityType = availabilityType;
- }
-
- @Override
- public String toString() {
- return "Availability[resourceId=" + resourceId + ", avail=" +
this.availabilityType + "]";
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = (prime * result) + ((availabilityType == null) ? 0 :
availabilityType.hashCode());
- result = (prime * result) + resourceId;
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
-
- if (obj == null || !(obj instanceof ResourceAvailability)) {
- return false;
- }
-
- final ResourceAvailability other = (ResourceAvailability) obj;
-
- if (resourceId != other.resourceId) {
- return false;
- }
-
- if (availabilityType == null) {
- if (other.availabilityType != null) {
- return false;
- }
- } else if (!availabilityType.equals(other.availabilityType)) {
- return false;
- }
-
- return true;
- }
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.core.domain.measurement;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToOne;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+
+import org.rhq.core.domain.resource.Resource;
+
+/**
+ * This entity represents the latest known availability data for a resource.
+ *
+ * @author Joseph Marques
+ */
+@Entity
+@Table(name = ResourceAvailability.TABLE_NAME)
+@NamedQueries( //
+{ @NamedQuery(name = ResourceAvailability.QUERY_FIND_BY_RESOURCE_ID, query = ""
//
+ + " SELECT ra FROM ResourceAvailability ra WHERE ra.resourceId = :resourceId
"),
+ @NamedQuery(name = ResourceAvailability.UPDATE_BY_AGENT_ID, query = "" //
+ + " UPDATE ResourceAvailability " //
+ + " SET availabilityType = :availabilityType " //
+ + " WHERE resourceId IN ( SELECT res.id " //
+ + " FROM Resource res " //
+ + " WHERE res.agent.id = :agentId ) "),
+ @NamedQuery(name = ResourceAvailability.INSERT_BY_RESOURCE_IDS, query = ""
//
+ + " INSERT INTO ResourceAvailability ( resourceId ) " //
+ + " SELECT res.id " //
+ + " FROM Resource res " //
+ + " LEFT JOIN res.currentAvailability avail " //
+ + " WHERE res.id IN ( :resourceIds ) " //
+ + " AND avail IS NULL "),
+ /*
+ * Platform plugins always return up for availability. Platforms are
+ * only down if the check-suspect-agent's backfiller sets them down.
+ * Thus this agent has been backfilled if it's platform is not up.
+ *
+ * Returns 0 if the agent has NOT been backfilled, non-zero if it is.
+ */
+ @NamedQuery(name = ResourceAvailability.QUERY_IS_AGENT_BACKFILLED, query =
"" //
+ + "SELECT COUNT(avail.id) " // return count of
+ + " FROM Resource res " //
+ + " JOIN res.currentAvailability avail " // we only want the current
availability
+ + " WHERE res.agent.id = :agentId " // use id not name to prevent an
unnecessary join to agent table
+ + " AND res.parentResource IS NULL " // we only want platforms
+ + " AND avail.availabilityType <> 1") // get all DOWN or
UNKNOWN
+})
+@SequenceGenerator(name = "RHQ_RESOURCE_AVAIL_SEQ", sequenceName =
"RHQ_RESOURCE_AVAIL_ID_SEQ", allocationSize = 100)
+public class ResourceAvailability implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ public static final String TABLE_NAME = "RHQ_RESOURCE_AVAIL";
+
+ public static final String QUERY_FIND_BY_RESOURCE_ID =
"ResourceAvailability.findByResourceId";
+ public static final String UPDATE_BY_AGENT_ID =
"ResourceAvailability.updateByAgentId";
+ public static final String INSERT_BY_RESOURCE_IDS =
"ResourceAvailability.insertByResourceIds";
+ public static final String QUERY_IS_AGENT_BACKFILLED =
"ResourceAvailability.isAgentBackfilled";
+
+ @SuppressWarnings("unused")
+ @Column(name = "ID", nullable = false)
+ @GeneratedValue(strategy = GenerationType.AUTO, generator =
"RHQ_RESOURCE_AVAIL_SEQ")
+ @Id
+ private int id;
+
+ @JoinColumn(name = "RESOURCE_ID", referencedColumnName = "ID",
nullable = false)
+ @OneToOne(fetch = FetchType.LAZY, optional = false)
+ private Resource resource;
+
+ @Column(name = "RESOURCE_ID", insertable = false, updatable = false)
+ private int resourceId;
+
+ /**
+ * Availability state for this time period
+ */
+ @Column(name = "AVAILABILITY_TYPE", nullable = true)
+ @Enumerated(EnumType.ORDINAL)
+ private AvailabilityType availabilityType;
+
+ protected ResourceAvailability() {
+ // for JPA use only
+ }
+
+ /**
+ * Constructor for {@link ResourceAvailability}. If <code>type</code> is
<code>null</code>, it will be
+ * considered unknown.
+ *
+ * @param resource
+ * @param type
+ */
+ public ResourceAvailability(Resource resource, AvailabilityType type) {
+ if (resource == null) {
+ throw new IllegalArgumentException("resource==null");
+ }
+
+ this.resource = resource;
+ this.resourceId = resource.getId();
+ this.availabilityType = type;
+ }
+
+ public Resource getResource() {
+ return resource;
+ }
+
+ /**
+ * Indicates the availability status as either UP or DOWN; if
<code>null</code> is returned, the status is unknown.
+ *
+ * @return availability status
+ */
+ public AvailabilityType getAvailabilityType() {
+ return availabilityType;
+ }
+
+ /**
+ * Sets the availability status. This can be <code>null</code> to
indicate an "unknown" availability status.
+ *
+ * @param availabilityType
+ */
+ public void setAvailabilityType(AvailabilityType availabilityType) {
+ this.availabilityType = availabilityType;
+ }
+
+ @Override
+ public String toString() {
+ return "Availability[resourceId=" + resourceId + ", avail=" +
this.availabilityType + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = (prime * result) + ((availabilityType == null) ? 0 :
availabilityType.hashCode());
+ result = (prime * result) + resourceId;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ if (obj == null || !(obj instanceof ResourceAvailability)) {
+ return false;
+ }
+
+ final ResourceAvailability other = (ResourceAvailability) obj;
+
+ if (resourceId != other.resourceId) {
+ return false;
+ }
+
+ if (availabilityType == null) {
+ if (other.availabilityType != null) {
+ return false;
+ }
+ } else if (!availabilityType.equals(other.availabilityType)) {
+ return false;
+ }
+
+ return true;
+ }
}
\ No newline at end of file
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/calltime/CallTimeDataKey.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/calltime/CallTimeDataKey.java
index 1691a59..6e05fca 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/calltime/CallTimeDataKey.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/calltime/CallTimeDataKey.java
@@ -1,110 +1,110 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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, version 2, as
- * published by the Free Software Foundation, and/or the GNU Lesser
- * General Public License, version 2.1, also as published by the Free
- * Software Foundation.
- *
- * 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 and the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the GNU Lesser General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.rhq.core.domain.measurement.calltime;
-
-import java.io.Serializable;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
-
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import org.rhq.core.domain.measurement.MeasurementSchedule;
-
-/**
- * A key used to lookup all call-time data ((i.e. a set of {@link CallTimeDataValue}s))
for a particular destination
- * (e.g. a URL or an EJB method name).
- *
- * @author Ian Springer
- */
-@Entity
-@NamedQueries( { @NamedQuery(name = CallTimeDataKey.QUERY_DELETE_BY_RESOURCES, query =
"DELETE CallTimeDataKey ctdk WHERE ctdk.schedule IN ( SELECT ms FROM
MeasurementSchedule ms WHERE ms.resource.id IN ( :resourceIds ) )") })
-@SequenceGenerator(name = "idGenerator", sequenceName =
"RHQ_CALLTIME_DATA_KEY_ID_SEQ")
-@Table(name = "RHQ_CALLTIME_DATA_KEY")
-public class CallTimeDataKey implements Serializable {
- private static final long serialVersionUID = 1L;
-
- public static final String QUERY_DELETE_BY_RESOURCES =
"CallTimeDataKey.deleteByResources";
-
- public static final int DESTINATION_MAX_LENGTH = 4000;
-
- @GeneratedValue(strategy = GenerationType.AUTO, generator = "idGenerator")
- @Id
- private int id;
-
- @JoinColumn(name = "SCHEDULE_ID", insertable = false, updatable = false,
nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
- private MeasurementSchedule schedule;
-
- @Column(name = "CALL_DESTINATION", length = DESTINATION_MAX_LENGTH,
nullable = false)
- private String callDestination;
-
- /**
- * Create a new <code>CallTimeDataKey</code>.
- *
- * @param schedule the collection schedule corresponding to this call-time
data
- * @param callDestination the call destination (e.g. a URL or an EJB name)
- */
- public CallTimeDataKey(@NotNull MeasurementSchedule schedule, @NotNull String
callDestination) {
- this.schedule = schedule;
- this.callDestination = callDestination;
- }
-
- protected CallTimeDataKey() {
- /* for JPA use only */
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- @Nullable
- public MeasurementSchedule getSchedule() {
- return this.schedule;
- }
-
- @NotNull
- public String getCallDestination() {
- return this.callDestination;
- }
-
- @Override
- public String toString() {
- return "MeasurementCallDestination[" + "id=" + this.id +
", " + "value=" + this.callDestination + "]";
- }
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.core.domain.measurement.calltime;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import org.rhq.core.domain.measurement.MeasurementSchedule;
+
+/**
+ * A key used to lookup all call-time data ((i.e. a set of {@link CallTimeDataValue}s))
for a particular destination
+ * (e.g. a URL or an EJB method name).
+ *
+ * @author Ian Springer
+ */
+@Entity
+@NamedQueries( { @NamedQuery(name = CallTimeDataKey.QUERY_DELETE_BY_RESOURCES, query =
"DELETE CallTimeDataKey ctdk WHERE ctdk.schedule IN ( SELECT ms FROM
MeasurementSchedule ms WHERE ms.resource.id IN ( :resourceIds ) )") })
+@SequenceGenerator(name = "idGenerator", sequenceName =
"RHQ_CALLTIME_DATA_KEY_ID_SEQ")
+@Table(name = "RHQ_CALLTIME_DATA_KEY")
+public class CallTimeDataKey implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ public static final String QUERY_DELETE_BY_RESOURCES =
"CallTimeDataKey.deleteByResources";
+
+ public static final int DESTINATION_MAX_LENGTH = 4000;
+
+ @GeneratedValue(strategy = GenerationType.AUTO, generator = "idGenerator")
+ @Id
+ private int id;
+
+ @JoinColumn(name = "SCHEDULE_ID", insertable = false, updatable = false,
nullable = false)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
+ private MeasurementSchedule schedule;
+
+ @Column(name = "CALL_DESTINATION", length = DESTINATION_MAX_LENGTH,
nullable = false)
+ private String callDestination;
+
+ /**
+ * Create a new <code>CallTimeDataKey</code>.
+ *
+ * @param schedule the collection schedule corresponding to this call-time
data
+ * @param callDestination the call destination (e.g. a URL or an EJB name)
+ */
+ public CallTimeDataKey(@NotNull MeasurementSchedule schedule, @NotNull String
callDestination) {
+ this.schedule = schedule;
+ this.callDestination = callDestination;
+ }
+
+ protected CallTimeDataKey() {
+ /* for JPA use only */
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ @Nullable
+ public MeasurementSchedule getSchedule() {
+ return this.schedule;
+ }
+
+ @NotNull
+ public String getCallDestination() {
+ return this.callDestination;
+ }
+
+ @Override
+ public String toString() {
+ return "MeasurementCallDestination[" + "id=" + this.id +
", " + "value=" + this.callDestination + "]";
+ }
}
\ No newline at end of file
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/operation/OperationHistory.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/operation/OperationHistory.java
index 55c0086..d5aee06 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/operation/OperationHistory.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/operation/OperationHistory.java
@@ -168,8 +168,8 @@ public abstract class OperationHistory implements Serializable {
@ManyToOne(fetch = FetchType.EAGER)
private OperationDefinition operationDefinition;
- @JoinColumn(name = "PARAMETERS_CONFIG_ID", referencedColumnName =
"ID")
- @OneToOne(cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)
+ @JoinColumn(name = "PARAMETERS_CONFIG_ID", referencedColumnName =
"ID", nullable = true)
+ @OneToOne(cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY, optional = true)
private Configuration parameters;
protected OperationHistory() {
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/operation/ResourceOperationHistory.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/operation/ResourceOperationHistory.java
index 4b002b1..08c29be 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/operation/ResourceOperationHistory.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/operation/ResourceOperationHistory.java
@@ -115,12 +115,12 @@ public class ResourceOperationHistory extends OperationHistory {
@XmlTransient
private Resource resource;
- @JoinColumn(name = "RESULTS_CONFIG_ID", referencedColumnName =
"ID")
- @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
+ @JoinColumn(name = "RESULTS_CONFIG_ID", referencedColumnName =
"ID", nullable = true)
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, optional = true)
private Configuration results;
- @JoinColumn(name = "GROUP_HISTORY_ID", referencedColumnName =
"ID")
- @ManyToOne
+ @JoinColumn(name = "GROUP_HISTORY_ID", referencedColumnName =
"ID", nullable = true)
+ @ManyToOne(optional = true)
private GroupOperationHistory groupOperationHistory;
protected ResourceOperationHistory() {
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/plugin/ServerPlugin.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/plugin/ServerPlugin.java
index a0b3d3d..34d2f17 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/plugin/ServerPlugin.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/plugin/ServerPlugin.java
@@ -262,12 +262,12 @@ public class ServerPlugin extends AbstractPlugin {
public static final String QUERY_GET_CONFIG_MTIMES =
"ServerPlugin.getConfigMTimes";
public static final String UPDATE_PLUGIN_ENABLED_BY_ID =
"ServerPlugin.updatePluginEnabledById";
- @JoinColumn(name = "JOBS_CONFIG_ID", referencedColumnName =
"ID")
- @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
+ @JoinColumn(name = "JOBS_CONFIG_ID", referencedColumnName = "ID",
nullable = true)
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, optional = true)
private Configuration scheduledJobsConfiguration;
- @JoinColumn(name = "PLUGIN_CONFIG_ID", referencedColumnName =
"ID")
- @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
+ @JoinColumn(name = "PLUGIN_CONFIG_ID", referencedColumnName =
"ID", nullable = true)
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, optional = true)
private Configuration pluginConfiguration;
@Column(name = "PTYPE")
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
index d58abfa..e31b9ef 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
@@ -941,12 +941,11 @@ public class Resource implements Comparable<Resource>,
Serializable {
private String location;
@JoinColumn(name = "RESOURCE_TYPE_ID", referencedColumnName =
"ID", nullable = false)
- @ManyToOne
+ @ManyToOne(optional = false)
// TODO GH: It would be preferable for this to be lazy, but will need cleanup
throughout the app (fetch = FetchType.LAZY)
@Summary(index = 4)
private ResourceType resourceType;
- // LAZY fetch otherwise this will recursively call all parents until null is found
// do not cascade remove - would take forever to delete a full platform hierarchy
// we will manually delete the children ourselves
@OneToMany(mappedBy = "parentResource", fetch = FetchType.LAZY, cascade = {
CascadeType.PERSIST })
@@ -954,21 +953,22 @@ public class Resource implements Comparable<Resource>,
Serializable {
// primary key
private Set<Resource> childResources = new LinkedHashSet<Resource>();
- @JoinColumn(name = "PARENT_RESOURCE_ID")
- @ManyToOne(fetch = FetchType.LAZY)
+ // LAZY fetch otherwise this will recursively call all parents until null is found
+ @JoinColumn(name = "PARENT_RESOURCE_ID", nullable = true)
+ @ManyToOne(fetch = FetchType.LAZY, optional = true)
@XmlTransient
private Resource parentResource;
- @JoinColumn(name = "RES_CONFIGURATION_ID", referencedColumnName =
"ID")
- @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
+ @JoinColumn(name = "RES_CONFIGURATION_ID", referencedColumnName =
"ID", nullable = true)
+ @OneToOne(cascade = { CascadeType.ALL }, optional = true)
private Configuration resourceConfiguration = new Configuration();
- @JoinColumn(name = "PLUGIN_CONFIGURATION_ID", referencedColumnName =
"ID")
- @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
+ @JoinColumn(name = "PLUGIN_CONFIGURATION_ID", referencedColumnName =
"ID", nullable = true)
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, optional = true)
private Configuration pluginConfiguration = new Configuration();
- @JoinColumn(name = "AGENT_ID", referencedColumnName = "ID")
- @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "AGENT_ID", referencedColumnName = "ID",
nullable = true)
+ @ManyToOne(fetch = FetchType.LAZY, optional = true)
private Agent agent;
// bulk delete @OneToMany(mappedBy = "resource", cascade = {
CascadeType.ALL })
@@ -1050,8 +1050,8 @@ public class Resource implements Comparable<Resource>,
Serializable {
@OneToMany(mappedBy = "resource", fetch = FetchType.LAZY)
private Set<EventSource> eventSources = new HashSet<EventSource>();
- @JoinColumn(name = "PRODUCT_VERSION_ID", referencedColumnName =
"ID")
- @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "PRODUCT_VERSION_ID", referencedColumnName =
"ID", nullable = true)
+ @ManyToOne(fetch = FetchType.LAZY, optional = true)
private ProductVersion productVersion;
// not currently needed, but could be added if we find a need to get deployment info
via the resource
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceType.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceType.java
index 9e0ce28..0562890 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceType.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceType.java
@@ -79,15 +79,15 @@ import org.rhq.core.domain.util.Summary;
@Table(name = ResourceType.TABLE_NAME)
@SequenceGenerator(name = "SEQ", sequenceName =
"RHQ_RESOURCE_TYPE_ID_SEQ")
@NamedQueries( {
- @NamedQuery(name = ResourceType.QUERY_FIND_BY_PLUGIN, query = "SELECT rt FROM
ResourceType AS rt " +
- "WHERE rt.plugin = :plugin AND rt.deleted = false"),
+ @NamedQuery(name = ResourceType.QUERY_FIND_BY_PLUGIN, query = "SELECT rt FROM
ResourceType AS rt "
+ + "WHERE rt.plugin = :plugin AND rt.deleted = false"),
@NamedQuery(name = ResourceType.QUERY_FIND_BY_NAME_AND_PLUGIN, // TODO: QUERY: names
are case-sensitive
- query = "SELECT rt FROM ResourceType AS rt WHERE LOWER(rt.name) = LOWER(:name)
AND rt.plugin = :plugin " +
- "AND rt.deleted = false"),
+ query = "SELECT rt FROM ResourceType AS rt WHERE LOWER(rt.name) = LOWER(:name)
AND rt.plugin = :plugin "
+ + "AND rt.deleted = false"),
@NamedQuery(name = ResourceType.QUERY_FIND_ALL, query = "SELECT rt FROM
ResourceType AS rt where rt.deleted = false"),
@NamedQuery(name = ResourceType.QUERY_FIND_BY_PARENT_AND_NAME, // TODO: QUERY: Not
looking up by the full key, get rid of this query
- query = "SELECT rt FROM ResourceType AS rt WHERE :parent MEMBER OF
rt.parentResourceTypes AND rt.name = :name " +
- "AND rt.deleted = false"),
+ query = "SELECT rt FROM ResourceType AS rt WHERE :parent MEMBER OF
rt.parentResourceTypes AND rt.name = :name "
+ + "AND rt.deleted = false"),
/* authz'ed queries for ResourceTypeManagerBean */
@NamedQuery(name = ResourceType.QUERY_FIND_CHILDREN, query = "SELECT c "
@@ -111,8 +111,7 @@ import org.rhq.core.domain.util.Summary;
@NamedQuery(name = ResourceType.QUERY_FIND_UTILIZED_BY_CATEGORY, query = "SELECT
DISTINCT res.resourceType "
+ "FROM Resource res, IN (res.implicitGroups) g, IN (g.roles) r, IN
(r.subjects) s " //
+ "WHERE s = :subject " //
- + "AND res.resourceType.category = :category "
- + "AND res.resourceType.deleted = false "
+ + "AND res.resourceType.category = :category " + "AND
res.resourceType.deleted = false "
+ "AND (UPPER(res.name) LIKE :nameFilter ESCAPE :escapeChar OR :nameFilter
is null) "
+ "AND (res.resourceType.plugin = :pluginName OR :pluginName is null)
"
+ "AND (:inventoryStatus = res.inventoryStatus OR :inventoryStatus is null)
"
@@ -144,8 +143,7 @@ import org.rhq.core.domain.util.Summary;
+ " JOIN rg.resourceType rt" //
+ " JOIN rg.roles r JOIN r.subjects s " //
+ " WHERE s = :subject " //
- + " AND rt.deleted = false "
- + " AND ( rt.plugin = :pluginName OR :pluginName is null ) "),
+ + " AND rt.deleted = false " + " AND ( rt.plugin = :pluginName
OR :pluginName is null ) "),
@NamedQuery(name = ResourceType.QUERY_FIND_BY_RESOURCE_GROUP_admin, query =
"" //
+ "SELECT DISTINCT rt " //
+ " FROM ResourceGroup rg " //
@@ -153,12 +151,10 @@ import org.rhq.core.domain.util.Summary;
+ " WHERE rt.deleted = false AND ( rt.plugin = :pluginName OR :pluginName is
null ) "),
@NamedQuery(name = ResourceType.QUERY_GET_EXPLICIT_RESOURCE_TYPE_COUNTS_BY_GROUP,
query = "SELECT type.id, type.name, COUNT(type.id) "
+ "FROM ResourceGroup rg JOIN rg.explicitResources res JOIN res.resourceType
type "
- + "WHERE rg.id = :groupId AND res.resourceType.deleted = false "
- + "GROUP BY type.id, type.name "),
+ + "WHERE rg.id = :groupId AND res.resourceType.deleted = false " +
"GROUP BY type.id, type.name "),
@NamedQuery(name = ResourceType.QUERY_GET_IMPLICIT_RESOURCE_TYPE_COUNTS_BY_GROUP,
query = "SELECT type.id, type.name, COUNT(type.id) "
+ "FROM ResourceGroup rg JOIN rg.implicitResources res JOIN res.resourceType
type "
- + "WHERE rg.id = :groupId AND res.resourceType.deleted = false "
- + "GROUP BY type.id, type.name "),
+ + "WHERE rg.id = :groupId AND res.resourceType.deleted = false " +
"GROUP BY type.id, type.name "),
@NamedQuery(name = ResourceType.QUERY_FIND_BY_SUBCATEGORY, query = "SELECT rt
" + "FROM ResourceType rt "
+ "WHERE rt.subCategory = :subCategory AND rt.deleted = false"),
@NamedQuery(name = ResourceType.QUERY_FIND_BY_ID_WITH_ALL_OPERATIONS, query =
"SELECT DISTINCT rt "
@@ -183,18 +179,13 @@ import org.rhq.core.domain.util.Summary;
@NamedQuery(name = ResourceType.QUERY_FIND_DUPLICATE_TYPE_NAMES, query = ""
//
+ " SELECT rt.name " //
+ " FROM ResourceType rt " //
- + " WHERE rt.deleted = false "
- + " GROUP BY rt.name " //
+ + " WHERE rt.deleted = false " + " GROUP BY rt.name " //
+ " HAVING COUNT(rt.name) > 1"), //
@NamedQuery(name = ResourceType.QUERY_DYNAMIC_CONFIG_WITH_PLUGIN, query =
"" //
+ "SELECT rt.plugin || ' - ' || rt.name, rt.plugin || '-' ||
rt.name FROM ResourceType rt WHERE rt.deleted = false"), //
- @NamedQuery(name = ResourceType.QUERY_MARK_TYPES_DELETED, query =
- "UPDATE ResourceType t SET t.deleted = true WHERE t.id IN
(:resourceTypeIds)"),
- @NamedQuery(name = ResourceType.QUERY_FIND_IDS_BY_PLUGIN, query =
- "SELECT t.id FROM ResourceType t WHERE t.plugin = :plugin AND t.deleted =
false"),
- @NamedQuery(name = ResourceType.QUERY_FIND_COUNT_BY_PLUGIN, query =
- "SELECT COUNT(t) FROM ResourceType t WHERE t.plugin = :plugin AND
t.deleted = false")
-})
+ @NamedQuery(name = ResourceType.QUERY_MARK_TYPES_DELETED, query = "UPDATE
ResourceType t SET t.deleted = true WHERE t.id IN (:resourceTypeIds)"),
+ @NamedQuery(name = ResourceType.QUERY_FIND_IDS_BY_PLUGIN, query = "SELECT t.id
FROM ResourceType t WHERE t.plugin = :plugin AND t.deleted = false"),
+ @NamedQuery(name = ResourceType.QUERY_FIND_COUNT_BY_PLUGIN, query = "SELECT
COUNT(t) FROM ResourceType t WHERE t.plugin = :plugin AND t.deleted = false") })
@NamedNativeQueries( {
// TODO: Add authz conditions to the below query.
@NamedNativeQuery(name = ResourceType.QUERY_FIND_CHILDREN_BY_CATEGORY, query =
"" //
@@ -218,9 +209,9 @@ import org.rhq.core.domain.util.Summary;
+ "AND 0 = "
+ "(SELECT COUNT(rtp2.resource_type_id) "
+ "FROM RHQ_resource_type_parents rtp2 "
- + "WHERE rtp2.resource_type_id = crt2.id) "
- + "AND crt2.deleted = false "
- + "AND crt2.category = ? " + " ) ORDER BY name",
resultSetMapping = ResourceType.MAPPING_FIND_CHILDREN_BY_CATEGORY),
+ + "WHERE rtp2.resource_type_id = crt2.id) " + "AND crt2.deleted =
false "
+ + "AND crt2.category = ? "
+ + " ) ORDER BY name", resultSetMapping =
ResourceType.MAPPING_FIND_CHILDREN_BY_CATEGORY),
@NamedNativeQuery(name = ResourceType.QUERY_FIND_CHILDREN_BY_CATEGORY_admin, query =
"" //
+ "(SELECT crt.id, crt.name, crt.category, crt.creation_data_type,
crt.create_delete_policy, crt.singleton, crt.supports_manual_add, crt.description,
crt.plugin, crt.ctime, crt.mtime, crt.deleted, crt.subcategory_id,
crt.plugin_config_def_id, crt.res_config_def_id "
+ "FROM RHQ_resource_type crt, RHQ_resource res, RHQ_resource_type rt,
RHQ_resource_type_parents rtp "
@@ -347,18 +338,18 @@ public class ResourceType implements Serializable,
Comparable<ResourceType> {
//@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
private Set<ResourceType> parentResourceTypes;
- @JoinColumn(name = "PLUGIN_CONFIG_DEF_ID")
- @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+ @JoinColumn(name = "PLUGIN_CONFIG_DEF_ID", nullable = true)
+ @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = true)
//@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
private ConfigurationDefinition pluginConfigurationDefinition;
- @JoinColumn(name = "RES_CONFIG_DEF_ID")
- @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+ @JoinColumn(name = "RES_CONFIG_DEF_ID", nullable = true)
+ @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = true)
//@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
private ConfigurationDefinition resourceConfigurationDefinition;
- @JoinColumn(name = "SUBCATEGORY_ID")
- @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "SUBCATEGORY_ID", nullable = true)
+ @ManyToOne(fetch = FetchType.LAZY, optional = true)
private ResourceSubCategory subCategory;
@OneToMany(mappedBy = "resourceType", cascade = CascadeType.ALL)
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/search/SavedSearch.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/search/SavedSearch.java
index b517d59..181e322 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/search/SavedSearch.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/search/SavedSearch.java
@@ -89,7 +89,7 @@ public class SavedSearch implements Serializable {
private Long resultCount;
@JoinColumn(name = "SUBJECT_ID", nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
private Subject subject;
@Column(name = "SUBJECT_ID", insertable = false, updatable = false)
commit 9ef17a26f0ff774c9bd4fb15e87c215fd8041202
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Tue May 10 13:42:56 2011 -0400
Related to [BZ 702390 - Large number of BundleDeployments for a single Bundle causes
fetch serialization issues]
Revert some of the work done in commit 976c5fc6ed. Add back the LAZY load
on Configuration. Although, I think, it does need to perform additional
querying for the 'null' value determination, it can still proxy a non-null
value on optional XxxToOne associations.
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleDeployment.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleDeployment.java
index dcf6c27..637bf22 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleDeployment.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleDeployment.java
@@ -74,8 +74,8 @@ import org.rhq.core.domain.tagging.Tag;
+ " WHERE innerbd.destination.id = :destinationId ) "),
@NamedQuery(name = BundleDeployment.QUERY_UPDATE_FOR_VERSION_REMOVE, query =
"" //
+ "UPDATE BundleDeployment bd " //
- + " SET bd.replacedBundleDeploymentId = NULL " //
- + " WHERE bd.replacedBundleDeploymentId IN " //
+ + " SET bd.replacedBundleDeploymentId = NULL " //
+ + " WHERE bd.replacedBundleDeploymentId IN " //
+ " ( SELECT innerbd.id FROM BundleDeployment innerbd " //
+ " WHERE innerbd.bundleVersion.id = :bundleVersionId ) ") })
@SequenceGenerator(name = "SEQ", sequenceName =
"RHQ_BUNDLE_DEPLOYMENT_ID_SEQ")
@@ -118,15 +118,15 @@ public class BundleDeployment implements Serializable {
@Column(name = "MTIME")
private Long mtime = System.currentTimeMillis();
- // This is not a join column on purpose. Since it is nullable the OneToOne
association would be forced to EAGER
- // fetch. That leads to basically fetching every BundleDeployment every time, in a
deeply recursive way if you
- // have a lot deployments.
+ // This is intentionally not annotated as a OneToOne association for a
BundleDeployment field. If done that way
+ // then a fetch could result in a very deep recursive fetch of all replaced
deployments (for many deployments
+ // to a single destination), which is typically not what we want. And, it can cause
fits in HibernateDetach
+ // which does not like extreme depth in its recursive scrubbing [BZ 702390].
@Column(name = "REPLACED_BUNDLE_DEPLOYMENT_ID", nullable = true)
private Integer replacedBundleDeploymentId;
- // note - eager fetch, can not lazy fetch an optional OneToOne
@JoinColumn(name = "CONFIG_ID", referencedColumnName = "ID",
nullable = true)
- @OneToOne(cascade = CascadeType.ALL, optional = true)
+ @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = true)
private Configuration configuration;
@JoinColumn(name = "BUNDLE_VERSION_ID", referencedColumnName =
"ID", nullable = false)
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BundleDeploymentCriteria.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BundleDeploymentCriteria.java
index aa437e3..8449905 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BundleDeploymentCriteria.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BundleDeploymentCriteria.java
@@ -49,6 +49,7 @@ public class BundleDeploymentCriteria extends TaggedCriteria {
private String filterSubjectName;
private boolean fetchBundleVersion;
+ private boolean fetchConfiguration;
private boolean fetchDestination;
private boolean fetchResourceDeployments;
@@ -108,6 +109,10 @@ public class BundleDeploymentCriteria extends TaggedCriteria {
this.fetchBundleVersion = fetchBundleVersion;
}
+ public void fetchConfiguration(boolean fetchConfiguration) {
+ this.fetchConfiguration = fetchConfiguration;
+ }
+
public void fetchDestination(boolean fetchDestination) {
this.fetchDestination = fetchDestination;
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectBundleVersionStep.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectBundleVersionStep.java
index b13df74..e1367e8 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectBundleVersionStep.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectBundleVersionStep.java
@@ -143,6 +143,7 @@ public class SelectBundleVersionStep extends AbstractWizardStep {
criteria.addFilterDestinationId(wizard.getDestination().getId());
criteria.addFilterIsLive(true);
criteria.fetchBundleVersion(true);
+ criteria.fetchConfiguration(true);
bundleServer.findBundleDeploymentsByCriteria(criteria, //
new AsyncCallback<PageList<BundleDeployment>>() {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentView.java
index 73ea70c..3542481 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentView.java
@@ -421,6 +421,7 @@ public class BundleDeploymentView extends LocatableVLayout implements
Bookmarkab
BundleDeploymentCriteria criteria = new BundleDeploymentCriteria();
criteria.addFilterId(bundleDeploymentId);
criteria.fetchBundleVersion(true);
+ criteria.fetchConfiguration(true);
criteria.fetchResourceDeployments(true);
criteria.fetchDestination(true);
criteria.fetchTags(true);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
index 7b45a70..5738c64 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
@@ -1110,6 +1110,7 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
BundleDeploymentCriteria bdc = new BundleDeploymentCriteria();
bdc.addFilterId(resourceDeployment.getBundleDeployment().getId());
bdc.fetchBundleVersion(true);
+ bdc.fetchConfiguration(true);
bdc.fetchDestination(true);
BundleDeployment deployment =
bundleManager.findBundleDeploymentsByCriteria(subject, bdc).get(0);
commit 7be4ef4c1438be18625af4ec8c4d62ffecb2beb8
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue May 10 16:57:44 2011 -0400
compile "ja" (Japanese) locale by default; fix so Logout link does not have
line breaks between characters when in "ja" locale
diff --git a/modules/enterprise/gui/coregui/pom.xml
b/modules/enterprise/gui/coregui/pom.xml
index 9352745..abb5ad6 100644
--- a/modules/enterprise/gui/coregui/pom.xml
+++ b/modules/enterprise/gui/coregui/pom.xml
@@ -64,8 +64,8 @@
<gwt.draftCompile>false</gwt.draftCompile>
<!-- Comma-separated list of the locales that should be included during GWT
compilation. Currently supported
- locales (i.e. locales for which we have localized message bundles) are
"en" and "de". -->
- <gwt.locale>en,de</gwt.locale>
+ locales (i.e. locales for which we have localized message bundles) are
"en", "de", and "ja". -->
+ <gwt.locale>en,de,ja</gwt.locale>
</properties>
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java
index 557042f..f138f6a 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java
@@ -124,7 +124,8 @@ public class MenuBarView extends LocatableVLayout {
lineLabel.setWidth("12px");
lineLabel.setAlign(Alignment.CENTER);
- String contents = "<a href='#" + LOGOUT_VIEW_ID.getName() +
"'>" + LOGOUT_VIEW_ID.getTitle() + "</a>";
+ String contents = "<a href='#" + LOGOUT_VIEW_ID.getName() +
"' style='white-space: nowrap'>"
+ + LOGOUT_VIEW_ID.getTitle() + "</a>";
LocatableLabel logoutLink = new
LocatableLabel(this.extendLocatorId("LogoutLink"), contents);
logoutLink.setAutoWidth();
diff --git
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
index 4c2ee34..69db4a5 100644
---
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
+++
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
@@ -107,7 +107,7 @@
The gwt.locale property is substituted by the Maven resources plugin
during the resources phase. The default value (defined in coregui/pom.xml)
- is "en,de", which are the languages for which we currently have
localized
+ is "en,de,ja", which are the languages for which we currently have
localized
messages. To override this value, specify the gwt.locale property on the
mvn command line (e.g. -Dgwt.locale=en) or in your ~/.m2/settings.xml.
-->
commit d18f97331b8e56d0bb5a47b61e2e66420be66a83
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue May 10 14:10:40 2011 -0400
v2 of the SLSB leak fix, which configures the SLSBs to use the strict max pool via the
jboss.xml deployment descriptor, rather than PoolClass annotations on the SLSB classes
(
https://bugzilla.redhat.com/show_bug.cgi?id=693232)
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionLogManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionLogManagerBean.java
index 8ee77c9..a26472e 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionLogManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionLogManagerBean.java
@@ -34,8 +34,6 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.exception.ConstraintViolationException;
-import org.jboss.annotation.ejb.PoolClass;
-import org.jboss.ejb3.StrictMaxPool;
import org.rhq.core.domain.alert.AlertCondition;
import org.rhq.core.domain.alert.AlertConditionLog;
import org.rhq.core.domain.alert.AlertDampeningEvent;
@@ -47,19 +45,6 @@ import org.rhq.enterprise.server.RHQConstants;
* @author Joseph Marques
*/
@Stateless
-// NOTE: The AlertConditionLogManagerBean, AlertConditionManagerBean,
AlertDampeningManagerBean,
-// AlertDefinitionManagerBean, and CachedConditionManagerBean SLSB's are all
invoked, either directly or
-// indirectly, by the AlertConditionConsumerBean MDB. Since MDB invocations are
always done in new threads, using
-// the default SLSB pool impl ({@link ThreadlocalPool}) would cause a new instance
of this SLSB to be created
-// every time it was invoked by AlertConditionConsumerBean. This would be bad
because an existing instance would
-// not be reused, but it is really bad because the instance would also never get
destroyed, causing heap space to
-// gradually leak until the Server eventually ran out of memory. Hence, we must use
a {@link StrictMaxPool}, which
-// will use a fixed pool of instances of this SLSB, instead of a ThreadlocalPool.
Because most of these SLSB's are
-// also invoked by other callers (i.e. Agents, GUI's, or CLI's) besides
AlertConditionConsumerBean, we set the max
-// pool size to 100 (30 is the default value), to lower the chances of
AlertConditionConsumerBean
-// invocations, which are the most critical, from having to block and potentially
getting backed up in the queue.
-// For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232 (ips,
05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 100)
public class AlertConditionLogManagerBean implements AlertConditionLogManagerLocal {
private final Log log = LogFactory.getLog(AlertConditionLogManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionManagerBean.java
index 3094fc8..ef2ac95 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionManagerBean.java
@@ -32,8 +32,6 @@ import javax.persistence.Query;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.jboss.annotation.ejb.PoolClass;
-import org.jboss.ejb3.StrictMaxPool;
import org.rhq.core.domain.alert.AlertCondition;
import org.rhq.core.domain.alert.AlertConditionCategory;
import org.rhq.core.domain.alert.AlertDefinition;
@@ -51,19 +49,6 @@ import org.rhq.enterprise.server.authz.PermissionException;
* @author Joseph Marques
*/
@Stateless
-// NOTE: The AlertConditionLogManagerBean, AlertConditionManagerBean,
AlertDampeningManagerBean,
-// AlertDefinitionManagerBean, and CachedConditionManagerBean SLSB's are all
invoked, either directly or
-// indirectly, by the AlertConditionConsumerBean MDB. Since MDB invocations are
always done in new threads, using
-// the default SLSB pool impl ({@link ThreadlocalPool}) would cause a new instance
of this SLSB to be created
-// every time it was invoked by AlertConditionConsumerBean. This would be bad
because an existing instance would
-// not be reused, but it is really bad because the instance would also never get
destroyed, causing heap space to
-// gradually leak until the Server eventually ran out of memory. Hence, we must use
a {@link StrictMaxPool}, which
-// will use a fixed pool of instances of this SLSB, instead of a ThreadlocalPool.
Because most of these SLSB's are
-// also invoked by other callers (i.e. Agents, GUI's, or CLI's) besides
AlertConditionConsumerBean, we set the max
-// pool size to 100 (30 is the default value), to lower the chances of
AlertConditionConsumerBean
-// invocations, which are the most critical, from having to block and potentially
getting backed up in the queue.
-// For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232 (ips,
05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 100)
public class AlertConditionManagerBean implements AlertConditionManagerLocal {
private static final Log LOG = LogFactory.getLog(AlertConditionManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDampeningManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDampeningManagerBean.java
index 8d36704..dc5a2d4 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDampeningManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDampeningManagerBean.java
@@ -31,8 +31,6 @@ import javax.persistence.Query;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.jboss.annotation.ejb.PoolClass;
-import org.jboss.ejb3.StrictMaxPool;
import org.rhq.core.domain.alert.AlertDampening;
import org.rhq.core.domain.alert.AlertDampeningEvent;
import org.rhq.core.domain.alert.AlertDefinition;
@@ -43,19 +41,6 @@ import org.rhq.enterprise.server.RHQConstants;
* @author Joseph Marques
*/
@Stateless
-// NOTE: The AlertConditionLogManagerBean, AlertConditionManagerBean,
AlertDampeningManagerBean,
-// AlertDefinitionManagerBean, and CachedConditionManagerBean SLSB's are all
invoked, either directly or
-// indirectly, by the AlertConditionConsumerBean MDB. Since MDB invocations are
always done in new threads, using
-// the default SLSB pool impl ({@link ThreadlocalPool}) would cause a new instance
of this SLSB to be created
-// every time it was invoked by AlertConditionConsumerBean. This would be bad
because an existing instance would
-// not be reused, but it is really bad because the instance would also never get
destroyed, causing heap space to
-// gradually leak until the Server eventually ran out of memory. Hence, we must use
a {@link StrictMaxPool}, which
-// will use a fixed pool of instances of this SLSB, instead of a ThreadlocalPool.
Because most of these SLSB's are
-// also invoked by other callers (i.e. Agents, GUI's, or CLI's) besides
AlertConditionConsumerBean, we set the max
-// pool size to 100 (30 is the default value), to lower the chances of
AlertConditionConsumerBean
-// invocations, which are the most critical, from having to block and potentially
getting backed up in the queue.
-// For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232 (ips,
05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 100)
public class AlertDampeningManagerBean implements AlertDampeningManagerLocal {
private final Log log = LogFactory.getLog(AlertDampeningManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
index 828e2bb..22a2e21 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
@@ -34,8 +34,6 @@ import org.apache.commons.logging.LogFactory;
import org.jboss.annotation.IgnoreDependency;
-import org.jboss.annotation.ejb.PoolClass;
-import org.jboss.ejb3.StrictMaxPool;
import org.rhq.core.domain.alert.AlertCondition;
import org.rhq.core.domain.alert.AlertConditionCategory;
import org.rhq.core.domain.alert.AlertConditionLog;
@@ -69,19 +67,6 @@ import
org.rhq.enterprise.server.util.CriteriaQueryGenerator.AuthorizationTokenT
* @author Joseph Marques
*/
@Stateless
-// NOTE: The AlertConditionLogManagerBean, AlertConditionManagerBean,
AlertDampeningManagerBean,
-// AlertDefinitionManagerBean, and CachedConditionManagerBean SLSB's are all
invoked, either directly or
-// indirectly, by the AlertConditionConsumerBean MDB. Since MDB invocations are
always done in new threads, using
-// the default SLSB pool impl ({@link ThreadlocalPool}) would cause a new instance
of this SLSB to be created
-// every time it was invoked by AlertConditionConsumerBean. This would be bad
because an existing instance would
-// not be reused, but it is really bad because the instance would also never get
destroyed, causing heap space to
-// gradually leak until the Server eventually ran out of memory. Hence, we must use
a {@link StrictMaxPool}, which
-// will use a fixed pool of instances of this SLSB, instead of a ThreadlocalPool.
Because most of these SLSB's are
-// also invoked by other callers (i.e. Agents, GUI's, or CLI's) besides
AlertConditionConsumerBean, we set the max
-// pool size to 100 (30 is the default value), to lower the chances of
AlertConditionConsumerBean
-// invocations, which are the most critical, from having to block and potentially
getting backed up in the queue.
-// For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232 (ips,
05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 100)
public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
AlertDefinitionManagerRemote {
private static final Log LOG = LogFactory.getLog(AlertDefinitionManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/CachedConditionManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/CachedConditionManagerBean.java
index 685f461..de2b789 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/CachedConditionManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/CachedConditionManagerBean.java
@@ -28,8 +28,6 @@ import javax.persistence.PersistenceContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.jboss.annotation.ejb.PoolClass;
-import org.jboss.ejb3.StrictMaxPool;
import org.rhq.core.domain.alert.AlertDampeningEvent;
import org.rhq.core.domain.alert.AlertDefinition;
import org.rhq.enterprise.server.RHQConstants;
@@ -45,19 +43,6 @@ import
org.rhq.enterprise.server.alert.engine.jms.model.InactiveAlertConditionMe
* @author Joseph Marques
*/
@Stateless
-// NOTE: The AlertConditionLogManagerBean, AlertConditionManagerBean,
AlertDampeningManagerBean,
-// AlertDefinitionManagerBean, and CachedConditionManagerBean SLSB's are all
invoked, either directly or
-// indirectly, by the AlertConditionConsumerBean MDB. Since MDB invocations are
always done in new threads, using
-// the default SLSB pool impl ({@link ThreadlocalPool}) would cause a new instance
of this SLSB to be created
-// every time it was invoked by AlertConditionConsumerBean. This would be bad
because an existing instance would
-// not be reused, but it is really bad because the instance would also never get
destroyed, causing heap space to
-// gradually leak until the Server eventually ran out of memory. Hence, we must use
a {@link StrictMaxPool}, which
-// will use a fixed pool of instances of this SLSB, instead of a ThreadlocalPool.
Because most of these SLSB's are
-// also invoked by other callers (i.e. Agents, GUI's, or CLI's) besides
AlertConditionConsumerBean, we set the max
-// pool size to 100 (30 is the default value), to lower the chances of
AlertConditionConsumerBean
-// invocations, which are the most critical, from having to block and potentially
getting backed up in the queue.
-// For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232 (ips,
05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 100)
public class CachedConditionManagerBean implements CachedConditionManagerLocal {
private final Log log = LogFactory.getLog(CachedConditionManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
index 35394d6..4b98c67 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
@@ -32,8 +32,6 @@ import org.apache.commons.logging.LogFactory;
import org.jboss.annotation.IgnoreDependency;
-import org.jboss.annotation.ejb.PoolClass;
-import org.jboss.ejb3.StrictMaxPool;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.cloud.FailoverListDetails;
@@ -58,18 +56,6 @@ import org.rhq.enterprise.server.util.LookupUtil;
* @author Joseph Marques
*/
@Stateless
-// NOTE: The CacheConsistencyManagerBean, CloudManagerBean, ServerManagerBean,
StatusManagerBean, and SystemManagerBean
-// SLSB's are all invoked, either directly or indirectly, by EJB timers. Since
EJB timer invocations are always
-// done in new threads, using the default SLSB pool impl ({@link ThreadlocalPool})
would cause a new instance of
-// this SLSB to be created every time it was invoked by an EJB timer. This would be
bad because an existing
-// instance would not be reused, but it is really bad because the instance would
also never get destroyed, causing
-// heap space to gradually leak until the Server eventually ran out of memory.
Hence, we must use a
-// {@link StrictMaxPool}, which will use a fixed pool of instances of this SLSB,
instead of a ThreadlocalPool.
-// Because most of these SLSB's are also invoked by other callers (i.e. Agents,
GUI's, or CLI's) besides EJB
-// timers, we set the max pool size to 50 (the default is 30) to lower the chances
of EJB
-// timer invocations, which are the most critical, from having to block and
potentially getting backed up in the
-// queue. For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232
(ips, 05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 50)
public class CloudManagerBean implements CloudManagerLocal {
private final Log log = LogFactory.getLog(CloudManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
index eeeb812..dfd1990 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
@@ -33,8 +33,6 @@ import org.apache.commons.logging.LogFactory;
import org.jboss.annotation.IgnoreDependency;
-import org.jboss.annotation.ejb.PoolClass;
-import org.jboss.ejb3.StrictMaxPool;
import org.rhq.core.domain.alert.AlertDefinition;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.cloud.Server;
@@ -67,18 +65,6 @@ import org.rhq.enterprise.server.util.LookupUtil;
* require holding these locks as part of their processing.
*/
@Stateless
-// NOTE: The CacheConsistencyManagerBean, CloudManagerBean, ServerManagerBean,
StatusManagerBean, and SystemManagerBean
-// SLSB's are all invoked, either directly or indirectly, by EJB timers. Since
EJB timer invocations are always
-// done in new threads, using the default SLSB pool impl ({@link ThreadlocalPool})
would cause a new instance of
-// this SLSB to be created every time it was invoked by an EJB timer. This would be
bad because an existing
-// instance would not be reused, but it is really bad because the instance would
also never get destroyed, causing
-// heap space to gradually leak until the Server eventually ran out of memory.
Hence, we must use a
-// {@link StrictMaxPool}, which will use a fixed pool of instances of this SLSB,
instead of a ThreadlocalPool.
-// Because most of these SLSB's are also invoked by other callers (i.e. Agents,
GUI's, or CLI's) besides EJB
-// timers, we set the max pool size to 50 (the default is 30) to lower the chances
of EJB
-// timer invocations, which are the most critical, from having to block and
potentially getting backed up in the
-// queue. For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232
(ips, 05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 50)
public class StatusManagerBean implements StatusManagerLocal {
private final Log log = LogFactory.getLog(StatusManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/CacheConsistencyManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/CacheConsistencyManagerBean.java
index a8b5499..2de7bad 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/CacheConsistencyManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/CacheConsistencyManagerBean.java
@@ -34,8 +34,6 @@ import javax.ejb.TransactionAttributeType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.jboss.annotation.ejb.PoolClass;
-import org.jboss.ejb3.StrictMaxPool;
import org.rhq.enterprise.server.alert.engine.AlertConditionCacheManagerLocal;
/**
@@ -46,18 +44,6 @@ import
org.rhq.enterprise.server.alert.engine.AlertConditionCacheManagerLocal;
* @author Joseph Marques
*/
@Stateless
-// NOTE: The CacheConsistencyManagerBean, CloudManagerBean, ServerManagerBean,
StatusManagerBean, and SystemManagerBean
-// SLSB's are all invoked, either directly or indirectly, by EJB timers. Since
EJB timer invocations are always
-// done in new threads, using the default SLSB pool impl ({@link ThreadlocalPool})
would cause a new instance of
-// this SLSB to be created every time it was invoked by an EJB timer. This would be
bad because an existing
-// instance would not be reused, but it is really bad because the instance would
also never get destroyed, causing
-// heap space to gradually leak until the Server eventually ran out of memory.
Hence, we must use a
-// {@link StrictMaxPool}, which will use a fixed pool of instances of this SLSB,
instead of a ThreadlocalPool.
-// Because most of these SLSB's are also invoked by other callers (i.e. Agents,
GUI's, or CLI's) besides EJB
-// timers, we set the max pool size to 50 (the default is 30) to lower the chances
of EJB
-// timer invocations, which are the most critical, from having to block and
potentially getting backed up in the
-// queue. For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232
(ips, 05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 50)
public class CacheConsistencyManagerBean implements CacheConsistencyManagerLocal {
private final Log log = LogFactory.getLog(CacheConsistencyManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java
index dd7790b..be91c65 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java
@@ -38,8 +38,6 @@ import javax.persistence.Query;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.jboss.annotation.ejb.PoolClass;
-import org.jboss.ejb3.StrictMaxPool;
import org.rhq.core.domain.cloud.PartitionEventType;
import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.resource.Agent;
@@ -66,18 +64,6 @@ import
org.rhq.enterprise.server.core.comm.ServerCommunicationsServiceUtil;
* @author Joseph Marques
*/
@Stateless
-// NOTE: The CacheConsistencyManagerBean, CloudManagerBean, ServerManagerBean,
StatusManagerBean, and SystemManagerBean
-// SLSB's are all invoked, either directly or indirectly, by EJB timers. Since
EJB timer invocations are always
-// done in new threads, using the default SLSB pool impl ({@link ThreadlocalPool})
would cause a new instance of
-// this SLSB to be created every time it was invoked by an EJB timer. This would be
bad because an existing
-// instance would not be reused, but it is really bad because the instance would
also never get destroyed, causing
-// heap space to gradually leak until the Server eventually ran out of memory.
Hence, we must use a
-// {@link StrictMaxPool}, which will use a fixed pool of instances of this SLSB,
instead of a ThreadlocalPool.
-// Because most of these SLSB's are also invoked by other callers (i.e. Agents,
GUI's, or CLI's) besides EJB
-// timers, we set the max pool size to 50 (the default is 30) to lower the chances
of EJB
-// timer invocations, which are the most critical, from having to block and
potentially getting backed up in the
-// queue. For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232
(ips, 05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 50)
public class ServerManagerBean implements ServerManagerLocal {
private final Log log = LogFactory.getLog(ServerManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java
index 67184cf..19a454a 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java
@@ -51,9 +51,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.annotation.IgnoreDependency;
-import org.jboss.annotation.ejb.PoolClass;
import org.jboss.deployment.MainDeployerMBean;
-import org.jboss.ejb3.StrictMaxPool;
import org.jboss.mx.util.MBeanServerLocator;
import org.rhq.core.db.DatabaseType;
@@ -76,18 +74,6 @@ import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.enterprise.server.util.SystemDatabaseInformation;
@Stateless
-// NOTE: The CacheConsistencyManagerBean, CloudManagerBean, ServerManagerBean,
StatusManagerBean, and SystemManagerBean
-// SLSB's are all invoked, either directly or indirectly, by EJB timers. Since
EJB timer invocations are always
-// done in new threads, using the default SLSB pool impl ({@link ThreadlocalPool})
would cause a new instance of
-// this SLSB to be created every time it was invoked by an EJB timer. This would be
bad because an existing
-// instance would not be reused, but it is really bad because the instance would
also never get destroyed, causing
-// heap space to gradually leak until the Server eventually ran out of memory.
Hence, we must use a
-// {@link StrictMaxPool}, which will use a fixed pool of instances of this SLSB,
instead of a ThreadlocalPool.
-// Because most of these SLSB's are also invoked by other callers (i.e. Agents,
GUI's, or CLI's) besides EJB
-// timers, we set the max pool size to 50 (the default is 30) to lower the chances
of EJB
-// timer invocations, which are the most critical, from having to block and
potentially getting backed up in the
-// queue. For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232
(ips, 05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 50)
public class SystemManagerBean implements SystemManagerLocal, SystemManagerRemote {
private final String SQL_VACUUM = "VACUUM ANALYZE {0}";
diff --git a/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
b/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
index eef6d52..8892da8 100644
--- a/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
+++ b/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
@@ -1,6 +1,141 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
-<jboss>
+<jboss
xmlns="http://java.sun.com/xml/ns/javaee"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://www.jboss.org/j2ee/schema/jboss_5_0.xsd"
+ version="3.0">
+
+ <enterprise-beans>
+
+ <!--
+ The AlertConditionLogManagerBean, AlertConditionManagerBean,
AlertDampeningManagerBean,
+ AlertDefinitionManagerBean, and CachedConditionManagerBean SLSB's are all
invoked, either directly or
+ indirectly, by the AlertConditionConsumerBean MDB. Since MDB invocations are
always done in new threads, using
+ the default SLSB pool impl (ThreadlocalPool) would cause a new instance of this
SLSB to be created
+ every time it was invoked by AlertConditionConsumerBean. This would be bad if
only because an existing instance would
+ not be reused, but it is really bad because the instance would also never get
destroyed, causing heap space to
+ gradually leak until the Server eventually ran out of memory. Hence, we must use
a StrictMaxPool, which
+ will use a fixed pool of instances of this SLSB, instead of a ThreadlocalPool.
Because lots of alert
+ definitions could result in many concurrent calls to AlertConditionConsumerBean,
and because most of these
+ SLSB's are also invoked by other callers (i.e. Agents, GUI's, or
CLI's), we set the max pool size to 100 to
+ minimize the chances of AlertConditionConsumerBean invocations, which are the
most critical, from having to
+ block and potentially getting backed up in the queue. We set the pool timeout
extremely high to essentially
+ prevent queued callers from timing out. Note, MDB's are configured in
ejb3-interceptors-aop.xml to use a strict
+ max pool with a max of 15 and a timeout of 10000, so AlertConditionConsumerBean
could become a bottleneck for
+ systems with a lot of alerts defined. (ips, 05/10/11)
+
+ For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232 .
+ -->
+
+ <session>
+ <ejb-name>AlertConditionLogManagerBean</ejb-name>
+ <pool-config>
+ <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
+ <pool-max-size>100</pool-max-size>
+ <pool-timeout>1000000000</pool-timeout>
+ </pool-config>
+ </session>
+
+ <session>
+ <ejb-name>AlertConditionManagerBean</ejb-name>
+ <pool-config>
+ <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
+ <pool-max-size>100</pool-max-size>
+ <pool-timeout>1000000000</pool-timeout>
+ </pool-config>
+ </session>
+
+ <session>
+ <ejb-name>AlertDampeningManagerBean</ejb-name>
+ <pool-config>
+ <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
+ <pool-max-size>100</pool-max-size>
+ <pool-timeout>1000000000</pool-timeout>
+ </pool-config>
+ </session>
+
+ <session>
+ <ejb-name>AlertDefinitionManagerBean</ejb-name>
+ <pool-config>
+ <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
+ <pool-max-size>100</pool-max-size>
+ <pool-timeout>1000000000</pool-timeout>
+ </pool-config>
+ </session>
+
+ <session>
+ <ejb-name>CachedConditionManagerBean</ejb-name>
+ <pool-config>
+ <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
+ <pool-max-size>100</pool-max-size>
+ <pool-timeout>1000000000</pool-timeout>
+ </pool-config>
+ </session>
+
+
+ <!--
+ The CacheConsistencyManagerBean, CloudManagerBean, ServerManagerBean,
StatusManagerBean, and SystemManagerBean
+ SLSB's are all invoked, either directly or indirectly, by EJB timers. Since
EJB timer invocations are always
+ done in new threads, using the default SLSB pool impl (ThreadlocalPool) would
cause a new instance of this
+ SLSB to be created every time it was invoked by an EJB timer. This would be bad
if only because an existing
+ instance would not be reused, but it is really bad because the instance would
also never get destroyed, causing
+ heap space to gradually leak until the Server eventually ran out of memory.
Hence, we must use a
+ StrictMaxPool, which will use a fixed pool of instances of this SLSB, instead of
a ThreadlocalPool.
+ The timer invocations will only require one or two instances at any given time,
but because most of these
+ SLSB's are also invoked by other callers (i.e. Agents, GUI's, or
CLI's, we set the max pool size to 30, to
+ minimize the chances of EJB timer invocations, which are the most critical, from
having to block and
+ potentially getting backed up in the queue. We set the pool timeout extremely
high to essentially prevent
+ queued callers from timing out. (ips, 05/10/11)
+
+ For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232 .
+ -->
+
+ <session>
+ <ejb-name>CacheConsistencyManagerBean</ejb-name>
+ <pool-config>
+ <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
+ <pool-max-size>30</pool-max-size>
+ <pool-timeout>1000000000</pool-timeout>
+ </pool-config>
+ </session>
+
+ <session>
+ <ejb-name>CloudManagerBean</ejb-name>
+ <pool-config>
+ <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
+ <pool-max-size>30</pool-max-size>
+ <pool-timeout>1000000000</pool-timeout>
+ </pool-config>
+ </session>
+
+ <session>
+ <ejb-name>ServerManagerBean</ejb-name>
+ <pool-config>
+ <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
+ <pool-max-size>30</pool-max-size>
+ <pool-timeout>1000000000</pool-timeout>
+ </pool-config>
+ </session>
+
+ <session>
+ <ejb-name>StatusManagerBean</ejb-name>
+ <pool-config>
+ <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
+ <pool-max-size>30</pool-max-size>
+ <pool-timeout>1000000000</pool-timeout>
+ </pool-config>
+ </session>
+
+ <session>
+ <ejb-name>SystemManagerBean</ejb-name>
+ <pool-config>
+ <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
+ <pool-max-size>30</pool-max-size>
+ <pool-timeout>1000000000</pool-timeout>
+ </pool-config>
+ </session>
+
+ </enterprise-beans>
</jboss>
commit ae6d42eef44bf5c03f1e9d24694ad1adb9d261fc
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Mon May 9 22:59:47 2011 -0400
bump up max size of strict thread pools for the alert SLSBs called by the alert
condition consumer MDB, since that MDB can potentially be called quite often if there are
a lot of alerts configured (refinement of fix for
https://bugzilla.redhat.com/show_bug.cgi?id=693232)
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionLogManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionLogManagerBean.java
index 0804736..8ee77c9 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionLogManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionLogManagerBean.java
@@ -56,10 +56,10 @@ import org.rhq.enterprise.server.RHQConstants;
// gradually leak until the Server eventually ran out of memory. Hence, we must use
a {@link StrictMaxPool}, which
// will use a fixed pool of instances of this SLSB, instead of a ThreadlocalPool.
Because most of these SLSB's are
// also invoked by other callers (i.e. Agents, GUI's, or CLI's) besides
AlertConditionConsumerBean, we set the max
-// pool size to 60, which is double the default value, to minimize the chances of
AlertConditionConsumerBean
+// pool size to 100 (30 is the default value), to lower the chances of
AlertConditionConsumerBean
// invocations, which are the most critical, from having to block and potentially
getting backed up in the queue.
// For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232 (ips,
05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 60)
+@PoolClass(value = StrictMaxPool.class, maxSize = 100)
public class AlertConditionLogManagerBean implements AlertConditionLogManagerLocal {
private final Log log = LogFactory.getLog(AlertConditionLogManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionManagerBean.java
index 3d49479..3094fc8 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertConditionManagerBean.java
@@ -60,10 +60,10 @@ import org.rhq.enterprise.server.authz.PermissionException;
// gradually leak until the Server eventually ran out of memory. Hence, we must use
a {@link StrictMaxPool}, which
// will use a fixed pool of instances of this SLSB, instead of a ThreadlocalPool.
Because most of these SLSB's are
// also invoked by other callers (i.e. Agents, GUI's, or CLI's) besides
AlertConditionConsumerBean, we set the max
-// pool size to 60, which is double the default value, to minimize the chances of
AlertConditionConsumerBean
+// pool size to 100 (30 is the default value), to lower the chances of
AlertConditionConsumerBean
// invocations, which are the most critical, from having to block and potentially
getting backed up in the queue.
// For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232 (ips,
05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 60)
+@PoolClass(value = StrictMaxPool.class, maxSize = 100)
public class AlertConditionManagerBean implements AlertConditionManagerLocal {
private static final Log LOG = LogFactory.getLog(AlertConditionManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDampeningManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDampeningManagerBean.java
index 5df78c5..8d36704 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDampeningManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDampeningManagerBean.java
@@ -52,10 +52,10 @@ import org.rhq.enterprise.server.RHQConstants;
// gradually leak until the Server eventually ran out of memory. Hence, we must use
a {@link StrictMaxPool}, which
// will use a fixed pool of instances of this SLSB, instead of a ThreadlocalPool.
Because most of these SLSB's are
// also invoked by other callers (i.e. Agents, GUI's, or CLI's) besides
AlertConditionConsumerBean, we set the max
-// pool size to 60, which is double the default value, to minimize the chances of
AlertConditionConsumerBean
+// pool size to 100 (30 is the default value), to lower the chances of
AlertConditionConsumerBean
// invocations, which are the most critical, from having to block and potentially
getting backed up in the queue.
// For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232 (ips,
05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 60)
+@PoolClass(value = StrictMaxPool.class, maxSize = 100)
public class AlertDampeningManagerBean implements AlertDampeningManagerLocal {
private final Log log = LogFactory.getLog(AlertDampeningManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
index ba3b045..828e2bb 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
@@ -78,10 +78,10 @@ import
org.rhq.enterprise.server.util.CriteriaQueryGenerator.AuthorizationTokenT
// gradually leak until the Server eventually ran out of memory. Hence, we must use
a {@link StrictMaxPool}, which
// will use a fixed pool of instances of this SLSB, instead of a ThreadlocalPool.
Because most of these SLSB's are
// also invoked by other callers (i.e. Agents, GUI's, or CLI's) besides
AlertConditionConsumerBean, we set the max
-// pool size to 60, which is double the default value, to minimize the chances of
AlertConditionConsumerBean
+// pool size to 100 (30 is the default value), to lower the chances of
AlertConditionConsumerBean
// invocations, which are the most critical, from having to block and potentially
getting backed up in the queue.
// For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232 (ips,
05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 60)
+@PoolClass(value = StrictMaxPool.class, maxSize = 100)
public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
AlertDefinitionManagerRemote {
private static final Log LOG = LogFactory.getLog(AlertDefinitionManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/CachedConditionManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/CachedConditionManagerBean.java
index 55aa2a4..685f461 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/CachedConditionManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/CachedConditionManagerBean.java
@@ -54,10 +54,10 @@ import
org.rhq.enterprise.server.alert.engine.jms.model.InactiveAlertConditionMe
// gradually leak until the Server eventually ran out of memory. Hence, we must use
a {@link StrictMaxPool}, which
// will use a fixed pool of instances of this SLSB, instead of a ThreadlocalPool.
Because most of these SLSB's are
// also invoked by other callers (i.e. Agents, GUI's, or CLI's) besides
AlertConditionConsumerBean, we set the max
-// pool size to 60, which is double the default value, to minimize the chances of
AlertConditionConsumerBean
+// pool size to 100 (30 is the default value), to lower the chances of
AlertConditionConsumerBean
// invocations, which are the most critical, from having to block and potentially
getting backed up in the queue.
// For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232 (ips,
05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 60)
+@PoolClass(value = StrictMaxPool.class, maxSize = 100)
public class CachedConditionManagerBean implements CachedConditionManagerLocal {
private final Log log = LogFactory.getLog(CachedConditionManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
index 919149d..35394d6 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
@@ -66,10 +66,10 @@ import org.rhq.enterprise.server.util.LookupUtil;
// heap space to gradually leak until the Server eventually ran out of memory.
Hence, we must use a
// {@link StrictMaxPool}, which will use a fixed pool of instances of this SLSB,
instead of a ThreadlocalPool.
// Because most of these SLSB's are also invoked by other callers (i.e. Agents,
GUI's, or CLI's) besides EJB
-// timers, we set the max pool size to 60, which is double the default value, to
minimize the chances of EJB
+// timers, we set the max pool size to 50 (the default is 30) to lower the chances
of EJB
// timer invocations, which are the most critical, from having to block and
potentially getting backed up in the
// queue. For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232
(ips, 05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 60)
+@PoolClass(value = StrictMaxPool.class, maxSize = 50)
public class CloudManagerBean implements CloudManagerLocal {
private final Log log = LogFactory.getLog(CloudManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
index 526f801..eeeb812 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
@@ -75,10 +75,10 @@ import org.rhq.enterprise.server.util.LookupUtil;
// heap space to gradually leak until the Server eventually ran out of memory.
Hence, we must use a
// {@link StrictMaxPool}, which will use a fixed pool of instances of this SLSB,
instead of a ThreadlocalPool.
// Because most of these SLSB's are also invoked by other callers (i.e. Agents,
GUI's, or CLI's) besides EJB
-// timers, we set the max pool size to 60, which is double the default value, to
minimize the chances of EJB
+// timers, we set the max pool size to 50 (the default is 30) to lower the chances
of EJB
// timer invocations, which are the most critical, from having to block and
potentially getting backed up in the
// queue. For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232
(ips, 05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 60)
+@PoolClass(value = StrictMaxPool.class, maxSize = 50)
public class StatusManagerBean implements StatusManagerLocal {
private final Log log = LogFactory.getLog(StatusManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/CacheConsistencyManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/CacheConsistencyManagerBean.java
index 6cbf361..a8b5499 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/CacheConsistencyManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/CacheConsistencyManagerBean.java
@@ -54,10 +54,10 @@ import
org.rhq.enterprise.server.alert.engine.AlertConditionCacheManagerLocal;
// heap space to gradually leak until the Server eventually ran out of memory.
Hence, we must use a
// {@link StrictMaxPool}, which will use a fixed pool of instances of this SLSB,
instead of a ThreadlocalPool.
// Because most of these SLSB's are also invoked by other callers (i.e. Agents,
GUI's, or CLI's) besides EJB
-// timers, we set the max pool size to 60, which is double the default value, to
minimize the chances of EJB
+// timers, we set the max pool size to 50 (the default is 30) to lower the chances
of EJB
// timer invocations, which are the most critical, from having to block and
potentially getting backed up in the
// queue. For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232
(ips, 05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 60)
+@PoolClass(value = StrictMaxPool.class, maxSize = 50)
public class CacheConsistencyManagerBean implements CacheConsistencyManagerLocal {
private final Log log = LogFactory.getLog(CacheConsistencyManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java
index 588d8e8..dd7790b 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java
@@ -74,10 +74,10 @@ import
org.rhq.enterprise.server.core.comm.ServerCommunicationsServiceUtil;
// heap space to gradually leak until the Server eventually ran out of memory.
Hence, we must use a
// {@link StrictMaxPool}, which will use a fixed pool of instances of this SLSB,
instead of a ThreadlocalPool.
// Because most of these SLSB's are also invoked by other callers (i.e. Agents,
GUI's, or CLI's) besides EJB
-// timers, we set the max pool size to 60, which is double the default value, to
minimize the chances of EJB
+// timers, we set the max pool size to 50 (the default is 30) to lower the chances
of EJB
// timer invocations, which are the most critical, from having to block and
potentially getting backed up in the
// queue. For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232
(ips, 05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 60)
+@PoolClass(value = StrictMaxPool.class, maxSize = 50)
public class ServerManagerBean implements ServerManagerLocal {
private final Log log = LogFactory.getLog(ServerManagerBean.class);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java
index a03f525..67184cf 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/system/SystemManagerBean.java
@@ -84,10 +84,10 @@ import org.rhq.enterprise.server.util.SystemDatabaseInformation;
// heap space to gradually leak until the Server eventually ran out of memory.
Hence, we must use a
// {@link StrictMaxPool}, which will use a fixed pool of instances of this SLSB,
instead of a ThreadlocalPool.
// Because most of these SLSB's are also invoked by other callers (i.e. Agents,
GUI's, or CLI's) besides EJB
-// timers, we set the max pool size to 60, which is double the default value, to
minimize the chances of EJB
+// timers, we set the max pool size to 50 (the default is 30) to lower the chances
of EJB
// timer invocations, which are the most critical, from having to block and
potentially getting backed up in the
// queue. For more details, see
https://bugzilla.redhat.com/show_bug.cgi?id=693232
(ips, 05/05/11).
-@PoolClass(value = StrictMaxPool.class, maxSize = 60)
+@PoolClass(value = StrictMaxPool.class, maxSize = 50)
public class SystemManagerBean implements SystemManagerLocal, SystemManagerRemote {
private final String SQL_VACUUM = "VACUUM ANALYZE {0}";
diff --git a/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
b/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
index 95354d8..eef6d52 100644
--- a/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
+++ b/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
@@ -1,5 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<jboss>
</jboss>
+
commit dc67f7b6b6750537b253aaf21acbebcc6b72fc0d
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Mon May 9 17:11:45 2011 -0400
[BZ 697751 - ResourcePackageDetails.getFileName() returns
"c:\fakepath\xa.rar" when uploading file in Chrome and IE]
IE and Chrome provide an absolute filename for the uploaded item,
which needs to be trimmed down to what FF provides, just the name portion.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/FileUploadServlet.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/FileUploadServlet.java
index 2c8e514..e8265a6 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/FileUploadServlet.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/FileUploadServlet.java
@@ -179,7 +179,20 @@ public class FileUploadServlet extends HttpServlet {
protected File forceToFile(FileItem fileItem) throws IOException, ServletException {
if (fileItem.isInMemory()) {
- File tmpFile = File.createTempFile("" + fileItem.getName(), null);
+ String name = fileItem.getName();
+
+ if (null == name) {
+ throw new IllegalArgumentException("FileItem has null name");
+ }
+
+ // some browsers (IE, Chrome) pass an absolute filename, we just want the
name of the file, no paths
+ name = name.replace('\\', '/');
+ if (name.length() > 2 && name.charAt(1) == ':') {
+ name = name.substring(2);
+ }
+ name = new File(name).getName();
+
+ File tmpFile = File.createTempFile(name, null);
try {
fileItem.write(tmpFile);
return tmpFile;
commit aa5e5ba286997779ba1e735e5680f73c3854fd6d
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Mon May 9 17:06:07 2011 -0400
[BZ 703252 - IE (IE7, IE8) unable to load CoreGUI]
- Add DOCTYPE to CoreGUI.html. This directs IE to use standards mode as
opposed to quirks mode.
- Comment out the gwt standard.css from CoreGUI.gwt.xml. This should not
be here as suggested by smartgwt, seems to not help us, and seemed link
to failed app loads in IE.
diff --git
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
index c2ba874..4c2ee34 100644
---
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
+++
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
@@ -10,7 +10,11 @@
<inherits name='com.smartgwt.SmartGwt' />
<inherits name="com.smartgwt.tools.SmartGwtTools"/>
- <!--<inherits
name='com.google.gwt.user.theme.standard.Standard'/>-->
+ <!-- removing this, we can add it back if we find something that looks odd. But,
+ 1) it seemed like a trouble spot during initial load for certain IE
configurations
+ 2) we probably don't want to be defaulting to GWT standards as opposed to
SmartGWT.
+ <inherits name='com.google.gwt.user.theme.standard.Standard'/>
+ -->
<!--
<inherits name="com.smartclient.theme.graphite.Graphite"/>
-->
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
index 5432ecb..1b96d09 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
+++ b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
@@ -1,3 +1,4 @@
+<!doctype html>
<html>
<head>
<title>RHQ Core Application</title>
commit 76bd674107fefba2344279cabe256c02344be5ea
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Mon May 9 17:03:40 2011 -0400
Related to [BZ 702390 - Large number of BundleDeployments for a single Bundle causes
fetch serialization issues]
Ensure (optional=false) set for LAZY load required (i.e. nullable = false)
associations.
This should ensure lazy load.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java
index e288428..bc9d927 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java
@@ -50,7 +50,7 @@ import org.rhq.core.domain.alert.notification.AlertNotificationLog;
* @author Joseph Marques
*/
@Entity
-@NamedQueries({
+@NamedQueries( {
@NamedQuery(name = Alert.QUERY_FIND_BY_MEASUREMENT_DEFINITION_ID, query =
"SELECT a " + " FROM Alert AS a "
+ " JOIN a.alertDefinition definition " + " JOIN
definition.conditions condition "
+ " WHERE condition.measurementDefinition.id = :measurementDefinitionId
"
@@ -123,10 +123,8 @@ import org.rhq.core.domain.alert.notification.AlertNotificationLog;
+ " FROM AlertDefinition ad " //
+ " JOIN ad.alerts innerA " //
+ " WHERE ad.resource.id IN ( :resourceIds ) )"),
- @NamedQuery(name = Alert.QUERY_DELETE_BY_RESOURCE_TEMPLATE, query =
- "DELETE FROM Alert alert "
- + "WHERE alert.id IN (SELECT innerAlerts.id "
- + " FROM AlertDefinition alertDef "
+ @NamedQuery(name = Alert.QUERY_DELETE_BY_RESOURCE_TEMPLATE, query = "DELETE FROM
Alert alert "
+ + "WHERE alert.id IN (SELECT innerAlerts.id " + "
FROM AlertDefinition alertDef "
+ " JOIN alertDef.alerts innerAlerts "
+ " WHERE alertDef.resourceType.id =
:resourceTypeId)"),
@NamedQuery(name = Alert.QUERY_DELETE_BY_RESOURCE_GROUPS, query = "" //
@@ -272,8 +270,8 @@ public class Alert implements Serializable {
@Column(name = "RECOVERY_ID")
private Integer recoveryId;
- @JoinColumn(name = "RECOVERY_ID", referencedColumnName = "ID",
insertable = false, updatable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "RECOVERY_ID", referencedColumnName = "ID",
insertable = false, updatable = false, nullable = false)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
private AlertDefinition recoveryAlertDefinition;
@Column(name = "WILL_RECOVER", nullable = false)
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleFile.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleFile.java
index f6b5c29..dfba7d4 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleFile.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleFile.java
@@ -67,7 +67,7 @@ public class BundleFile implements Serializable {
private int id;
@JoinColumn(name = "BUNDLE_VERSION_ID", referencedColumnName =
"ID", nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
private BundleVersion bundleVersion;
// Note, currently we cascade remove the PackageVersion because BundleVersions do not
share
@@ -75,7 +75,7 @@ public class BundleFile implements Serializable {
// the future (e.e reuse of PVs if the sha256 is not different) then this will will
have to change
// to reflect the fact that multiple BundleFiles could reference the same
PackageVersion.
@JoinColumn(name = "PACKAGE_VERSION_ID", referencedColumnName =
"ID", nullable = false)
- @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = CascadeType.REMOVE)
private PackageVersion packageVersion;
public BundleFile() {
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleResourceDeployment.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleResourceDeployment.java
index 7cd7b50..fec79da 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleResourceDeployment.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleResourceDeployment.java
@@ -78,11 +78,11 @@ public class BundleResourceDeployment implements Serializable {
private int id;
@JoinColumn(name = "BUNDLE_DEPLOYMENT_ID", referencedColumnName =
"ID", nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
private BundleDeployment bundleDeployment;
@JoinColumn(name = "RESOURCE_ID", referencedColumnName = "ID",
nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
private Resource resource;
@Column(name = "STATUS", nullable = false)
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleResourceDeploymentHistory.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleResourceDeploymentHistory.java
index b04e257..6337c4e 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleResourceDeploymentHistory.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleResourceDeploymentHistory.java
@@ -68,7 +68,7 @@ public class BundleResourceDeploymentHistory implements Serializable {
private int id;
@JoinColumn(name = "BUNDLE_RES_DEPLOY_ID", referencedColumnName =
"ID", nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
private BundleResourceDeployment resourceDeployment;
@Column(name = "SUBJECT_NAME", nullable = true)
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/FailoverList.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/FailoverList.java
index 40dd426..000284d 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/FailoverList.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/FailoverList.java
@@ -1,178 +1,178 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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, version 2, as
- * published by the Free Software Foundation, and/or the GNU Lesser
- * General Public License, version 2.1, also as published by the Free
- * Software Foundation.
- *
- * 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 and the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the GNU Lesser General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.rhq.core.domain.cloud;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.OneToMany;
-import javax.persistence.OrderBy;
-import javax.persistence.PrePersist;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
-
-import org.rhq.core.domain.resource.Agent;
-
-/**
- * An object to capture a snapshot of the order in which particular agents
- * will fail over to particular servers. The {@link FailoverListDetails}
- * will contain the ordered references back to other {@link Server}s.
- *
- * @author jmarques
- *
- */
-@Entity(name = "FailoverList")
-@NamedQueries( //
-{
- @NamedQuery(name = FailoverList.QUERY_DELETE_VIA_AGENT, query = "DELETE FROM
FailoverList fl WHERE fl.agent = :agent"),
- @NamedQuery(name = FailoverList.QUERY_DELETE_VIA_PARTITION_EVENT, query =
"DELETE FROM FailoverList fl WHERE fl.partitionEvent = :partitionEvent"),
- @NamedQuery(name = FailoverList.QUERY_GET_VIA_AGENT, query = "SELECT fl FROM
FailoverList fl WHERE fl.agent = :agent"),
- @NamedQuery(name = FailoverList.QUERY_TRUNCATE, query = "DELETE FROM
FailoverList") })
-@SequenceGenerator(name = "id", sequenceName =
"RHQ_FAILOVER_LIST_ID_SEQ")
-@Table(name = "RHQ_FAILOVER_LIST")
-public class FailoverList implements Serializable {
-
- public static final long serialVersionUID = 1L;
-
- public static final String QUERY_DELETE_VIA_AGENT =
"FailoverList.deletViaAgent";
- public static final String QUERY_DELETE_VIA_PARTITION_EVENT =
"FailoverList.deletViaPartitionEvent";
- public static final String QUERY_GET_VIA_AGENT =
"FailoverList.getViaAgent";
- public static final String QUERY_TRUNCATE = "FailoverList.truncate";
-
- @Column(name = "ID", nullable = false)
- @GeneratedValue(strategy = GenerationType.AUTO, generator = "id")
- @Id
- private int id;
-
- @JoinColumn(name = "PARTITION_EVENT_ID", referencedColumnName =
"ID", nullable = false)
- @ManyToOne
- protected PartitionEvent partitionEvent;
-
- @JoinColumn(name = "AGENT_ID", referencedColumnName = "ID",
nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
- protected Agent agent;
-
- @Column(name = "AGENT_ID", insertable = false, updatable = false)
- private int agentId;
-
- @Column(name = "CTIME", nullable = false)
- private long ctime;
-
- @OneToMany(mappedBy = "failoverList", cascade = CascadeType.ALL)
- @OrderBy("ordinal ASC")
- private List<FailoverListDetails> serverList = new
ArrayList<FailoverListDetails>();
-
- // required for JPA
- protected FailoverList() {
- }
-
- public FailoverList(PartitionEvent event, Agent agent) {
- this.partitionEvent = event;
- this.agent = agent;
- }
-
- public PartitionEvent getPartitionEvent() {
- return partitionEvent;
- }
-
- public void setPartitionEvent(PartitionEvent partitionEvent) {
- this.partitionEvent = partitionEvent;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public Agent getAgent() {
- return agent;
- }
-
- public void setAgent(Agent agent) {
- this.agent = agent;
- }
-
- public long getCtime() {
- return ctime;
- }
-
- public List<FailoverListDetails> getServerList() {
- return serverList;
- }
-
- public void setServerList(List<FailoverListDetails> serverList) {
- this.serverList = serverList;
- }
-
- @PrePersist
- void onPersist() {
- this.ctime = System.currentTimeMillis();
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + agentId;
- result = prime * result + (int) (ctime ^ (ctime >>> 32));
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
-
- if (obj == null || !(obj instanceof FailoverList)) {
- return false;
- }
-
- final FailoverList other = (FailoverList) obj;
-
- if (agentId != other.agentId) {
- return false;
- }
-
- if (ctime != other.ctime) {
- return false;
- }
-
- return true;
- }
-}
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.core.domain.cloud;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.PrePersist;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+
+import org.rhq.core.domain.resource.Agent;
+
+/**
+ * An object to capture a snapshot of the order in which particular agents
+ * will fail over to particular servers. The {@link FailoverListDetails}
+ * will contain the ordered references back to other {@link Server}s.
+ *
+ * @author jmarques
+ *
+ */
+@Entity(name = "FailoverList")
+@NamedQueries( //
+{
+ @NamedQuery(name = FailoverList.QUERY_DELETE_VIA_AGENT, query = "DELETE FROM
FailoverList fl WHERE fl.agent = :agent"),
+ @NamedQuery(name = FailoverList.QUERY_DELETE_VIA_PARTITION_EVENT, query =
"DELETE FROM FailoverList fl WHERE fl.partitionEvent = :partitionEvent"),
+ @NamedQuery(name = FailoverList.QUERY_GET_VIA_AGENT, query = "SELECT fl FROM
FailoverList fl WHERE fl.agent = :agent"),
+ @NamedQuery(name = FailoverList.QUERY_TRUNCATE, query = "DELETE FROM
FailoverList") })
+@SequenceGenerator(name = "id", sequenceName =
"RHQ_FAILOVER_LIST_ID_SEQ")
+@Table(name = "RHQ_FAILOVER_LIST")
+public class FailoverList implements Serializable {
+
+ public static final long serialVersionUID = 1L;
+
+ public static final String QUERY_DELETE_VIA_AGENT =
"FailoverList.deletViaAgent";
+ public static final String QUERY_DELETE_VIA_PARTITION_EVENT =
"FailoverList.deletViaPartitionEvent";
+ public static final String QUERY_GET_VIA_AGENT =
"FailoverList.getViaAgent";
+ public static final String QUERY_TRUNCATE = "FailoverList.truncate";
+
+ @Column(name = "ID", nullable = false)
+ @GeneratedValue(strategy = GenerationType.AUTO, generator = "id")
+ @Id
+ private int id;
+
+ @JoinColumn(name = "PARTITION_EVENT_ID", referencedColumnName =
"ID", nullable = false)
+ @ManyToOne(optional = false)
+ protected PartitionEvent partitionEvent;
+
+ @JoinColumn(name = "AGENT_ID", referencedColumnName = "ID",
nullable = false)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
+ protected Agent agent;
+
+ @Column(name = "AGENT_ID", insertable = false, updatable = false)
+ private int agentId;
+
+ @Column(name = "CTIME", nullable = false)
+ private long ctime;
+
+ @OneToMany(mappedBy = "failoverList", cascade = CascadeType.ALL)
+ @OrderBy("ordinal ASC")
+ private List<FailoverListDetails> serverList = new
ArrayList<FailoverListDetails>();
+
+ // required for JPA
+ protected FailoverList() {
+ }
+
+ public FailoverList(PartitionEvent event, Agent agent) {
+ this.partitionEvent = event;
+ this.agent = agent;
+ }
+
+ public PartitionEvent getPartitionEvent() {
+ return partitionEvent;
+ }
+
+ public void setPartitionEvent(PartitionEvent partitionEvent) {
+ this.partitionEvent = partitionEvent;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public Agent getAgent() {
+ return agent;
+ }
+
+ public void setAgent(Agent agent) {
+ this.agent = agent;
+ }
+
+ public long getCtime() {
+ return ctime;
+ }
+
+ public List<FailoverListDetails> getServerList() {
+ return serverList;
+ }
+
+ public void setServerList(List<FailoverListDetails> serverList) {
+ this.serverList = serverList;
+ }
+
+ @PrePersist
+ void onPersist() {
+ this.ctime = System.currentTimeMillis();
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + agentId;
+ result = prime * result + (int) (ctime ^ (ctime >>> 32));
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ if (obj == null || !(obj instanceof FailoverList)) {
+ return false;
+ }
+
+ final FailoverList other = (FailoverList) obj;
+
+ if (agentId != other.agentId) {
+ return false;
+ }
+
+ if (ctime != other.ctime) {
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/FailoverListDetails.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/FailoverListDetails.java
index 51ae161..53b98b0 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/FailoverListDetails.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/FailoverListDetails.java
@@ -1,169 +1,169 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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, version 2, as
- * published by the Free Software Foundation, and/or the GNU Lesser
- * General Public License, version 2.1, also as published by the Free
- * Software Foundation.
- *
- * 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 and the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the GNU Lesser General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.rhq.core.domain.cloud;
-
-import java.io.Serializable;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
-
-/**
- * An object to capture a snapshot of the order in which particular agents
- * will fail over to particular servers. The {@link FailoverListDetails}
- * will contain the ordered references back to other {@link Server}s.
- *
- * @author jmarques
- * @author jshaughnessy
- *
- */
-@Entity(name = "FailoverListDetails")
-@NamedQueries( //
-{
- @NamedQuery(name = FailoverListDetails.QUERY_GET_VIA_AGENT_ID, query = "SELECT
fld FROM FailoverListDetails fld WHERE fld.failoverList IN ( SELECT fl FROM FailoverList
fl WHERE fl.agent.id = :agentId )"),
- @NamedQuery(name = FailoverListDetails.QUERY_GET_VIA_AGENT_ID_WITH_SERVERS, query =
"SELECT fld FROM FailoverListDetails fld JOIN FETCH fld.server WHERE fld.failoverList
IN ( SELECT fl FROM FailoverList fl WHERE fl.agent.id = :agentId )"),
- @NamedQuery(name = FailoverListDetails.QUERY_DELETE_VIA_AGENT, query = "DELETE
FROM FailoverListDetails fld WHERE fld.failoverList IN ( SELECT fl FROM FailoverList fl
WHERE fl.agent = :agent )"),
- @NamedQuery(name = FailoverListDetails.QUERY_DELETE_VIA_SERVER, query = "DELETE
FROM FailoverListDetails fld WHERE fld.server.id = :serverId"),
- @NamedQuery(name = FailoverListDetails.QUERY_GET_ASSIGNED_LOADS, query = "SELECT
new org.rhq.core.domain.cloud.composite.FailoverListDetailsComposite(fld.ordinal,
fld.serverId, COUNT(fld.serverId)) FROM FailoverListDetails fld GROUP BY fld.ordinal,
fld.serverId ORDER BY fld.ordinal ASC"),
- @NamedQuery(name = FailoverListDetails.QUERY_TRUNCATE, query = "DELETE FROM
FailoverListDetails") })
-@SequenceGenerator(name = "id", sequenceName =
"RHQ_FAILOVER_DETAILS_ID_SEQ")
-@Table(name = "RHQ_FAILOVER_DETAILS")
-public class FailoverListDetails implements Serializable {
-
- public static final long serialVersionUID = 1L;
-
- public static final String QUERY_GET_VIA_AGENT_ID =
"FailoverListDetails.getViaAgentId";
- public static final String QUERY_GET_VIA_AGENT_ID_WITH_SERVERS =
"FailoverListDetails.getViaAgentIdWithServers";
- public static final String QUERY_DELETE_VIA_AGENT =
"FailoverListDetails.deleteViaAgent";
- public static final String QUERY_DELETE_VIA_SERVER =
"FailoverListDetails.deleteViaServer";
- public static final String QUERY_GET_ASSIGNED_LOADS =
"FailoverListDetails.getAssignedLoads";
- public static final String QUERY_TRUNCATE =
"FailoverListDetails.truncate";
-
- @Column(name = "ID", nullable = false)
- @GeneratedValue(strategy = GenerationType.AUTO, generator = "id")
- @Id
- private int id;
-
- @JoinColumn(name = "FAILOVER_LIST_ID", referencedColumnName =
"ID", nullable = false)
- @ManyToOne
- protected FailoverList failoverList;
-
- @Column(name = "ORDINAL", nullable = false)
- private int ordinal;
-
- @JoinColumn(name = "SERVER_ID", referencedColumnName = "ID",
nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
- protected Server server;
-
- @Column(name = "SERVER_ID", insertable = false, updatable = false)
- private int serverId;
-
- // required for JPA
- protected FailoverListDetails() {
- }
-
- public FailoverListDetails(FailoverList failoverList, int ordinal, Server server) {
- super();
- this.failoverList = failoverList;
- this.ordinal = ordinal;
- this.server = server;
- this.serverId = server.getId();
- }
-
- public FailoverList getFailoverList() {
- return failoverList;
- }
-
- public void setFailoverList(FailoverList failoverList) {
- this.failoverList = failoverList;
- }
-
- public int getOrdinal() {
- return ordinal;
- }
-
- public void setOrdinal(int ordinal) {
- this.ordinal = ordinal;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public Server getServer() {
- return server;
- }
-
- public void setServer(Server agent) {
- this.server = agent;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + serverId;
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
-
- if (obj == null || !(obj instanceof FailoverListDetails)) {
- return false;
- }
-
- final FailoverListDetails other = (FailoverListDetails) obj;
-
- if (failoverList == null) {
- if (other.failoverList != null) {
- return false;
- }
- } else if (!failoverList.equals(other.failoverList)) {
- return false;
- }
-
- if (ordinal != other.ordinal) {
- return false;
- }
-
- return true;
- }
-
-}
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.core.domain.cloud;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+
+/**
+ * An object to capture a snapshot of the order in which particular agents
+ * will fail over to particular servers. The {@link FailoverListDetails}
+ * will contain the ordered references back to other {@link Server}s.
+ *
+ * @author jmarques
+ * @author jshaughnessy
+ *
+ */
+@Entity(name = "FailoverListDetails")
+@NamedQueries( //
+{
+ @NamedQuery(name = FailoverListDetails.QUERY_GET_VIA_AGENT_ID, query = "SELECT
fld FROM FailoverListDetails fld WHERE fld.failoverList IN ( SELECT fl FROM FailoverList
fl WHERE fl.agent.id = :agentId )"),
+ @NamedQuery(name = FailoverListDetails.QUERY_GET_VIA_AGENT_ID_WITH_SERVERS, query =
"SELECT fld FROM FailoverListDetails fld JOIN FETCH fld.server WHERE fld.failoverList
IN ( SELECT fl FROM FailoverList fl WHERE fl.agent.id = :agentId )"),
+ @NamedQuery(name = FailoverListDetails.QUERY_DELETE_VIA_AGENT, query = "DELETE
FROM FailoverListDetails fld WHERE fld.failoverList IN ( SELECT fl FROM FailoverList fl
WHERE fl.agent = :agent )"),
+ @NamedQuery(name = FailoverListDetails.QUERY_DELETE_VIA_SERVER, query = "DELETE
FROM FailoverListDetails fld WHERE fld.server.id = :serverId"),
+ @NamedQuery(name = FailoverListDetails.QUERY_GET_ASSIGNED_LOADS, query = "SELECT
new org.rhq.core.domain.cloud.composite.FailoverListDetailsComposite(fld.ordinal,
fld.serverId, COUNT(fld.serverId)) FROM FailoverListDetails fld GROUP BY fld.ordinal,
fld.serverId ORDER BY fld.ordinal ASC"),
+ @NamedQuery(name = FailoverListDetails.QUERY_TRUNCATE, query = "DELETE FROM
FailoverListDetails") })
+@SequenceGenerator(name = "id", sequenceName =
"RHQ_FAILOVER_DETAILS_ID_SEQ")
+@Table(name = "RHQ_FAILOVER_DETAILS")
+public class FailoverListDetails implements Serializable {
+
+ public static final long serialVersionUID = 1L;
+
+ public static final String QUERY_GET_VIA_AGENT_ID =
"FailoverListDetails.getViaAgentId";
+ public static final String QUERY_GET_VIA_AGENT_ID_WITH_SERVERS =
"FailoverListDetails.getViaAgentIdWithServers";
+ public static final String QUERY_DELETE_VIA_AGENT =
"FailoverListDetails.deleteViaAgent";
+ public static final String QUERY_DELETE_VIA_SERVER =
"FailoverListDetails.deleteViaServer";
+ public static final String QUERY_GET_ASSIGNED_LOADS =
"FailoverListDetails.getAssignedLoads";
+ public static final String QUERY_TRUNCATE =
"FailoverListDetails.truncate";
+
+ @Column(name = "ID", nullable = false)
+ @GeneratedValue(strategy = GenerationType.AUTO, generator = "id")
+ @Id
+ private int id;
+
+ @JoinColumn(name = "FAILOVER_LIST_ID", referencedColumnName =
"ID", nullable = false)
+ @ManyToOne(optional = false)
+ protected FailoverList failoverList;
+
+ @Column(name = "ORDINAL", nullable = false)
+ private int ordinal;
+
+ @JoinColumn(name = "SERVER_ID", referencedColumnName = "ID",
nullable = false)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
+ protected Server server;
+
+ @Column(name = "SERVER_ID", insertable = false, updatable = false)
+ private int serverId;
+
+ // required for JPA
+ protected FailoverListDetails() {
+ }
+
+ public FailoverListDetails(FailoverList failoverList, int ordinal, Server server) {
+ super();
+ this.failoverList = failoverList;
+ this.ordinal = ordinal;
+ this.server = server;
+ this.serverId = server.getId();
+ }
+
+ public FailoverList getFailoverList() {
+ return failoverList;
+ }
+
+ public void setFailoverList(FailoverList failoverList) {
+ this.failoverList = failoverList;
+ }
+
+ public int getOrdinal() {
+ return ordinal;
+ }
+
+ public void setOrdinal(int ordinal) {
+ this.ordinal = ordinal;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public Server getServer() {
+ return server;
+ }
+
+ public void setServer(Server agent) {
+ this.server = agent;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + serverId;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ if (obj == null || !(obj instanceof FailoverListDetails)) {
+ return false;
+ }
+
+ final FailoverListDetails other = (FailoverListDetails) obj;
+
+ if (failoverList == null) {
+ if (other.failoverList != null) {
+ return false;
+ }
+ } else if (!failoverList.equals(other.failoverList)) {
+ return false;
+ }
+
+ if (ordinal != other.ordinal) {
+ return false;
+ }
+
+ return true;
+ }
+
+}
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSourceSyncResults.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSourceSyncResults.java
index b72c52a..86521d4 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSourceSyncResults.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/content/ContentSourceSyncResults.java
@@ -67,7 +67,7 @@ public class ContentSourceSyncResults implements ContentSyncResults,
Serializabl
private int id;
@JoinColumn(name = "CONTENT_SRC_ID", referencedColumnName = "ID",
nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
private ContentSource contentSource;
@Column(name = "STATUS", nullable = false)
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/content/RepoSyncResults.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/content/RepoSyncResults.java
index e37de93..d88ab97 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/content/RepoSyncResults.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/content/RepoSyncResults.java
@@ -66,7 +66,7 @@ public class RepoSyncResults implements Serializable, ContentSyncResults
{
private int id;
@JoinColumn(name = "REPO_ID", referencedColumnName = "ID",
nullable = false)
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(fetch = FetchType.LAZY, optional = false)
private Repo repo;
@Column(name = "STATUS", nullable = false)
@@ -168,7 +168,9 @@ public class RepoSyncResults implements Serializable,
ContentSyncResults {
@Override
public String toString() {
- StringBuilder str = new
StringBuilder(this.getClass().getName().substring(this.getClass().getName().lastIndexOf(".")+1)
+ ": ");
+ StringBuilder str = new StringBuilder(this.getClass().getName().substring(
+ this.getClass().getName().lastIndexOf(".") + 1)
+ + ": ");
str.append("start-time=[" + new Date(startTime));
str.append("], end-time=[" + ((endTime != null) ? new Date(endTime) :
"---"));
str.append("], percentComplete=[" + status);
commit 310d34c51ab650b47c652d4d8f60846f781c5fb2
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon May 9 17:01:16 2011 -0400
BZ 702748 - be able to revert back multiple deployments
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
index 7a6e08a..7b45a70 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
@@ -915,7 +915,7 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
@RequiredPermission(Permission.MANAGE_BUNDLE)
public BundleDeployment scheduleBundleDeployment(Subject subject, int
bundleDeploymentId, boolean isCleanDeployment)
throws Exception {
- return scheduleBundleDeploymentImpl(subject, bundleDeploymentId,
isCleanDeployment, false);
+ return scheduleBundleDeploymentImpl(subject, bundleDeploymentId,
isCleanDeployment, false, null);
}
@Override
@@ -960,11 +960,13 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
BundleDeployment revertDeployment =
bundleManager.createBundleDeploymentInNewTrans(subject, prevDeployment
.getBundleVersion().getId(), bundleDestinationId, name, desc, config);
- return scheduleBundleDeploymentImpl(subject, revertDeployment.getId(),
isCleanDeployment, true);
+ return scheduleBundleDeploymentImpl(subject, revertDeployment.getId(),
isCleanDeployment, true, prevDeployment
+ .getReplacedBundleDeploymentId());
}
+ // revertedDeploymentReplacedDeployment is only meaningful if isRevert is true
private BundleDeployment scheduleBundleDeploymentImpl(Subject subject, int
bundleDeploymentId,
- boolean isCleanDeployment, boolean isRevert) throws Exception {
+ boolean isCleanDeployment, boolean isRevert, Integer
revertedDeploymentReplacedDeployment) throws Exception {
BundleDeployment newDeployment = entityManager.find(BundleDeployment.class,
bundleDeploymentId);
if (null == newDeployment) {
@@ -998,9 +1000,22 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
for (BundleDeployment d : currentDeployments) {
if (d.isLive()) {
d.setLive(false);
- // you can not revert a revert, it does not logically replace
anything
if (!isRevert) {
newDeployment.setReplacedBundleDeploymentId(d.getId());
+ } else {
+ // we are doing a revert; so our "replacedDeployment"
should be what the deployment we
+ // are reverting to replaced. For example, assume I deployed
three bundles:
+ // Deployment #1 - replaced nothing (hence
replacedBundleDeploymentId == null)
+ // Deployment #2 - replaced #1
+ // Deployment #3 - replaced #2
+ // Now do a revert. Reverting the live deployment #3 means we
really want to re-deploy #2.
+ // This new deployment gets a new ID of #4, but it is actually a
deployment equivalent to #2.
+ // If our deploy #4 is actually a redeploy of #2, we need to
prepare for the user wanting
+ // to revert #4 by setting the replacedBundleDeploymentId to that
which #2 had - this being #1.
+ // Deployment #4 - replaced #1
+ // Now if we ask to revert #4, we will actually be re-deploying
#1, which is what we want.
+ // This allows us to revert back multiple steps.
+
newDeployment.setReplacedBundleDeploymentId(revertedDeploymentReplacedDeployment);
}
break;
}
commit 90090e092f59a2e431255defbc16e36a6ece1e2b
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon May 9 14:39:24 2011 -0400
switch eclipse to use 4.1.0-snapshot version
diff --git a/.classpath b/.classpath
index 1cb3205..2ca408f 100644
--- a/.classpath
+++ b/.classpath
@@ -115,7 +115,7 @@
<classpathentry exported="true" kind="var"
path="M2_REPO/org/unitils/unitils-dbunit/3.1/unitils-dbunit-3.1.jar"/>
<classpathentry exported="true" kind="var"
path="M2_REPO/org/unitils/unitils-orm/3.1/unitils-orm-3.1.jar"/>
<classpathentry exported="true" kind="var"
path="M2_REPO/org/unitils/unitils-testng/3.1/unitils-testng-3.1.jar"/>
- <classpathentry exported="true" kind="lib"
path="modules/enterprise/remoting/webservices/target/rhq-remoting-webservices-4.0.0-SNAPSHOT/wsconsume-output"/>
+ <classpathentry exported="true" kind="lib"
path="modules/enterprise/remoting/webservices/target/rhq-remoting-webservices-4.1.0-SNAPSHOT/wsconsume-output"/>
<classpathentry kind="src"
path="modules/common/ant-bundle/src/main/java"/>
<classpathentry kind="src"
path="modules/common/ant-bundle/src/test/java"/>
<classpathentry kind="src"
path="modules/common/filetemplate-bundle/src/main/java"/>