You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2015/05/22 11:39:25 UTC

[05/11] incubator-brooklyn git commit: Mirror summary for BrooklynEntityMirror

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 <sv...@cloudsoftcorp.com>
Authored: Tue May 12 16:03:51 2015 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
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);