private MonitoredOrigin(Origin origin) { this.origin = origin; this.connectionPool = hostConnectionPoolFactory.create(origin); this.hostClient = hostClientFactory.create(connectionPool); this.machine = new StateMachine.Builder<OriginState>() .initialState(ACTIVE) .onInappropriateEvent((state, event) -> state) .onStateChange(this::onStateChange) .transition(ACTIVE, UnhealthyEvent.class, e -> INACTIVE) .transition(INACTIVE, HealthyEvent.class, e -> ACTIVE) .transition(ACTIVE, DisableOrigin.class, e -> DISABLED) .transition(INACTIVE, DisableOrigin.class, e -> DISABLED) .transition(DISABLED, EnableOrigin.class, e -> INACTIVE) .build(); this.gaugeName = "origins." + appId + "." + origin.id() + ".status"; }