Mirror summary for BrooklynEntityMirror Also extract the catalogItemId in a separate attribute for easier access.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/644d6cd0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/644d6cd0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/644d6cd0 Branch: refs/heads/master Commit: 644d6cd0244d02c5d8ee6ae7c5cc53398067ead7 Parents: d0cbcf3 Author: Svetoslav Neykov <[email protected]> Authored: Tue May 12 16:03:51 2015 +0300 Committer: Svetoslav Neykov <[email protected]> Committed: Tue May 19 23:22:59 2015 +0300 ---------------------------------------------------------------------- .../entity/brooklynnode/BrooklynEntityMirror.java | 7 +++++++ .../brooklynnode/BrooklynEntityMirrorImpl.java | 18 ++++++++++++++---- .../BrooklynEntityMirrorIntegrationTest.java | 8 ++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/644d6cd0/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirror.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirror.java b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirror.java index 6cd8709..b19c9dc 100644 --- a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirror.java +++ b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirror.java @@ -18,6 +18,8 @@ */ package brooklyn.entity.brooklynnode; +import java.util.Map; + import brooklyn.catalog.Catalog; import brooklyn.config.ConfigKey; import brooklyn.entity.Entity; @@ -54,6 +56,11 @@ public interface BrooklynEntityMirror extends Entity { "Frequency to poll for client sensors", Duration.FIVE_SECONDS); public static final AttributeSensor<String> MIRROR_STATUS = Sensors.newStringSensor("brooklyn.mirror.monitoring_status"); + @SuppressWarnings("rawtypes") + public static final AttributeSensor<Map> MIRROR_SUMMARY = Sensors.newSensor(Map.class, "brooklyn.mirror.summary", + "The json map returned by the entity rest endpoint (ie the EntitySummary model)"); + public static final AttributeSensor<String> MIRROR_CATALOG_ITEM_ID = Sensors.newStringSensor("brooklyn.mirror.catalog_item_id", + "The catalog item id of the mirrored entity in the remote brooklyn"); public EntityHttpClient http(); http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/644d6cd0/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java index 80b19f5..48ed3a8 100644 --- a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java +++ b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java @@ -51,6 +51,16 @@ import com.google.common.net.MediaType; import com.google.gson.Gson; public class BrooklynEntityMirrorImpl extends AbstractEntity implements BrooklynEntityMirror { + @SuppressWarnings("rawtypes") + private class MirrorSummary implements Function<HttpToolResponse, Map> { + @Override + public Map apply(HttpToolResponse input) { + Map<?, ?> entitySummary = new Gson().fromJson(input.getContentAsString(), Map.class); + String catalogItemId = (String)entitySummary.get("catalogItemId"); + setAttribute(MIRROR_CATALOG_ITEM_ID, catalogItemId); + return entitySummary; + } + } private HttpFeed mirror; @@ -108,14 +118,13 @@ public class BrooklynEntityMirrorImpl extends AbstractEntity implements Brooklyn } }; - String sensorsUri = Urls.mergePaths(mirroredEntityUrl, "sensors/current-state"); - final BrooklynEntityMirrorImpl self = this; mirror = HttpFeed.builder().entity(this) - .baseUri(sensorsUri) + .baseUri(mirroredEntityUrl) .credentialsIfNotNull(getConfig(BrooklynNode.MANAGEMENT_USER), getConfig(BrooklynNode.MANAGEMENT_PASSWORD)) .period(getConfig(POLL_PERIOD)) .poll(HttpPollConfig.forMultiple() + .suburl("/sensors/current-state") .onSuccess(mirrorSensors) .onFailureOrException(new Function<Object, Void>() { @Override @@ -130,7 +139,8 @@ public class BrooklynEntityMirrorImpl extends AbstractEntity implements Brooklyn } return null; } - })).build(); + })) + .poll(HttpPollConfig.forSensor(MIRROR_SUMMARY).onSuccess(new MirrorSummary())).build(); populateEffectors(); } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/644d6cd0/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java ---------------------------------------------------------------------- diff --git a/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java b/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java index 4ec0ddb..bb50f5a 100644 --- a/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java +++ b/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java @@ -19,6 +19,7 @@ package brooklyn.entity.brooklynnode; import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertTrue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -104,7 +105,10 @@ public class BrooklynEntityMirrorIntegrationTest { public void testServiceMirroring() throws Exception { setUpServer(); + String catalogItemId = "test-catalog-item:1.0"; + String catalogItemIdGA = "test-catalog-item:1.0-GA"; serverApp.setAttribute(TestApplication.MY_ATTRIBUTE, "austria"); + serverApp.setCatalogItemId(catalogItemId); String serviceId = serverApp.getId(); Entity mirror = localApp.addChild(EntitySpec.create(BrooklynEntityMirror.class) @@ -115,10 +119,14 @@ public class BrooklynEntityMirrorIntegrationTest { ); EntityTestUtils.assertAttributeEqualsEventually(mirror, TestApplication.MY_ATTRIBUTE, "austria"); + EntityTestUtils.assertAttributeEqualsEventually(mirror, BrooklynEntityMirror.MIRROR_CATALOG_ITEM_ID, catalogItemId); + assertTrue(mirror.getAttribute(BrooklynEntityMirror.MIRROR_SUMMARY) != null, "entity summary is null"); log.info("Sensors mirrored are: "+((EntityInternal)mirror).getAllAttributes()); serverApp.setAttribute(TestApplication.MY_ATTRIBUTE, "bermuda"); + serverApp.setCatalogItemId(catalogItemIdGA); EntityTestUtils.assertAttributeEqualsEventually(mirror, TestApplication.MY_ATTRIBUTE, "bermuda"); + EntityTestUtils.assertAttributeEqualsEventually(mirror, BrooklynEntityMirror.MIRROR_CATALOG_ITEM_ID, catalogItemIdGA); serverApp.stop(); assertUnmanagedEventually(mirror);
