[rhq] modules/plugins
by Heiko W. Rupp
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java | 4 -
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseServerComponent.java | 2
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DeploymentComponent.java | 32 +++++-----
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/HostControllerComponent.java | 2
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/json/Result.java | 9 ++
5 files changed, 32 insertions(+), 17 deletions(-)
New commits:
commit 47aff4689a8275d18382a8f0f93d7144cc8f0795
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Tue Jan 31 16:55:49 2012 +0100
Fix compile error
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java
index 6205576..382a145 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java
@@ -173,7 +173,7 @@ public class ASConnection {
Result failure = new Result();
failure.setFailureDescription(ste.getMessage());
failure.setOutcome("failure");
-// failure.setThrowable(ste); TODO
+ failure.setRhqThrowable(ste);
JsonNode ret = mapper.valueToTree(failure);
return ret;
@@ -201,7 +201,7 @@ public class ASConnection {
Result failure = new Result();
failure.setFailureDescription(e.getMessage());
failure.setOutcome("failure");
-// failure.setThrowable(e); TODO
+ failure.setRhqThrowable(e);
JsonNode ret = mapper.valueToTree(failure);
return ret;
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseServerComponent.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseServerComponent.java
index 60f819f..8078e15 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseServerComponent.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseServerComponent.java
@@ -162,7 +162,7 @@ public class BaseServerComponent extends BaseComponent {
* reading, this is a good sign.
*/
if (!res.isSuccess()) {
- if (res.getThrowable()!=null && (res.getThrowable() instanceof ConnectException || res.getThrowable().getMessage().equals("Connection refused"))) {
+ if (res.getRhqThrowable()!=null && (res.getRhqThrowable() instanceof ConnectException || res.getRhqThrowable().getMessage().equals("Connection refused"))) {
operationResult.setSimpleResult("Success");
log.debug("Got a ConnectionRefused for operation " + name + " this is considered ok, as the remote server sometimes closes the communications channel before sending a reply");
}
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DeploymentComponent.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DeploymentComponent.java
index abf40fa..c87b899 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DeploymentComponent.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DeploymentComponent.java
@@ -173,6 +173,9 @@ public class DeploymentComponent extends BaseComponent implements OperationFacet
Operation op = new ReadChildrenResources(address1,"deployment");
ComplexResult cres = getASConnection().executeComplex(op);
+ if (cres==null)
+ return details;
+
if (!cres.isSuccess())
return details;
@@ -181,19 +184,22 @@ public class DeploymentComponent extends BaseComponent implements OperationFacet
Map<String,Object> deployment = (Map<String, Object>) deployments.get(key);
log.info("Discover package [" + key + "] for type [" + type + "]");
- List<Map> contentList = (List<Map>) deployment.get("content"); // deployments on SG or ManagedServer level have no hash
- Map<String,Map> hashMap = contentList.get(0);
- Map<String,String> bvMap = hashMap.get("hash");
- String content = bvMap.get("BYTES_VALUE");
- PackageDetailsKey pdKey = new PackageDetailsKey(key,
- content, // no way to obtain the user defined version from the server
- type.getName(),
- "noarch"
- );
- ResourcePackageDetails detail = new ResourcePackageDetails(pdKey);
- detail.setSHA256(content);
-
- details.add(detail);
+ List<Map> contentList = (List<Map>) deployment.get("content"); // TODO deployments on SG or ManagedServer level have no hash
+ if (contentList!=null) {
+
+ Map<String,Map> hashMap = contentList.get(0);
+ Map<String,String> bvMap = hashMap.get("hash");
+ String content = bvMap.get("BYTES_VALUE");
+ PackageDetailsKey pdKey = new PackageDetailsKey(key,
+ content, // no way to obtain the user defined version from the server
+ type.getName(),
+ "noarch"
+ );
+ ResourcePackageDetails detail = new ResourcePackageDetails(pdKey);
+ detail.setSHA256(content);
+
+ details.add(detail);
+ }
}
return details;
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/HostControllerComponent.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/HostControllerComponent.java
index f21e598..b46b108 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/HostControllerComponent.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/HostControllerComponent.java
@@ -117,7 +117,7 @@ public class HostControllerComponent extends BaseServerComponent implements Oper
else {
report.setErrorMessage(res.getFailureDescription());
report.setStatus(CreateResourceStatus.FAILURE);
- report.setException(res.getThrowable());
+ report.setException(res.getRhqThrowable());
}
return report;
}
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/json/Result.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/json/Result.java
index 8f6cfa0..1c68eca 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/json/Result.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/json/Result.java
@@ -40,6 +40,8 @@ public class Result {
private boolean success = false;
@JsonProperty("rolled-back")
private boolean rolledBack = false;
+ @JsonIgnore
+ private Throwable rhqThrowable;
/** Record throwsables during low level processing */
@JsonIgnore
@@ -106,6 +108,13 @@ public class Result {
this.throwable = throwable;
}
+ public Throwable getRhqThrowable() {
+ return rhqThrowable;
+ }
+
+ public void setRhqThrowable(Throwable rhqThrowable) {
+ this.rhqThrowable = rhqThrowable;
+ }
@Override
public String toString() {
12 years, 3 months
[rhq] modules/enterprise
by lkrejci
modules/enterprise/server/client-api/src/main/java/org/rhq/enterprise/client/LocalClient.java | 259 ++++++++--
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java | 24
2 files changed, 250 insertions(+), 33 deletions(-)
New commits:
commit 02dafbc97a76c3813afd0f05b213d8a1de70a3c2
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Tue Jan 31 14:35:07 2012 +0100
[BZ 786106] Wrap calls to obtain managers in privileged blocks so that 3rd
callers can safely obtain them.
The StandardBindings put all the managers into the script context before
the script engine is initialized with the security measures which makes
the managers available inside the scripts. Java code that gets injected as
other params into the scripts (like the "ProxyFactory" (of class
ResourceClientFactory) would suffer from access control exceptions when
it tried to obtain some manager while being called from the script because
it would try to call the methods from the LocalClient to obtain the remote
interfaces directly, without a wrapping in a privileged block). Obtaining
the remote interfaces is a safe operation wrt the scripts and so can be
wrapped in privileged block so that any caller of the LocalClient can
have access to the regardless of the access control restrictions in place.
diff --git a/modules/enterprise/server/client-api/src/main/java/org/rhq/enterprise/client/LocalClient.java b/modules/enterprise/server/client-api/src/main/java/org/rhq/enterprise/client/LocalClient.java
index 025b60d..2414bf6 100644
--- a/modules/enterprise/server/client-api/src/main/java/org/rhq/enterprise/client/LocalClient.java
+++ b/modules/enterprise/server/client-api/src/main/java/org/rhq/enterprise/client/LocalClient.java
@@ -21,6 +21,9 @@ package org.rhq.enterprise.client;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
import java.util.HashMap;
import java.util.Map;
@@ -79,141 +82,335 @@ public class LocalClient implements RhqFacade {
this.subject = subject;
}
+ @Override
public Subject getSubject() {
return subject;
}
+ @Override
public Subject login(String user, String password) throws Exception {
return subject;
}
+ @Override
public void logout() {
}
+ @Override
public boolean isLoggedIn() {
return true;
}
+ @Override
public AlertManagerRemote getAlertManager() {
- return getProxy(LookupUtil.getAlertManager(), AlertManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<AlertManagerRemote>() {
+ @Override
+ public AlertManagerRemote run() {
+ return AccessController.doPrivileged(new PrivilegedAction<AlertManagerRemote>() {
+ @Override
+ public AlertManagerRemote run() {
+ return getProxy(LookupUtil.getAlertManager(), AlertManagerRemote.class);
+ }
+ });
+ }
+ });
}
+ @Override
public AlertDefinitionManagerRemote getAlertDefinitionManager() {
- return getProxy(LookupUtil.getAlertDefinitionManager(), AlertDefinitionManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<AlertDefinitionManagerRemote>() {
+ @Override
+ public AlertDefinitionManagerRemote run() {
+ return getProxy(LookupUtil.getAlertDefinitionManager(), AlertDefinitionManagerRemote.class);
+ }
+ });
}
+ @Override
public AvailabilityManagerRemote getAvailabilityManager() {
- return getProxy(LookupUtil.getAvailabilityManager(), AvailabilityManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<AvailabilityManagerRemote>() {
+ @Override
+ public AvailabilityManagerRemote run() {
+ return getProxy(LookupUtil.getAvailabilityManager(), AvailabilityManagerRemote.class);
+ }
+ });
}
+ @Override
public BundleManagerRemote getBundleManager() {
- return getProxy(LookupUtil.getBundleManager(), BundleManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<BundleManagerRemote>() {
+ @Override
+ public BundleManagerRemote run() {
+ return AccessController.doPrivileged(new PrivilegedAction<BundleManagerRemote>() {
+ @Override
+ public BundleManagerRemote run() {
+ return getProxy(LookupUtil.getBundleManager(), BundleManagerRemote.class);
+ }
+ });
+ }
+ });
}
+ @Override
public CallTimeDataManagerRemote getCallTimeDataManager() {
- return getProxy(LookupUtil.getCallTimeDataManager(), CallTimeDataManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<CallTimeDataManagerRemote>() {
+ @Override
+ public CallTimeDataManagerRemote run() {
+ return getProxy(LookupUtil.getCallTimeDataManager(), CallTimeDataManagerRemote.class);
+ }
+ });
}
+ @Override
public RepoManagerRemote getRepoManager() {
- return getProxy(LookupUtil.getRepoManagerLocal(), RepoManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<RepoManagerRemote>() {
+ @Override
+ public RepoManagerRemote run() {
+ return getProxy(LookupUtil.getRepoManagerLocal(), RepoManagerRemote.class);
+ }
+ });
}
+ @Override
public ConfigurationManagerRemote getConfigurationManager() {
- return getProxy(LookupUtil.getConfigurationManager(), ConfigurationManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<ConfigurationManagerRemote>() {
+ @Override
+ public ConfigurationManagerRemote run() {
+ return getProxy(LookupUtil.getConfigurationManager(), ConfigurationManagerRemote.class);
+ }
+ });
}
+ @Override
public ContentManagerRemote getContentManager() {
- return getProxy(LookupUtil.getContentManager(), ContentManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<ContentManagerRemote>() {
+ @Override
+ public ContentManagerRemote run() {
+ return getProxy(LookupUtil.getContentManager(), ContentManagerRemote.class);
+ }
+ });
}
+ @Override
public DataAccessManagerRemote getDataAccessManager() {
- return getProxy(LookupUtil.getDataAccessManager(), DataAccessManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<DataAccessManagerRemote>() {
+ @Override
+ public DataAccessManagerRemote run() {
+ return getProxy(LookupUtil.getDataAccessManager(), DataAccessManagerRemote.class);
+ }
+ });
}
+ @Override
public DiscoveryBossRemote getDiscoveryBoss() {
- return getProxy(LookupUtil.getDiscoveryBoss(), DiscoveryBossRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<DiscoveryBossRemote>() {
+ @Override
+ public DiscoveryBossRemote run() {
+ return getProxy(LookupUtil.getDiscoveryBoss(), DiscoveryBossRemote.class);
+ }
+ });
}
+ @Override
public DriftManagerRemote getDriftManager() {
- return getProxy(LookupUtil.getDriftManager(), DriftManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<DriftManagerRemote>() {
+ @Override
+ public DriftManagerRemote run() {
+ return getProxy(LookupUtil.getDriftManager(), DriftManagerRemote.class);
+ }
+ });
}
public DriftTemplateManagerRemote getDriftTemplateManager() {
- return getProxy(LookupUtil.getDriftTemplateManager(), DriftTemplateManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<DriftTemplateManagerRemote>() {
+ @Override
+ public DriftTemplateManagerRemote run() {
+ return getProxy(LookupUtil.getDriftTemplateManager(), DriftTemplateManagerRemote.class);
+ }
+ });
}
+ @Override
public EventManagerRemote getEventManager() {
- return getProxy(LookupUtil.getEventManager(), EventManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<EventManagerRemote>() {
+ @Override
+ public EventManagerRemote run() {
+ return getProxy(LookupUtil.getEventManager(), EventManagerRemote.class);
+ }
+ });
}
+ @Override
public MeasurementBaselineManagerRemote getMeasurementBaselineManager() {
- return getProxy(LookupUtil.getMeasurementBaselineManager(), MeasurementBaselineManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<MeasurementBaselineManagerRemote>() {
+ @Override
+ public MeasurementBaselineManagerRemote run() {
+ return getProxy(LookupUtil.getMeasurementBaselineManager(), MeasurementBaselineManagerRemote.class);
+ }
+ });
}
+ @Override
public MeasurementDataManagerRemote getMeasurementDataManager() {
- return getProxy(LookupUtil.getMeasurementDataManager(), MeasurementDataManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<MeasurementDataManagerRemote>() {
+ @Override
+ public MeasurementDataManagerRemote run() {
+ return getProxy(LookupUtil.getMeasurementDataManager(), MeasurementDataManagerRemote.class);
+ }
+ });
}
+ @Override
public MeasurementDefinitionManagerRemote getMeasurementDefinitionManager() {
- return getProxy(LookupUtil.getMeasurementDefinitionManager(), MeasurementDefinitionManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<MeasurementDefinitionManagerRemote>() {
+ @Override
+ public MeasurementDefinitionManagerRemote run() {
+ return getProxy(LookupUtil.getMeasurementDefinitionManager(), MeasurementDefinitionManagerRemote.class);
+ }
+ });
}
+ @Override
public MeasurementScheduleManagerRemote getMeasurementScheduleManager() {
- return getProxy(LookupUtil.getMeasurementScheduleManager(), MeasurementScheduleManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<MeasurementScheduleManagerRemote>() {
+ @Override
+ public MeasurementScheduleManagerRemote run() {
+ return getProxy(LookupUtil.getMeasurementScheduleManager(), MeasurementScheduleManagerRemote.class);
+ }
+ });
}
+ @Override
public OperationManagerRemote getOperationManager() {
- return getProxy(LookupUtil.getOperationManager(), OperationManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<OperationManagerRemote>() {
+ @Override
+ public OperationManagerRemote run() {
+ return getProxy(LookupUtil.getOperationManager(), OperationManagerRemote.class);
+ }
+ });
}
+ @Override
public ResourceManagerRemote getResourceManager() {
- return getProxy(LookupUtil.getResourceManager(), ResourceManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<ResourceManagerRemote>() {
+ @Override
+ public ResourceManagerRemote run() {
+ return getProxy(LookupUtil.getResourceManager(), ResourceManagerRemote.class);
+ }
+ });
}
+ @Override
public ResourceFactoryManagerRemote getResourceFactoryManager() {
- return getProxy(LookupUtil.getResourceFactoryManager(), ResourceFactoryManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<ResourceFactoryManagerRemote>() {
+ @Override
+ public ResourceFactoryManagerRemote run() {
+ return getProxy(LookupUtil.getResourceFactoryManager(), ResourceFactoryManagerRemote.class);
+ }
+ });
}
+ @Override
public ResourceGroupManagerRemote getResourceGroupManager() {
- return getProxy(LookupUtil.getResourceGroupManager(), ResourceGroupManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<ResourceGroupManagerRemote>() {
+ @Override
+ public ResourceGroupManagerRemote run() {
+ return getProxy(LookupUtil.getResourceGroupManager(), ResourceGroupManagerRemote.class);
+ }
+ });
}
+ @Override
public ResourceTypeManagerRemote getResourceTypeManager() {
- return getProxy(LookupUtil.getResourceTypeManager(), ResourceTypeManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<ResourceTypeManagerRemote>() {
+ @Override
+ public ResourceTypeManagerRemote run() {
+ return getProxy(LookupUtil.getResourceTypeManager(), ResourceTypeManagerRemote.class);
+ }
+ });
}
+ @Override
public RoleManagerRemote getRoleManager() {
- return getProxy(LookupUtil.getRoleManager(), RoleManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<RoleManagerRemote>() {
+ @Override
+ public RoleManagerRemote run() {
+ return getProxy(LookupUtil.getRoleManager(), RoleManagerRemote.class);
+ }
+ });
}
+ @Override
public SavedSearchManagerRemote getSavedSearchManager() {
- return getProxy(LookupUtil.getSavedSearchManager(), SavedSearchManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<SavedSearchManagerRemote>() {
+ @Override
+ public SavedSearchManagerRemote run() {
+ return getProxy(LookupUtil.getSavedSearchManager(), SavedSearchManagerRemote.class);
+ }
+ });
}
+ @Override
public SubjectManagerRemote getSubjectManager() {
- return getProxy(LookupUtil.getSubjectManager(), SubjectManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<SubjectManagerRemote>() {
+ @Override
+ public SubjectManagerRemote run() {
+ return getProxy(LookupUtil.getSubjectManager(), SubjectManagerRemote.class);
+ }
+ });
}
+ @Override
public SupportManagerRemote getSupportManager() {
- return getProxy(LookupUtil.getSupportManager(), SupportManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<SupportManagerRemote>() {
+ @Override
+ public SupportManagerRemote run() {
+ return getProxy(LookupUtil.getSupportManager(), SupportManagerRemote.class);
+ }
+ });
}
+ @Override
public SystemManagerRemote getSystemManager() {
- return getProxy(LookupUtil.getSystemManager(), SystemManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<SystemManagerRemote>() {
+ @Override
+ public SystemManagerRemote run() {
+ return getProxy(LookupUtil.getSystemManager(), SystemManagerRemote.class);
+ }
+ });
}
+ @Override
public RemoteInstallManagerRemote getRemoteInstallManager() {
- return getProxy(LookupUtil.getRemoteInstallManager(), RemoteInstallManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<RemoteInstallManagerRemote>() {
+ @Override
+ public RemoteInstallManagerRemote run() {
+ return getProxy(LookupUtil.getRemoteInstallManager(), RemoteInstallManagerRemote.class);
+ }
+ });
}
+ @Override
public TagManagerRemote getTagManager() {
- return getProxy(LookupUtil.getTagManager(), TagManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<TagManagerRemote>() {
+ @Override
+ public TagManagerRemote run() {
+ return getProxy(LookupUtil.getTagManager(), TagManagerRemote.class);
+ }
+ });
}
+ @Override
public SynchronizationManagerRemote getSynchronizationManager() {
- return getProxy(LookupUtil.getSynchronizationManager(), SynchronizationManagerRemote.class);
+ return AccessController.doPrivileged(new PrivilegedAction<SynchronizationManagerRemote>() {
+ @Override
+ public SynchronizationManagerRemote run() {
+ return getProxy(LookupUtil.getSynchronizationManager(), SynchronizationManagerRemote.class);
+ }
+ });
}
-
+
+ @Override
public Map<String, Object> getManagers() {
if (managers == null) {
diff --git a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java
index de0d912..f6772e5 100644
--- a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java
+++ b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java
@@ -21,7 +21,6 @@ package org.rhq.enterprise.client.security.test;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
-import java.io.SerializablePermission;
import java.security.PermissionCollection;
import java.util.Collections;
@@ -31,7 +30,6 @@ import javax.script.ScriptException;
import org.testng.Assert;
import org.testng.annotations.Test;
-import org.rhq.bindings.SandboxedScriptEngine;
import org.rhq.bindings.ScriptEngineFactory;
import org.rhq.bindings.StandardBindings;
import org.rhq.bindings.StandardScriptPermissions;
@@ -179,6 +177,21 @@ public class JndiAccessTest extends AbstractEJB3Test {
}
}
+ @Test
+ public void testProxyFactoryWorksWithSecuredScriptEngine() throws Exception {
+ Subject overlord = LookupUtil.getSubjectManager().getOverlord();
+
+ ScriptEngine engine = getEngine(overlord);
+
+ try {
+ engine.eval("var resource = ProxyFactory.getResource(10001);");
+ } catch (ScriptException e) {
+ //if the script fails (there is no resource with ID 10001)
+ //it should not be because of an access control exception
+ checkIsNotASecurityException(e);
+ }
+ }
+
private ScriptEngine getEngine(Subject subject) throws ScriptException, IOException {
StandardBindings bindings = new StandardBindings(new PrintWriter(System.out), new LocalClient(subject));
@@ -193,4 +206,11 @@ public class JndiAccessTest extends AbstractEJB3Test {
Assert.assertTrue(message.contains(permissionTrace), "The script exception doesn't seem to be caused by the AllowRhqServerInternalsAccessPermission security exception. " + message);
}
+
+ private static void checkIsNotASecurityException(ScriptException e) {
+ String message = e.getMessage();
+ String permissionTrace = AllowRhqServerInternalsAccessPermission.class.getName();
+
+ Assert.assertFalse(message.contains(permissionTrace), "The script exception does seem to be caused by the AllowRhqServerInternalsAccessPermission security exception although it shouldn't. " + message);
+ }
}
12 years, 3 months
[rhq] Branch 'release/jon3.0.x' - 3 commits - modules/core modules/plugins
by ips
modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/EventContext.java | 7
modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/log/LogFileEventPoller.java | 25 +
modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/log/LogFileEventResourceComponentHelper.java | 160 ++++++----
modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventContextImpl.java | 3
modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventManager.java | 7
modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemComponent.java | 46 +-
6 files changed, 162 insertions(+), 86 deletions(-)
New commits:
commit 22da9591737868d71ccc70474fe3701434ec8385
Merge: 371ed2f f808b1f
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Mon Jan 30 22:27:20 2012 -0500
Merge branch 'release/jon3.0.x' of ssh://git.fedorahosted.org/git/rhq/rhq into release/jon3.0.x
commit 371ed2faefd38ca58d514bb95793978de4a4fa46
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Mon Jan 30 22:25:35 2012 -0500
[BZ 785026] if log file event sources are enabled, but SIGAR is disabled or unavailable, log a warning, rather than
silently failing (https://bugzilla.redhat.com/show_bug.cgi?id=785026)
diff --git a/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/EventContext.java b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/EventContext.java
index f9bb654..8651272 100644
--- a/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/EventContext.java
+++ b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/EventContext.java
@@ -22,6 +22,7 @@
*/
package org.rhq.core.pluginapi.event;
+import com.sun.istack.Nullable;
import org.hyperic.sigar.SigarProxy;
import org.jetbrains.annotations.NotNull;
@@ -90,10 +91,10 @@ public interface EventContext {
/**
* Gets an instance of Sigar. Plugins that need to use Sigar, should use this method to get an instance, rather than
- * instantiating Sigar themselves.
+ * instantiating Sigar themselves. Returns null if the native layer is unavailable or has been disabled.
*
- * @return an instance of Sigar
+ * @return an instance of Sigar, or null if the native layer is unavailable or has been disabled
*/
- @NotNull
+ @Nullable
SigarProxy getSigar();
}
diff --git a/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/log/LogFileEventPoller.java b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/log/LogFileEventPoller.java
index d936522..bcc42de 100644
--- a/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/log/LogFileEventPoller.java
+++ b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/log/LogFileEventPoller.java
@@ -1,6 +1,6 @@
- /*
+/*
* RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2012 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -55,13 +55,17 @@ public class LogFileEventPoller implements EventPoller {
private LogEntryProcessor entryProcessor;
public LogFileEventPoller(EventContext eventContext, String eventType, File logFile, LogEntryProcessor entryProcessor) {
+ SigarProxy sigar = eventContext.getSigar();
this.eventType = eventType;
this.logFile = logFile;
- SigarProxy sigar = eventContext.getSigar();
- try {
- this.logFileInfo = new LogFileInfo(sigar.getFileInfo(logFile.getPath()));
- } catch (SigarException e) {
- throw new RuntimeException(e);
+ if (sigar != null) {
+ try {
+ this.logFileInfo = new LogFileInfo(sigar.getFileInfo(logFile.getPath()));
+ } catch (SigarException e) {
+ throw new RuntimeException("Failed to obtain file info for log file [" + this.logFile + "].", e);
+ }
+ } else {
+ log.warn("SIGAR is unavailable - cannot poll log file [" + this.logFile + "] for events.");
}
this.entryProcessor = entryProcessor;
}
@@ -78,12 +82,15 @@ public class LogFileEventPoller implements EventPoller {
@Nullable
public Set<Event> poll() {
+ if (this.logFileInfo == null) {
+ return null;
+ }
if (!this.logFile.exists()) {
- log.warn("Log file [" + this.logFile + "' being polled does not exist.");
+ log.warn("Log file [" + this.logFile + "] being polled does not exist.");
return null;
}
if (this.logFile.isDirectory()) {
- log.error("Log file [" + this.logFile + "' being polled is a directory, not a regular file.");
+ log.error("Log file [" + this.logFile + "] being polled is a directory, not a regular file.");
return null;
}
try {
diff --git a/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/log/LogFileEventResourceComponentHelper.java b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/log/LogFileEventResourceComponentHelper.java
index 962764a..d134638 100644
--- a/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/log/LogFileEventResourceComponentHelper.java
+++ b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/event/log/LogFileEventResourceComponentHelper.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2012 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -21,6 +21,9 @@ package org.rhq.core.pluginapi.event.log;
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
@@ -32,10 +35,12 @@ import org.rhq.core.domain.configuration.Property;
import org.rhq.core.domain.configuration.PropertyList;
import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.event.EventSeverity;
+import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.pluginapi.event.EventContext;
import org.rhq.core.pluginapi.event.EventPoller;
import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
import org.rhq.core.pluginapi.inventory.ResourceContext;
+import org.rhq.core.system.SystemInfoFactory;
/**
* @author Ian Springer
@@ -47,83 +52,132 @@ public class LogFileEventResourceComponentHelper {
public static final String LOG_EVENT_SOURCE_CONFIG_PROP = "logEventSource";
public abstract static class LogEventSourcePropertyNames {
- public static final String LOG_FILE_PATH = "logFilePath";
- public static final String ENABLED = "enabled";
- public static final String DATE_FORMAT = "dateFormat";
- public static final String INCLUDES_PATTERN = "includesPattern";
- public static final String MINIMUM_SEVERITY = "minimumSeverity";
+ public static final String LOG_FILE_PATH = "logFilePath"; // required
+ public static final String ENABLED = "enabled"; // required
+ public static final String DATE_FORMAT = "dateFormat"; // optional
+ public static final String INCLUDES_PATTERN = "includesPattern"; // optional
+ public static final String MINIMUM_SEVERITY = "minimumSeverity"; // optional
}
+ // TODO: Make this configurable via a plugin config prop.
+ private static final int POLLING_INTERVAL_IN_SECONDS = 60;
+
private final Log log = LogFactory.getLog(this.getClass());
private ResourceContext<?> resourceContext;
+ private List<PropertyMap> startedEventSources = new ArrayList<PropertyMap>();
public LogFileEventResourceComponentHelper(ResourceContext<?> resourceContext) {
this.resourceContext = resourceContext;
}
public void startLogFileEventPollers() {
+ // Grab the list-o-maps of event sources from the plugin config.
Configuration pluginConfig = this.resourceContext.getPluginConfiguration();
PropertyList logEventSources = pluginConfig.getList(LOG_EVENT_SOURCES_CONFIG_PROP);
+
+ // Build a new list containing the event sources that are enabled.
+ List<PropertyMap> enabledEventSources = new ArrayList<PropertyMap>();
for (Property prop : logEventSources.getList()) {
PropertyMap logEventSource = (PropertyMap) prop;
- Boolean enabled = Boolean.valueOf(logEventSource.getSimpleValue(LogEventSourcePropertyNames.ENABLED, null));
- if (enabled) {
- String logFilePathname = logEventSource.getSimpleValue(LogEventSourcePropertyNames.LOG_FILE_PATH, null);
- if (logFilePathname == null) {
- log.info("LOGFILE: No logfile path given, can not watch this event log.");
- return;
- }
- File logFile = new File(logFilePathname);
- if (!logFile.exists() || !logFile.canRead()) {
- log.error("LOGFILE: Logfile at location " + logFilePathname
- + " does not exist or is not readable. Can not start watching the event log.");
- return;
- }
+ String enabled = logEventSource.getSimpleValue(LogEventSourcePropertyNames.ENABLED, null);
+ if (enabled == null) {
+ throw new IllegalStateException("Required property [" + LogEventSourcePropertyNames.ENABLED
+ + "] is not defined in map.");
+ }
+ if (Boolean.valueOf(enabled)) {
+ enabledEventSources.add(logEventSource);
+ }
+ }
- Log4JLogEntryProcessor processor = new Log4JLogEntryProcessor(LOG_ENTRY_EVENT_TYPE, logFile);
- String dateFormatString = logEventSource.getSimpleValue(LogEventSourcePropertyNames.DATE_FORMAT, null);
- if (dateFormatString != null) {
- try {
- DateFormat dateFormat = new SimpleDateFormat(dateFormatString); // TODO locale specific ?
- processor.setDateFormat(dateFormat);
- } catch (IllegalArgumentException e) {
- throw new InvalidPluginConfigurationException("Date format [" + dateFormatString
- + "] is not a valid simple date format.");
- }
- }
- String includesPatternString = logEventSource.getSimpleValue(
- LogEventSourcePropertyNames.INCLUDES_PATTERN, null);
- if (includesPatternString != null) {
- try {
- Pattern includesPattern = Pattern.compile(includesPatternString);
- processor.setIncludesPattern(includesPattern);
- } catch (PatternSyntaxException e) {
- throw new InvalidPluginConfigurationException("Includes pattern [" + includesPatternString
- + "] is not a valid regular expression.");
- }
+ // Log a warning then return if SIGAR isn't available, since LogFileEventPoller depends on it. We only log this
+ // warning if at least one event source is enabled, since otherwise the user probably doesn't care.
+ boolean sigarAvailable = this.resourceContext.getSystemInformation().isNative();
+ if (!sigarAvailable && !enabledEventSources.isEmpty()) {
+ boolean nativeSystemInfoDisabled = SystemInfoFactory.isNativeSystemInfoDisabled();
+ ResourceType resourceType = this.resourceContext.getResourceType();
+ List<String> logFilePaths = getLogFilePaths(enabledEventSources);
+ log.warn("Log files " + logFilePaths + " for [" + resourceType.getPlugin() + ":"
+ + resourceType.getName() + "] Resource with key [" + this.resourceContext.getResourceKey()
+ + "] cannot be polled, because log file polling requires RHQ native support, which "
+ + ((nativeSystemInfoDisabled) ? "has been disabled for this Agent" : "is not available on this platform") + ".");
+ return;
+ }
+
+ // Start up log file pollers for each of the enabled event sources.
+ for (PropertyMap logEventSource : enabledEventSources) {
+ String logFilePath = logEventSource.getSimpleValue(LogEventSourcePropertyNames.LOG_FILE_PATH, null);
+ if (logFilePath == null) {
+ throw new IllegalStateException("Required property [" + LogEventSourcePropertyNames.LOG_FILE_PATH
+ + "] is not defined in map.");
+ }
+ File logFile = new File(logFilePath);
+ if (!logFile.canRead()) {
+ log.error("LOGFILE: Logfile at location " + logFilePath
+ + " does not exist or is not readable. Can not start watching the event log.");
+ continue;
+ }
+
+ Log4JLogEntryProcessor processor = new Log4JLogEntryProcessor(LOG_ENTRY_EVENT_TYPE, logFile);
+ String dateFormatString = logEventSource.getSimpleValue(LogEventSourcePropertyNames.DATE_FORMAT, null);
+ if (dateFormatString != null) {
+ try {
+ DateFormat dateFormat = new SimpleDateFormat(dateFormatString); // TODO locale specific ?
+ processor.setDateFormat(dateFormat);
+ } catch (IllegalArgumentException e) {
+ throw new InvalidPluginConfigurationException("Date format [" + dateFormatString
+ + "] is not a valid simple date format.");
}
- String minimumSeverityString = logEventSource.getSimpleValue(
- LogEventSourcePropertyNames.MINIMUM_SEVERITY, null);
- if (minimumSeverityString != null) {
- EventSeverity minimumSeverity = EventSeverity.valueOf(minimumSeverityString.toUpperCase());
- processor.setMinimumSeverity(minimumSeverity);
+ }
+ String includesPatternString = logEventSource.getSimpleValue(
+ LogEventSourcePropertyNames.INCLUDES_PATTERN, null);
+ if (includesPatternString != null) {
+ try {
+ Pattern includesPattern = Pattern.compile(includesPatternString);
+ processor.setIncludesPattern(includesPattern);
+ } catch (PatternSyntaxException e) {
+ throw new InvalidPluginConfigurationException("Includes pattern [" + includesPatternString
+ + "] is not a valid regular expression.");
}
- EventContext eventContext = this.resourceContext.getEventContext();
- EventPoller poller = new LogFileEventPoller(eventContext, LOG_ENTRY_EVENT_TYPE, logFile, processor);
- eventContext.registerEventPoller(poller, 60, logFile.getPath());
}
+ String minimumSeverityString = logEventSource.getSimpleValue(
+ LogEventSourcePropertyNames.MINIMUM_SEVERITY, null);
+ if (minimumSeverityString != null) {
+ EventSeverity minimumSeverity = EventSeverity.valueOf(minimumSeverityString.toUpperCase());
+ processor.setMinimumSeverity(minimumSeverity);
+ }
+ EventContext eventContext = this.resourceContext.getEventContext();
+ EventPoller poller = new LogFileEventPoller(eventContext, LOG_ENTRY_EVENT_TYPE, logFile, processor);
+ eventContext.registerEventPoller(poller, POLLING_INTERVAL_IN_SECONDS, logFile.getPath());
+ this.startedEventSources.add(logEventSource);
}
}
public void stopLogFileEventPollers() {
- Configuration pluginConfig = this.resourceContext.getPluginConfiguration();
- PropertyList logEventSources = pluginConfig.getList(LOG_EVENT_SOURCES_CONFIG_PROP);
- for (Property prop : logEventSources.getList()) {
- PropertyMap logEventSource = (PropertyMap) prop;
- String logFilePath = logEventSource.getSimpleValue(LogEventSourcePropertyNames.LOG_FILE_PATH, null);
+ boolean sigarAvailable = this.resourceContext.getSystemInformation().isNative();
+ if (!sigarAvailable) {
+ return;
+ }
+
+ for (Iterator<PropertyMap> iterator = this.startedEventSources.iterator(); iterator.hasNext(); ) {
+ PropertyMap logEventSource = iterator.next();
EventContext eventContext = this.resourceContext.getEventContext();
+ String logFilePath = logEventSource.getSimpleValue(LogEventSourcePropertyNames.LOG_FILE_PATH, null);
eventContext.unregisterEventPoller(LOG_ENTRY_EVENT_TYPE, logFilePath);
+ iterator.remove();
+ }
+ }
+
+ private List<String> getLogFilePaths(List<PropertyMap> enabledEventSources) {
+ List<String> logFilePaths = new ArrayList<String>(enabledEventSources.size());
+ for (PropertyMap logEventSource : enabledEventSources) {
+ String logFilePath = logEventSource.getSimpleValue(LogEventSourcePropertyNames.LOG_FILE_PATH, null);
+ if (logFilePath == null) {
+ throw new IllegalStateException("Required property [" + LogEventSourcePropertyNames.LOG_FILE_PATH
+ + "] is not defined in map.");
+ }
+ logFilePaths.add(logFilePath);
}
+ return logFilePaths;
}
}
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventContextImpl.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventContextImpl.java
index b0b37ec..1735aff 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventContextImpl.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventContextImpl.java
@@ -24,6 +24,7 @@ package org.rhq.core.pc.event;
import org.hyperic.sigar.SigarProxy;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.rhq.core.domain.event.Event;
import org.rhq.core.domain.event.EventDefinition;
import org.rhq.core.domain.resource.Resource;
@@ -99,7 +100,7 @@ public class EventContextImpl implements EventContext {
unregisterEventPollerInternal(eventType, sourceLocation);
}
- @NotNull
+ @Nullable
public SigarProxy getSigar() {
return getEventManager().getSigar();
}
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventManager.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventManager.java
index 4ad5c50..87b9bd7 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventManager.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventManager.java
@@ -34,6 +34,7 @@ import org.apache.commons.logging.LogFactory;
import org.hyperic.sigar.SigarProxy;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.rhq.core.domain.event.Event;
import org.rhq.core.domain.event.EventDefinition;
import org.rhq.core.domain.event.EventSource;
@@ -44,6 +45,7 @@ import org.rhq.core.pc.PluginContainerConfiguration;
import org.rhq.core.pc.util.LoggingThreadFactory;
import org.rhq.core.pluginapi.event.EventPoller;
import org.rhq.core.system.SigarAccess;
+import org.rhq.core.system.SystemInfoException;
/**
* Manager for the Plugin Container's Event subsystem.
@@ -113,9 +115,12 @@ public class EventManager implements ContainerService {
}
}
+ @Nullable
SigarProxy getSigar() {
if (this.sigar == null) {
- this.sigar = SigarAccess.getSigar();
+ if (SigarAccess.isSigarAvailable()) {
+ this.sigar = SigarAccess.getSigar();
+ }
}
return this.sigar;
}
commit 9b740863e19ec6cde4007f53c4ad76d399d12ecb
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Nov 11 10:41:00 2011 -0500
[BZ 752981] remove duplicate call to FileSystemInfo.refresh(), which was resulting in invalid metric values (https://bugzilla.redhat.com/show_bug.cgi?id=752981); use switch-case rather than if-else in getValues() to make code more readable
(cherry picked from commit 68be8c6fa8086e0c16fa706e3bad3c84b9d8b2fd)
diff --git a/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemComponent.java b/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemComponent.java
index 9d68c23..5eae991 100644
--- a/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemComponent.java
+++ b/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemComponent.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
@@ -28,7 +28,6 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.measurement.AvailabilityType;
-import org.rhq.core.domain.measurement.DataType;
import org.rhq.core.domain.measurement.MeasurementDataNumeric;
import org.rhq.core.domain.measurement.MeasurementDataTrait;
import org.rhq.core.domain.measurement.MeasurementReport;
@@ -39,12 +38,15 @@ import org.rhq.core.pluginapi.inventory.ResourceContext;
import org.rhq.core.pluginapi.measurement.MeasurementFacet;
import org.rhq.core.pluginapi.util.ObjectUtil;
import org.rhq.core.system.FileSystemInfo;
+import org.rhq.core.system.SystemInfo;
-/**
+ /**
* @author Greg Hinkle
*/
public class FileSystemComponent implements ResourceComponent<PlatformComponent>, MeasurementFacet {
+
private static final Log LOG = LogFactory.getLog(FileSystemComponent.class);
+
private ResourceContext<PlatformComponent> resourceContext;
public void start(ResourceContext<PlatformComponent> resourceContext) throws InvalidPluginConfigurationException,
@@ -65,26 +67,32 @@ public class FileSystemComponent implements ResourceComponent<PlatformComponent>
}
}
- private FileSystemInfo getFileSystemInfo() {
- return resourceContext.getSystemInformation().getFileSystem(resourceContext.getResourceKey());
- }
-
- public void getValues(MeasurementReport report, Set<MeasurementScheduleRequest> metrics) throws Exception {
+ public void getValues(MeasurementReport report, Set<MeasurementScheduleRequest> requests) throws Exception {
FileSystemInfo fileSystemInfo = getFileSystemInfo();
- fileSystemInfo.refresh();
- for (MeasurementScheduleRequest request : metrics) {
+ for (MeasurementScheduleRequest request : requests) {
try {
- if (request.getDataType() == DataType.TRAIT) {
- Object value = ObjectUtil.lookupDeepAttributeProperty(fileSystemInfo, request.getName());
- report.addData(new MeasurementDataTrait(request, String.valueOf(value)));
- } else if (request.getDataType() == DataType.MEASUREMENT) {
- report.addData(new MeasurementDataNumeric(request, ObjectUtil.lookupDeepNumericAttributeProperty(
- fileSystemInfo, request.getName())));
+ switch (request.getDataType()) {
+ case TRAIT:
+ Object object = ObjectUtil.lookupDeepAttributeProperty(fileSystemInfo, request.getName());
+ report.addData(new MeasurementDataTrait(request, String.valueOf(object)));
+ break;
+ case MEASUREMENT:
+ Double value = ObjectUtil.lookupDeepNumericAttributeProperty(fileSystemInfo, request.getName());
+ report.addData(new MeasurementDataNumeric(request, value));
+ break;
+ default:
+ throw new IllegalStateException("Unsupported metric type: " + request.getDataType());
}
} catch (Exception e) {
- LOG.info("Unable to collection file system metric [" + request.getName() + "] on resource "
- + this.resourceContext.getResourceKey(), e);
+ LOG.info("Unable to collect metric [" + request.getName() + "] on filesystem resource ["
+ + this.resourceContext.getResourceKey() + "].", e);
}
}
}
+
+ private FileSystemInfo getFileSystemInfo() {
+ SystemInfo systemInfo = resourceContext.getSystemInformation();
+ return systemInfo.getFileSystem(resourceContext.getResourceKey());
+ }
+
}
\ No newline at end of file
12 years, 3 months
[rhq] Branch 'release/jon3.0.x' - modules/enterprise
by Simeon Pinder
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java | 388 +++++-----
1 file changed, 213 insertions(+), 175 deletions(-)
New commits:
commit f808b1f8c4837661862825538dd497afc1b671be
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Thu Jan 26 17:37:21 2012 -0500
BZ[784873] fixing issue displaying LDAP registration screen with clean browser cache.
i)Can't count on CoreGUI to be loaded in this case as the user may not have logged in before.
ii)Some refactoring to embed asynchronous call.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
index 74d11e3..50c87a4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
@@ -103,6 +103,7 @@ public class LoginView extends LocatableCanvas {
private static final String DEPARTMENT = "department";
private static final String SESSIONID = "ldap.sessionid";
static final String PASSWORD = "ldap.password";
+ private ProductInfo productInfo;
public void showLoginDialog(String message) {
showLoginDialog();
@@ -206,195 +207,232 @@ public class LoginView extends LocatableCanvas {
if (!loginShowing) {
loginShowing = true;
- ProductInfo productInfo = CoreGUI.get().getProductInfo();
-
- int fieldWidth = 120;
-
- LocatableVLayout column = new LocatableVLayout(extendLocatorId("NewLdapRegistration"));
- column.setMargin(25);
- HeaderItem header = new HeaderItem();
- header.setValue(MSG.view_login_welcomeMsg(productInfo.getName()));
- header.setWidth("100%");
- //build ui elements for registration screen
- first = new TextItem(FIRST, MSG.dataSource_users_field_firstName());
- {
- first.setRequired(true);
- first.setWrapTitle(false);
- first.setWidth(fieldWidth);
- }
- last = new TextItem(LAST, MSG.dataSource_users_field_lastName());
- {
- last.setWrapTitle(false);
- last.setWidth(fieldWidth);
- last.setRequired(true);
- }
- final TextItem username = new TextItem(USERNAME, MSG.dataSource_users_field_name());
- {
- username.setValue(user);
- username.setDisabled(true);
- username.setWidth(fieldWidth);
- }
- email = new TextItem(EMAIL, MSG.dataSource_users_field_emailAddress());
- email.setRequired(true);
- email.setWidth(fieldWidth);
- email.setWrapTitle(false);
- phone = new TextItem(PHONE, MSG.dataSource_users_field_phoneNumber());
- phone.setWidth(fieldWidth);
- phone.setWrapTitle(false);
- department = new TextItem(DEPARTMENT, MSG.dataSource_users_field_department());
- department.setWidth(fieldWidth);
- SpacerItem space = new SpacerItem();
- space.setColSpan(1);
-
- inputForm = new LocatableDynamicForm(extendLocatorId("LdapUserRegistrationInput"));
- inputForm.setAutoFocus(true);
- inputForm.setErrorOrientation(FormErrorOrientation.LEFT);
- inputForm.setNumCols(4);
- //moving header to it's own container for proper display. Didn't display right in production mode
- inputForm.setFields(username, first, last, email, phone, department);
- loadValidators(inputForm);
- inputForm.setValidateOnExit(true);
- DynamicForm headerWrapper = new DynamicForm();
- headerWrapper.setFields(header);
- column.addMember(headerWrapper);
- column.addMember(inputForm);
-
- HTMLFlow hr = new HTMLFlow("<br/><hr/><br/><br/>");
- hr.setWidth(620);
- hr.setAlign(Alignment.CENTER);
- column.addMember(hr);
-
- HStack row = new HStack();
- row.setMembersMargin(5);
- row.setAlign(VerticalAlignment.CENTER);
- IButton okButton = new LocatableIButton(inputForm.extendLocatorId("OK"), MSG.common_button_ok());
- okButton.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent event) {
-
- //F5 refresh check? If they've reloaded the form for some reason then bail.
- boolean credentialsEmpty = ((user == null) || (user.trim().isEmpty()) || (password == null) || (password
- .trim().isEmpty()));
- //check for session timeout
- if (UserSessionManager.isLoggedOut() || (credentialsEmpty)) {
- resetLogin(LoginView.this.extendLocatorId("Register"));
- return;
+ //BZ:784873. To fix issue with users logging in by LDAP integration with clean browser cache.
+ if (CoreGUI.get().getProductInfo() == null) {
+ //We need to explicitly retrieve product info here as can't count on CoreGui to load it
+ //during LDAP registration. After registration CoreGui is loaded as usual.
+ GWTServiceLookup.getSystemService().getProductInfo(new AsyncCallback<ProductInfo>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(MSG.view_aboutBox_failedToLoad(), caught);
+ productInfo = null;
+ Log.trace("ProductInfo could not be retrieved for some reason. Proceeding anyway.");
+ buildRegistrationWindow(user, sessionId, password, callback);
}
- //validation
- if (inputForm.validate()) {
- Log.trace("Successfully validated all data for user registration.");
- //populate form
- if (first.getValue() != null)
- inputForm.setValue(FIRST, String.valueOf(first.getValue()));
- if (last.getValue() != null)
- inputForm.setValue(LAST, String.valueOf(last.getValue()));
- inputForm.setValue(USERNAME, String.valueOf(username.getValue()));
- if (email.getValue() != null)
- inputForm.setValue(EMAIL, String.valueOf(email.getValue()));
- if (phone.getValue() != null)
- inputForm.setValue(PHONE, String.valueOf(phone.getValue()));
- if (department.getValue() != null)
- inputForm.setValue(DEPARTMENT, String.valueOf(department.getValue()));
- inputForm.setValue(SESSIONID, sessionId);
- inputForm.setValue(PASSWORD, password);
- registerLdapUser(LoginView.this.extendLocatorId("RegisterLdap"), inputForm, callback);
+ public void onSuccess(ProductInfo result) {
+ productInfo = result;
+ Log.trace("ProductInfo has been retrieved for LDAP registration.");
+ buildRegistrationWindow(user, sessionId, password, callback);
}
- }
+ });
+ } else {//if productInfo has already been loaded, save a gwt call.
+ productInfo = CoreGUI.get().getProductInfo();
+ buildRegistrationWindow(user, sessionId, password, callback);
+ }
+ }
+ }
- });
- row.addMember(okButton);
- //send request to LDAP server to grab user details for this user. Already sure ldap user exists
- GWTServiceLookup.getLdapService().getLdapDetailsFor(user, new AsyncCallback<Map<String, String>>() {
- public void onSuccess(final Map<String, String> ldapUserDetails) {
- //now prepopulate UI fields if they exist
- for (String key : ldapUserDetails.keySet()) {
- String value;
- if (key.equalsIgnoreCase("givenName")) {//aka first name
- value = ldapUserDetails.get(key);
- first.setValue(value);
- } else if (key.equalsIgnoreCase("sn")) {//aka Surname
- value = ldapUserDetails.get(key);
- if ((value != null) && (!value.isEmpty())) {
- last.setValue(value);
- }
- } else if (key.equalsIgnoreCase("telephoneNumber")) {
- value = ldapUserDetails.get(key);
- if ((value != null) && (!value.isEmpty())) {
- phone.setValue(value);
- }
- } else if (key.equalsIgnoreCase("mail")) {
- value = ldapUserDetails.get(key);
- if ((value != null) && (!value.isEmpty())) {
- email.setValue(value);
- }
- }
- }
+ /** Duplicate modal Login mechanism to now show last registration screen before launching
+ * core gui.
+ *
+ * @param user prepopulate username field for LDAP registration
+ * @param sessionId pass in valid session id for LDAP registration steps.
+ * @param callback pass in callback reference to indicate success and launch of coreGUI
+ */
+ private void buildRegistrationWindow(final String user, final String sessionId, final String password,
+ final AsyncCallback<Subject> callback) {
+ int fieldWidth = 120;
+
+ //Build registration window.
+ LocatableVLayout column = new LocatableVLayout(extendLocatorId("NewLdapRegistration"));
+ column.setMargin(25);
+ HeaderItem header = new HeaderItem();
+ //Locate product info for registration screen.
+ if (productInfo != null) {
+ header.setValue(MSG.view_login_welcomeMsg(productInfo.getName()));
+ } else {//if not available, let registration continue. Errors already logged and no functionality lost.
+ header.setValue(MSG.view_login_welcomeMsg(""));
+ }
+ header.setWidth("100%");
+ //build ui elements for registration screen
+ first = new TextItem(FIRST, MSG.dataSource_users_field_firstName());
+ {
+ first.setRequired(true);
+ first.setWrapTitle(false);
+ first.setWidth(fieldWidth);
+ }
+ last = new TextItem(LAST, MSG.dataSource_users_field_lastName());
+ {
+ last.setWrapTitle(false);
+ last.setWidth(fieldWidth);
+ last.setRequired(true);
+ }
+ final TextItem username = new TextItem(USERNAME, MSG.dataSource_users_field_name());
+ {
+ username.setValue(user);
+ username.setDisabled(true);
+ username.setWidth(fieldWidth);
+ }
+ email = new TextItem(EMAIL, MSG.dataSource_users_field_emailAddress());
+ email.setRequired(true);
+ email.setWidth(fieldWidth);
+ email.setWrapTitle(false);
+ phone = new TextItem(PHONE, MSG.dataSource_users_field_phoneNumber());
+ phone.setWidth(fieldWidth);
+ phone.setWrapTitle(false);
+ department = new TextItem(DEPARTMENT, MSG.dataSource_users_field_department());
+ department.setWidth(fieldWidth);
+ SpacerItem space = new SpacerItem();
+ space.setColSpan(1);
+
+ inputForm = new LocatableDynamicForm(extendLocatorId("LdapUserRegistrationInput"));
+ inputForm.setAutoFocus(true);
+ inputForm.setErrorOrientation(FormErrorOrientation.LEFT);
+ inputForm.setNumCols(4);
+ //moving header to it's own container for proper display. Didn't display right in production mode
+ inputForm.setFields(username, first, last, email, phone, department);
+ loadValidators(inputForm);
+ inputForm.setValidateOnExit(true);
+ DynamicForm headerWrapper = new DynamicForm();
+ headerWrapper.setFields(header);
+ column.addMember(headerWrapper);
+ column.addMember(inputForm);
+
+ HTMLFlow hr = new HTMLFlow("<br/><hr/><br/><br/>");
+ hr.setWidth(620);
+ hr.setAlign(Alignment.CENTER);
+ column.addMember(hr);
+
+ HStack row = new HStack();
+ row.setMembersMargin(5);
+ row.setAlign(VerticalAlignment.CENTER);
+ IButton okButton = new LocatableIButton(inputForm.extendLocatorId("OK"), MSG.common_button_ok());
+ okButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent event) {
+
+ //F5 refresh check? If they've reloaded the form for some reason then bail.
+ boolean credentialsEmpty = ((user == null) || (user.trim().isEmpty()) || (password == null) || (password
+ .trim().isEmpty()));
+ //check for session timeout
+ if (UserSessionManager.isLoggedOut() || (credentialsEmpty)) {
+ resetLogin(LoginView.this.extendLocatorId("Register"));
+ return;
}
- public void onFailure(Throwable caught) {
- inputForm.setFieldErrors(FIRST, MSG.view_login_noLdap(), true);
- Log.debug("Optional LDAP detail retrieval did not succeed. Registration prepopulation will not occur.");
+ //validation
+ if (inputForm.validate()) {
+ Log.trace("Successfully validated all data for user registration.");
+ //populate form
+ if (first.getValue() != null)
+ inputForm.setValue(FIRST, String.valueOf(first.getValue()));
+ if (last.getValue() != null)
+ inputForm.setValue(LAST, String.valueOf(last.getValue()));
+ inputForm.setValue(USERNAME, String.valueOf(username.getValue()));
+ if (email.getValue() != null)
+ inputForm.setValue(EMAIL, String.valueOf(email.getValue()));
+ if (phone.getValue() != null)
+ inputForm.setValue(PHONE, String.valueOf(phone.getValue()));
+ if (department.getValue() != null)
+ inputForm.setValue(DEPARTMENT, String.valueOf(department.getValue()));
+ inputForm.setValue(SESSIONID, sessionId);
+ inputForm.setValue(PASSWORD, password);
+ registerLdapUser(LoginView.this.extendLocatorId("RegisterLdap"), inputForm, callback);
}
- });
-
- IButton resetButton = new LocatableIButton(inputForm.extendLocatorId("Reset"), MSG.common_button_reset());
- resetButton.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent event) {
- //F5 refresh check? If they've reloaded the form for some reason then bail.
- boolean credentialsEmpty = ((user == null) || (user.trim().isEmpty()) || (password == null) || (password
- .trim().isEmpty()));
- if (UserSessionManager.isLoggedOut() || credentialsEmpty) {
- resetLogin(LoginView.this.extendLocatorId("Reset"));
- return;
- }
+ }
- //clear out all validation messages.
- {
- String empty = " ";
- first.setValue(empty);
- last.setValue(empty);
- email.setValue("test(a)test.com");
- inputForm.validate();
+ });
+ row.addMember(okButton);
+ //send request to LDAP server to grab user details for this user. Already sure ldap user exists
+ GWTServiceLookup.getLdapService().getLdapDetailsFor(user, new AsyncCallback<Map<String, String>>() {
+ public void onSuccess(final Map<String, String> ldapUserDetails) {
+ //now prepopulate UI fields if they exist
+ for (String key : ldapUserDetails.keySet()) {
+ String value;
+ if (key.equalsIgnoreCase("givenName")) {//aka first name
+ value = ldapUserDetails.get(key);
+ first.setValue(value);
+ } else if (key.equalsIgnoreCase("sn")) {//aka Surname
+ value = ldapUserDetails.get(key);
+ if ((value != null) && (!value.isEmpty())) {
+ last.setValue(value);
+ }
+ } else if (key.equalsIgnoreCase("telephoneNumber")) {
+ value = ldapUserDetails.get(key);
+ if ((value != null) && (!value.isEmpty())) {
+ phone.setValue(value);
+ }
+ } else if (key.equalsIgnoreCase("mail")) {
+ value = ldapUserDetails.get(key);
+ if ((value != null) && (!value.isEmpty())) {
+ email.setValue(value);
+ }
}
- first.clearValue();
- last.clearValue();
- email.clearValue();
- phone.clearValue();
- department.clearValue();
}
- });
- row.addMember(resetButton);
+ }
- IButton cancelButton = new LocatableIButton(inputForm.extendLocatorId("Cancel"), MSG.common_button_cancel());
- cancelButton.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent event) {
- UserSessionManager.logout();
+ public void onFailure(Throwable caught) {
+ inputForm.setFieldErrors(FIRST, MSG.view_login_noLdap(), true);
+ Log.debug("Optional LDAP detail retrieval did not succeed. Registration prepopulation will not occur.");
+ }
+ });
+
+ IButton resetButton = new LocatableIButton(inputForm.extendLocatorId("Reset"), MSG.common_button_reset());
+ resetButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent event) {
+ //F5 refresh check? If they've reloaded the form for some reason then bail.
+ boolean credentialsEmpty = ((user == null) || (user.trim().isEmpty()) || (password == null) || (password
+ .trim().isEmpty()));
+ if (UserSessionManager.isLoggedOut() || credentialsEmpty) {
resetLogin(LoginView.this.extendLocatorId("Reset"));
+ return;
}
- });
- row.addMember(cancelButton);
- Label logoutLabel = new Label(MSG.view_login_registerLater());
- logoutLabel.setWrap(false);
- row.addMember(logoutLabel);
- column.addMember(row);
-
- window = new LocatableWindow(extendLocatorId("RegistrationWindow"));
- window.setWidth(670);
- window.setHeight(330);
- window.setTitle(MSG.view_login_registerUser());
- // forced focused, static size, can't close / dismiss
- window.setIsModal(true);
- window.setShowModalMask(true);
- window.setCanDragResize(false);
- window.setCanDragReposition(false);
- window.setShowCloseButton(false);
- window.setShowMinimizeButton(false);
- window.setAutoCenter(true);
-
- window.addItem(column);
- window.show();
- }
+ //clear out all validation messages.
+ {
+ String empty = " ";
+ first.setValue(empty);
+ last.setValue(empty);
+ email.setValue("test(a)test.com");
+ inputForm.validate();
+ }
+ first.clearValue();
+ last.clearValue();
+ email.clearValue();
+ phone.clearValue();
+ department.clearValue();
+ }
+ });
+ row.addMember(resetButton);
+
+ IButton cancelButton = new LocatableIButton(inputForm.extendLocatorId("Cancel"), MSG.common_button_cancel());
+ cancelButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent event) {
+ UserSessionManager.logout();
+ resetLogin(LoginView.this.extendLocatorId("Reset"));
+ }
+ });
+ row.addMember(cancelButton);
+ Label logoutLabel = new Label(MSG.view_login_registerLater());
+ logoutLabel.setWrap(false);
+ row.addMember(logoutLabel);
+ column.addMember(row);
+
+ window = new LocatableWindow(extendLocatorId("RegistrationWindow"));
+ window.setWidth(670);
+ window.setHeight(330);
+ window.setTitle(MSG.view_login_registerUser());
+
+ // forced focused, static size, can't close / dismiss
+ window.setIsModal(true);
+ window.setShowModalMask(true);
+ window.setCanDragResize(false);
+ window.setCanDragReposition(false);
+ window.setShowCloseButton(false);
+ window.setShowMinimizeButton(false);
+ window.setAutoCenter(true);
+
+ window.addItem(column);
+ window.show();
}
/** Go through steps of invalidating this login and piping them back to CoreGUI Login.
12 years, 3 months
[rhq] Branch 'release/jon3.0.x' - 2 commits - modules/enterprise
by Larry O'Leary
modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java | 4 +++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java | 2 +-
2 files changed, 4 insertions(+), 2 deletions(-)
New commits:
commit a4602636483a6c8a3093dd16e16c97498286bba9
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Dec 20 17:28:21 2011 -0500
[BZ 766574] for some reason, the remote interface was removed from the discovery SLSB. put it back.
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 fcb2f9e..2ea6234 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
@@ -99,7 +99,7 @@ import org.rhq.enterprise.server.util.LookupUtil;
* @author Greg Hinkle
*/
@Stateless
-public class DiscoveryBossBean implements DiscoveryBossLocal {
+public class DiscoveryBossBean implements DiscoveryBossLocal, DiscoveryBossRemote {
private final Log log = LogFactory.getLog(DiscoveryBossBean.class.getName());
commit 99ff4f9c796c171b74c3e09b404a2c397607a698
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Dec 20 14:40:53 2011 -0500
[BZ 766574] fix NPE if there is no availability yet
diff --git a/modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java b/modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java
index 382ce8c..1623039 100644
--- a/modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java
+++ b/modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java
@@ -44,6 +44,7 @@ import org.rhq.core.domain.configuration.Property;
import org.rhq.core.domain.configuration.PropertyList;
import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.measurement.ResourceAvailability;
import org.rhq.core.domain.resource.ResourceType;
@@ -671,7 +672,8 @@ public class TabularWriter {
} else if (object instanceof ResourceType) {
return ((ResourceType) object).getName();
} else if (object instanceof ResourceAvailability) {
- return ((ResourceAvailability) object).getAvailabilityType().getName();
+ AvailabilityType availType = ((ResourceAvailability) object).getAvailabilityType();
+ return (availType == null) ? "?" : availType.getName();
} else if (object != null && object.getClass().isArray()) {
return Arrays.toString((Object[]) object);
} else {
12 years, 3 months
[rhq] Branch 'hotfix/jon3.0.0' - 2 commits - modules/enterprise
by Larry O'Leary
modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java | 4 +++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java | 2 +-
2 files changed, 4 insertions(+), 2 deletions(-)
New commits:
commit cd00e463ea77f2f36c34f7fe6c389eb1478a1623
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Dec 20 17:28:21 2011 -0500
[BZ 766574] for some reason, the remote interface was removed from the discovery SLSB. put it back.
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 fcb2f9e..2ea6234 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
@@ -99,7 +99,7 @@ import org.rhq.enterprise.server.util.LookupUtil;
* @author Greg Hinkle
*/
@Stateless
-public class DiscoveryBossBean implements DiscoveryBossLocal {
+public class DiscoveryBossBean implements DiscoveryBossLocal, DiscoveryBossRemote {
private final Log log = LogFactory.getLog(DiscoveryBossBean.class.getName());
commit f5dbeaf1230cbc49efbc30c51367323aec1a6a43
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Dec 20 14:40:53 2011 -0500
[BZ 766574] fix NPE if there is no availability yet
diff --git a/modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java b/modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java
index 382ce8c..1623039 100644
--- a/modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java
+++ b/modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java
@@ -44,6 +44,7 @@ import org.rhq.core.domain.configuration.Property;
import org.rhq.core.domain.configuration.PropertyList;
import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.measurement.ResourceAvailability;
import org.rhq.core.domain.resource.ResourceType;
@@ -671,7 +672,8 @@ public class TabularWriter {
} else if (object instanceof ResourceType) {
return ((ResourceType) object).getName();
} else if (object instanceof ResourceAvailability) {
- return ((ResourceAvailability) object).getAvailabilityType().getName();
+ AvailabilityType availType = ((ResourceAvailability) object).getAvailabilityType();
+ return (availType == null) ? "?" : availType.getName();
} else if (object != null && object.getClass().isArray()) {
return Arrays.toString((Object[]) object);
} else {
12 years, 3 months
[rhq] modules/plugins
by Heiko W. Rupp
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java | 25 ++++++++--
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASUploadConnection.java | 2
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/json/Result.java | 6 +-
3 files changed, 27 insertions(+), 6 deletions(-)
New commits:
commit fda3d0ac47f1eb68f6ef9d2d4f60df21262a1500
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Mon Jan 30 22:27:51 2012 +0100
Set timeouts for connecting and reading of data.
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java
index 9651be2..6205576 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java
@@ -26,6 +26,7 @@ import java.io.OutputStream;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
+import java.net.SocketTimeoutException;
import java.net.URL;
import org.apache.commons.logging.Log;
@@ -108,12 +109,17 @@ public class ASConnection {
conn.setRequestMethod("POST");
conn.addRequestProperty("Content-Type", "application/json");
conn.addRequestProperty("Accept","application/json");
+ conn.setConnectTimeout(10 * 1000); // 10s
+ conn.setReadTimeout(10 * 1000); // 10s
+
+ if (conn.getReadTimeout()!=10*1000)
+ log.warn("JRE uses a broken timeout mechanism - nothing we can do");
OutputStream out = conn.getOutputStream();
- String result = mapper.writeValueAsString(operation);
+ String json_to_send = mapper.writeValueAsString(operation);
if (verbose) {
- log.info("Json to send: " + result);
+ log.info("Json to send: " + json_to_send);
}
mapper.writeValue(out, operation);
@@ -158,6 +164,19 @@ public class ASConnection {
} else {
log.error("IS was null and code was " + responseCode);
}
+ } catch (IllegalArgumentException iae) {
+ log.error("Illegal argument " + iae);
+ log.error(" for input " + operation);
+ } catch (SocketTimeoutException ste) {
+ log.error("Request to AS timed out " + ste.getMessage());
+ conn.disconnect();
+ Result failure = new Result();
+ failure.setFailureDescription(ste.getMessage());
+ failure.setOutcome("failure");
+// failure.setThrowable(ste); TODO
+
+ JsonNode ret = mapper.valueToTree(failure);
+ return ret;
} catch (IOException e) {
log.error("Failed to get data: " + e.getMessage());
@@ -182,7 +201,7 @@ public class ASConnection {
Result failure = new Result();
failure.setFailureDescription(e.getMessage());
failure.setOutcome("failure");
- failure.setThrowable(e);
+// failure.setThrowable(e); TODO
JsonNode ret = mapper.valueToTree(failure);
return ret;
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASUploadConnection.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASUploadConnection.java
index ff5aa94..90316a4 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASUploadConnection.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASUploadConnection.java
@@ -82,6 +82,8 @@ public class ASUploadConnection {
// Create the HTTP connection to the upload URL
String url = "http://" + host + ":" + port + UPLOAD_URL_PATH;
connection = (HttpURLConnection) new URL(url).openConnection();
+ connection.setConnectTimeout(10 * 1000); // 10s
+ connection.setReadTimeout(60 * 1000); // 60s
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod(POST_REQUEST_METHOD);
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/json/Result.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/json/Result.java
index 42ffee7..8f6cfa0 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/json/Result.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/json/Result.java
@@ -43,7 +43,7 @@ public class Result {
/** Record throwsables during low level processing */
@JsonIgnore
- private Throwable throwable;
+ private Map<String,Object> throwable;
public Object getResponseHeaders() {
return responseHeaders;
@@ -98,11 +98,11 @@ public class Result {
this.rolledBack = rolledBack;
}
- public Throwable getThrowable() {
+ public Map<String, Object> getThrowable() {
return throwable;
}
- public void setThrowable(Throwable throwable) {
+ public void setThrowable(Map<String,Object> throwable) {
this.throwable = throwable;
}
12 years, 3 months
[rhq] Branch 'release/jon3.0.x' - modules/enterprise
by mazz
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDefinitionDataSource.java | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
New commits:
commit ceb7b6e337116f4b5af430f43c83884ad15988e1
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Dec 13 13:46:12 2011 -0500
[BZ 767263] don't assume there is always a template
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDefinitionDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDefinitionDataSource.java
index b29e9a6..bece740 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDefinitionDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDefinitionDataSource.java
@@ -198,6 +198,9 @@ public class DriftDefinitionDataSource extends RPCDataSource<DriftDefinitionComp
templateField.setCellFormatter(new CellFormatter() {
public String format(Object o, ListGridRecord listGridRecord, int i, int i1) {
DriftDefinition def = (DriftDefinition) listGridRecord.getAttributeAsObject(ATTR_ENTITY);
+ if (null == def.getTemplate()) {
+ return MSG.common_val_none();
+ }
if (null != globalPermissions && globalPermissions.contains(Permission.MANAGE_SETTINGS)) {
int typeId = def.getResource().getResourceType().getId();
int templateId = def.getTemplate().getId();
@@ -422,7 +425,11 @@ public class DriftDefinitionDataSource extends RPCDataSource<DriftDefinitionComp
record.setAttribute(ATTR_IS_PINNED, def.isPinned() ? ImageManager.getPinnedIcon() : ImageManager
.getUnpinnedIcon());
record.setAttribute(ATTR_ATTACHED, def.isAttached() ? MSG.common_val_yes() : MSG.common_val_no());
- record.setAttribute(ATTR_TEMPLATE, def.getTemplate().getName());
+ if (def.getTemplate() != null) {
+ record.setAttribute(ATTR_TEMPLATE, def.getTemplate().getName());
+ } else {
+ record.setAttribute(ATTR_TEMPLATE, MSG.common_val_none());
+ }
record.setAttribute(ATTR_CHANGE_SET_VERSION, (null != changeSet) ? String.valueOf(changeSet.getVersion()) : MSG
.common_label_none());
12 years, 3 months