brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rich...@apache.org
Subject [07/14] git commit: Add @Catalog annotation
Date Mon, 08 Sep 2014 12:39:07 GMT
Add @Catalog annotation


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/bffa5dfc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/bffa5dfc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/bffa5dfc

Branch: refs/heads/master
Commit: bffa5dfce8a8e02d179253e8fc7874faeaca8315
Parents: e67819c
Author: Aled Sage <aled.sage@gmail.com>
Authored: Wed Aug 13 20:54:12 2014 +0100
Committer: Martin Harris <github@nakomis.com>
Committed: Mon Sep 8 11:20:33 2014 +0100

----------------------------------------------------------------------
 .../main/java/brooklyn/enricher/basic/Aggregator.java  |  2 ++
 .../main/java/brooklyn/enricher/basic/Combiner.java    |  2 ++
 .../main/java/brooklyn/enricher/basic/Propagator.java  |  2 ++
 .../main/java/brooklyn/enricher/basic/Transformer.java |  2 ++
 .../src/main/java/brooklyn/enricher/DeltaEnricher.java |  3 +++
 .../java/brooklyn/enricher/HttpLatencyDetector.java    |  2 ++
 .../java/brooklyn/enricher/RollingMeanEnricher.java    |  3 +++
 .../enricher/RollingTimeWindowMeanEnricher.java        |  3 +++
 .../brooklyn/enricher/TimeFractionDeltaEnricher.java   |  3 +++
 .../brooklyn/enricher/TimeWeightedDeltaEnricher.java   |  4 ++++
 .../brooklyn/policy/autoscaling/AutoScalerPolicy.java  | 13 +++++++++----
 .../policy/followthesun/FollowTheSunPolicy.java        |  3 ++-
 .../brooklyn/policy/ha/ConnectionFailureDetector.java  |  3 +++
 .../brooklyn/policy/ha/ServiceFailureDetector.java     | 12 ++++++++++++
 .../main/java/brooklyn/policy/ha/ServiceReplacer.java  |  2 ++
 .../main/java/brooklyn/policy/ha/ServiceRestarter.java |  3 +++
 .../policy/loadbalancing/LoadBalancingPolicy.java      |  5 ++++-
 .../brooklyn/entity/basic/VanillaSoftwareProcess.java  |  2 ++
 .../entity/brooklynnode/BrooklynEntityMirror.java      |  3 +++
 .../brooklyn/entity/brooklynnode/BrooklynNode.java     |  2 ++
 .../java/brooklyn/entity/machine/MachineEntity.java    |  2 ++
 .../src/main/java/brooklyn/entity/pool/ServerPool.java |  4 +++-
 .../java/brooklyn/entity/messaging/storm/Storm.java    |  2 ++
 .../entity/messaging/storm/StormDeployment.java        |  2 ++
 .../brooklyn/entity/zookeeper/ZooKeeperEnsemble.java   |  2 ++
 .../java/brooklyn/entity/zookeeper/ZooKeeperNode.java  |  2 ++
 .../brooklyn/entity/nosql/cassandra/CassandraNode.java |  4 ++++
 .../entity/nosql/couchbase/CouchbaseCluster.java       |  2 ++
 .../brooklyn/entity/nosql/couchbase/CouchbaseNode.java |  2 ++
 .../nosql/elasticsearch/ElasticSearchCluster.java      |  2 ++
 .../entity/nosql/elasticsearch/ElasticSearchNode.java  |  2 ++
 .../entity/nosql/mongodb/sharding/MongoDBRouter.java   |  4 ++++
 .../mongodb/sharding/MongoDBShardedDeployment.java     |  4 ++++
 .../java/brooklyn/entity/nosql/riak/RiakCluster.java   |  6 ++++--
 .../main/java/brooklyn/entity/nosql/riak/RiakNode.java |  2 ++
 .../entity/webapp/ControlledDynamicWebAppCluster.java  |  2 ++
 .../brooklyn/entity/webapp/DynamicWebAppCluster.java   |  2 ++
 37 files changed, 111 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/core/src/main/java/brooklyn/enricher/basic/Aggregator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/enricher/basic/Aggregator.java b/core/src/main/java/brooklyn/enricher/basic/Aggregator.java
index e865799..a4df356 100644
--- a/core/src/main/java/brooklyn/enricher/basic/Aggregator.java
+++ b/core/src/main/java/brooklyn/enricher/basic/Aggregator.java
@@ -27,6 +27,7 @@ import java.util.Map;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.ConfigKeys;
@@ -44,6 +45,7 @@ import com.google.common.reflect.TypeToken;
 
 /** Building on {@link AbstractAggregator} for a single source sensor (on multiple children and/or members) */
 @SuppressWarnings("serial")
