.aggregating(t) .publishing(total) .fromMembers() .computingSum() .build());
.aggregating(t) .publishing(total) .fromMembers() .computingSum() .build()); .aggregating(t) .publishing(average) .fromMembers() .computingAverage() .defaultValueForUnreportedSensors(0)
@Test public void testAggregatingCastsResult() { group.addMember(entity); group.enrichers().add(Enrichers.builder() .aggregating(NUM1) .publishing(LONG1) .fromMembers() .computing(Functions.constant(Long.valueOf(1))) .build()); entity.sensors().set(NUM1, 123); EntityAsserts.assertAttributeEqualsEventually(group, LONG1, Long.valueOf(1)); }
.aggregating(MachineAttributes.CPU_USAGE) .computingAverage() .fromMembers() .publishing(MachineAttributes.AVERAGE_CPU_USAGE) .valueToReportIfNoSensors(0d) .aggregating(DOCKER_CONTAINER_COUNT) .computingSum() .fromMembers() .publishing(DOCKER_CONTAINER_COUNT) .build());
@SuppressWarnings({ "unchecked", "rawtypes" }) @Override protected void initEnrichers() { super.initEnrichers(); propagateMasterAttribute(MySqlNode.HOSTNAME); propagateMasterAttribute(MySqlNode.ADDRESS); propagateMasterAttribute(MySqlNode.SUBNET_HOSTNAME); propagateMasterAttribute(MySqlNode.SUBNET_ADDRESS); propagateMasterAttribute(MySqlNode.MYSQL_PORT); propagateMasterAttribute(MySqlNode.DATASTORE_URL); enrichers().add(Enrichers.builder() .aggregating(MySqlNode.DATASTORE_URL) .publishing(SLAVE_DATASTORE_URL_LIST) .computing((Function<Collection<String>, List<String>>)(Function)Functions.identity()) .entityFilter(Predicates.not(MySqlClusterUtils.IS_MASTER)) .fromMembers() .build()); enrichers().add(Enrichers.builder() .aggregating(MySqlNode.QUERIES_PER_SECOND_FROM_MYSQL) .publishing(QUERIES_PER_SECOND_FROM_MYSQL_PER_NODE) .fromMembers() .computingAverage() .defaultValueForUnreportedSensors(0d) .build()); }
@Test public void testAggregatingExcludingBlankString() { group.addMember(entity); group.addMember(entity2); group.enrichers().add(Enrichers.builder() .aggregating(STR1) .publishing(SET1) .fromMembers() .excludingBlank() .computing(new Function<Collection<?>, Set<Object>>() { @Override public Set<Object> apply(Collection<?> input) { // accept null values, so don't use ImmutableSet return (input == null) ? ImmutableSet.<Object>of() : MutableSet.<Object>copyOf(input); }}) .build()); entity.sensors().set(STR1, "1"); entity2.sensors().set(STR1, "2"); EntityAsserts.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of("1", "2")); entity.sensors().set(STR1, "3"); entity2.sensors().set(STR1, null); EntityAsserts.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of("3")); entity.sensors().set(STR1, ""); entity2.sensors().set(STR1, "4"); EntityAsserts.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of("4")); }
@Test public void testAggregatesNewMembersOfGroup() { BasicGroup group = app.createAndManageChild(EntitySpec.create(BasicGroup.class)); TestEntity p1 = app.createAndManageChild(EntitySpec.create(TestEntity.class)); TestEntity p2 = app.createAndManageChild(EntitySpec.create(TestEntity.class)); log.debug("created {} and the entities it will contain {} {}", new Object[] {group, p1, p2}); group.enrichers().add(Enrichers.builder() .aggregating(intSensor) .publishing(target) .computingSum() .fromMembers() .defaultValueForUnreportedSensors(0) .valueToReportIfNoSensors(0) .build()); EntityAsserts.assertAttributeEqualsEventually(group, target, 0); group.addMember(p1); p1.sensors().set(intSensor, 1); EntityAsserts.assertAttributeEqualsEventually(group, target, 1); group.addMember(p2); p2.sensors().set(intSensor, 2); EntityAsserts.assertAttributeEqualsEventually(group, target, 3); group.removeMember(p2); EntityAsserts.assertAttributeEqualsEventually(group, target, 1); }
@Test public void testAggregatingExcludingNull() { group.addMember(entity); group.enrichers().add(Enrichers.builder() .aggregating(NUM1) .publishing(SET1) .fromMembers() .excludingBlank() .computing(new Function<Collection<?>, Set<Object>>() { @Override public Set<Object> apply(Collection<?> input) { // accept null values, so don't use ImmutableSet return (input == null) ? ImmutableSet.<Object>of() : MutableSet.<Object>copyOf(input); }}) .build()); EntityAsserts.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of()); entity.sensors().set(NUM1, 1); EntityAsserts.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of(1)); entity.sensors().set(NUM1, null); EntityAsserts.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of()); entity.sensors().set(NUM1, 2); EntityAsserts.assertAttributeEqualsEventually(group, SET1, ImmutableSet.<Object>of(2)); }
@Test public void testAggregatesMembersOfProducer() { BasicGroup group = app.addChild(EntitySpec.create(BasicGroup.class)); TestEntity p1 = group.addChild(EntitySpec.create(TestEntity.class)); TestEntity p2 = group.addChild(EntitySpec.create(TestEntity.class)); group.addMember(p1); group.addMember(p2); p1.sensors().set(intSensor, 1); app.enrichers().add(Enrichers.builder() .aggregating(intSensor) .publishing(target) .computingSum() .from(group) .fromMembers() .build()); EntityAsserts.assertAttributeEqualsEventually(app, target, 1); p2.sensors().set(intSensor, 2); EntityAsserts.assertAttributeEqualsEventually(app, target, 3); group.removeMember(p2); EntityAsserts.assertAttributeEqualsEventually(app, target, 1); }
@Test public void testAggregatingRespectsUnchanged() { group.addMember(entity); group.enrichers().add(Enrichers.builder() .aggregating(NUM1) .<Object>publishing(LONG1) .fromMembers() .computing(new Function<Iterable<Integer>, Object>() { @Override public Object apply(Iterable<Integer> input) { if (input != null && Iterables.contains(input, 123)) { return Enrichers.sum(input, 0, 0, new TypeToken<Integer>(){}); } else { return Entities.UNCHANGED; } }}) .build()); entity.sensors().set(NUM1, 123); EntityAsserts.assertAttributeEqualsEventually(group, LONG1, Long.valueOf(123)); entity.sensors().set(NUM1, 987654); EntityAsserts.assertAttributeEqualsContinually(ImmutableMap.of("timeout", "100ms"), group, LONG1, Long.valueOf(123)); }
@Test public void testAggregatesExistingMembersOfGroup() { BasicGroup group = app.addChild(EntitySpec.create(BasicGroup.class)); TestEntity p1 = group.addChild(EntitySpec.create(TestEntity.class)); TestEntity p2 = group.addChild(EntitySpec.create(TestEntity.class)); group.addMember(p1); group.addMember(p2); p1.sensors().set(intSensor, 1); group.enrichers().add(Enrichers.builder() .aggregating(intSensor) .publishing(target) .computingSum() .fromMembers() .build()); EntityAsserts.assertAttributeEqualsEventually(group, target, 1); p2.sensors().set(intSensor, 2); EntityAsserts.assertAttributeEqualsEventually(group, target, 3); group.removeMember(p2); EntityAsserts.assertAttributeEqualsEventually(group, target, 1); }
@Test public void testAppliesFilterWhenAggregatingMembersOfGroup() { BasicGroup group = app.createAndManageChild(EntitySpec.create(BasicGroup.class)); TestEntity p1 = app.createAndManageChild(EntitySpec.create(TestEntity.class)); TestEntity p2 = app.createAndManageChild(EntitySpec.create(TestEntity.class)); TestEntity p3 = app.createAndManageChild(EntitySpec.create(TestEntity.class)); group.addMember(p1); group.addMember(p2); p1.sensors().set(intSensor, 1); p2.sensors().set(intSensor, 2); p3.sensors().set(intSensor, 4); group.enrichers().add(Enrichers.builder() .aggregating(intSensor) .publishing(target) .computingSum() .fromMembers() .entityFilter(Predicates.equalTo((Entity)p1)) .build()); EntityAsserts.assertAttributeEqualsEventually(group, target, 1); group.addMember(p3); EntityAsserts.assertAttributeEqualsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), group, target, 1); }
@Test public void testAggregatingMap() { group.addMember(entity); group.enrichers().add(Enrichers.builder() .aggregating(STR1, STR2) .publishing(MAP1) .fromMembers() .excludingBlank() .build()); EntityAsserts.assertAttributeEqualsEventually(group, MAP1, ImmutableMap.<String, String>of()); entity.sensors().set(STR1, "a"); EntityAsserts.assertAttributeEqualsEventually(group, MAP1, ImmutableMap.<String, String>of()); entity.sensors().set(STR2, "b"); EntityAsserts.assertAttributeEqualsEventually(group, MAP1, ImmutableMap.<String, String>of("a", "b")); entity.sensors().set(STR2, "c"); EntityAsserts.assertAttributeEqualsEventually(group, MAP1, ImmutableMap.<String, String>of("a", "c")); }
@Test public void testAggregatingGroupSum() { TestEntity child1 = group.addChild(EntitySpec.create(TestEntity.class)); group.addMember(entity); group.addMember(entity2); group.enrichers().add(Enrichers.builder() .aggregating(NUM1) .publishing(NUM2) .fromMembers() .computingSum() .build()); child1.sensors().set(NUM1, 1); entity.sensors().set(NUM1, 2); entity2.sensors().set(NUM1, 3); EntityAsserts.assertAttributeEqualsEventually(group, NUM2, 5); }
@Test public void testAggregatingMembersEnricher() throws Exception { origApp.start(ImmutableList.of(origLoc)); origCluster.resize(2); origApp.enrichers().add(Enrichers.builder() .aggregating(METRIC1) .from(origCluster) .fromMembers() .computing(StringFunctions.joiner(",")) .publishing(METRIC2) .build()); TestApplication newApp = rebind(); DynamicCluster newCluster = (DynamicCluster) Iterables.find(newApp.getChildren(), Predicates.instanceOf(DynamicCluster.class)); int i = 1; for (Entity member : newCluster.getMembers()) { ((EntityInternal)member).sensors().set(METRIC1, "myval"+(i++)); } EntityAsserts.assertAttributeEventually(newApp, METRIC2, Predicates.or(Predicates.equalTo("myval1,myval2"), Predicates.equalTo("myval2,myval1"))); }
@Override protected void initEnrichers() { super.initEnrichers(); EnricherSpec<?> zks = Enrichers.builder() .aggregating(ZooKeeperNode.ZOOKEEPER_ENDPOINT) .publishing(ZOOKEEPER_SERVERS) .fromMembers() .build(); EnricherSpec<?> zke = Enrichers.builder() .joining(ZOOKEEPER_SERVERS) .publishing(ZOOKEEPER_ENDPOINTS) .quote(false) .separator(",") .build(); enrichers().add(zks); enrichers().add(zke); }
@Override public void init() { super.init(); enrichers().add(Enrichers.builder() .aggregating(Changeable.GROUP_SIZE) .publishing(FABRIC_SIZE) .fromMembers() .computingSum() .valueToReportIfNoSensors(0) .build()); sensors().set(SERVICE_UP, false); }