private void removeMonitoredEndpoint(Id originId) { MonitoredOrigin host = this.origins.get(originId); host.close(); LOG.info("Existing origin has been removed. Origin={}:{}", appId, host.origin.id()); metricRegistry.deregister(host.gaugeName); }
public Id id() { return origin().id(); };
private void onEvent(Origin origin, Object event) { onEvent(origin.id(), event); }
private static String originName(Origin origin) { return name(origin.id().toString()); }
private MonitoredOrigin changeMonitoredEndpoint(Origin origin) { MonitoredOrigin oldHost = this.origins.get(origin.id()); oldHost.close(); MonitoredOrigin newHost = new MonitoredOrigin(origin); newHost.startMonitoring(); LOG.info("Existing origin has been updated. Origin={}:{}", appId, newHost.origin); return newHost; }
private void onStateChange(OriginState oldState, OriginState newState, Object event) { if (oldState != newState) { LOG.info("Origin state change: origin=\"{}={}\", change=\"{}->{}\"", new Object[]{appId, origin.id(), oldState, newState}); if (newState == DISABLED) { stopMonitoring(); } else if (oldState == DISABLED) { startMonitoring(); } notifyStateChange(); } }
private void handleCloseEvent() { if (closed.compareAndSet(false, true)) { origins.values().forEach(host -> removeMonitoredEndpoint(host.origin.id())); this.origins = ImmutableMap.of(); notifyStateChange(); eventBus.unregister(this); } }
private MonitoredOrigin addMonitoredEndpoint(Origin origin) { MonitoredOrigin monitoredOrigin = new MonitoredOrigin(origin); metricRegistry.register(monitoredOrigin.gaugeName, (Gauge<Integer>) () -> monitoredOrigin.state().gaugeValue); monitoredOrigin.startMonitoring(); LOG.info("New origin added and activated. Origin={}:{}", appId, monitoredOrigin.origin.id()); return monitoredOrigin; }
private HttpResponse addStickySessionIdentifier(HttpResponse httpResponse, Origin origin) { if (this.loadBalancer instanceof StickySessionLoadBalancingStrategy) { int maxAge = backendService.stickySessionConfig().stickySessionTimeoutSeconds(); return httpResponse.newBuilder() .addCookie(newStickySessionCookie(id, origin.id(), maxAge)) .build(); } else { return httpResponse; } }
public OriginsInventory build() { await(originHealthMonitor.start()); if (hostClientFactory == null) { hostClientFactory = (ConnectionPool connectionPool) -> StyxHostHttpClient.create(appId, connectionPool.getOrigin().id(), ORIGIN_ID_DEFAULT, connectionPool); } OriginsInventory originsInventory = new OriginsInventory( eventBus, appId, originHealthMonitor, connectionPoolFactory, hostClientFactory, metricsRegistry); originsInventory.setOrigins(initialOrigins); return originsInventory; } }
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"; }