modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBean.java
| 9 +++++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
| 14 +++++++++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
| 4 ++
3 files changed, 24 insertions(+), 3 deletions(-)
New commits:
commit ade3c186a801dc897f0d2e9fd648d1d9c245b0dd
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Wed Nov 27 17:02:56 2013 +0100
[BZ 1035280] - Cannot load metrics for platform resource created using rest api -
adding a check whether the agent is the dummy one for
MeasurementDataManagerBean.findLiveData() and ResourceManagerBean.getLiveAvailability().
(cherry picked from commit 94e2c04316352993550b4837bd27aadacfffdbb2)
Conflicts:
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBean.java
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBean.java
index ee679f1..d1aa970 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBean.java
@@ -92,11 +92,12 @@ import
org.rhq.enterprise.server.alert.engine.AlertConditionCacheStats;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
import org.rhq.enterprise.server.authz.PermissionException;
-import org.rhq.enterprise.server.storage.StorageClientManagerBean;
import org.rhq.enterprise.server.core.AgentManagerLocal;
import org.rhq.enterprise.server.measurement.instrumentation.MeasurementMonitor;
import org.rhq.enterprise.server.measurement.util.MeasurementDataManagerUtility;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
+import org.rhq.enterprise.server.rest.ResourceHandlerBean;
+import org.rhq.enterprise.server.storage.StorageClientManagerBean;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
import org.rhq.server.metrics.MetricsServer;
@@ -869,6 +870,12 @@ public class MeasurementDataManagerBean implements
MeasurementDataManagerLocal,
Query query = entityManager.createNamedQuery(Agent.QUERY_FIND_BY_RESOURCE_ID);
query.setParameter("resourceId", resourceId);
Agent agent = (Agent) query.getSingleResult();
+
+ // return empty data if the agent is the dummy one
+ if (agent.getName().startsWith(ResourceHandlerBean.DUMMY_AGENT_NAME_PREFIX)
+ &&
agent.getAgentToken().startsWith(ResourceHandlerBean.DUMMY_AGENT_TOKEN_PREFIX)) {
+ return Collections.<MeasurementData> emptySet();
+ }
query =
entityManager.createNamedQuery(MeasurementSchedule.FIND_BY_RESOURCE_IDS_AND_DEFINITION_IDS);
query.setParameter("definitionIds",
ArrayUtils.wrapInList(definitionIds));
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
index a58bd3c..8a78995 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
@@ -81,6 +81,7 @@ import org.rhq.core.domain.event.EventSource;
import org.rhq.core.domain.measurement.Availability;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.measurement.MeasurementBaseline;
+import org.rhq.core.domain.measurement.MeasurementData;
import org.rhq.core.domain.measurement.MeasurementDataTrait;
import org.rhq.core.domain.measurement.MeasurementOOB;
import org.rhq.core.domain.measurement.MeasurementSchedule;
@@ -2451,7 +2452,18 @@ public class ResourceManagerBean implements ResourceManagerLocal,
ResourceManage
try {
// first, quickly see if we can even ping the agent, if not, don't bother
trying to get the resource avail
- AgentClient client =
agentManager.getAgentClient(subjectManager.getOverlord(), resourceId);
+ Agent agent = agentManager.getAgentByResourceId(subject, resourceId);
+ if (agent == null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Resource [" + resourceId + "] does not
exist or has no agent assigned");
+ }
+ new IllegalStateException("No agent is associated with the resource
with id [" + resourceId + "]");
+ } else if
(agent.getName().startsWith(ResourceHandlerBean.DUMMY_AGENT_NAME_PREFIX)
+ &&
agent.getAgentToken().startsWith(ResourceHandlerBean.DUMMY_AGENT_TOKEN_PREFIX)) {
+ // dummy agent created from REST
+ return getResourceById(subject, resourceId).getCurrentAvailability();
+ }
+ AgentClient client = agentManager.getAgentClient(agent);
if (client == null) {
throw new IllegalStateException("No agent is associated with the
resource with id [" + resourceId + "]");
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
index 3480f3b..9cdcddd 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
@@ -127,6 +127,7 @@ public class ResourceHandlerBean extends AbstractRestBean {
// Name prefix for synthetic/dummy agents created with the rest api. See
#createPlatformInternal
public static final String DUMMY_AGENT_NAME_PREFIX = "dummy-agent:name";
+ public static final String DUMMY_AGENT_TOKEN_PREFIX = "abc-";
@EJB
AvailabilityManagerLocal availMgr;
@@ -670,7 +671,8 @@ public class ResourceHandlerBean extends AbstractRestBean {
// Create a dummy agent per platform - otherwise we can't delete the platform
later
// See also
https://docs.jboss.org/author/display/RHQ/Virtual+platforms+and+synthetic...
Agent agent ;
- agent = new Agent(DUMMY_AGENT_NAME_PREFIX
+name,"-dummy-p:"+name,12345,"http://foo.com/p:name/"+name,"abc-"+name);
+ agent = new Agent(DUMMY_AGENT_NAME_PREFIX + name, "-dummy-p:" + name,
12345, "http://foo.com/p:name/" + name,
+ DUMMY_AGENT_TOKEN_PREFIX + name);
agentMgr.createAgent(agent);
Resource platform = new Resource(resourceKey,name,type);