@Override protected void preStart() { String reverse = getConfig(REVERSE_LOOKUP_NETWORK); if (Strings.isBlank(reverse)) reverse = getAttribute(ADDRESS); setAttribute(REVERSE_LOOKUP_CIDR, new Cidr(reverse + "/24")); String reverseLookupDomain = Joiner.on('.').join(Iterables.skip(Lists.reverse(Lists.newArrayList(Splitter.on('.').split(reverse))), 1)) + ".in-addr.arpa"; setAttribute(REVERSE_LOOKUP_DOMAIN, reverseLookupDomain); Map<?, ?> flags = MutableMap.builder() .put("name", "Address tracker") .put("sensorsToTrack", ImmutableSet.of(getConfig(HOSTNAME_SENSOR))) .build(); policy = new AbstractMembershipTrackingPolicy(flags) { @Override protected void onEntityChange(Entity member) { added(member); } @Override protected void onEntityAdded(Entity member) { if (Strings.isNonBlank(member.getAttribute(getConfig(HOSTNAME_SENSOR)))) added(member); // Ignore, unless hostname set } @Override protected void onEntityRemoved(Entity member) { removed(member); } }; // For any entities that have already come up for (Entity member : entities.getMembers()) { if (Strings.isNonBlank(member.getAttribute(getConfig(HOSTNAME_SENSOR)))) added(member); // Ignore, unless hostname set } addPolicy(policy); policy.setGroup(entities); }