/** * @deprecated since 0.9.0; see {@code subscriptions().subscribe(producer, sensor, listener)} */ @Override @Deprecated public <T> SubscriptionHandle subscribe(Entity producer, Sensor<T> sensor, SensorEventListener<? super T> listener) { return subscriptions().subscribe(producer, sensor, listener); }
@Override public void setContainers(Group containerGroup) { this.containerGroup = containerGroup; subscriptions().subscribe(containerGroup, AbstractGroup.MEMBER_ADDED, eventHandler); subscriptions().subscribe(containerGroup, AbstractGroup.MEMBER_REMOVED, eventHandler); subscriptions().subscribe(null, Movable.CONTAINER, eventHandler); if (LOG.isTraceEnabled()) LOG.trace("{} scanning entities on container group set", this); rescanEntities(); }
private void onItemAdded(Entity item) { if (items.add(item)) { subscriptions().subscribe(item, Movable.CONTAINER, eventHandler); sensors().emit(ITEM_ADDED, item); } }
public void propagateSensorStringReplacingWithSubnetAddress(final Entity target, final AttributeSensor<String> sensor) { SensorPropagaterWithReplacement mapper = new SensorPropagaterWithReplacement(this, sensor, new Function<String,String>() { @Override public String apply(String input) { if (input==null) return null; String subnetHostname = target.getAttribute(SUBNET_HOSTNAME_SENSOR); log.debug("sensor mapper replacing address in "+this+"->"+sensor+", with "+subnetHostname+", where old address in "+target); String output = input; output = replaceIfNotNull(output, target.getAttribute(SoftwareProcess.HOSTNAME), subnetHostname); output = replaceIfNotNull(output, target.getAttribute(SoftwareProcess.ADDRESS), subnetHostname); return output; } }); subscriptions().subscribe(target, sensor, mapper); mapper.apply( target.getAttribute(sensor) ); }
@Override public void setContents(Group containerGroup, Group itemGroup) { this.containerGroup = containerGroup; this.itemGroup = itemGroup; subscriptions().subscribe(containerGroup, AbstractGroup.MEMBER_ADDED, eventHandler); subscriptions().subscribe(containerGroup, AbstractGroup.MEMBER_REMOVED, eventHandler); subscriptions().subscribe(itemGroup, AbstractGroup.MEMBER_ADDED, eventHandler); subscriptions().subscribe(itemGroup, AbstractGroup.MEMBER_REMOVED, eventHandler); // Process extant containers and items for (Entity existingContainer : containerGroup.getMembers()) { onContainerAdded(existingContainer); } for (Entity existingItem : itemGroup.getMembers()) { onItemAdded(existingItem); } }
@Override public void openFirewallPortRange(EntityAndAttribute<String> publicIp, int lowerBoundPort, int upperBoundPort, FirewallRule.Protocol protocol, Cidr accessingCidr) { SimpleFirewallUpdater updater = new SimpleFirewallUpdater(publicIp, lowerBoundPort, upperBoundPort, protocol, accessingCidr); subscriptions().subscribe(publicIp.getEntity(), publicIp.getAttribute(), updater); updater.apply(publicIp.getEntity(), publicIp.getValue()); }
@Override public void openPublicIp(EntityAndAttribute<String> whereToAdvertiseHostname) { PublicIPUpdater updater = new PublicIPUpdater(whereToAdvertiseHostname); subscriptions().subscribe(this, NETWORK_ID, updater); }
@Override // TODO port ranges public void makeVisibleTo(LegacySubnetTier otherTier) { if (!isSubnetEnabled()) return; AclUpdater acl = new AclUpdater(); subscriptions().subscribe(otherTier, NETWORK_ID, acl); acl.apply(otherTier, otherTier.getAttribute(NETWORK_ID)); }
private void onItemAdded(Entity item) { if (items.add(item)) { subscriptions().subscribe(item, Movable.CONTAINER, eventHandler); sensors().emit(ITEM_ADDED, new ContainerItemPair(item.getAttribute(Movable.CONTAINER), item)); } }
@Override public void openFirewallPortAndAssign(Entity serviceToForward, AttributeSensor<?> servicePortSensor, Integer optionalPublicPort, Cidr accessingCidr, Entity whereToAdvertisePublicServiceEndpoint, AttributeSensor<String> sensorAdvertisingHostnameAndPort) { FirewallUpdater updater = new FirewallUpdater(serviceToForward, servicePortSensor, optionalPublicPort, accessingCidr, whereToAdvertisePublicServiceEndpoint, sensorAdvertisingHostnameAndPort); subscriptions().subscribe(serviceToForward, servicePortSensor, updater); // either of these may be null when the above comes through // FIXME Should PUBLIC_HOSTNAME be subscribed to `this`, rather than serviceToForward subscriptions().subscribe(serviceToForward, Attributes.HOSTNAME, updater); subscriptions().subscribe(serviceToForward, PUBLIC_HOSTNAME, updater); }
private void onContainerAdded(Entity newContainer) { subscriptions().subscribe(newContainer, Startable.SERVICE_UP, eventHandler); if (!(newContainer instanceof Startable) || Boolean.TRUE.equals(newContainer.getAttribute(Startable.SERVICE_UP))) { onContainerUp(newContainer); } }
private void onContainerAdded(BalanceableContainer<?> newContainer) { subscriptions().subscribe(newContainer, Startable.SERVICE_UP, eventHandler); if (!(newContainer instanceof Startable) || Boolean.TRUE.equals(newContainer.getAttribute(Startable.SERVICE_UP))) { onContainerUp(newContainer); } }
private void initSubscriptions() { subscriptions().subscribeToMembers(this, MySqlNode.SERVICE_PROCESS_IS_RUNNING, new NodeRunningListener(this)); subscriptions().subscribe(this, MEMBER_REMOVED, new MemberRemovedListener()); }
protected void subscribeToServiceState() { stateListener = new RecordingSensorEventListener<Lifecycle>(); subscriptions().subscribe(this, SERVICE_STATE_ACTUAL, stateListener); upListener = new RecordingSensorEventListener<Boolean>(); subscriptions().subscribe(this, SERVICE_UP, upListener); processRunningListener = new RecordingSensorEventListener<Boolean>(); subscriptions().subscribe(this, SERVICE_PROCESS_IS_RUNNING, processRunningListener); }
@Override public <T> void addSubscription(Entity producer, Sensor<T> sensor, final Predicate<? super SensorEvent<? super T>> filter) { SensorEventListener<T> listener = new SensorEventListener<T>() { @Override public void onEvent(SensorEvent<T> event) { if (filter.apply(event)) onEntityChanged(event.getSource()); } }; subscriptions().subscribe(producer, sensor, listener); }
@Override public void openFirewallPortAndAdvertise(EntityAndAttribute<String> publicIp, EntityAndAttribute<?> portSensor, Integer optionalPublicPort, Protocol protocol, Cidr accessingCidr, EntityAndAttribute<String> whereToAdvertiseEndpoint) { FirewallUpdater2 updater = new FirewallUpdater2(publicIp, portSensor, optionalPublicPort, protocol, accessingCidr, whereToAdvertiseEndpoint); subscriptions().subscribe(publicIp.getEntity(), publicIp.getAttribute(), updater); subscriptions().subscribe(portSensor.getEntity(), portSensor.getAttribute(), updater); updater.apply(publicIp.getEntity(), publicIp.getValue()); }
protected void doBind() { DynamicWebAppCluster cluster = getAttribute(CLUSTER); if (cluster != null) { subscriptions().subscribe(cluster, DynamicWebAppCluster.GROUP_MEMBERS, new SensorEventListener<Object>() { @Override public void onEvent(SensorEvent<Object> event) { // TODO inefficient impl; also worth extracting this into a mixin of some sort. rescanEntities(); }}); } }
@Override public void onManagementStarting() { if (getConfig(SUBSCRIBE)) { subscriptions().subscribe(getApplication(), TestApplication.MY_ATTRIBUTE, new SensorEventListener<String>() { @Override public void onEvent(SensorEvent<String> event) { events.add(event.getValue()); } }); } } }
@Test public void testModifyAttributeReturningAbsentDoesNotEmit() throws Exception { AttributeSensor<Integer> sensor = Sensors.newIntegerSensor("a", ""); AttributeSensor<Integer> childSensor = Sensors.newIntegerSensor("a.b", ""); final RecordingSensorEventListener<Object> listener = new RecordingSensorEventListener<>(); entityImpl.subscriptions().subscribe(entityImpl, sensor, listener); map.modify(childSensor, Functions.constant(Maybe.<Integer>absent())); Asserts.succeedsContinually(new Runnable() { @Override public void run() { assertTrue(Iterables.isEmpty(listener.getEvents()), "events="+listener.getEvents()); }}); }
@Override public void openStaticNat(Entity serviceToOpen, AttributeSensor<String> sensorAdvertisingHostname) { StaticNatUpdater updater = new StaticNatUpdater(serviceToOpen, sensorAdvertisingHostname); subscriptions().subscribe(serviceToOpen, Attributes.HOSTNAME, updater); }