+@Catalog(name="Aggregator", description="Aggregates attributes from multiple entities into a single attribute value; see Enrichers.builder().aggregating(...)")
 public class Aggregator<T,U> extends AbstractAggregator<T,U> implements SensorEventListener<T> {
 
     private static final Logger LOG = LoggerFactory.getLogger(Aggregator.class);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/core/src/main/java/brooklyn/enricher/basic/Combiner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/enricher/basic/Combiner.java b/core/src/main/java/brooklyn/enricher/basic/Combiner.java
index 6876be2..5a78048 100644
--- a/core/src/main/java/brooklyn/enricher/basic/Combiner.java
+++ b/core/src/main/java/brooklyn/enricher/basic/Combiner.java
@@ -30,6 +30,7 @@ import java.util.Set;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.ConfigKeys;
@@ -49,6 +50,7 @@ import com.google.common.collect.Iterables;
 import com.google.common.reflect.TypeToken;
 
 @SuppressWarnings("serial")
+@Catalog(name="Combiner", description="Combines attributes; see Enrichers.builder().combining(...)")
 public class Combiner<T,U> extends AbstractEnricher implements SensorEventListener<T> {
 
     private static final Logger LOG = LoggerFactory.getLogger(Combiner.class);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/core/src/main/java/brooklyn/enricher/basic/Propagator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/enricher/basic/Propagator.java b/core/src/main/java/brooklyn/enricher/basic/Propagator.java
index 7aca9ca..f992443 100644
--- a/core/src/main/java/brooklyn/enricher/basic/Propagator.java
+++ b/core/src/main/java/brooklyn/enricher/basic/Propagator.java
@@ -25,6 +25,7 @@ import java.util.Set;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.Attributes;
@@ -46,6 +47,7 @@ import com.google.common.collect.Maps;
 import com.google.common.reflect.TypeToken;
 
 @SuppressWarnings("serial")
+@Catalog(name="Propagator", description="Propagates attributes from one entity to another; see Enrichers.builder().propagating(...)")
 public class Propagator extends AbstractEnricher implements SensorEventListener<Object> {
 
     private static final Logger LOG = LoggerFactory.getLogger(Propagator.class);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/core/src/main/java/brooklyn/enricher/basic/Transformer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/enricher/basic/Transformer.java b/core/src/main/java/brooklyn/enricher/basic/Transformer.java
index 81ee346..7c04d10 100644
--- a/core/src/main/java/brooklyn/enricher/basic/Transformer.java
+++ b/core/src/main/java/brooklyn/enricher/basic/Transformer.java
@@ -23,6 +23,7 @@ import static com.google.common.base.Preconditions.checkArgument;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.ConfigKeys;
@@ -36,6 +37,7 @@ import brooklyn.event.basic.BasicSensorEvent;
 import com.google.common.base.Function;
 import com.google.common.reflect.TypeToken;
 
+@Catalog(name="Transformer", description="Transformers attributes of an entity; see Enrichers.builder().transforming(...)")
 @SuppressWarnings("serial")
 public class Transformer<T,U> extends AbstractEnricher implements SensorEventListener<T> {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/policy/src/main/java/brooklyn/enricher/DeltaEnricher.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/enricher/DeltaEnricher.java b/policy/src/main/java/brooklyn/enricher/DeltaEnricher.java
index d3e3edc..064a750 100644
--- a/policy/src/main/java/brooklyn/enricher/DeltaEnricher.java
+++ b/policy/src/main/java/brooklyn/enricher/DeltaEnricher.java
@@ -19,6 +19,7 @@
 package brooklyn.enricher;
 
 import static brooklyn.util.JavaGroovyEquivalents.elvis;
+import brooklyn.catalog.Catalog;
 import brooklyn.enricher.basic.AbstractTransformingEnricher;
 import brooklyn.entity.Entity;
 import brooklyn.event.AttributeSensor;
@@ -29,6 +30,8 @@ import brooklyn.util.flags.TypeCoercions;
 /**
  * Converts an absolute sensor into a delta sensor (i.e. the diff between the current and previous value)
  */
+@Catalog(name="Delta", description="Converts an absolute sensor into a delta sensor "
+        + "(i.e. the diff between the current and previous value)")
 public class DeltaEnricher<T extends Number> extends AbstractTransformingEnricher<T> {
     Number last = 0;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/policy/src/main/java/brooklyn/enricher/HttpLatencyDetector.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/enricher/HttpLatencyDetector.java b/policy/src/main/java/brooklyn/enricher/HttpLatencyDetector.java
index 70502e9..a1b8f3e 100644
--- a/policy/src/main/java/brooklyn/enricher/HttpLatencyDetector.java
+++ b/policy/src/main/java/brooklyn/enricher/HttpLatencyDetector.java
@@ -29,6 +29,7 @@ import java.util.concurrent.atomic.AtomicReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.enricher.basic.AbstractEnricher;
 import brooklyn.entity.Entity;
@@ -64,6 +65,7 @@ import com.google.common.reflect.TypeToken;
  * optionally returned from sensors.  It does not currently support POST 
  * and has limited support for https.
  */
+@Catalog(name="HTTP Latency Detector", description="An Enricher which computes latency in accessing a URL, normally by periodically polling that URL")
 public class HttpLatencyDetector extends AbstractEnricher {
 
     private static final Logger log = LoggerFactory.getLogger(HttpLatencyDetector.class);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/policy/src/main/java/brooklyn/enricher/RollingMeanEnricher.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/enricher/RollingMeanEnricher.java b/policy/src/main/java/brooklyn/enricher/RollingMeanEnricher.java
index 49e1241..50f0878 100644
--- a/policy/src/main/java/brooklyn/enricher/RollingMeanEnricher.java
+++ b/policy/src/main/java/brooklyn/enricher/RollingMeanEnricher.java
@@ -20,6 +20,7 @@ package brooklyn.enricher;
 
 import java.util.LinkedList;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.enricher.basic.AbstractTypeTransformingEnricher;
 import brooklyn.entity.Entity;
 import brooklyn.event.AttributeSensor;
@@ -32,6 +33,8 @@ import brooklyn.util.javalang.JavaClassNames;
 * Transforms a sensor into a rolling average based on a fixed window size. This is useful for smoothing sample type metrics, 
 * such as latency or CPU time
 */
+@Catalog(name="Rolling Mean", description="Transforms a sensor into a rolling average based on a fixed "
+        + "window size. This is useful for smoothing sample type metrics, such as latency or CPU time")
 public class RollingMeanEnricher<T extends Number> extends AbstractTypeTransformingEnricher<T,Double> {
     private LinkedList<T> values = new LinkedList<T>();
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/policy/src/main/java/brooklyn/enricher/RollingTimeWindowMeanEnricher.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/enricher/RollingTimeWindowMeanEnricher.java b/policy/src/main/java/brooklyn/enricher/RollingTimeWindowMeanEnricher.java
index b196efa..2ac3b97 100644
--- a/policy/src/main/java/brooklyn/enricher/RollingTimeWindowMeanEnricher.java
+++ b/policy/src/main/java/brooklyn/enricher/RollingTimeWindowMeanEnricher.java
@@ -23,6 +23,7 @@ import java.util.LinkedList;
 
 import com.google.common.base.Preconditions;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.enricher.basic.AbstractTypeTransformingEnricher;
 import brooklyn.entity.Entity;
 import brooklyn.event.AttributeSensor;
@@ -55,6 +56,8 @@ import brooklyn.util.time.Duration;
  * <p>
  * The default average when no data has been received is 0, with a confidence of 0
  */
+@Catalog(name="Rolling Mean in Time Window", description="Transforms a sensor's data into a rolling average "
+        + "based on a time window.")
 public class RollingTimeWindowMeanEnricher<T extends Number> extends AbstractTypeTransformingEnricher<T,Double> {
     public static class ConfidenceQualifiedNumber {
         final Double value;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/policy/src/main/java/brooklyn/enricher/TimeFractionDeltaEnricher.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/enricher/TimeFractionDeltaEnricher.java b/policy/src/main/java/brooklyn/enricher/TimeFractionDeltaEnricher.java
index 253cdc6..035bb6f 100644
--- a/policy/src/main/java/brooklyn/enricher/TimeFractionDeltaEnricher.java
+++ b/policy/src/main/java/brooklyn/enricher/TimeFractionDeltaEnricher.java
@@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.enricher.basic.AbstractTypeTransformingEnricher;
 import brooklyn.entity.Entity;
 import brooklyn.event.AttributeSensor;
@@ -41,6 +42,8 @@ import brooklyn.util.time.Duration;
  * 
  * It also configured with the time units for the values.
  */
+@Catalog(name="Time-fraction Delta", description="Converts an absolute measure of time into a fraction of time, "
+        + "based on the delta between consecutive values and the elapsed time between those values.")
 public class TimeFractionDeltaEnricher<T extends Number> extends AbstractTypeTransformingEnricher<T,Double> {
     private static final Logger LOG = LoggerFactory.getLogger(TimeFractionDeltaEnricher.class);
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/policy/src/main/java/brooklyn/enricher/TimeWeightedDeltaEnricher.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/enricher/TimeWeightedDeltaEnricher.java b/policy/src/main/java/brooklyn/enricher/TimeWeightedDeltaEnricher.java
index d344dd4..ed85730 100644
--- a/policy/src/main/java/brooklyn/enricher/TimeWeightedDeltaEnricher.java
+++ b/policy/src/main/java/brooklyn/enricher/TimeWeightedDeltaEnricher.java
@@ -23,6 +23,7 @@ import groovy.lang.Closure;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.enricher.basic.AbstractTypeTransformingEnricher;
 import brooklyn.entity.Entity;
 import brooklyn.event.AttributeSensor;
@@ -42,6 +43,9 @@ import com.google.common.base.Functions;
  * <p>
  * NB for time (e.g. "total milliseconds consumed") use {@link TimeFractionDeltaEnricher}
  */
+@Catalog(name="Time-weighted Delta", description="Converts an absolute sensor into a delta sensor "
+        + "(i.e. the diff between the current and previous value), presented as a units/timeUnit "
+        + "based on the event timing.")
 public class TimeWeightedDeltaEnricher<T extends Number> extends AbstractTypeTransformingEnricher<T,Double> {
     private static final Logger LOG = LoggerFactory.getLogger(TimeWeightedDeltaEnricher.class);
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java b/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java
index 5399654..40f93ed 100644
--- a/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java
+++ b/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java
@@ -62,12 +62,17 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder;
 
 /**
  * Policy that is attached to a {@link Resizable} entity and dynamically adjusts its size in response to
- * emitted {@code POOL_COLD} and {@code POOL_HOT} events. (This policy does not itself determine whether
- * the pool is hot or cold, but instead relies on these events being emitted by the monitored entity itself, or
- * by another policy that is attached to it; see, for example, {@link LoadBalancingPolicy}.)
+ * emitted {@code POOL_COLD} and {@code POOL_HOT} events. Alternatively, the policy can be configured to
+ * keep a given metric within a required range.
+ * <p>
+ * TThis policy does not itself determine whether the pool is hot or cold, but instead relies on these 
+ * events being emitted by the monitored entity itself, or by another policy that is attached to it; see, 
+ * for example, {@link LoadBalancingPolicy}.)
  */
 @SuppressWarnings({"rawtypes", "unchecked"})
-@Catalog
+@Catalog(name="Auto-scaler", description="Policy that is attached to a Resizable entity and dynamically "
+        + "adjusts its size in response to either keep a metric within a given range, or in response to "
+        + "POOL_COLD and POOL_HOT events")
 public class AutoScalerPolicy extends AbstractPolicy {
     
     private static final Logger LOG = LoggerFactory.getLogger(AutoScalerPolicy.class);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/policy/src/main/java/brooklyn/policy/followthesun/FollowTheSunPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/policy/followthesun/FollowTheSunPolicy.java b/policy/src/main/java/brooklyn/policy/followthesun/FollowTheSunPolicy.java
index bfd5ce1..87881bf 100644
--- a/policy/src/main/java/brooklyn/policy/followthesun/FollowTheSunPolicy.java
+++ b/policy/src/main/java/brooklyn/policy/followthesun/FollowTheSunPolicy.java
@@ -53,7 +53,8 @@ import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 
-@Catalog
+@Catalog(name="Follow the Sun", description="Policy for moving \"work\" around to follow the demand; "
+        + "the work can be any \"Movable\" entity")
 public class FollowTheSunPolicy extends AbstractPolicy {
 
     private static final Logger LOG = LoggerFactory.getLogger(FollowTheSunPolicy.class);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/policy/src/main/java/brooklyn/policy/ha/ConnectionFailureDetector.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/policy/ha/ConnectionFailureDetector.java b/policy/src/main/java/brooklyn/policy/ha/ConnectionFailureDetector.java
index 816bc58..acd371d 100644
--- a/policy/src/main/java/brooklyn/policy/ha/ConnectionFailureDetector.java
+++ b/policy/src/main/java/brooklyn/policy/ha/ConnectionFailureDetector.java
@@ -28,6 +28,7 @@ import java.util.concurrent.atomic.AtomicReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.basic.BrooklynTaskTags;
 import brooklyn.entity.basic.ConfigKeys;
@@ -53,6 +54,8 @@ import com.google.common.net.HostAndPort;
  * Monitors a given {@link HostAndPort}, to emit HASensors.CONNECTION_FAILED and HASensors.CONNECTION_RECOVERED 
  * if the connection is lost/restored.
  */
+@Catalog(name="Connection Failure Detector", description="HA policy for monitoring a host:port, "
+        + "emitting an event if the connection is lost/restored")
 public class ConnectionFailureDetector extends AbstractPolicy {
 
     // TODO Remove duplication from ServiceFailureDetector, particularly for the stabilisation delays.

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/policy/src/main/java/brooklyn/policy/ha/ServiceFailureDetector.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/policy/ha/ServiceFailureDetector.java b/policy/src/main/java/brooklyn/policy/ha/ServiceFailureDetector.java
index c523aba..d74ff28 100644
--- a/policy/src/main/java/brooklyn/policy/ha/ServiceFailureDetector.java
+++ b/policy/src/main/java/brooklyn/policy/ha/ServiceFailureDetector.java
@@ -26,6 +26,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.basic.Attributes;
 import brooklyn.entity.basic.ConfigKeys;
@@ -54,8 +55,19 @@ import brooklyn.util.time.Duration;
  * (or until another process manually sets {@link Attributes#SERVICE_STATE_ACTUAL} to {@value Lifecycle#ON_FIRE},
  * which this enricher will not clear until all problems have gone away)
  */
+@Catalog(name="Service Failure Detector", description="HA policy for deteting failure of a service")
 public class ServiceFailureDetector extends ServiceStateLogic.ComputeServiceState {
 
+    // TODO Remove duplication between this and MemberFailureDetectionPolicy.
+    // The latter could be re-written to use this. Or could even be deprecated
+    // in favour of this.
+
+    public enum LastPublished {
+        NONE,
+        FAILED,
+        RECOVERED;
+    }
+
     private static final Logger LOG = LoggerFactory.getLogger(ServiceFailureDetector.class);
 
     private static final long MIN_PERIOD_BETWEEN_EXECS_MILLIS = 100;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/policy/src/main/java/brooklyn/policy/ha/ServiceReplacer.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/policy/ha/ServiceReplacer.java b/policy/src/main/java/brooklyn/policy/ha/ServiceReplacer.java
index 9142c78..30c5de4 100644
--- a/policy/src/main/java/brooklyn/policy/ha/ServiceReplacer.java
+++ b/policy/src/main/java/brooklyn/policy/ha/ServiceReplacer.java
@@ -29,6 +29,7 @@ import java.util.concurrent.TimeUnit;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.Group;
@@ -56,6 +57,7 @@ import com.google.common.collect.Lists;
 
 /** attaches to a DynamicCluster and replaces a failed member in response to HASensors.ENTITY_FAILED or other sensor;
  * if this fails, it sets the Cluster state to on-fire */
+@Catalog(name="Service Replacer", description="HA policy for replacing a failed member of a group")
 public class ServiceReplacer extends AbstractPolicy {
 
     private static final Logger LOG = LoggerFactory.getLogger(ServiceReplacer.class);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/policy/src/main/java/brooklyn/policy/ha/ServiceRestarter.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/policy/ha/ServiceRestarter.java b/policy/src/main/java/brooklyn/policy/ha/ServiceRestarter.java
index 06e6c77..3a0b6d4 100644
--- a/policy/src/main/java/brooklyn/policy/ha/ServiceRestarter.java
+++ b/policy/src/main/java/brooklyn/policy/ha/ServiceRestarter.java
@@ -24,6 +24,7 @@ import java.util.concurrent.atomic.AtomicReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.basic.Attributes;
 import brooklyn.entity.basic.ConfigKeys;
@@ -52,6 +53,8 @@ import com.google.common.base.Preconditions;
  * if there is a subsequent failure within a configurable time interval, or if the restart fails,
  * this gives up and emits {@link #ENTITY_RESTART_FAILED} 
  */
+@Catalog(name="Service Restarter", description="HA policy for restarting a service automatically, "
+        + "and for emitting an events if the service repeatedly fails")
 public class ServiceRestarter extends AbstractPolicy {
 
     private static final Logger LOG = LoggerFactory.getLogger(ServiceRestarter.class);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java b/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
index 7cef21d..0e36928 100644
--- a/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
+++ b/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
@@ -67,7 +67,10 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder;
  * of container resource in the pool respectively. These events may be consumed by a separate policy that is capable
  * of resizing the container pool.
  */
-@Catalog
+@Catalog(name="Load Balancer", description="Policy that is attached to a pool of \"containers\", each of which "
+        + "can host one or more migratable \"items\". The policy monitors the workrates of the items and effects "
+        + "migrations in an attempt to ensure that the containers are all sufficiently utilized without any of "
+        + "them being overloaded.")
 public class LoadBalancingPolicy<NodeType extends Entity, ItemType extends Movable> extends AbstractPolicy {
     
     private static final Logger LOG = LoggerFactory.getLogger(LoadBalancingPolicy.class);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/base/src/main/java/brooklyn/entity/basic/VanillaSoftwareProcess.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/basic/VanillaSoftwareProcess.java b/software/base/src/main/java/brooklyn/entity/basic/VanillaSoftwareProcess.java
index 9e9e171..f6d6ec1 100644
--- a/software/base/src/main/java/brooklyn/entity/basic/VanillaSoftwareProcess.java
+++ b/software/base/src/main/java/brooklyn/entity/basic/VanillaSoftwareProcess.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.basic;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.proxying.ImplementedBy;
 import brooklyn.event.basic.AttributeSensorAndConfigKey;
@@ -51,6 +52,7 @@ import brooklyn.event.basic.AttributeSensorAndConfigKey;
  * <li> A different {@link SoftwareProcess#PID_FILE} to use
  * <li>
  */
+@Catalog(name="Vanilla Software Process", description="A software process configured with scripts, e.g. for launch, check-running and stop")
 @ImplementedBy(VanillaSoftwareProcessImpl.class)
 public interface VanillaSoftwareProcess extends SoftwareProcess {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/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 dd01394..296287b 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,7 @@
  */
 package brooklyn.entity.brooklynnode;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.ConfigKeys;
@@ -32,6 +33,8 @@ import brooklyn.util.time.Duration;
  * <p>
  * Note tests for this depend on a REST server so are in other projects; search for *Mirror*Test,
  * as well as *BrooklynNode*Test. */
+@Catalog(name="Brooklyn Entity Mirror", description="Provides an entity which can sit in one brooklyn "
+        + "domain and reflect the status of an entity via the REST API of another domain.")
 @ImplementedBy(BrooklynEntityMirrorImpl.class)
 public interface BrooklynEntityMirror extends Entity {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNode.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNode.java b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNode.java
index 75523e3..88f34ef 100644
--- a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNode.java
+++ b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNode.java
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 
 import brooklyn.BrooklynVersion;
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Effector;
 import brooklyn.entity.basic.BrooklynConfigKeys;
@@ -48,6 +49,7 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import com.google.common.reflect.TypeToken;
 
+@Catalog(name="Brooklyn Node", description="Deploys a Brooklyn management server")
 @ImplementedBy(BrooklynNodeImpl.class)
 public interface BrooklynNode extends SoftwareProcess, UsesJava {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/base/src/main/java/brooklyn/entity/machine/MachineEntity.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/machine/MachineEntity.java b/software/base/src/main/java/brooklyn/entity/machine/MachineEntity.java
index c353e80..cf550c5 100644
--- a/software/base/src/main/java/brooklyn/entity/machine/MachineEntity.java
+++ b/software/base/src/main/java/brooklyn/entity/machine/MachineEntity.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.machine;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.entity.annotation.Effector;
 import brooklyn.entity.annotation.EffectorParam;
 import brooklyn.entity.basic.EmptySoftwareProcess;
@@ -26,6 +27,7 @@ import brooklyn.entity.proxying.ImplementedBy;
 import brooklyn.event.AttributeSensor;
 import brooklyn.util.time.Duration;
 
+@Catalog(name="Machine Entity", description="Represents a machine, providing metrics (normally optained of ssh) about it")
 @ImplementedBy(MachineEntityImpl.class)
 public interface MachineEntity extends EmptySoftwareProcess {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/base/src/main/java/brooklyn/entity/pool/ServerPool.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/pool/ServerPool.java b/software/base/src/main/java/brooklyn/entity/pool/ServerPool.java
index 4212aab..efbd946 100644
--- a/software/base/src/main/java/brooklyn/entity/pool/ServerPool.java
+++ b/software/base/src/main/java/brooklyn/entity/pool/ServerPool.java
@@ -21,14 +21,15 @@ package brooklyn.entity.pool;
 import java.util.Collection;
 import java.util.Map;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.annotation.Effector;
 import brooklyn.entity.annotation.EffectorParam;
 import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.basic.MethodEffector;
-import brooklyn.entity.machine.MachineEntity;
 import brooklyn.entity.group.DynamicCluster;
+import brooklyn.entity.machine.MachineEntity;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.proxying.ImplementedBy;
 import brooklyn.event.AttributeSensor;
@@ -62,6 +63,7 @@ import brooklyn.location.dynamic.LocationOwner;
  *     </li>
  * </ul>
  */
+@Catalog(name="Server Pool", description="Creates a pre-allocated server pool, which other applications can deploy to")
 @ImplementedBy(ServerPoolImpl.class)
 public interface ServerPool extends DynamicCluster, LocationOwner<ServerPoolLocation, ServerPool> {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/messaging/src/main/java/brooklyn/entity/messaging/storm/Storm.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/storm/Storm.java b/software/messaging/src/main/java/brooklyn/entity/messaging/storm/Storm.java
index 5544507..d7ec47b 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/storm/Storm.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/storm/Storm.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.messaging.storm;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.config.render.RendererHints;
 import brooklyn.entity.Entity;
@@ -35,6 +36,7 @@ import brooklyn.util.flags.SetFromFlag;
 /**
  * An {@link brooklyn.entity.Entity} that represents a Storm node (UI, Nimbus or Supervisor).
  */
+@Catalog(name="Storm Node", description="Storm is...")
 @ImplementedBy(StormImpl.class)
 public interface Storm extends SoftwareProcess, UsesJmx {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/messaging/src/main/java/brooklyn/entity/messaging/storm/StormDeployment.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/storm/StormDeployment.java b/software/messaging/src/main/java/brooklyn/entity/messaging/storm/StormDeployment.java
index 4ab4d11..1483281 100644
--- a/software/messaging/src/main/java/brooklyn/entity/messaging/storm/StormDeployment.java
+++ b/software/messaging/src/main/java/brooklyn/entity/messaging/storm/StormDeployment.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.messaging.storm;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.ConfigKeys;
@@ -25,6 +26,7 @@ import brooklyn.entity.proxying.ImplementedBy;
 import brooklyn.entity.trait.Startable;
 import brooklyn.util.flags.SetFromFlag;
 
+@Catalog(name="Storm Deployment", description="Storm is...")
 @ImplementedBy(StormDeploymentImpl.class)
 public interface StormDeployment extends Entity, Startable {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/messaging/src/main/java/brooklyn/entity/zookeeper/ZooKeeperEnsemble.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/zookeeper/ZooKeeperEnsemble.java b/software/messaging/src/main/java/brooklyn/entity/zookeeper/ZooKeeperEnsemble.java
index 08149d9..f33ee90 100644
--- a/software/messaging/src/main/java/brooklyn/entity/zookeeper/ZooKeeperEnsemble.java
+++ b/software/messaging/src/main/java/brooklyn/entity/zookeeper/ZooKeeperEnsemble.java
@@ -20,6 +20,7 @@ package brooklyn.entity.zookeeper;
 
 import java.util.List;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.group.DynamicCluster;
@@ -31,6 +32,7 @@ import brooklyn.util.flags.SetFromFlag;
 
 import com.google.common.reflect.TypeToken;
 
+@Catalog(name="ZooKeeper ensemble", description="ZooKeeper is...")
 @ImplementedBy(ZooKeeperEnsembleImpl.class)
 public interface ZooKeeperEnsemble extends DynamicCluster {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/messaging/src/main/java/brooklyn/entity/zookeeper/ZooKeeperNode.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/main/java/brooklyn/entity/zookeeper/ZooKeeperNode.java b/software/messaging/src/main/java/brooklyn/entity/zookeeper/ZooKeeperNode.java
index 8ca44be..40b7b3e 100644
--- a/software/messaging/src/main/java/brooklyn/entity/zookeeper/ZooKeeperNode.java
+++ b/software/messaging/src/main/java/brooklyn/entity/zookeeper/ZooKeeperNode.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.zookeeper;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.basic.SoftwareProcess;
@@ -31,6 +32,7 @@ import brooklyn.util.flags.SetFromFlag;
 /**
  * An {@link brooklyn.entity.Entity} that represents a single Apache ZooKeeper instance.
  */
+@Catalog(name="ZooKeeper Node", description="ZooKeeper is...")
 @ImplementedBy(ZooKeeperNodeImpl.class)
 public interface ZooKeeperNode extends SoftwareProcess {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNode.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNode.java b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNode.java
index 996f8ff..91d04fe 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNode.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNode.java
@@ -21,6 +21,7 @@ package brooklyn.entity.nosql.cassandra;
 import java.math.BigInteger;
 import java.util.Set;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Effector;
 import brooklyn.entity.Entity;
@@ -45,6 +46,9 @@ import com.google.common.reflect.TypeToken;
 /**
  * An {@link brooklyn.entity.Entity} that represents a Cassandra node in a {@link CassandraDatacenter}.
  */
+@Catalog(name="Apache Cassandra Node", description="Cassandra is a highly scalable, eventually " +
+        "consistent, distributed, structured key-value store which provides a ColumnFamily-based data model " +
+        "richer than typical key/value systems", iconUrl="classpath:///cassandra-logo.jpeg")
 @ImplementedBy(CassandraNodeImpl.class)
 public interface CassandraNode extends DatastoreMixins.DatastoreCommon, SoftwareProcess, UsesJmx, UsesJavaMXBeans, DatastoreMixins.HasDatastoreUrl, DatastoreMixins.CanExecuteScript {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseCluster.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseCluster.java b/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseCluster.java
index 25a2b8d..1bdc124 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseCluster.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseCluster.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.ConfigKeys;
@@ -34,6 +35,7 @@ import brooklyn.util.time.Duration;
 
 import com.google.common.reflect.TypeToken;
 
+@Catalog(name="CouchBase Cluster", description="CouchBase is...")
 @ImplementedBy(CouchbaseClusterImpl.class)
 public interface CouchbaseCluster extends DynamicCluster {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNode.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNode.java b/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNode.java
index dd46eba..9fa23b5 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNode.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/couchbase/CouchbaseNode.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.nosql.couchbase;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.config.render.RendererHints;
 import brooklyn.entity.annotation.Effector;
@@ -35,6 +36,7 @@ import brooklyn.event.basic.Sensors;
 import brooklyn.util.flags.SetFromFlag;
 import brooklyn.util.text.ByteSizeStrings;
 
+@Catalog(name="CouchBase Node", description="CouchBase is...")
 @ImplementedBy(CouchbaseNodeImpl.class)
 public interface CouchbaseNode extends SoftwareProcess {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchCluster.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchCluster.java b/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchCluster.java
index f0190f5..738661b 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchCluster.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchCluster.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.nosql.elasticsearch;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.entity.group.DynamicCluster;
 import brooklyn.entity.proxying.ImplementedBy;
 import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
@@ -26,6 +27,7 @@ import brooklyn.util.flags.SetFromFlag;
 /**
  * A cluster of {@link ElasticSearchNode}s based on {@link DynamicCluster} which can be resized by a policy if required.
  */
+@Catalog(name="Elastic Search Cluster", description="Elastic Search is...")
 @ImplementedBy(ElasticSearchClusterImpl.class)
 public interface ElasticSearchCluster extends DynamicCluster {
     @SetFromFlag("clusterName")

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNode.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNode.java b/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNode.java
index 76c20c8..d679f3f 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNode.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/elasticsearch/ElasticSearchNode.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.nosql.elasticsearch;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.basic.SoftwareProcess;
@@ -35,6 +36,7 @@ import brooklyn.util.flags.SetFromFlag;
 /**
  * An {@link brooklyn.entity.Entity} that represents an ElasticSearch node
  */
+@Catalog(name="Elastic Search Node", description="Elastic Search is...")
 @ImplementedBy(ElasticSearchNodeImpl.class)
 public interface ElasticSearchNode extends SoftwareProcess, DatastoreMixins.HasDatastoreUrl {
     @SetFromFlag("version")

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/nosql/src/main/java/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouter.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouter.java b/software/nosql/src/main/java/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouter.java
index 4a6bbb7..3d8b281 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouter.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/mongodb/sharding/MongoDBRouter.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.nosql.mongodb.sharding;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.nosql.mongodb.AbstractMongoDBServer;
@@ -28,6 +29,9 @@ import brooklyn.util.time.Duration;
 
 import com.google.common.reflect.TypeToken;
 
+@Catalog(name="MongoDB Router",
+        description="MongoDB (from \"humongous\") is a scalable, high-performance, open source NoSQL database",
+        iconUrl="classpath:///mongodb-logo.png")
 @ImplementedBy(MongoDBRouterImpl.class)
 public interface MongoDBRouter extends AbstractMongoDBServer {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/nosql/src/main/java/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeployment.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeployment.java b/software/nosql/src/main/java/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeployment.java
index a300f36..ffda9b1 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeployment.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeployment.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.nosql.mongodb.sharding;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.Group;
@@ -29,6 +30,9 @@ import brooklyn.event.basic.Sensors;
 import brooklyn.util.flags.SetFromFlag;
 import brooklyn.util.time.Duration;
 
+@Catalog(name="MongoDB Sharded Deployment",
+        description="MongoDB (from \"humongous\") is a scalable, high-performance, open source NoSQL database",
+        iconUrl="classpath:///mongodb-logo.png")
 @ImplementedBy(MongoDBShardedDeploymentImpl.class)
 public interface MongoDBShardedDeployment extends Entity, Startable {
     @SetFromFlag("configClusterSize")

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakCluster.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakCluster.java b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakCluster.java
index c4fabed..798ebe9 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakCluster.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakCluster.java
@@ -20,8 +20,7 @@ package brooklyn.entity.nosql.riak;
 
 import java.util.Map;
 
-import com.google.common.reflect.TypeToken;
-
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.ConfigKeys;
@@ -32,6 +31,9 @@ import brooklyn.event.basic.Sensors;
 import brooklyn.util.flags.SetFromFlag;
 import brooklyn.util.time.Duration;
 
+import com.google.common.reflect.TypeToken;
+
+@Catalog(name="Riak Node", description="Riak is...")
 @ImplementedBy(RiakClusterImpl.class)
 public interface RiakCluster extends DynamicCluster {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java
index 0f5a47a..0acc7b1 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java
@@ -22,6 +22,7 @@ import java.util.List;
 
 import com.google.common.reflect.TypeToken;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.annotation.Effector;
 import brooklyn.entity.annotation.EffectorParam;
@@ -34,6 +35,7 @@ import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
 import brooklyn.event.basic.Sensors;
 import brooklyn.util.flags.SetFromFlag;
 
+@Catalog(name="Riak Node", description="Riak is...")
 @ImplementedBy(RiakNodeImpl.class)
 public interface RiakNode extends SoftwareProcess {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java
index 72b2bb6..e2ceb32 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/ControlledDynamicWebAppCluster.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.webapp;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.Group;
@@ -56,6 +57,7 @@ import brooklyn.util.flags.SetFromFlag;
  * than with the child {@link brooklyn.entity.group.DynamicCluster}. However, note that changing this entity's
  * members has no effect on the members of the underlying DynamicCluster - treat this as a read-only view.
  */
+@Catalog(name="Controlled Dynamic Web-app Cluster", description="A cluster of load-balanced web-apps, which can be dynamically re-sized")
 @ImplementedBy(ControlledDynamicWebAppClusterImpl.class)
 public interface ControlledDynamicWebAppCluster extends DynamicGroup, Entity, Startable, Resizable, MemberReplaceable, Group, ElasticJavaWebAppService, JavaWebAppService.CanDeployAndUndeploy, JavaWebAppService.CanRedeployAll {
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bffa5dfc/software/webapp/src/main/java/brooklyn/entity/webapp/DynamicWebAppCluster.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/DynamicWebAppCluster.java b/software/webapp/src/main/java/brooklyn/entity/webapp/DynamicWebAppCluster.java
index 04ec69e..38d3508 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/DynamicWebAppCluster.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/DynamicWebAppCluster.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.webapp;
 
+import brooklyn.catalog.Catalog;
 import brooklyn.config.render.RendererHints;
 import brooklyn.entity.group.DynamicCluster;
 import brooklyn.entity.proxying.ImplementedBy;
@@ -34,6 +35,7 @@ import brooklyn.util.time.Duration;
  *   <li>Entity processing time</li>
  * </ul>
  */
+@Catalog(name="Dynamic Web-app Cluster", description="A cluster of web-apps, which can be dynamically re-sized; this does not include a load-balancer")
 @ImplementedBy(DynamicWebAppClusterImpl.class)
 public interface DynamicWebAppCluster extends DynamicCluster, WebAppService, JavaWebAppService, JavaWebAppService.CanDeployAndUndeploy, JavaWebAppService.CanRedeployAll {
 


Mime
View raw message