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

[1/2] incubator-brooklyn git commit: Add quorum check enricher and aggregator

Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 11b08da35 -> 6c4da4467


Add quorum check enricher and aggregator


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

Branch: refs/heads/master
Commit: 9e2d187eb107ffea8ecf6444b7ae85fe5a0a2e27
Parents: 7c649d7
Author: Mike Zaccardo <mi...@cloudsoftcorp.com>
Authored: Tue Nov 24 15:24:22 2015 -0500
Committer: Mike Zaccardo <mi...@cloudsoftcorp.com>
Committed: Tue Nov 24 15:24:22 2015 -0500

----------------------------------------------------------------------
 .../brooklyn/enricher/stock/Aggregator.java     | 10 ++++++
 .../brooklyn/enricher/stock/Enrichers.java      | 34 +++++++++++++++++++-
 2 files changed, 43 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e2d187e/core/src/main/java/org/apache/brooklyn/enricher/stock/Aggregator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/Aggregator.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/Aggregator.java
index 0e0e8cc..f9a0988 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/Aggregator.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/Aggregator.java
@@ -35,6 +35,7 @@ import org.apache.brooklyn.core.BrooklynLogging;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.collections.MutableMap;
+import org.apache.brooklyn.util.collections.QuorumCheck.QuorumChecks;
 import org.apache.brooklyn.util.core.flags.SetFromFlag;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.text.StringPredicates;
@@ -64,6 +65,13 @@ public class Aggregator<T,U> extends AbstractAggregator<T,U> implements SensorEv
     
     public static final ConfigKey<Boolean> EXCLUDE_BLANK = ConfigKeys.newBooleanConfigKey("enricher.aggregator.excludeBlank", "Whether explicit nulls or blank strings should be excluded (default false); this only applies if no value filter set", false);
 
+    /**
+     * @see QuorumChecks
+     */
+    public static final ConfigKey<String> QUORUM_CHECK_TYPE = ConfigKeys.newStringConfigKey("quorum.check.type", "The requirement to be considered quorate -- possible values: 'all', 'allAndAtLeastOne', 'atLeastOne', 'atLeastOneUnlessEmpty', 'alwaysHealthy'", "allAndAtLeastOne");
+
+    public static final ConfigKey<Integer> QUORUM_TOTAL_SIZE = ConfigKeys.newIntegerConfigKey("quorum.total.size", "The total size to consider when determining if quorate", 1);
+
     protected Sensor<T> sourceSensor;
     protected Function<? super Collection<T>, ? extends U> transformation;
     
@@ -103,6 +111,8 @@ public class Aggregator<T,U> extends AbstractAggregator<T,U> implements SensorEv
     protected Function<? super Collection<?>, ?> lookupTransformation(String t1) {
         if ("average".equalsIgnoreCase(t1)) return new Enrichers.ComputingAverage(null, null, targetSensor.getTypeToken());
         if ("sum".equalsIgnoreCase(t1)) return new Enrichers.ComputingSum(null, null, targetSensor.getTypeToken());
+        if ("isQuorate".equalsIgnoreCase(t1)) return new Enrichers.ComputingIsQuorate(targetSensor.getTypeToken(),
+                QuorumChecks.of(config().get(QUORUM_CHECK_TYPE)), config().get(QUORUM_TOTAL_SIZE));
         if ("list".equalsIgnoreCase(t1)) return new ComputingList();
         return null;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e2d187e/core/src/main/java/org/apache/brooklyn/enricher/stock/Enrichers.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/Enrichers.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/Enrichers.java
index 2ce2b21..3dfabcf 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/Enrichers.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/Enrichers.java
@@ -38,6 +38,7 @@ import org.apache.brooklyn.enricher.stock.reducer.Reducer;
 import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.collections.MutableSet;
+import org.apache.brooklyn.util.collections.QuorumCheck;
 import org.apache.brooklyn.util.core.flags.TypeCoercions;
 import org.apache.brooklyn.util.text.StringPredicates;
 import org.apache.brooklyn.util.text.Strings;
@@ -891,6 +892,38 @@ public class Enrichers {
         return result;
     }
     
+    @Beta
+    public static class ComputingIsQuorate<T> implements Function<Collection<Boolean>, Boolean> {
+        protected final TypeToken<T> typeToken;
+        protected final QuorumCheck quorumCheck;
+        protected final int totalSize;
+
+        @SuppressWarnings({ "unchecked", "rawtypes" })
+        public ComputingIsQuorate(TypeToken<T> typeToken, QuorumCheck quorumCheck, int totalSize) {
+            this.quorumCheck = quorumCheck;
+            this.totalSize = totalSize;
+
+            if (typeToken!=null && TypeToken.of(Boolean.class).isAssignableFrom(typeToken.getType())) {
+                this.typeToken = typeToken;
+            } else if (typeToken==null || typeToken.isAssignableFrom(Boolean.class)) {
+                this.typeToken = (TypeToken)TypeToken.of(Boolean.class);
+            } else {
+                throw new IllegalArgumentException("Type " + typeToken + " is not valid for " + this + " -- expected " + TypeToken.of(Boolean.class));
+            }
+        }
+
+        @Override
+        public Boolean apply(Collection<Boolean> input) {
+            int numTrue = 0;
+
+            for (Boolean inputVal : input)
+                if (Boolean.TRUE.equals(inputVal))
+                    numTrue++;
+
+            return Boolean.valueOf(quorumCheck.isQuorate(numTrue, totalSize));
+        }
+    }
+
     private static <T> Map<T,T> newIdentityMap(Set<T> keys) {
         Map<T,T> result = Maps.newLinkedHashMap();
         for (T key : keys) {
@@ -899,5 +932,4 @@ public class Enrichers {
         return result;
     }
     
-
 }


[2/2] incubator-brooklyn git commit: This closes #1037

Posted by sj...@apache.org.
This closes #1037


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

Branch: refs/heads/master
Commit: 6c4da44672ab79498f50e2033ab29a12baefff22
Parents: 11b08da 9e2d187
Author: Sam Corbett <sa...@cloudsoftcorp.com>
Authored: Wed Nov 25 10:53:48 2015 +0000
Committer: Sam Corbett <sa...@cloudsoftcorp.com>
Committed: Wed Nov 25 10:53:48 2015 +0000

----------------------------------------------------------------------
 .../brooklyn/enricher/stock/Aggregator.java     | 10 ++++++
 .../brooklyn/enricher/stock/Enrichers.java      | 34 +++++++++++++++++++-
 2 files changed, 43 insertions(+), 1 deletion(-)
----------------------------------------------------------------------